@workflow/core 4.8.0 → 4.8.2

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.
@@ -143,22 +143,47 @@ export function createCreateHook(ctx) {
143
143
  }
144
144
  if (event.eventType === 'hook_received') {
145
145
  // Register a 'hook' delivery barrier at this event's log index so a
146
- // later-in-log `wait_completed` is delivered only after this hook,
147
- // and so this hook is delivered only after every earlier-in-log
148
- // `wait_completed` — keeping any `Promise.race` against a wait
149
- // deterministic and aligned with the committed event log, regardless
150
- // of microtask-hop count, hydration time, or race-argument order.
146
+ // later-in-log `wait_completed` or step result is delivered only after
147
+ // this hook, and so this hook is delivered only after every
148
+ // earlier-in-log `wait_completed` and step result — keeping any
149
+ // `Promise.race` (or concurrent-branch ULID allocation) deterministic
150
+ // and aligned with the committed event log, regardless of
151
+ // microtask-hop count, hydration time, or race-argument order.
151
152
  // See `ctx.pendingDeliveryBarriers`.
153
+ //
154
+ // The barrier is registered ARMED only when a consumer is already
155
+ // awaiting, so this payload is committed to reaching the workflow. A
156
+ // buffered payload is registered unarmed and armed by `claim()`: until
157
+ // a consumer takes it, a later step result must not be ordered behind
158
+ // it (see `awaitEarlierDeliveries`).
152
159
  const eventIndex = ctx.eventsConsumer.eventIndex;
153
- const barrier = registerDeliveryBarrier(ctx, eventIndex, 'hook');
154
- if (promises.length > 0) {
160
+ const hasWaitingConsumer = promises.length > 0;
161
+ const barrier = registerDeliveryBarrier(ctx, eventIndex, 'hook', {
162
+ armed: hasWaitingConsumer,
163
+ });
164
+ if (hasWaitingConsumer) {
165
+ // A consumer is already awaiting, so this payload's delivery is
166
+ // pinned to this log position: capture the deferral HERE, while
167
+ // consuming the event, not at the end of the hydration slot below —
168
+ // same reasoning as step.ts. An earlier step or hook whose slot runs
169
+ // first on this serial queue has usually delivered, and so
170
+ // deregistered its barrier, before this slot ends. Read then, it
171
+ // would be invisible and this payload would skip both the gate AND
172
+ // `awaitEarlierDeliveries`' macrotask yield, letting it overtake the
173
+ // branch that earlier delivery just woke. Every event in one drain
174
+ // window is consumed before any slot runs, so capturing at
175
+ // consumption time sees all of them.
176
+ //
177
+ // The BUFFERED branch below deliberately does NOT do this — see the
178
+ // comment on `claim()`.
179
+ const earlierDelivered = awaitEarlierDeliveries(ctx, eventIndex, 'hook');
155
180
  const next = promises.shift();
156
181
  if (next) {
157
- // A consumer is already awaiting. Hydrate through a promiseQueue
158
- // slot (so async deserialization stays in event-log order), then
159
- // defer behind earlier waits before resolving. The deferral runs
160
- // OFF the serial queue (it may wait on an earlier wait delivery
161
- // and blocking a queue slot on that would deadlock the queue).
182
+ // Hydrate through a promiseQueue slot (so async deserialization
183
+ // stays in event-log order), then defer behind earlier waits and
184
+ // steps before resolving. The deferral runs OFF the serial queue
185
+ // (it may wait on an earlier wait or step delivery and blocking a
186
+ // queue slot on that would deadlock the queue).
162
187
  ctx.pendingDeliveries++;
163
188
  let hydrateOutcome;
164
189
  ctx.promiseQueue = ctx.promiseQueue.then(async () => {
@@ -172,7 +197,7 @@ export function createCreateHook(ctx) {
172
197
  finally {
173
198
  ctx.pendingDeliveries--;
174
199
  }
175
- void awaitEarlierDeliveries(ctx, eventIndex, ['wait']).then(() => {
200
+ void earlierDelivered.then(() => {
176
201
  barrier.markDelivered();
177
202
  if (hydrateOutcome.ok) {
178
203
  next.resolve(hydrateOutcome.value);
@@ -195,15 +220,30 @@ export function createCreateHook(ctx) {
195
220
  // the consumer-facing promise on demand.
196
221
  let outcome;
197
222
  const hydrated = withResolvers();
198
- const claim = () => hydrated.promise
199
- .then(() => awaitEarlierDeliveries(ctx, eventIndex, ['wait']))
200
- .then(() => {
201
- barrier.markDelivered();
202
- if (outcome && !outcome.ok) {
203
- throw outcome.error;
204
- }
205
- return outcome.value;
206
- });
223
+ const claim = () => {
224
+ // A consumer has taken this payload, so its delivery no longer
225
+ // waits on workflow code: later step results may now be ordered
226
+ // behind it.
227
+ barrier.arm();
228
+ // Unlike every other delivery, the deferral is evaluated HERE, at
229
+ // claim time, rather than when the event was consumed. A buffered
230
+ // payload's delivery genuinely happens when the workflow reads the
231
+ // hook, which may be many deliveries later; a consumption-time
232
+ // snapshot would make the claim wait on — and pay the macrotask
233
+ // yield for — barriers that were relevant to a moment this payload
234
+ // never participated in. That is not theoretical: it stalls the
235
+ // second payload in the e2e `hookWithSleepWorkflow` long enough
236
+ // for the run to suspend before delivering it.
237
+ return hydrated.promise
238
+ .then(() => awaitEarlierDeliveries(ctx, eventIndex, 'hook'))
239
+ .then(() => {
240
+ barrier.markDelivered();
241
+ if (outcome && !outcome.ok) {
242
+ throw outcome.error;
243
+ }
244
+ return outcome.value;
245
+ });
246
+ };
207
247
  ctx.pendingDeliveries++;
208
248
  ctx.promiseQueue = ctx.promiseQueue.then(async () => {
209
249
  try {
@@ -255,7 +295,7 @@ export function createCreateHook(ctx) {
255
295
  // The payload was hydrated through a promiseQueue slot at its log
256
296
  // position (buffering branch above). `claim()` builds the
257
297
  // consumer-facing promise from that outcome, deferring behind any
258
- // earlier-in-log wait and marking this hook delivered — so
298
+ // earlier-in-log wait or step and marking this hook delivered — so
259
299
  // resolution order stays anchored to the event log, not this later
260
300
  // claim site.
261
301
  return nextDelivery.claim();
@@ -360,4 +400,4 @@ export function createCreateHook(ctx) {
360
400
  return hook;
361
401
  };
362
402
  }
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvdy9ob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVFLE9BQU8sRUFBNkIsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVTdEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDM0IsZ0JBQW9DO0lBRXBDLElBQUksT0FBTyxnQkFBZ0IsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFnQztJQUMvRCxPQUFPLFNBQVMsY0FBYyxDQUFVLFVBQXVCLEVBQUU7UUFDL0QsNkJBQTZCO1FBQzdCLE1BQU0sYUFBYSxHQUFHLFFBQVEsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7UUFDbkQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFcEQseUVBQXlFO1FBQ3pFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO1FB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QU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhvb2tDb25mbGljdEVycm9yLCBSZXBsYXlEaXZlcmdlbmNlRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IHR5cGUgUHJvbWlzZVdpdGhSZXNvbHZlcnMsIHdpdGhSZXNvbHZlcnMgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBIb29rQ29uZmxpY3RFdmVudCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IEhvb2ssIEhvb2tPcHRpb25zIH0gZnJvbSAnLi4vY3JlYXRlLWhvb2suanMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuLi9nbG9iYWwuanMnO1xuaW1wb3J0IHsgd2ViaG9va0xvZ2dlciB9IGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzLFxuICByZWdpc3RlckRlbGl2ZXJ5QmFycmllcixcbiAgc2NoZWR1bGVXaGVuSWRsZSxcbiAgdHlwZSBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQsXG59IGZyb20gJy4uL3ByaXZhdGUuanMnO1xuaW1wb3J0IHsgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZSB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24uanMnO1xuXG4vKipcbiAqIFRoZSBzaGFwZSByZXNvbHZlZCBieSBgaG9vay5nZXRDb25mbGljdCgpYCB3aGVuIGFub3RoZXIgYWN0aXZlIGhvb2tcbiAqIG93bnMgdGhlIHRva2VuOiBhIHBsYWluIGB7IHJ1bklkIH1gIG9iamVjdCBpZGVudGlmeWluZyB0aGUgb3duaW5nIHJ1bi5cbiAqIFRvIGFjdCBvbiB0aGUgb3duZXIg4oCUIGluc3BlY3QgaXRzIHN0YXR1cywgYXdhaXQgaXRzIHJlc3VsdCwgb3IgY2FuY2VsXG4gKiBpdCDigJQgdGhlIHdvcmtmbG93IHBhc3NlcyBgY29uZmxpY3QucnVuSWRgIHRvIGBnZXRSdW4oKWAgaW5zaWRlIGEgc3RlcC5cbiAqL1xudHlwZSBDb25mbGljdGluZ1J1biA9IHsgcnVuSWQ6IHN0cmluZyB9O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgdGhlIGB7IHJ1bklkIH1gIGhhbmRsZSBmb3IgdGhlIHJ1biB0aGF0IG93bnMgYSBjb25mbGljdGluZ1xuICogaG9vayB0b2tlbiwgZm9yIHJlc29sdXRpb24gdGhyb3VnaCBgaG9vay5nZXRDb25mbGljdCgpYC5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCB3aGVuIHRoZSBjb25mbGljdGluZyBydW4gY2Fubm90IGJlIGlkZW50aWZpZWQ6IHRoZVxuICogY29uZmxpY3QgZXZlbnQgbGFja3MgYGNvbmZsaWN0aW5nUnVuSWRgICh3cml0dGVuIGJ5IGFuIG9sZCB3b3JsZCkuXG4gKiBgZ2V0Q29uZmxpY3RgIGF3YWl0ZXJzIHRoZW4gcmVqZWN0IHdpdGggYEhvb2tDb25mbGljdEVycm9yYCBpbnN0ZWFkIG9mXG4gKiByZXNvbHZpbmcgd2l0aCBhbiBpbmNvbXBsZXRlIHZhbHVlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDb25mbGljdGluZ1J1bihcbiAgY29uZmxpY3RpbmdSdW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBDb25mbGljdGluZ1J1biB8IG51bGwge1xuICBpZiAodHlwZW9mIGNvbmZsaWN0aW5nUnVuSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHsgcnVuSWQ6IGNvbmZsaWN0aW5nUnVuSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNyZWF0ZUhvb2soY3R4OiBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZUhvb2tJbXBsPFQgPSBhbnk+KG9wdGlvbnM6IEhvb2tPcHRpb25zID0ge30pOiBIb29rPFQ+IHtcbiAgICAvLyBHZW5lcmF0ZSBob29rIElEIGFuZCB0b2tlblxuICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBgaG9va18ke2N0eC5nZW5lcmF0ZVVsaWQoKX1gO1xuICAgIGNvbnN0IHRva2VuID0gb3B0aW9ucy50b2tlbiA/PyBjdHguZ2VuZXJhdGVOYW5vaWQoKTtcblxuICAgIC8vIEFkZCBob29rIGNyZWF0aW9uIHRvIGludm9jYXRpb25zIHF1ZXVlICh1c2luZyBNYXAgZm9yIE8oMSkgb3BlcmF0aW9ucylcbiAgICBjb25zdCBpc1dlYmhvb2sgPSBvcHRpb25zLmlzV2ViaG9vayA/PyBmYWxzZTtcblxuICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLnNldChjb3JyZWxhdGlvbklkLCB7XG4gICAgICB0eXBlOiAnaG9vaycsXG4gICAgICBjb3JyZWxhdGlvbklkLFxuICAgICAgdG9rZW4sXG4gICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICAgIGlzV2ViaG9vayxcbiAgICB9KTtcblxuICAgIC8vIFF1ZXVlIG9mIGJ1ZmZlcmVkIGhvb2sgcGF5bG9hZHMgKHJlY2VpdmVkIGJlZm9yZSB0aGUgd29ya2Zsb3cgYXdhaXRlZFxuICAgIC8vIHRoZSBob29rKS4gRWFjaCBlbnRyeSdzIGBjbGFpbSgpYCBidWlsZHMgdGhlIGNvbnN1bWVyLWZhY2luZyBwcm9taXNlXG4gICAgLy8gZnJvbSB0aGUgY2FwdHVyZWQgaHlkcmF0aW9uIG91dGNvbWUgYW5kIG9yZGVycyBpdCBkZXRlcm1pbmlzdGljYWxseSBieVxuICAgIC8vIGV2ZW50LWxvZyBwb3NpdGlvbiBhZ2FpbnN0IGFueSBjb25jdXJyZW50IGJyYW5jaC1kZWNpZGluZyByZXNvbHV0aW9uXG4gICAgLy8gKHNlZSBgY3R4LnBlbmRpbmdEZWxpdmVyeUJhcnJpZXJzYCkuXG4gICAgY29uc3QgcGF5bG9hZHNRdWV1ZTogeyBjbGFpbTogKCkgPT4gUHJvbWlzZTxUPiB9W10gPSBbXTtcblxuICAgIC8vIFF1ZXVlIG9mIHByb21pc2VzIHRoYXQgcmVzb2x2ZSB0byB0aGUgbmV4dCBob29rIHBheWxvYWRcbiAgICBjb25zdCBwcm9taXNlczogUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD5bXSA9IFtdO1xuXG4gICAgLy8gUXVldWUgb2YgcHJvbWlzZXMgdGhhdCByZXNvbHZlIG9uY2UgaG9vayByZWdpc3RyYXRpb24gaXMgY29uZmlybWVkXG4gICAgLy8gKHdpdGggYG51bGxgKSBvciBhIHRva2VuIGNvbmZsaWN0IGlzIGRldGVjdGVkICh3aXRoIHRoZSBjb25mbGljdGluZ1xuICAgIC8vIGB7IHJ1bklkIH1gKS4gVGhlc2UgYmFjayB0aGUgYGhvb2suZ2V0Q29uZmxpY3QoKWAgbWV0aG9kLlxuICAgIGNvbnN0IGdldENvbmZsaWN0UHJvbWlzZXM6IFByb21pc2VXaXRoUmVzb2x2ZXJzPENvbmZsaWN0aW5nUnVuIHwgbnVsbD5bXSA9XG4gICAgICBbXTtcblxuICAgIGxldCBldmVudExvZ0VtcHR5ID0gZmFsc2U7XG5cbiAgICAvLyBUcmFjayBpZiB0aGUgZXZlbnQgbG9nIGNvbmZpcm1zIGhvb2sgY3JlYXRpb24gaGFwcGVuZWRcbiAgICBsZXQgaGFzQ3JlYXRlZCA9IGZhbHNlO1xuXG4gICAgLy8gVHJhY2sgaWYgdGhlIGV2ZW50IGxvZyBjb25maXJtcyBkaXNwb3NhbCBoYXBwZW5lZCAocmVwbGF5IG5vLW9wKVxuICAgIGxldCBoYXNEaXNwb3NlZEV2ZW50ID0gZmFsc2U7XG5cbiAgICAvLyBUcmFjayBpZiB3ZSBoYXZlIGEgY29uZmxpY3Qgc28gd2UgY2FuIHJlamVjdCBmdXR1cmUgYXdhaXRzXG4gICAgbGV0IGhhc0NvbmZsaWN0ID0gZmFsc2U7XG4gICAgbGV0IGNvbmZsaWN0RXJyb3JSZWY6IEhvb2tDb25mbGljdEVycm9yIHwgbnVsbCA9IG51bGw7XG4gICAgLy8gVGhlIGNvbmZsaWN0aW5nIHJ1biBoYW5kbGUsIHNoYXJlZCBieSBldmVyeSBgZ2V0Q29uZmxpY3RgIGF3YWl0IHNvXG4gICAgLy8gcmVwZWF0ZWQgYXdhaXRzIG9ic2VydmUgdGhlIHNhbWUgaW5zdGFuY2UgZGV0ZXJtaW5pc3RpY2FsbHkuXG4gICAgbGV0IGNvbmZsaWN0UnVuUmVmOiBDb25mbGljdGluZ1J1biB8IG51bGwgPSBudWxsO1xuXG4gICAgd2ViaG9va0xvZ2dlci5kZWJ1ZygnSG9vayBjb25zdW1lciBzZXR1cCcsIHsgY29ycmVsYXRpb25JZCwgdG9rZW4gfSk7XG4gICAgY3R4LmV2ZW50c0NvbnN1bWVyLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBldmVudHMgYW5kIHRoZXJlIGFyZSBwcm9taXNlcyB3YWl0aW5nLFxuICAgICAgLy8gaXQgbWVhbnMgdGhlIGhvb2sgaGFzIGJlZW4gYXdhaXRlZCwgYnV0IGFuIGluY29taW5nIHBheWxvYWQgaGFzIG5vdCB5ZXQgYmVlbiByZWNlaXZlZC5cbiAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIHdvcmtmbG93IHNob3VsZCBiZSBzdXNwZW5kZWQgdW50aWwgdGhlIGhvb2sgaXMgcmVzdW1lZC5cbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgZXZlbnRMb2dFbXB0eSA9IHRydWU7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwcm9taXNlcy5sZW5ndGggPiAwICYmIHBheWxvYWRzUXVldWUubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAgIChnZXRDb25mbGljdFByb21pc2VzLmxlbmd0aCA+IDAgJiYgIWhhc0NyZWF0ZWQgJiYgIWhhc0NvbmZsaWN0KVxuICAgICAgICApIHtcbiAgICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuY29ycmVsYXRpb25JZCAhPT0gY29ycmVsYXRpb25JZCkge1xuICAgICAgICAvLyBXZSdyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGlzIGV2ZW50IC0gdGhlIGNvcnJlbGF0aW9uSWQgYmVsb25ncyB0byBhIGRpZmZlcmVudCBlbnRpdHlcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV2ZW50VG9rZW4gPVxuICAgICAgICAnZXZlbnREYXRhJyBpbiBldmVudCAmJiBldmVudC5ldmVudERhdGEgJiYgJ3Rva2VuJyBpbiBldmVudC5ldmVudERhdGFcbiAgICAgICAgICA/IGV2ZW50LmV2ZW50RGF0YS50b2tlblxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodHlwZW9mIGV2ZW50VG9rZW4gPT09ICdzdHJpbmcnICYmIGV2ZW50VG9rZW4gIT09IHRva2VuKSB7XG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgICBgUmVwbGF5IGRpdmVyZ2VuY2U6IGhvb2sgZXZlbnQgJHtldmVudC5ldmVudFR5cGV9IGZvciAke2NvcnJlbGF0aW9uSWR9IGJlbG9uZ3MgdG8gdG9rZW4gXCIke2V2ZW50VG9rZW59XCIsIGJ1dCB0aGUgY3VycmVudCBob29rIGNvbnN1bWVyIGV4cGVjdHMgXCIke3Rva2VufVwiYCxcbiAgICAgICAgICAgICAgeyBldmVudElkOiBldmVudC5ldmVudElkIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBob29rX2NyZWF0ZWQgZXZlbnQgdG8gbWFyayB0aGlzIGhvb2sgYXMgYWxyZWFkeSBjcmVhdGVkXG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19jcmVhdGVkJykge1xuICAgICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICdob29rJykge1xuICAgICAgICAgIHF1ZXVlSXRlbS5oYXNDcmVhdGVkRXZlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGhhc0NyZWF0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHBlbmRpbmdHZXRDb25mbGljdFByb21pc2VzID0gZ2V0Q29uZmxpY3RQcm9taXNlcy5zbGljZSgpO1xuICAgICAgICBnZXRDb25mbGljdFByb21pc2VzLmxlbmd0aCA9IDA7XG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgcmVzb2x2ZXIgb2YgcGVuZGluZ0dldENvbmZsaWN0UHJvbWlzZXMpIHtcbiAgICAgICAgICAgIHJlc29sdmVyLnJlc29sdmUobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGhvb2tfY29uZmxpY3QgZXZlbnQgLSBhbm90aGVyIHdvcmtmbG93IGlzIHVzaW5nIHRoaXMgdG9rZW5cbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX2NvbmZsaWN0Jykge1xuICAgICAgICAvLyBSZW1vdmUgdGhpcyBob29rIGZyb20gdGhlIGludm9jYXRpb25zIHF1ZXVlXG4gICAgICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmRlbGV0ZShjb3JyZWxhdGlvbklkKTtcblxuICAgICAgICAvLyBTdG9yZSB0aGUgY29uZmxpY3QgZXZlbnQgc28gd2UgY2FuIHJlamVjdCBhbnkgYXdhaXRlZCBwcm9taXNlcy5cbiAgICAgICAgLy8gQ2hhaW4gdGhyb3VnaCBwcm9taXNlUXVldWUgdG8gZW5zdXJlIGRldGVybWluaXN0aWMgb3JkZXJpbmcuXG4gICAgICAgIGNvbnN0IGNvbmZsaWN0RXZlbnQgPSBldmVudCBhcyBIb29rQ29uZmxpY3RFdmVudDtcbiAgICAgICAgY29uc3QgY29uZmxpY3RFcnJvciA9IG5ldyBIb29rQ29uZmxpY3RFcnJvcihcbiAgICAgICAgICBjb25mbGljdEV2ZW50LmV2ZW50RGF0YS50b2tlbixcbiAgICAgICAgICBjb25mbGljdEV2ZW50LmV2ZW50RGF0YS5jb25mbGljdGluZ1J1bklkXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gTWFyayB0aGF0IHdlIGhhdmUgYSBjb25mbGljdCBzbyBmdXR1cmUgYXdhaXRzIGFsc28gcmVqZWN0XG4gICAgICAgIGhhc0NvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgY29uZmxpY3RFcnJvclJlZiA9IGNvbmZsaWN0RXJyb3I7XG4gICAgICAgIGNvbmZsaWN0UnVuUmVmID0gY3JlYXRlQ29uZmxpY3RpbmdSdW4oXG4gICAgICAgICAgY29uZmxpY3RFdmVudC5ldmVudERhdGEuY29uZmxpY3RpbmdSdW5JZFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIENhcHR1cmUgYW5kIGRyYWluIHBlbmRpbmcgcHJvbWlzZXMgc3luY2hyb25vdXNseSBzbyB0aGUgbnVsbCBldmVudFxuICAgICAgICAvLyBoYW5kbGVyIHdvbid0IHNlZSB0aGVtIGFuZCB0cmlnZ2VyIGEgc3B1cmlvdXMgV29ya2Zsb3dTdXNwZW5zaW9uLlxuICAgICAgICAvLyBUaGUgYWN0dWFsIHNldHRsZW1lbnRzIGFyZSBkZWZlcnJlZCB0aHJvdWdoIHByb21pc2VRdWV1ZSBmb3JcbiAgICAgICAgLy8gb3JkZXJpbmcuIFBheWxvYWQgYXdhaXRlcnMgcmVqZWN0IHdpdGggSG9va0NvbmZsaWN0RXJyb3IsIHdoaWxlXG4gICAgICAgIC8vIGBnZXRDb25mbGljdGAgYXdhaXRlcnMgcmVzb2x2ZSB3aXRoIHRoZSBjb25mbGljdGluZyBgeyBydW5JZCB9YFxuICAgICAgICAvLyBzbyB0aGUgd29ya2Zsb3cgY2FuIGJyYW5jaCBvbiB0aGUgY29uZmxpY3Qgd2l0aG91dCB0aHJvd2luZy5cbiAgICAgICAgLy8gV2hlbiB0aGUgY29uZmxpY3RpbmcgcnVuIGNhbm5vdCBiZSBpZGVudGlmaWVkIChzZWVcbiAgICAgICAgLy8gYGNyZWF0ZUNvbmZsaWN0aW5nUnVuYCksIGBnZXRDb25mbGljdGAgYXdhaXRlcnMgcmVqZWN0IHdpdGggdGhlXG4gICAgICAgIC8vIEhvb2tDb25mbGljdEVycm9yIGluc3RlYWQgb2YgcmVzb2x2aW5nIHdpdGggYW4gaW5jb21wbGV0ZSB2YWx1ZS5cbiAgICAgICAgY29uc3QgcGVuZGluZ1Byb21pc2VzID0gcHJvbWlzZXMuc2xpY2UoKTtcbiAgICAgICAgcHJvbWlzZXMubGVuZ3RoID0gMDtcbiAgICAgICAgY29uc3QgcGVuZGluZ0dldENvbmZsaWN0UHJvbWlzZXMgPSBnZXRDb25mbGljdFByb21pc2VzLnNsaWNlKCk7XG4gICAgICAgIGdldENvbmZsaWN0UHJvbWlzZXMubGVuZ3RoID0gMDtcblxuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlc29sdmVyIG9mIHBlbmRpbmdQcm9taXNlcykge1xuICAgICAgICAgICAgcmVzb2x2ZXIucmVqZWN0KGNvbmZsaWN0RXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IHJlc29sdmVyIG9mIHBlbmRpbmdHZXRDb25mbGljdFByb21pc2VzKSB7XG4gICAgICAgICAgICBpZiAoY29uZmxpY3RSdW5SZWYpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZXIucmVzb2x2ZShjb25mbGljdFJ1blJlZik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlci5yZWplY3QoY29uZmxpY3RFcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfcmVjZWl2ZWQnKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGEgJ2hvb2snIGRlbGl2ZXJ5IGJhcnJpZXIgYXQgdGhpcyBldmVudCdzIGxvZyBpbmRleCBzbyBhXG4gICAgICAgIC8vIGxhdGVyLWluLWxvZyBgd2FpdF9jb21wbGV0ZWRgIGlzIGRlbGl2ZXJlZCBvbmx5IGFmdGVyIHRoaXMgaG9vayxcbiAgICAgICAgLy8gYW5kIHNvIHRoaXMgaG9vayBpcyBkZWxpdmVyZWQgb25seSBhZnRlciBldmVyeSBlYXJsaWVyLWluLWxvZ1xuICAgICAgICAvLyBgd2FpdF9jb21wbGV0ZWRgIOKAlCBrZWVwaW5nIGFueSBgUHJvbWlzZS5yYWNlYCBhZ2FpbnN0IGEgd2FpdFxuICAgICAgICAvLyBkZXRlcm1pbmlzdGljIGFuZCBhbGlnbmVkIHdpdGggdGhlIGNvbW1pdHRlZCBldmVudCBsb2csIHJlZ2FyZGxlc3NcbiAgICAgICAgLy8gb2YgbWljcm90YXNrLWhvcCBjb3VudCwgaHlkcmF0aW9uIHRpbWUsIG9yIHJhY2UtYXJndW1lbnQgb3JkZXIuXG4gICAgICAgIC8vIFNlZSBgY3R4LnBlbmRpbmdEZWxpdmVyeUJhcnJpZXJzYC5cbiAgICAgICAgY29uc3QgZXZlbnRJbmRleCA9IGN0eC5ldmVudHNDb25zdW1lci5ldmVudEluZGV4O1xuICAgICAgICBjb25zdCBiYXJyaWVyID0gcmVnaXN0ZXJEZWxpdmVyeUJhcnJpZXIoY3R4LCBldmVudEluZGV4LCAnaG9vaycpO1xuXG4gICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHByb21pc2VzLnNoaWZ0KCk7XG4gICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIC8vIEEgY29uc3VtZXIgaXMgYWxyZWFkeSBhd2FpdGluZy4gSHlkcmF0ZSB0aHJvdWdoIGEgcHJvbWlzZVF1ZXVlXG4gICAgICAgICAgICAvLyBzbG90IChzbyBhc3luYyBkZXNlcmlhbGl6YXRpb24gc3RheXMgaW4gZXZlbnQtbG9nIG9yZGVyKSwgdGhlblxuICAgICAgICAgICAgLy8gZGVmZXIgYmVoaW5kIGVhcmxpZXIgd2FpdHMgYmVmb3JlIHJlc29sdmluZy4gVGhlIGRlZmVycmFsIHJ1bnNcbiAgICAgICAgICAgIC8vIE9GRiB0aGUgc2VyaWFsIHF1ZXVlIChpdCBtYXkgd2FpdCBvbiBhbiBlYXJsaWVyIHdhaXQgZGVsaXZlcnlcbiAgICAgICAgICAgIC8vIGFuZCBibG9ja2luZyBhIHF1ZXVlIHNsb3Qgb24gdGhhdCB3b3VsZCBkZWFkbG9jayB0aGUgcXVldWUpLlxuICAgICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzKys7XG4gICAgICAgICAgICBsZXQgaHlkcmF0ZU91dGNvbWU6XG4gICAgICAgICAgICAgIHwgeyBvazogdHJ1ZTsgdmFsdWU6IFQgfVxuICAgICAgICAgICAgICB8IHsgb2s6IGZhbHNlOyBlcnJvcjogdW5rbm93biB9O1xuICAgICAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUoXG4gICAgICAgICAgICAgICAgICBldmVudC5ldmVudERhdGEucGF5bG9hZCxcbiAgICAgICAgICAgICAgICAgIGN0eC5ydW5JZCxcbiAgICAgICAgICAgICAgICAgIGN0eC5lbmNyeXB0aW9uS2V5LFxuICAgICAgICAgICAgICAgICAgY3R4Lmdsb2JhbFRoaXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGh5ZHJhdGVPdXRjb21lID0geyBvazogdHJ1ZSwgdmFsdWU6IHBheWxvYWQgYXMgVCB9O1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGVPdXRjb21lID0geyBvazogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdm9pZCBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzKGN0eCwgZXZlbnRJbmRleCwgWyd3YWl0J10pLnRoZW4oXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgYmFycmllci5tYXJrRGVsaXZlcmVkKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoaHlkcmF0ZU91dGNvbWUub2spIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5yZXNvbHZlKGh5ZHJhdGVPdXRjb21lLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQucmVqZWN0KGh5ZHJhdGVPdXRjb21lLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm8gY29uc3VtZXIgaXMgYXdhaXRpbmcgeWV0LiBIeWRyYXRlIHRocm91Z2ggYSBwcm9taXNlUXVldWUgc2xvdFxuICAgICAgICAgIC8vIGF0IHRoaXMgbG9nIHBvc2l0aW9uIGFuZCBwYXJrIHRoZSBPVVRDT01FICh2YWx1ZSBvciBlcnJvcikgZm9yIGFcbiAgICAgICAgICAvLyBsYXRlciBgaXRlcmF0b3IubmV4dCgpYCAvIGBhd2FpdCBob29rYCBjbGFpbS4gV2UgY2FwdHVyZSB0aGVcbiAgICAgICAgICAvLyBvdXRjb21lIHJhdGhlciB0aGFuIGVhZ2VybHkgcmVzb2x2aW5nL3JlamVjdGluZyBhIHByb21pc2Ugbm9cbiAgICAgICAgICAvLyBjb25zdW1lciBoYXMgYXR0YWNoZWQgdG8g4oCUIGEgcmVqZWN0ZWQgdW5jbGFpbWVkIHByb21pc2UgKGUuZy4gYVxuICAgICAgICAgIC8vIGJ1ZmZlcmVkIGVuY3J5cHRlZCBwYXlsb2FkIHdpdGggbm8ga2V5KSB3b3VsZCBvdGhlcndpc2Ugc3VyZmFjZVxuICAgICAgICAgIC8vIGFzIGFuIHVuaGFuZGxlZCByZWplY3Rpb24gYW5kIGNyYXNoIHRoZSBwcm9jZXNzLiBgY2xhaW0oKWAgYnVpbGRzXG4gICAgICAgICAgLy8gdGhlIGNvbnN1bWVyLWZhY2luZyBwcm9taXNlIG9uIGRlbWFuZC5cbiAgICAgICAgICBsZXQgb3V0Y29tZTpcbiAgICAgICAgICAgIHwgeyBvazogdHJ1ZTsgdmFsdWU6IFQgfVxuICAgICAgICAgICAgfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHVua25vd24gfVxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgaHlkcmF0ZWQgPSB3aXRoUmVzb2x2ZXJzPHZvaWQ+KCk7XG5cbiAgICAgICAgICBjb25zdCBjbGFpbSA9ICgpOiBQcm9taXNlPFQ+ID0+XG4gICAgICAgICAgICBoeWRyYXRlZC5wcm9taXNlXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IGF3YWl0RWFybGllckRlbGl2ZXJpZXMoY3R4LCBldmVudEluZGV4LCBbJ3dhaXQnXSkpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBiYXJyaWVyLm1hcmtEZWxpdmVyZWQoKTtcbiAgICAgICAgICAgICAgICBpZiAob3V0Y29tZSAmJiAhb3V0Y29tZS5vaykge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgb3V0Y29tZS5lcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIChvdXRjb21lIGFzIHsgb2s6IHRydWU7IHZhbHVlOiBUIH0pLnZhbHVlO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcysrO1xuICAgICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUoXG4gICAgICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgY3R4LnJ1bklkLFxuICAgICAgICAgICAgICAgIGN0eC5lbmNyeXB0aW9uS2V5LFxuICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxUaGlzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIG91dGNvbWUgPSB7IG9rOiB0cnVlLCB2YWx1ZTogcGF5bG9hZCBhcyBUIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBvdXRjb21lID0geyBvazogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBjdHgucGVuZGluZ0RlbGl2ZXJpZXMtLTtcbiAgICAgICAgICAgICAgaHlkcmF0ZWQucmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHBheWxvYWRzUXVldWUucHVzaCh7IGNsYWltIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuQ29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJykge1xuICAgICAgICAvLyBUZXJtaW5hbCBzdGF0ZSAtIHJlbW92ZSBmcm9tIHF1ZXVlIChsaWtlIHN0ZXBfY29tcGxldGVkL3dhaXRfY29tcGxldGVkKVxuICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoY29ycmVsYXRpb25JZCk7XG4gICAgICAgIC8vIE1hcmsgdGhhdCB0aGUgZXZlbnQgbG9nIGNvbmZpcm1zIGRpc3Bvc2FsIGhhcHBlbmVkXG4gICAgICAgIGhhc0Rpc3Bvc2VkRXZlbnQgPSB0cnVlO1xuICAgICAgICAvLyBXZSdyZSBkb25lIHByb2Nlc3NpbmcgYW55IG1vcmUgZXZlbnRzIGZvciB0aGlzIGhvb2tcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgcmVwbGF5IGluc3RhbGxlZCBhIGRpZmZlcmVudCBjb25zdW1lciB0aGFuIHRoZSBzdG9yZWQgZXZlbnQgbmVlZHMuXG4gICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiBVbmV4cGVjdGVkIGV2ZW50IHR5cGUgZm9yIGhvb2sgJHtjb3JyZWxhdGlvbklkfSAodG9rZW46ICR7dG9rZW59KSBcIiR7ZXZlbnQuZXZlbnRUeXBlfVwiYCxcbiAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICB9KTtcblxuICAgIC8vIFRyYWNrIGlmIHRoZSBob29rIGhhcyBiZWVuIGRpc3Bvc2VkXG4gICAgbGV0IGlzRGlzcG9zZWQgPSBmYWxzZTtcblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgcHJvbWlzZSB0aGF0IHdhaXRzIGZvciB0aGUgbmV4dCBob29rIHBheWxvYWRcbiAgICBmdW5jdGlvbiBjcmVhdGVIb29rUHJvbWlzZSgpOiBQcm9taXNlPFQ+IHtcbiAgICAgIGNvbnN0IHJlc29sdmVycyA9IHdpdGhSZXNvbHZlcnM8VD4oKTtcblxuICAgICAgLy8gSWYgd2UgaGF2ZSBhIGNvbmZsaWN0LCByZWplY3QgdGhyb3VnaCB0aGUgcHJvbWlzZVF1ZXVlIHRvIG1haW50YWluXG4gICAgICAvLyBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIHdpdGggYW55IHByaW9yIHF1ZXVlZCByZXNvbHV0aW9ucy5cbiAgICAgIGlmIChoYXNDb25mbGljdCAmJiBjb25mbGljdEVycm9yUmVmKSB7XG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmVycy5yZWplY3QoY29uZmxpY3RFcnJvclJlZik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZXJzLnByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXlsb2Fkc1F1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dERlbGl2ZXJ5ID0gcGF5bG9hZHNRdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAobmV4dERlbGl2ZXJ5KSB7XG4gICAgICAgICAgLy8gVGhlIHBheWxvYWQgd2FzIGh5ZHJhdGVkIHRocm91Z2ggYSBwcm9taXNlUXVldWUgc2xvdCBhdCBpdHMgbG9nXG4gICAgICAgICAgLy8gcG9zaXRpb24gKGJ1ZmZlcmluZyBicmFuY2ggYWJvdmUpLiBgY2xhaW0oKWAgYnVpbGRzIHRoZVxuICAgICAgICAgIC8vIGNvbnN1bWVyLWZhY2luZyBwcm9taXNlIGZyb20gdGhhdCBvdXRjb21lLCBkZWZlcnJpbmcgYmVoaW5kIGFueVxuICAgICAgICAgIC8vIGVhcmxpZXItaW4tbG9nIHdhaXQgYW5kIG1hcmtpbmcgdGhpcyBob29rIGRlbGl2ZXJlZCDigJQgc29cbiAgICAgICAgICAvLyByZXNvbHV0aW9uIG9yZGVyIHN0YXlzIGFuY2hvcmVkIHRvIHRoZSBldmVudCBsb2csIG5vdCB0aGlzIGxhdGVyXG4gICAgICAgICAgLy8gY2xhaW0gc2l0ZS5cbiAgICAgICAgICByZXR1cm4gbmV4dERlbGl2ZXJ5LmNsYWltKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50TG9nRW1wdHkpIHtcbiAgICAgICAgc2NoZWR1bGVXaGVuSWRsZShjdHgsICgpID0+IHtcbiAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHByb21pc2VzLnB1c2gocmVzb2x2ZXJzKTtcblxuICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgIH1cblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgaG9vaydzXG4gICAgLy8gcmVnaXN0cmF0aW9uIG91dGNvbWU6IHRoZSBjb25mbGljdGluZyBgeyBydW5JZCB9YCB3aGVuIHRoZSB0b2tlbiBpc1xuICAgIC8vIG93bmVkIGJ5IGFub3RoZXIgYWN0aXZlIGhvb2ssIGBudWxsYCBvbmNlIHRoaXMgaG9vaydzIHJlZ2lzdHJhdGlvblxuICAgIC8vIGlzIGNvbW1pdHRlZC4gQm90aCBmYXN0LXBhdGhzIHNldHRsZSB0aHJvdWdoIGBjdHgucHJvbWlzZVF1ZXVlYCBzb1xuICAgIC8vIHJlc29sdXRpb24gb3JkZXIgYWx3YXlzIG1hdGNoZXMgZXZlbnQtbG9nIG9yZGVyLlxuICAgIGZ1bmN0aW9uIGNyZWF0ZUdldENvbmZsaWN0UHJvbWlzZSgpOiBQcm9taXNlPENvbmZsaWN0aW5nUnVuIHwgbnVsbD4ge1xuICAgICAgY29uc3QgcmVzb2x2ZXJzID0gd2l0aFJlc29sdmVyczxDb25mbGljdGluZ1J1biB8IG51bGw+KCk7XG5cbiAgICAgIGlmIChoYXNDcmVhdGVkKSB7XG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmVycy5yZXNvbHZlKG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzQ29uZmxpY3QpIHtcbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbmZsaWN0UnVuUmVmKSB7XG4gICAgICAgICAgICByZXNvbHZlcnMucmVzb2x2ZShjb25mbGljdFJ1blJlZik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmVycy5yZWplY3QoY29uZmxpY3RFcnJvclJlZik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnaG9vaycpIHtcbiAgICAgICAgcXVldWVJdGVtLmhhc0NvbmZsaWN0QXdhaXRlciA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudExvZ0VtcHR5KSB7XG4gICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBnZXRDb25mbGljdFByb21pc2VzLnB1c2gocmVzb2x2ZXJzKTtcbiAgICAgIHJldHVybiByZXNvbHZlcnMucHJvbWlzZTtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZGlzcG9zZSB0aGUgaG9va1xuICAgIGZ1bmN0aW9uIGRpc3Bvc2VIb29rKCk6IHZvaWQge1xuICAgICAgaWYgKGlzRGlzcG9zZWQpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBBbHJlYWR5IGRpc3Bvc2VkLCBub3RoaW5nIHRvIGRvXG4gICAgICB9XG4gICAgICBpc0Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgICAgLy8gSWYgdGhlIGV2ZW50IGxvZyBhbHJlYWR5IGNvbnRhaW5zIGhvb2tfZGlzcG9zZWQsIHRoaXMgaXMgYSByZXBsYXkg4oCUIG5vLW9wXG4gICAgICBpZiAoaGFzRGlzcG9zZWRFdmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkaXNwb3NlZCBmbGFnIG9uIHRoZSBleGlzdGluZyBxdWV1ZSBpdGVtXG4gICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnaG9vaycpIHtcbiAgICAgICAgcXVldWVJdGVtLmRpc3Bvc2VkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gRHJhaW4gYW55IHBlbmRpbmcgcHJvbWlzZXMgdGhhdCBhcmUgd2FpdGluZyBmb3IgcGF5bG9hZHMuXG4gICAgICAvLyBXaXRob3V0IHRoaXMsIHByb21pc2VzIGNyZWF0ZWQgYnkgYGF3YWl0IGhvb2tgIG9yIHRoZSBhc3luYyBpdGVyYXRvcidzXG4gICAgICAvLyBgeWllbGQgYXdhaXQgdGhpc2Agd291bGQgaGFuZyBmb3JldmVyIHNpbmNlIHRoZSBldmVudCBjb25zdW1lciB3aWxsXG4gICAgICAvLyBuZXZlciBkZWxpdmVyIGFub3RoZXIgaG9va19yZWNlaXZlZCBhZnRlciBkaXNwb3NhbC5cbiAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHByb21pc2VzLmxlbmd0aCA9IDA7XG4gICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB3ZWJob29rTG9nZ2VyLmRlYnVnKCdIb29rIGRpc3Bvc2VkJywgeyBjb3JyZWxhdGlvbklkLCB0b2tlbiB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBob29rOiBIb29rPFQ+ID0ge1xuICAgICAgdG9rZW4sXG5cbiAgICAgIGdldENvbmZsaWN0KCk6IFByb21pc2U8Q29uZmxpY3RpbmdSdW4gfCBudWxsPiB7XG4gICAgICAgIHJldHVybiBjcmVhdGVHZXRDb25mbGljdFByb21pc2UoKTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UaGVuUHJvcGVydHk6IEludGVudGlvbmFsbHkgdGhlbmFibGVcbiAgICAgIHRoZW48VFJlc3VsdDEgPSBULCBUUmVzdWx0MiA9IG5ldmVyPihcbiAgICAgICAgb25mdWxmaWxsZWQ/OiAoKHZhbHVlOiBUKSA9PiBUUmVzdWx0MSB8IFByb21pc2VMaWtlPFRSZXN1bHQxPikgfCBudWxsLFxuICAgICAgICBvbnJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgbnVsbFxuICAgICAgKTogUHJvbWlzZTxUUmVzdWx0MSB8IFRSZXN1bHQyPiB7XG4gICAgICAgIHJldHVybiBjcmVhdGVIb29rUHJvbWlzZSgpLnRoZW4ob25mdWxmaWxsZWQsIG9ucmVqZWN0ZWQpO1xuICAgICAgfSxcblxuICAgICAgLy8gU3VwcG9ydCBgZm9yIGF3YWl0IChjb25zdCBwYXlsb2FkIG9mIGhvb2spIHsg4oCmIH1gIHN5bnRheFxuICAgICAgYXN5bmMgKltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIHdoaWxlICghaXNEaXNwb3NlZCkge1xuICAgICAgICAgIHlpZWxkIGF3YWl0IHRoaXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGRpc3Bvc2U6IGRpc3Bvc2VIb29rLFxuXG4gICAgICBbU3ltYm9sLmRpc3Bvc2VdOiBkaXNwb3NlSG9vayxcbiAgICB9O1xuXG4gICAgLy8gQWxzbyByZWdpc3RlciB3aXRoIHRoZSBWTSdzIFN5bWJvbC5kaXNwb3NlIHNvIGB1c2luZ2Agd29ya3MgaW5zaWRlXG4gICAgLy8gdGhlIHdvcmtmbG93IHNhbmRib3ggKHRoZSBWTSBtYXkgaGF2ZSBhIHBvbHlmaWxsZWQgU3ltYm9sLmRpc3Bvc2VcbiAgICAvLyB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgaG9zdCdzKS5cbiAgICBjb25zdCB2bURpc3Bvc2UgPSBjdHguZ2xvYmFsVGhpcy5TeW1ib2wuZGlzcG9zZTtcbiAgICBpZiAodm1EaXNwb3NlICYmIHZtRGlzcG9zZSAhPT0gU3ltYm9sLmRpc3Bvc2UpIHtcbiAgICAgIChob29rIGFzIGFueSlbdm1EaXNwb3NlXSA9IGRpc3Bvc2VIb29rO1xuICAgIH1cblxuICAgIHJldHVybiBob29rO1xuICB9O1xufVxuIl19
403
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvdy9ob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVFLE9BQU8sRUFBNkIsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVTdEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FDM0IsZ0JBQW9DO0lBRXBDLElBQUksT0FBTyxnQkFBZ0IsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFnQztJQUMvRCxPQUFPLFNBQVMsY0FBYyxDQUFVLFVBQXVCLEVBQUU7UUFDL0QsNkJBQTZCO1FBQzdCLE1BQU0sYUFBYSxHQUFHLFFBQVEsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7UUFDbkQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFcEQseUVBQXlFO1FBQ3pFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO1FB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QUVMLFdBQVc7Z0JBQ1QsT0FBTyx3QkFBd0IsRUFBRSxDQUFDO1lBQ3BDLENBQUM7WUFFRCxzRUFBc0U7WUFDdEUsSUFBSSxDQUNGLFdBQXFFLEVBQ3JFLFVBQXVFO2dCQUV2RSxPQUFPLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBRUQsMkRBQTJEO1lBQzNELEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztnQkFDM0IsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNuQixNQUFNLE1BQU0sSUFBSSxDQUFDO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sRUFBRSxXQUFXO1lBRXBCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVc7U0FDOUIsQ0FBQztRQUVGLHFFQUFxRTtRQUNyRSxvRUFBb0U7UUFDcEUsaUNBQWlDO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNoRCxJQUFJLFNBQVMsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdDLElBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDekMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhvb2tDb25mbGljdEVycm9yLCBSZXBsYXlEaXZlcmdlbmNlRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IHR5cGUgUHJvbWlzZVdpdGhSZXNvbHZlcnMsIHdpdGhSZXNvbHZlcnMgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBIb29rQ29uZmxpY3RFdmVudCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IEhvb2ssIEhvb2tPcHRpb25zIH0gZnJvbSAnLi4vY3JlYXRlLWhvb2suanMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuLi9nbG9iYWwuanMnO1xuaW1wb3J0IHsgd2ViaG9va0xvZ2dlciB9IGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzLFxuICByZWdpc3RlckRlbGl2ZXJ5QmFycmllcixcbiAgc2NoZWR1bGVXaGVuSWRsZSxcbiAgdHlwZSBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQsXG59IGZyb20gJy4uL3ByaXZhdGUuanMnO1xuaW1wb3J0IHsgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZSB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24uanMnO1xuXG4vKipcbiAqIFRoZSBzaGFwZSByZXNvbHZlZCBieSBgaG9vay5nZXRDb25mbGljdCgpYCB3aGVuIGFub3RoZXIgYWN0aXZlIGhvb2tcbiAqIG93bnMgdGhlIHRva2VuOiBhIHBsYWluIGB7IHJ1bklkIH1gIG9iamVjdCBpZGVudGlmeWluZyB0aGUgb3duaW5nIHJ1bi5cbiAqIFRvIGFjdCBvbiB0aGUgb3duZXIg4oCUIGluc3BlY3QgaXRzIHN0YXR1cywgYXdhaXQgaXRzIHJlc3VsdCwgb3IgY2FuY2VsXG4gKiBpdCDigJQgdGhlIHdvcmtmbG93IHBhc3NlcyBgY29uZmxpY3QucnVuSWRgIHRvIGBnZXRSdW4oKWAgaW5zaWRlIGEgc3RlcC5cbiAqL1xudHlwZSBDb25mbGljdGluZ1J1biA9IHsgcnVuSWQ6IHN0cmluZyB9O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgdGhlIGB7IHJ1bklkIH1gIGhhbmRsZSBmb3IgdGhlIHJ1biB0aGF0IG93bnMgYSBjb25mbGljdGluZ1xuICogaG9vayB0b2tlbiwgZm9yIHJlc29sdXRpb24gdGhyb3VnaCBgaG9vay5nZXRDb25mbGljdCgpYC5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCB3aGVuIHRoZSBjb25mbGljdGluZyBydW4gY2Fubm90IGJlIGlkZW50aWZpZWQ6IHRoZVxuICogY29uZmxpY3QgZXZlbnQgbGFja3MgYGNvbmZsaWN0aW5nUnVuSWRgICh3cml0dGVuIGJ5IGFuIG9sZCB3b3JsZCkuXG4gKiBgZ2V0Q29uZmxpY3RgIGF3YWl0ZXJzIHRoZW4gcmVqZWN0IHdpdGggYEhvb2tDb25mbGljdEVycm9yYCBpbnN0ZWFkIG9mXG4gKiByZXNvbHZpbmcgd2l0aCBhbiBpbmNvbXBsZXRlIHZhbHVlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDb25mbGljdGluZ1J1bihcbiAgY29uZmxpY3RpbmdSdW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBDb25mbGljdGluZ1J1biB8IG51bGwge1xuICBpZiAodHlwZW9mIGNvbmZsaWN0aW5nUnVuSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHsgcnVuSWQ6IGNvbmZsaWN0aW5nUnVuSWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNyZWF0ZUhvb2soY3R4OiBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZUhvb2tJbXBsPFQgPSBhbnk+KG9wdGlvbnM6IEhvb2tPcHRpb25zID0ge30pOiBIb29rPFQ+IHtcbiAgICAvLyBHZW5lcmF0ZSBob29rIElEIGFuZCB0b2tlblxuICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSBgaG9va18ke2N0eC5nZW5lcmF0ZVVsaWQoKX1gO1xuICAgIGNvbnN0IHRva2VuID0gb3B0aW9ucy50b2tlbiA/PyBjdHguZ2VuZXJhdGVOYW5vaWQoKTtcblxuICAgIC8vIEFkZCBob29rIGNyZWF0aW9uIHRvIGludm9jYXRpb25zIHF1ZXVlICh1c2luZyBNYXAgZm9yIE8oMSkgb3BlcmF0aW9ucylcbiAgICBjb25zdCBpc1dlYmhvb2sgPSBvcHRpb25zLmlzV2ViaG9vayA/PyBmYWxzZTtcblxuICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLnNldChjb3JyZWxhdGlvbklkLCB7XG4gICAgICB0eXBlOiAnaG9vaycsXG4gICAgICBjb3JyZWxhdGlvbklkLFxuICAgICAgdG9rZW4sXG4gICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICAgIGlzV2ViaG9vayxcbiAgICB9KTtcblxuICAgIC8vIFF1ZXVlIG9mIGJ1ZmZlcmVkIGhvb2sgcGF5bG9hZHMgKHJlY2VpdmVkIGJlZm9yZSB0aGUgd29ya2Zsb3cgYXdhaXRlZFxuICAgIC8vIHRoZSBob29rKS4gRWFjaCBlbnRyeSdzIGBjbGFpbSgpYCBidWlsZHMgdGhlIGNvbnN1bWVyLWZhY2luZyBwcm9taXNlXG4gICAgLy8gZnJvbSB0aGUgY2FwdHVyZWQgaHlkcmF0aW9uIG91dGNvbWUgYW5kIG9yZGVycyBpdCBkZXRlcm1pbmlzdGljYWxseSBieVxuICAgIC8vIGV2ZW50LWxvZyBwb3NpdGlvbiBhZ2FpbnN0IGFueSBjb25jdXJyZW50IGJyYW5jaC1kZWNpZGluZyByZXNvbHV0aW9uXG4gICAgLy8gKHNlZSBgY3R4LnBlbmRpbmdEZWxpdmVyeUJhcnJpZXJzYCkuXG4gICAgY29uc3QgcGF5bG9hZHNRdWV1ZTogeyBjbGFpbTogKCkgPT4gUHJvbWlzZTxUPiB9W10gPSBbXTtcblxuICAgIC8vIFF1ZXVlIG9mIHByb21pc2VzIHRoYXQgcmVzb2x2ZSB0byB0aGUgbmV4dCBob29rIHBheWxvYWRcbiAgICBjb25zdCBwcm9taXNlczogUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD5bXSA9IFtdO1xuXG4gICAgLy8gUXVldWUgb2YgcHJvbWlzZXMgdGhhdCByZXNvbHZlIG9uY2UgaG9vayByZWdpc3RyYXRpb24gaXMgY29uZmlybWVkXG4gICAgLy8gKHdpdGggYG51bGxgKSBvciBhIHRva2VuIGNvbmZsaWN0IGlzIGRldGVjdGVkICh3aXRoIHRoZSBjb25mbGljdGluZ1xuICAgIC8vIGB7IHJ1bklkIH1gKS4gVGhlc2UgYmFjayB0aGUgYGhvb2suZ2V0Q29uZmxpY3QoKWAgbWV0aG9kLlxuICAgIGNvbnN0IGdldENvbmZsaWN0UHJvbWlzZXM6IFByb21pc2VXaXRoUmVzb2x2ZXJzPENvbmZsaWN0aW5nUnVuIHwgbnVsbD5bXSA9XG4gICAgICBbXTtcblxuICAgIGxldCBldmVudExvZ0VtcHR5ID0gZmFsc2U7XG5cbiAgICAvLyBUcmFjayBpZiB0aGUgZXZlbnQgbG9nIGNvbmZpcm1zIGhvb2sgY3JlYXRpb24gaGFwcGVuZWRcbiAgICBsZXQgaGFzQ3JlYXRlZCA9IGZhbHNlO1xuXG4gICAgLy8gVHJhY2sgaWYgdGhlIGV2ZW50IGxvZyBjb25maXJtcyBkaXNwb3NhbCBoYXBwZW5lZCAocmVwbGF5IG5vLW9wKVxuICAgIGxldCBoYXNEaXNwb3NlZEV2ZW50ID0gZmFsc2U7XG5cbiAgICAvLyBUcmFjayBpZiB3ZSBoYXZlIGEgY29uZmxpY3Qgc28gd2UgY2FuIHJlamVjdCBmdXR1cmUgYXdhaXRzXG4gICAgbGV0IGhhc0NvbmZsaWN0ID0gZmFsc2U7XG4gICAgbGV0IGNvbmZsaWN0RXJyb3JSZWY6IEhvb2tDb25mbGljdEVycm9yIHwgbnVsbCA9IG51bGw7XG4gICAgLy8gVGhlIGNvbmZsaWN0aW5nIHJ1biBoYW5kbGUsIHNoYXJlZCBieSBldmVyeSBgZ2V0Q29uZmxpY3RgIGF3YWl0IHNvXG4gICAgLy8gcmVwZWF0ZWQgYXdhaXRzIG9ic2VydmUgdGhlIHNhbWUgaW5zdGFuY2UgZGV0ZXJtaW5pc3RpY2FsbHkuXG4gICAgbGV0IGNvbmZsaWN0UnVuUmVmOiBDb25mbGljdGluZ1J1biB8IG51bGwgPSBudWxsO1xuXG4gICAgd2ViaG9va0xvZ2dlci5kZWJ1ZygnSG9vayBjb25zdW1lciBzZXR1cCcsIHsgY29ycmVsYXRpb25JZCwgdG9rZW4gfSk7XG4gICAgY3R4LmV2ZW50c0NvbnN1bWVyLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBldmVudHMgYW5kIHRoZXJlIGFyZSBwcm9taXNlcyB3YWl0aW5nLFxuICAgICAgLy8gaXQgbWVhbnMgdGhlIGhvb2sgaGFzIGJlZW4gYXdhaXRlZCwgYnV0IGFuIGluY29taW5nIHBheWxvYWQgaGFzIG5vdCB5ZXQgYmVlbiByZWNlaXZlZC5cbiAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIHdvcmtmbG93IHNob3VsZCBiZSBzdXNwZW5kZWQgdW50aWwgdGhlIGhvb2sgaXMgcmVzdW1lZC5cbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgZXZlbnRMb2dFbXB0eSA9IHRydWU7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwcm9taXNlcy5sZW5ndGggPiAwICYmIHBheWxvYWRzUXVldWUubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAgIChnZXRDb25mbGljdFByb21pc2VzLmxlbmd0aCA+IDAgJiYgIWhhc0NyZWF0ZWQgJiYgIWhhc0NvbmZsaWN0KVxuICAgICAgICApIHtcbiAgICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0Lk5vdENvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuY29ycmVsYXRpb25JZCAhPT0gY29ycmVsYXRpb25JZCkge1xuICAgICAgICAvLyBXZSdyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGlzIGV2ZW50IC0gdGhlIGNvcnJlbGF0aW9uSWQgYmVsb25ncyB0byBhIGRpZmZlcmVudCBlbnRpdHlcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV2ZW50VG9rZW4gPVxuICAgICAgICAnZXZlbnREYXRhJyBpbiBldmVudCAmJiBldmVudC5ldmVudERhdGEgJiYgJ3Rva2VuJyBpbiBldmVudC5ldmVudERhdGFcbiAgICAgICAgICA/IGV2ZW50LmV2ZW50RGF0YS50b2tlblxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodHlwZW9mIGV2ZW50VG9rZW4gPT09ICdzdHJpbmcnICYmIGV2ZW50VG9rZW4gIT09IHRva2VuKSB7XG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgICBgUmVwbGF5IGRpdmVyZ2VuY2U6IGhvb2sgZXZlbnQgJHtldmVudC5ldmVudFR5cGV9IGZvciAke2NvcnJlbGF0aW9uSWR9IGJlbG9uZ3MgdG8gdG9rZW4gXCIke2V2ZW50VG9rZW59XCIsIGJ1dCB0aGUgY3VycmVudCBob29rIGNvbnN1bWVyIGV4cGVjdHMgXCIke3Rva2VufVwiYCxcbiAgICAgICAgICAgICAgeyBldmVudElkOiBldmVudC5ldmVudElkIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBob29rX2NyZWF0ZWQgZXZlbnQgdG8gbWFyayB0aGlzIGhvb2sgYXMgYWxyZWFkeSBjcmVhdGVkXG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19jcmVhdGVkJykge1xuICAgICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICdob29rJykge1xuICAgICAgICAgIHF1ZXVlSXRlbS5oYXNDcmVhdGVkRXZlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGhhc0NyZWF0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHBlbmRpbmdHZXRDb25mbGljdFByb21pc2VzID0gZ2V0Q29uZmxpY3RQcm9taXNlcy5zbGljZSgpO1xuICAgICAgICBnZXRDb25mbGljdFByb21pc2VzLmxlbmd0aCA9IDA7XG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgcmVzb2x2ZXIgb2YgcGVuZGluZ0dldENvbmZsaWN0UHJvbWlzZXMpIHtcbiAgICAgICAgICAgIHJlc29sdmVyLnJlc29sdmUobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGhvb2tfY29uZmxpY3QgZXZlbnQgLSBhbm90aGVyIHdvcmtmbG93IGlzIHVzaW5nIHRoaXMgdG9rZW5cbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX2NvbmZsaWN0Jykge1xuICAgICAgICAvLyBSZW1vdmUgdGhpcyBob29rIGZyb20gdGhlIGludm9jYXRpb25zIHF1ZXVlXG4gICAgICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmRlbGV0ZShjb3JyZWxhdGlvbklkKTtcblxuICAgICAgICAvLyBTdG9yZSB0aGUgY29uZmxpY3QgZXZlbnQgc28gd2UgY2FuIHJlamVjdCBhbnkgYXdhaXRlZCBwcm9taXNlcy5cbiAgICAgICAgLy8gQ2hhaW4gdGhyb3VnaCBwcm9taXNlUXVldWUgdG8gZW5zdXJlIGRldGVybWluaXN0aWMgb3JkZXJpbmcuXG4gICAgICAgIGNvbnN0IGNvbmZsaWN0RXZlbnQgPSBldmVudCBhcyBIb29rQ29uZmxpY3RFdmVudDtcbiAgICAgICAgY29uc3QgY29uZmxpY3RFcnJvciA9IG5ldyBIb29rQ29uZmxpY3RFcnJvcihcbiAgICAgICAgICBjb25mbGljdEV2ZW50LmV2ZW50RGF0YS50b2tlbixcbiAgICAgICAgICBjb25mbGljdEV2ZW50LmV2ZW50RGF0YS5jb25mbGljdGluZ1J1bklkXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gTWFyayB0aGF0IHdlIGhhdmUgYSBjb25mbGljdCBzbyBmdXR1cmUgYXdhaXRzIGFsc28gcmVqZWN0XG4gICAgICAgIGhhc0NvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgY29uZmxpY3RFcnJvclJlZiA9IGNvbmZsaWN0RXJyb3I7XG4gICAgICAgIGNvbmZsaWN0UnVuUmVmID0gY3JlYXRlQ29uZmxpY3RpbmdSdW4oXG4gICAgICAgICAgY29uZmxpY3RFdmVudC5ldmVudERhdGEuY29uZmxpY3RpbmdSdW5JZFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIENhcHR1cmUgYW5kIGRyYWluIHBlbmRpbmcgcHJvbWlzZXMgc3luY2hyb25vdXNseSBzbyB0aGUgbnVsbCBldmVudFxuICAgICAgICAvLyBoYW5kbGVyIHdvbid0IHNlZSB0aGVtIGFuZCB0cmlnZ2VyIGEgc3B1cmlvdXMgV29ya2Zsb3dTdXNwZW5zaW9uLlxuICAgICAgICAvLyBUaGUgYWN0dWFsIHNldHRsZW1lbnRzIGFyZSBkZWZlcnJlZCB0aHJvdWdoIHByb21pc2VRdWV1ZSBmb3JcbiAgICAgICAgLy8gb3JkZXJpbmcuIFBheWxvYWQgYXdhaXRlcnMgcmVqZWN0IHdpdGggSG9va0NvbmZsaWN0RXJyb3IsIHdoaWxlXG4gICAgICAgIC8vIGBnZXRDb25mbGljdGAgYXdhaXRlcnMgcmVzb2x2ZSB3aXRoIHRoZSBjb25mbGljdGluZyBgeyBydW5JZCB9YFxuICAgICAgICAvLyBzbyB0aGUgd29ya2Zsb3cgY2FuIGJyYW5jaCBvbiB0aGUgY29uZmxpY3Qgd2l0aG91dCB0aHJvd2luZy5cbiAgICAgICAgLy8gV2hlbiB0aGUgY29uZmxpY3RpbmcgcnVuIGNhbm5vdCBiZSBpZGVudGlmaWVkIChzZWVcbiAgICAgICAgLy8gYGNyZWF0ZUNvbmZsaWN0aW5nUnVuYCksIGBnZXRDb25mbGljdGAgYXdhaXRlcnMgcmVqZWN0IHdpdGggdGhlXG4gICAgICAgIC8vIEhvb2tDb25mbGljdEVycm9yIGluc3RlYWQgb2YgcmVzb2x2aW5nIHdpdGggYW4gaW5jb21wbGV0ZSB2YWx1ZS5cbiAgICAgICAgY29uc3QgcGVuZGluZ1Byb21pc2VzID0gcHJvbWlzZXMuc2xpY2UoKTtcbiAgICAgICAgcHJvbWlzZXMubGVuZ3RoID0gMDtcbiAgICAgICAgY29uc3QgcGVuZGluZ0dldENvbmZsaWN0UHJvbWlzZXMgPSBnZXRDb25mbGljdFByb21pc2VzLnNsaWNlKCk7XG4gICAgICAgIGdldENvbmZsaWN0UHJvbWlzZXMubGVuZ3RoID0gMDtcblxuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlc29sdmVyIG9mIHBlbmRpbmdQcm9taXNlcykge1xuICAgICAgICAgICAgcmVzb2x2ZXIucmVqZWN0KGNvbmZsaWN0RXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGNvbnN0IHJlc29sdmVyIG9mIHBlbmRpbmdHZXRDb25mbGljdFByb21pc2VzKSB7XG4gICAgICAgICAgICBpZiAoY29uZmxpY3RSdW5SZWYpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZXIucmVzb2x2ZShjb25mbGljdFJ1blJlZik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXNvbHZlci5yZWplY3QoY29uZmxpY3RFcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfcmVjZWl2ZWQnKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGEgJ2hvb2snIGRlbGl2ZXJ5IGJhcnJpZXIgYXQgdGhpcyBldmVudCdzIGxvZyBpbmRleCBzbyBhXG4gICAgICAgIC8vIGxhdGVyLWluLWxvZyBgd2FpdF9jb21wbGV0ZWRgIG9yIHN0ZXAgcmVzdWx0IGlzIGRlbGl2ZXJlZCBvbmx5IGFmdGVyXG4gICAgICAgIC8vIHRoaXMgaG9vaywgYW5kIHNvIHRoaXMgaG9vayBpcyBkZWxpdmVyZWQgb25seSBhZnRlciBldmVyeVxuICAgICAgICAvLyBlYXJsaWVyLWluLWxvZyBgd2FpdF9jb21wbGV0ZWRgIGFuZCBzdGVwIHJlc3VsdCDigJQga2VlcGluZyBhbnlcbiAgICAgICAgLy8gYFByb21pc2UucmFjZWAgKG9yIGNvbmN1cnJlbnQtYnJhbmNoIFVMSUQgYWxsb2NhdGlvbikgZGV0ZXJtaW5pc3RpY1xuICAgICAgICAvLyBhbmQgYWxpZ25lZCB3aXRoIHRoZSBjb21taXR0ZWQgZXZlbnQgbG9nLCByZWdhcmRsZXNzIG9mXG4gICAgICAgIC8vIG1pY3JvdGFzay1ob3AgY291bnQsIGh5ZHJhdGlvbiB0aW1lLCBvciByYWNlLWFyZ3VtZW50IG9yZGVyLlxuICAgICAgICAvLyBTZWUgYGN0eC5wZW5kaW5nRGVsaXZlcnlCYXJyaWVyc2AuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoZSBiYXJyaWVyIGlzIHJlZ2lzdGVyZWQgQVJNRUQgb25seSB3aGVuIGEgY29uc3VtZXIgaXMgYWxyZWFkeVxuICAgICAgICAvLyBhd2FpdGluZywgc28gdGhpcyBwYXlsb2FkIGlzIGNvbW1pdHRlZCB0byByZWFjaGluZyB0aGUgd29ya2Zsb3cuIEFcbiAgICAgICAgLy8gYnVmZmVyZWQgcGF5bG9hZCBpcyByZWdpc3RlcmVkIHVuYXJtZWQgYW5kIGFybWVkIGJ5IGBjbGFpbSgpYDogdW50aWxcbiAgICAgICAgLy8gYSBjb25zdW1lciB0YWtlcyBpdCwgYSBsYXRlciBzdGVwIHJlc3VsdCBtdXN0IG5vdCBiZSBvcmRlcmVkIGJlaGluZFxuICAgICAgICAvLyBpdCAoc2VlIGBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzYCkuXG4gICAgICAgIGNvbnN0IGV2ZW50SW5kZXggPSBjdHguZXZlbnRzQ29uc3VtZXIuZXZlbnRJbmRleDtcbiAgICAgICAgY29uc3QgaGFzV2FpdGluZ0NvbnN1bWVyID0gcHJvbWlzZXMubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3QgYmFycmllciA9IHJlZ2lzdGVyRGVsaXZlcnlCYXJyaWVyKGN0eCwgZXZlbnRJbmRleCwgJ2hvb2snLCB7XG4gICAgICAgICAgYXJtZWQ6IGhhc1dhaXRpbmdDb25zdW1lcixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGhhc1dhaXRpbmdDb25zdW1lcikge1xuICAgICAgICAgIC8vIEEgY29uc3VtZXIgaXMgYWxyZWFkeSBhd2FpdGluZywgc28gdGhpcyBwYXlsb2FkJ3MgZGVsaXZlcnkgaXNcbiAgICAgICAgICAvLyBwaW5uZWQgdG8gdGhpcyBsb2cgcG9zaXRpb246IGNhcHR1cmUgdGhlIGRlZmVycmFsIEhFUkUsIHdoaWxlXG4gICAgICAgICAgLy8gY29uc3VtaW5nIHRoZSBldmVudCwgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGh5ZHJhdGlvbiBzbG90IGJlbG93IOKAlFxuICAgICAgICAgIC8vIHNhbWUgcmVhc29uaW5nIGFzIHN0ZXAudHMuIEFuIGVhcmxpZXIgc3RlcCBvciBob29rIHdob3NlIHNsb3QgcnVuc1xuICAgICAgICAgIC8vIGZpcnN0IG9uIHRoaXMgc2VyaWFsIHF1ZXVlIGhhcyB1c3VhbGx5IGRlbGl2ZXJlZCwgYW5kIHNvXG4gICAgICAgICAgLy8gZGVyZWdpc3RlcmVkIGl0cyBiYXJyaWVyLCBiZWZvcmUgdGhpcyBzbG90IGVuZHMuIFJlYWQgdGhlbiwgaXRcbiAgICAgICAgICAvLyB3b3VsZCBiZSBpbnZpc2libGUgYW5kIHRoaXMgcGF5bG9hZCB3b3VsZCBza2lwIGJvdGggdGhlIGdhdGUgQU5EXG4gICAgICAgICAgLy8gYGF3YWl0RWFybGllckRlbGl2ZXJpZXNgJyBtYWNyb3Rhc2sgeWllbGQsIGxldHRpbmcgaXQgb3ZlcnRha2UgdGhlXG4gICAgICAgICAgLy8gYnJhbmNoIHRoYXQgZWFybGllciBkZWxpdmVyeSBqdXN0IHdva2UuIEV2ZXJ5IGV2ZW50IGluIG9uZSBkcmFpblxuICAgICAgICAgIC8vIHdpbmRvdyBpcyBjb25zdW1lZCBiZWZvcmUgYW55IHNsb3QgcnVucywgc28gY2FwdHVyaW5nIGF0XG4gICAgICAgICAgLy8gY29uc3VtcHRpb24gdGltZSBzZWVzIGFsbCBvZiB0aGVtLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhlIEJVRkZFUkVEIGJyYW5jaCBiZWxvdyBkZWxpYmVyYXRlbHkgZG9lcyBOT1QgZG8gdGhpcyDigJQgc2VlIHRoZVxuICAgICAgICAgIC8vIGNvbW1lbnQgb24gYGNsYWltKClgLlxuICAgICAgICAgIGNvbnN0IGVhcmxpZXJEZWxpdmVyZWQgPSBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzKFxuICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgZXZlbnRJbmRleCxcbiAgICAgICAgICAgICdob29rJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHByb21pc2VzLnNoaWZ0KCk7XG4gICAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICAgIC8vIEh5ZHJhdGUgdGhyb3VnaCBhIHByb21pc2VRdWV1ZSBzbG90IChzbyBhc3luYyBkZXNlcmlhbGl6YXRpb25cbiAgICAgICAgICAgIC8vIHN0YXlzIGluIGV2ZW50LWxvZyBvcmRlciksIHRoZW4gZGVmZXIgYmVoaW5kIGVhcmxpZXIgd2FpdHMgYW5kXG4gICAgICAgICAgICAvLyBzdGVwcyBiZWZvcmUgcmVzb2x2aW5nLiBUaGUgZGVmZXJyYWwgcnVucyBPRkYgdGhlIHNlcmlhbCBxdWV1ZVxuICAgICAgICAgICAgLy8gKGl0IG1heSB3YWl0IG9uIGFuIGVhcmxpZXIgd2FpdCBvciBzdGVwIGRlbGl2ZXJ5IGFuZCBibG9ja2luZyBhXG4gICAgICAgICAgICAvLyBxdWV1ZSBzbG90IG9uIHRoYXQgd291bGQgZGVhZGxvY2sgdGhlIHF1ZXVlKS5cbiAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcysrO1xuICAgICAgICAgICAgbGV0IGh5ZHJhdGVPdXRjb21lOlxuICAgICAgICAgICAgICB8IHsgb2s6IHRydWU7IHZhbHVlOiBUIH1cbiAgICAgICAgICAgICAgfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHVua25vd24gfTtcbiAgICAgICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBoeWRyYXRlU3RlcFJldHVyblZhbHVlKFxuICAgICAgICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgICBjdHgucnVuSWQsXG4gICAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxUaGlzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBoeWRyYXRlT3V0Y29tZSA9IHsgb2s6IHRydWUsIHZhbHVlOiBwYXlsb2FkIGFzIFQgfTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoeWRyYXRlT3V0Y29tZSA9IHsgb2s6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZvaWQgZWFybGllckRlbGl2ZXJlZC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBiYXJyaWVyLm1hcmtEZWxpdmVyZWQoKTtcbiAgICAgICAgICAgICAgICBpZiAoaHlkcmF0ZU91dGNvbWUub2spIHtcbiAgICAgICAgICAgICAgICAgIG5leHQucmVzb2x2ZShoeWRyYXRlT3V0Y29tZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG5leHQucmVqZWN0KGh5ZHJhdGVPdXRjb21lLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vIGNvbnN1bWVyIGlzIGF3YWl0aW5nIHlldC4gSHlkcmF0ZSB0aHJvdWdoIGEgcHJvbWlzZVF1ZXVlIHNsb3RcbiAgICAgICAgICAvLyBhdCB0aGlzIGxvZyBwb3NpdGlvbiBhbmQgcGFyayB0aGUgT1VUQ09NRSAodmFsdWUgb3IgZXJyb3IpIGZvciBhXG4gICAgICAgICAgLy8gbGF0ZXIgYGl0ZXJhdG9yLm5leHQoKWAgLyBgYXdhaXQgaG9va2AgY2xhaW0uIFdlIGNhcHR1cmUgdGhlXG4gICAgICAgICAgLy8gb3V0Y29tZSByYXRoZXIgdGhhbiBlYWdlcmx5IHJlc29sdmluZy9yZWplY3RpbmcgYSBwcm9taXNlIG5vXG4gICAgICAgICAgLy8gY29uc3VtZXIgaGFzIGF0dGFjaGVkIHRvIOKAlCBhIHJlamVjdGVkIHVuY2xhaW1lZCBwcm9taXNlIChlLmcuIGFcbiAgICAgICAgICAvLyBidWZmZXJlZCBlbmNyeXB0ZWQgcGF5bG9hZCB3aXRoIG5vIGtleSkgd291bGQgb3RoZXJ3aXNlIHN1cmZhY2VcbiAgICAgICAgICAvLyBhcyBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uIGFuZCBjcmFzaCB0aGUgcHJvY2Vzcy4gYGNsYWltKClgIGJ1aWxkc1xuICAgICAgICAgIC8vIHRoZSBjb25zdW1lci1mYWNpbmcgcHJvbWlzZSBvbiBkZW1hbmQuXG4gICAgICAgICAgbGV0IG91dGNvbWU6XG4gICAgICAgICAgICB8IHsgb2s6IHRydWU7IHZhbHVlOiBUIH1cbiAgICAgICAgICAgIHwgeyBvazogZmFsc2U7IGVycm9yOiB1bmtub3duIH1cbiAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IGh5ZHJhdGVkID0gd2l0aFJlc29sdmVyczx2b2lkPigpO1xuXG4gICAgICAgICAgY29uc3QgY2xhaW0gPSAoKTogUHJvbWlzZTxUPiA9PiB7XG4gICAgICAgICAgICAvLyBBIGNvbnN1bWVyIGhhcyB0YWtlbiB0aGlzIHBheWxvYWQsIHNvIGl0cyBkZWxpdmVyeSBubyBsb25nZXJcbiAgICAgICAgICAgIC8vIHdhaXRzIG9uIHdvcmtmbG93IGNvZGU6IGxhdGVyIHN0ZXAgcmVzdWx0cyBtYXkgbm93IGJlIG9yZGVyZWRcbiAgICAgICAgICAgIC8vIGJlaGluZCBpdC5cbiAgICAgICAgICAgIGJhcnJpZXIuYXJtKCk7XG4gICAgICAgICAgICAvLyBVbmxpa2UgZXZlcnkgb3RoZXIgZGVsaXZlcnksIHRoZSBkZWZlcnJhbCBpcyBldmFsdWF0ZWQgSEVSRSwgYXRcbiAgICAgICAgICAgIC8vIGNsYWltIHRpbWUsIHJhdGhlciB0aGFuIHdoZW4gdGhlIGV2ZW50IHdhcyBjb25zdW1lZC4gQSBidWZmZXJlZFxuICAgICAgICAgICAgLy8gcGF5bG9hZCdzIGRlbGl2ZXJ5IGdlbnVpbmVseSBoYXBwZW5zIHdoZW4gdGhlIHdvcmtmbG93IHJlYWRzIHRoZVxuICAgICAgICAgICAgLy8gaG9vaywgd2hpY2ggbWF5IGJlIG1hbnkgZGVsaXZlcmllcyBsYXRlcjsgYSBjb25zdW1wdGlvbi10aW1lXG4gICAgICAgICAgICAvLyBzbmFwc2hvdCB3b3VsZCBtYWtlIHRoZSBjbGFpbSB3YWl0IG9uIOKAlCBhbmQgcGF5IHRoZSBtYWNyb3Rhc2tcbiAgICAgICAgICAgIC8vIHlpZWxkIGZvciDigJQgYmFycmllcnMgdGhhdCB3ZXJlIHJlbGV2YW50IHRvIGEgbW9tZW50IHRoaXMgcGF5bG9hZFxuICAgICAgICAgICAgLy8gbmV2ZXIgcGFydGljaXBhdGVkIGluLiBUaGF0IGlzIG5vdCB0aGVvcmV0aWNhbDogaXQgc3RhbGxzIHRoZVxuICAgICAgICAgICAgLy8gc2Vjb25kIHBheWxvYWQgaW4gdGhlIGUyZSBgaG9va1dpdGhTbGVlcFdvcmtmbG93YCBsb25nIGVub3VnaFxuICAgICAgICAgICAgLy8gZm9yIHRoZSBydW4gdG8gc3VzcGVuZCBiZWZvcmUgZGVsaXZlcmluZyBpdC5cbiAgICAgICAgICAgIHJldHVybiBoeWRyYXRlZC5wcm9taXNlXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IGF3YWl0RWFybGllckRlbGl2ZXJpZXMoY3R4LCBldmVudEluZGV4LCAnaG9vaycpKVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgYmFycmllci5tYXJrRGVsaXZlcmVkKCk7XG4gICAgICAgICAgICAgICAgaWYgKG91dGNvbWUgJiYgIW91dGNvbWUub2spIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG91dGNvbWUuZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAob3V0Y29tZSBhcyB7IG9rOiB0cnVlOyB2YWx1ZTogVCB9KS52YWx1ZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcysrO1xuICAgICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGh5ZHJhdGVTdGVwUmV0dXJuVmFsdWUoXG4gICAgICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgY3R4LnJ1bklkLFxuICAgICAgICAgICAgICAgIGN0eC5lbmNyeXB0aW9uS2V5LFxuICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxUaGlzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIG91dGNvbWUgPSB7IG9rOiB0cnVlLCB2YWx1ZTogcGF5bG9hZCBhcyBUIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBvdXRjb21lID0geyBvazogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBjdHgucGVuZGluZ0RlbGl2ZXJpZXMtLTtcbiAgICAgICAgICAgICAgaHlkcmF0ZWQucmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHBheWxvYWRzUXVldWUucHVzaCh7IGNsYWltIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuQ29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJykge1xuICAgICAgICAvLyBUZXJtaW5hbCBzdGF0ZSAtIHJlbW92ZSBmcm9tIHF1ZXVlIChsaWtlIHN0ZXBfY29tcGxldGVkL3dhaXRfY29tcGxldGVkKVxuICAgICAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5kZWxldGUoY29ycmVsYXRpb25JZCk7XG4gICAgICAgIC8vIE1hcmsgdGhhdCB0aGUgZXZlbnQgbG9nIGNvbmZpcm1zIGRpc3Bvc2FsIGhhcHBlbmVkXG4gICAgICAgIGhhc0Rpc3Bvc2VkRXZlbnQgPSB0cnVlO1xuICAgICAgICAvLyBXZSdyZSBkb25lIHByb2Nlc3NpbmcgYW55IG1vcmUgZXZlbnRzIGZvciB0aGlzIGhvb2tcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgcmVwbGF5IGluc3RhbGxlZCBhIGRpZmZlcmVudCBjb25zdW1lciB0aGFuIHRoZSBzdG9yZWQgZXZlbnQgbmVlZHMuXG4gICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiBVbmV4cGVjdGVkIGV2ZW50IHR5cGUgZm9yIGhvb2sgJHtjb3JyZWxhdGlvbklkfSAodG9rZW46ICR7dG9rZW59KSBcIiR7ZXZlbnQuZXZlbnRUeXBlfVwiYCxcbiAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICB9KTtcblxuICAgIC8vIFRyYWNrIGlmIHRoZSBob29rIGhhcyBiZWVuIGRpc3Bvc2VkXG4gICAgbGV0IGlzRGlzcG9zZWQgPSBmYWxzZTtcblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgcHJvbWlzZSB0aGF0IHdhaXRzIGZvciB0aGUgbmV4dCBob29rIHBheWxvYWRcbiAgICBmdW5jdGlvbiBjcmVhdGVIb29rUHJvbWlzZSgpOiBQcm9taXNlPFQ+IHtcbiAgICAgIGNvbnN0IHJlc29sdmVycyA9IHdpdGhSZXNvbHZlcnM8VD4oKTtcblxuICAgICAgLy8gSWYgd2UgaGF2ZSBhIGNvbmZsaWN0LCByZWplY3QgdGhyb3VnaCB0aGUgcHJvbWlzZVF1ZXVlIHRvIG1haW50YWluXG4gICAgICAvLyBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIHdpdGggYW55IHByaW9yIHF1ZXVlZCByZXNvbHV0aW9ucy5cbiAgICAgIGlmIChoYXNDb25mbGljdCAmJiBjb25mbGljdEVycm9yUmVmKSB7XG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmVycy5yZWplY3QoY29uZmxpY3RFcnJvclJlZik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZXJzLnByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXlsb2Fkc1F1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dERlbGl2ZXJ5ID0gcGF5bG9hZHNRdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAobmV4dERlbGl2ZXJ5KSB7XG4gICAgICAgICAgLy8gVGhlIHBheWxvYWQgd2FzIGh5ZHJhdGVkIHRocm91Z2ggYSBwcm9taXNlUXVldWUgc2xvdCBhdCBpdHMgbG9nXG4gICAgICAgICAgLy8gcG9zaXRpb24gKGJ1ZmZlcmluZyBicmFuY2ggYWJvdmUpLiBgY2xhaW0oKWAgYnVpbGRzIHRoZVxuICAgICAgICAgIC8vIGNvbnN1bWVyLWZhY2luZyBwcm9taXNlIGZyb20gdGhhdCBvdXRjb21lLCBkZWZlcnJpbmcgYmVoaW5kIGFueVxuICAgICAgICAgIC8vIGVhcmxpZXItaW4tbG9nIHdhaXQgb3Igc3RlcCBhbmQgbWFya2luZyB0aGlzIGhvb2sgZGVsaXZlcmVkIOKAlCBzb1xuICAgICAgICAgIC8vIHJlc29sdXRpb24gb3JkZXIgc3RheXMgYW5jaG9yZWQgdG8gdGhlIGV2ZW50IGxvZywgbm90IHRoaXMgbGF0ZXJcbiAgICAgICAgICAvLyBjbGFpbSBzaXRlLlxuICAgICAgICAgIHJldHVybiBuZXh0RGVsaXZlcnkuY2xhaW0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRMb2dFbXB0eSkge1xuICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICBuZXcgV29ya2Zsb3dTdXNwZW5zaW9uKGN0eC5pbnZvY2F0aW9uc1F1ZXVlLCBjdHguZ2xvYmFsVGhpcylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcHJvbWlzZXMucHVzaChyZXNvbHZlcnMpO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZXJzLnByb21pc2U7XG4gICAgfVxuXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBob29rJ3NcbiAgICAvLyByZWdpc3RyYXRpb24gb3V0Y29tZTogdGhlIGNvbmZsaWN0aW5nIGB7IHJ1bklkIH1gIHdoZW4gdGhlIHRva2VuIGlzXG4gICAgLy8gb3duZWQgYnkgYW5vdGhlciBhY3RpdmUgaG9vaywgYG51bGxgIG9uY2UgdGhpcyBob29rJ3MgcmVnaXN0cmF0aW9uXG4gICAgLy8gaXMgY29tbWl0dGVkLiBCb3RoIGZhc3QtcGF0aHMgc2V0dGxlIHRocm91Z2ggYGN0eC5wcm9taXNlUXVldWVgIHNvXG4gICAgLy8gcmVzb2x1dGlvbiBvcmRlciBhbHdheXMgbWF0Y2hlcyBldmVudC1sb2cgb3JkZXIuXG4gICAgZnVuY3Rpb24gY3JlYXRlR2V0Q29uZmxpY3RQcm9taXNlKCk6IFByb21pc2U8Q29uZmxpY3RpbmdSdW4gfCBudWxsPiB7XG4gICAgICBjb25zdCByZXNvbHZlcnMgPSB3aXRoUmVzb2x2ZXJzPENvbmZsaWN0aW5nUnVuIHwgbnVsbD4oKTtcblxuICAgICAgaWYgKGhhc0NyZWF0ZWQpIHtcbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZXJzLnJlc29sdmUobnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZXJzLnByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNDb25mbGljdCkge1xuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoY29uZmxpY3RSdW5SZWYpIHtcbiAgICAgICAgICAgIHJlc29sdmVycy5yZXNvbHZlKGNvbmZsaWN0UnVuUmVmKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZXJzLnJlamVjdChjb25mbGljdEVycm9yUmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZXJzLnByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICdob29rJykge1xuICAgICAgICBxdWV1ZUl0ZW0uaGFzQ29uZmxpY3RBd2FpdGVyID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50TG9nRW1wdHkpIHtcbiAgICAgICAgc2NoZWR1bGVXaGVuSWRsZShjdHgsICgpID0+IHtcbiAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGdldENvbmZsaWN0UHJvbWlzZXMucHVzaChyZXNvbHZlcnMpO1xuICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgIH1cblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBkaXNwb3NlIHRoZSBob29rXG4gICAgZnVuY3Rpb24gZGlzcG9zZUhvb2soKTogdm9pZCB7XG4gICAgICBpZiAoaXNEaXNwb3NlZCkge1xuICAgICAgICByZXR1cm47IC8vIEFscmVhZHkgZGlzcG9zZWQsIG5vdGhpbmcgdG8gZG9cbiAgICAgIH1cbiAgICAgIGlzRGlzcG9zZWQgPSB0cnVlO1xuXG4gICAgICAvLyBJZiB0aGUgZXZlbnQgbG9nIGFscmVhZHkgY29udGFpbnMgaG9va19kaXNwb3NlZCwgdGhpcyBpcyBhIHJlcGxheSDigJQgbm8tb3BcbiAgICAgIGlmIChoYXNEaXNwb3NlZEV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGRpc3Bvc2VkIGZsYWcgb24gdGhlIGV4aXN0aW5nIHF1ZXVlIGl0ZW1cbiAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICdob29rJykge1xuICAgICAgICBxdWV1ZUl0ZW0uZGlzcG9zZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBEcmFpbiBhbnkgcGVuZGluZyBwcm9taXNlcyB0aGF0IGFyZSB3YWl0aW5nIGZvciBwYXlsb2Fkcy5cbiAgICAgIC8vIFdpdGhvdXQgdGhpcywgcHJvbWlzZXMgY3JlYXRlZCBieSBgYXdhaXQgaG9va2Agb3IgdGhlIGFzeW5jIGl0ZXJhdG9yJ3NcbiAgICAgIC8vIGB5aWVsZCBhd2FpdCB0aGlzYCB3b3VsZCBoYW5nIGZvcmV2ZXIgc2luY2UgdGhlIGV2ZW50IGNvbnN1bWVyIHdpbGxcbiAgICAgIC8vIG5ldmVyIGRlbGl2ZXIgYW5vdGhlciBob29rX3JlY2VpdmVkIGFmdGVyIGRpc3Bvc2FsLlxuICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcHJvbWlzZXMubGVuZ3RoID0gMDtcbiAgICAgICAgc2NoZWR1bGVXaGVuSWRsZShjdHgsICgpID0+IHtcbiAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgbmV3IFdvcmtmbG93U3VzcGVuc2lvbihjdHguaW52b2NhdGlvbnNRdWV1ZSwgY3R4Lmdsb2JhbFRoaXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHdlYmhvb2tMb2dnZXIuZGVidWcoJ0hvb2sgZGlzcG9zZWQnLCB7IGNvcnJlbGF0aW9uSWQsIHRva2VuIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGhvb2s6IEhvb2s8VD4gPSB7XG4gICAgICB0b2tlbixcblxuICAgICAgZ2V0Q29uZmxpY3QoKTogUHJvbWlzZTxDb25mbGljdGluZ1J1biB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUdldENvbmZsaWN0UHJvbWlzZSgpO1xuICAgICAgfSxcblxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1RoZW5Qcm9wZXJ0eTogSW50ZW50aW9uYWxseSB0aGVuYWJsZVxuICAgICAgdGhlbjxUUmVzdWx0MSA9IFQsIFRSZXN1bHQyID0gbmV2ZXI+KFxuICAgICAgICBvbmZ1bGZpbGxlZD86ICgodmFsdWU6IFQpID0+IFRSZXN1bHQxIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDE+KSB8IG51bGwsXG4gICAgICAgIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0MiB8IFByb21pc2VMaWtlPFRSZXN1bHQyPikgfCBudWxsXG4gICAgICApOiBQcm9taXNlPFRSZXN1bHQxIHwgVFJlc3VsdDI+IHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUhvb2tQcm9taXNlKCkudGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCk7XG4gICAgICB9LFxuXG4gICAgICAvLyBTdXBwb3J0IGBmb3IgYXdhaXQgKGNvbnN0IHBheWxvYWQgb2YgaG9vaykgeyDigKYgfWAgc3ludGF4XG4gICAgICBhc3luYyAqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgd2hpbGUgKCFpc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgeWllbGQgYXdhaXQgdGhpcztcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZGlzcG9zZTogZGlzcG9zZUhvb2ssXG5cbiAgICAgIFtTeW1ib2wuZGlzcG9zZV06IGRpc3Bvc2VIb29rLFxuICAgIH07XG5cbiAgICAvLyBBbHNvIHJlZ2lzdGVyIHdpdGggdGhlIFZNJ3MgU3ltYm9sLmRpc3Bvc2Ugc28gYHVzaW5nYCB3b3JrcyBpbnNpZGVcbiAgICAvLyB0aGUgd29ya2Zsb3cgc2FuZGJveCAodGhlIFZNIG1heSBoYXZlIGEgcG9seWZpbGxlZCBTeW1ib2wuZGlzcG9zZVxuICAgIC8vIHRoYXQgZGlmZmVycyBmcm9tIHRoZSBob3N0J3MpLlxuICAgIGNvbnN0IHZtRGlzcG9zZSA9IGN0eC5nbG9iYWxUaGlzLlN5bWJvbC5kaXNwb3NlO1xuICAgIGlmICh2bURpc3Bvc2UgJiYgdm1EaXNwb3NlICE9PSBTeW1ib2wuZGlzcG9zZSkge1xuICAgICAgKGhvb2sgYXMgYW55KVt2bURpc3Bvc2VdID0gZGlzcG9zZUhvb2s7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvb2s7XG4gIH07XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/workflow/sleep.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAGtC,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AAEvB,wBAAgB,WAAW,CAAC,GAAG,EAAE,2BAA2B,IAExD,OAAO,WAAW,GAAG,IAAI,GAAG,MAAM,KACjC,OAAO,CAAC,IAAI,CAAC,CAoHjB"}
1
+ {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/workflow/sleep.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAGtC,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AAEvB,wBAAgB,WAAW,CAAC,GAAG,EAAE,2BAA2B,IAExD,OAAO,WAAW,GAAG,IAAI,GAAG,MAAM,KACjC,OAAO,CAAC,IAAI,CAAC,CAoIjB"}
@@ -64,24 +64,36 @@ export function createSleep(ctx) {
64
64
  // Remove this wait from the invocations queue (O(1) delete using Map)
65
65
  ctx.invocationsQueue.delete(correlationId);
66
66
  // This `wait_completed` is a branch-deciding resolution the workflow
67
- // may `Promise.race` against a hook payload. Order it deterministically
68
- // by event-log position (see `pendingDeliveryBarriers`):
67
+ // may `Promise.race` against a hook payload, or await on a branch
68
+ // parallel to one awaiting a step. Order it deterministically by
69
+ // event-log position (see `pendingDeliveryBarriers`):
69
70
  // - Register a 'wait' barrier at this event's index so a LATER-in-log
70
- // hook payload is delivered only after this wait.
71
- // - Before resolving, defer behind every EARLIER-in-log HOOK delivery
72
- // so this wait does not preempt a hook the committed log ordered
73
- // first. Then mark this wait delivered to release later hooks.
71
+ // hook payload or step result is delivered only after this wait.
72
+ // - Before resolving, defer behind every EARLIER-in-log HOOK and STEP
73
+ // delivery so this wait does not preempt one the committed log
74
+ // ordered first. Then mark this wait delivered to release the later
75
+ // deliveries gated on it.
74
76
  const eventIndex = ctx.eventsConsumer.eventIndex;
75
77
  const barrier = registerDeliveryBarrier(ctx, eventIndex, 'wait');
78
+ // The deferral is captured HERE, while consuming the event, and not
79
+ // after the queue tail below — same reasoning as step.ts. An earlier
80
+ // step or hook whose hydration slot sits in that tail has usually
81
+ // delivered, and so deregistered its barrier, by the time the tail
82
+ // resolves. Read then, it would be invisible and this wait would skip
83
+ // both the gate AND `awaitEarlierDeliveries`' macrotask yield, letting
84
+ // it overtake the branch that earlier delivery just woke. Every event
85
+ // in one drain window is consumed before any slot runs, so capturing
86
+ // at consumption time sees all of them.
87
+ const earlierDelivered = awaitEarlierDeliveries(ctx, eventIndex, 'wait');
76
88
  // Defer + resolve in a DETACHED promise (not chained onto the serial
77
89
  // `promiseQueue`). `awaitEarlierDeliveries` may wait on an earlier
78
- // hook delivery whose own resolution is itself driven by the
90
+ // hook or step delivery whose own resolution is itself driven by the
79
91
  // promiseQueue; blocking a queue slot on it would deadlock the serial
80
92
  // queue. We still anchor to the queue tail first so prior queued
81
93
  // hydration/ordering work runs in event-log order.
82
94
  const queueAtCompletion = ctx.promiseQueue;
83
95
  void queueAtCompletion
84
- .then(() => awaitEarlierDeliveries(ctx, eventIndex, ['hook']))
96
+ .then(() => earlierDelivered)
85
97
  .then(() => {
86
98
  barrier.markDelivered();
87
99
  resolve();
@@ -97,4 +109,4 @@ export function createSleep(ctx) {
97
109
  return promise;
98
110
  };
99
111
  }
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2xlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBZ0Msa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEYsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBZ0M7SUFDMUQsT0FBTyxLQUFLLFVBQVUsU0FBUyxDQUM3QixLQUFrQztRQUVsQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsRUFBUSxDQUFDO1FBQ25ELE1BQU0sYUFBYSxHQUFHLFFBQVEsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7UUFFbkQsNEJBQTRCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVDLGdFQUFnRTtRQUNoRSxNQUFNLFFBQVEsR0FBNEI7WUFDeEMsSUFBSSxFQUFFLE1BQU07WUFDWixhQUFhO1lBQ2IsUUFBUTtTQUNULENBQUM7UUFDRixHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVsRCxHQUFHLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JDLCtEQUErRDtZQUMvRCw0Q0FBNEM7WUFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7b0JBQ3pCLEdBQUcsQ0FBQyxlQUFlLENBQ2pCLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FDN0QsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztZQUN6QyxDQUFDO1lBRUQsSUFBSSxLQUFLLENBQUMsYUFBYSxLQUFLLGFBQWEsRUFBRSxDQUFDO2dCQUMxQyx1RkFBdUY7Z0JBQ3ZGLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ3pDLENBQUM7WUFFRCw2RUFBNkU7WUFDN0UsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUN2Qyx1RUFBdUU7Z0JBQ3ZFLHdCQUF3QjtnQkFDeEIsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDM0MsU0FBUyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQ2pDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQ2hELENBQUM7Z0JBQ0QsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7WUFDdEMsQ0FBQztZQUVELGlDQUFpQztZQUNqQyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7Z0JBQ2hELElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNoQyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUMxRCxNQUFNLGdCQUFnQixHQUNwQixTQUFTLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxNQUFNO3dCQUNwQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVE7d0JBQ3BCLENBQUMsQ0FBQyxRQUFRLENBQUM7b0JBQ2YsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDbEQsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3BELE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3RELE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7d0JBQzlELENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUU7d0JBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBRTFCLElBQUksZUFBZSxLQUFLLGtCQUFrQixFQUFFLENBQUM7d0JBQzNDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFOzRCQUM1QyxHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLHFCQUFxQixDQUN2QiwrQ0FBK0MsYUFBYSxrQkFBa0IsdUJBQXVCLDZDQUE2QyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUNuTCxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQzNCLENBQ0YsQ0FBQzt3QkFDSixDQUFDLENBQUMsQ0FBQzt3QkFDSCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztvQkFDdEMsQ0FBQztnQkFDSCxDQUFDO2dCQUVELHNFQUFzRTtnQkFDdEUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFM0MscUVBQXFFO2dCQUNyRSx3RUFBd0U7Z0JBQ3hFLHlEQUF5RDtnQkFDekQsdUVBQXVFO2dCQUN2RSxxREFBcUQ7Z0JBQ3JELHVFQUF1RTtnQkFDdkUsb0VBQW9FO2dCQUNwRSxrRUFBa0U7Z0JBQ2xFLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO2dCQUNqRCxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNqRSxxRUFBcUU7Z0JBQ3JFLG1FQUFtRTtnQkFDbkUsNkRBQTZEO2dCQUM3RCxzRUFBc0U7Z0JBQ3RFLGlFQUFpRTtnQkFDakUsbURBQW1EO2dCQUNuRCxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7Z0JBQzNDLEtBQUssaUJBQWlCO3FCQUNuQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7cUJBQzdELElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ1QsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN4QixPQUFPLEVBQUUsQ0FBQztnQkFDWixDQUFDLENBQUMsQ0FBQztnQkFDTCxPQUFPLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztZQUN0QyxDQUFDO1lBRUQsMEVBQTBFO1lBQzFFLEdBQUcsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUM1QyxHQUFHLENBQUMsZUFBZSxDQUNqQixJQUFJLHFCQUFxQixDQUN2QixxREFBcUQsYUFBYSxLQUFLLEtBQUssQ0FBQyxTQUFTLEdBQUcsRUFDekYsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUMzQixDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcGxheURpdmVyZ2VuY2VFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgcGFyc2VEdXJhdGlvblRvRGF0ZSwgd2l0aFJlc29sdmVycyB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1ZhbHVlIH0gZnJvbSAnbXMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyB0eXBlIFdhaXRJbnZvY2F0aW9uUXVldWVJdGVtLCBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuLi9nbG9iYWwuanMnO1xuaW1wb3J0IHtcbiAgYXdhaXRFYXJsaWVyRGVsaXZlcmllcyxcbiAgcmVnaXN0ZXJEZWxpdmVyeUJhcnJpZXIsXG4gIHNjaGVkdWxlV2hlbklkbGUsXG4gIHR5cGUgV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0LFxufSBmcm9tICcuLi9wcml2YXRlLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNsZWVwKGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBzbGVlcEltcGwoXG4gICAgcGFyYW06IFN0cmluZ1ZhbHVlIHwgRGF0ZSB8IG51bWJlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUgfSA9IHdpdGhSZXNvbHZlcnM8dm9pZD4oKTtcbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gYHdhaXRfJHtjdHguZ2VuZXJhdGVVbGlkKCl9YDtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgcmVzdW1lIHRpbWVcbiAgICBjb25zdCByZXN1bWVBdCA9IHBhcnNlRHVyYXRpb25Ub0RhdGUocGFyYW0pO1xuXG4gICAgLy8gQWRkIHdhaXQgdG8gaW52b2NhdGlvbnMgcXVldWUgKHVzaW5nIE1hcCBmb3IgTygxKSBvcGVyYXRpb25zKVxuICAgIGNvbnN0IHdhaXRJdGVtOiBXYWl0SW52b2NhdGlvblF1ZXVlSXRlbSA9IHtcbiAgICAgIHR5cGU6ICd3YWl0JyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICByZXN1bWVBdCxcbiAgICB9O1xuICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLnNldChjb3JyZWxhdGlvbklkLCB3YWl0SXRlbSk7XG5cbiAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBhbmQgd2UncmUgd2FpdGluZyBmb3Igd2FpdF9jb21wbGV0ZWQsXG4gICAgICAvLyBzdXNwZW5kIHRoZSB3b3JrZmxvdyB1bnRpbCB0aGUgd2FpdCBmaXJlc1xuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICBuZXcgV29ya2Zsb3dTdXNwZW5zaW9uKGN0eC5pbnZvY2F0aW9uc1F1ZXVlLCBjdHguZ2xvYmFsVGhpcylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jb3JyZWxhdGlvbklkICE9PSBjb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHdhaXRfY3JlYXRlZCBldmVudCB0byBtYXJrIHRoaXMgd2FpdCBhcyBoYXZpbmcgdGhlIGV2ZW50IGNyZWF0ZWRcbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnKSB7XG4gICAgICAgIC8vIE1hcmsgdGhpcyB3YWl0IGFzIGhhdmluZyB0aGUgY3JlYXRlZCBldmVudCwgYnV0IGtlZXAgaXQgaW4gdGhlIHF1ZXVlXG4gICAgICAgIC8vIE8oMSkgbG9va3VwIHVzaW5nIE1hcFxuICAgICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICd3YWl0Jykge1xuICAgICAgICAgIHF1ZXVlSXRlbS5oYXNDcmVhdGVkRXZlbnQgPSB0cnVlO1xuICAgICAgICAgIHF1ZXVlSXRlbS5yZXN1bWVBdCA9IGV2ZW50LmV2ZW50RGF0YS5yZXN1bWVBdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHdhaXRfY29tcGxldGVkIGV2ZW50XG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnd2FpdF9jb21wbGV0ZWQnKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXQgPSBldmVudC5ldmVudERhdGE/LnJlc3VtZUF0O1xuICAgICAgICBpZiAoZXZlbnRSZXN1bWVBdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdW1lQXQgPVxuICAgICAgICAgICAgcXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnd2FpdCdcbiAgICAgICAgICAgICAgPyBxdWV1ZUl0ZW0ucmVzdW1lQXRcbiAgICAgICAgICAgICAgOiByZXN1bWVBdDtcbiAgICAgICAgICBjb25zdCBldmVudFJlc3VtZUF0RGF0ZSA9IG5ldyBEYXRlKGV2ZW50UmVzdW1lQXQpO1xuICAgICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXRNcyA9IGV2ZW50UmVzdW1lQXREYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VtZUF0TXMgPSBleHBlY3RlZFJlc3VtZUF0LmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBldmVudFJlc3VtZUF0Rm9yTWVzc2FnZSA9IE51bWJlci5pc0Zpbml0ZShldmVudFJlc3VtZUF0TXMpXG4gICAgICAgICAgICA/IGV2ZW50UmVzdW1lQXREYXRlLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogU3RyaW5nKGV2ZW50UmVzdW1lQXQpO1xuXG4gICAgICAgICAgaWYgKGV2ZW50UmVzdW1lQXRNcyAhPT0gZXhwZWN0ZWRSZXN1bWVBdE1zKSB7XG4gICAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiB3YWl0X2NvbXBsZXRlZCBldmVudCBmb3IgJHtjb3JyZWxhdGlvbklkfSBoYXMgcmVzdW1lQXQgXCIke2V2ZW50UmVzdW1lQXRGb3JNZXNzYWdlfVwiLCBidXQgdGhlIGN1cnJlbnQgd2FpdCBjb25zdW1lciBleHBlY3RzIFwiJHtleHBlY3RlZFJlc3VtZUF0LnRvSVNPU3RyaW5nKCl9XCJgLFxuICAgICAgICAgICAgICAgICAgeyBldmVudElkOiBldmVudC5ldmVudElkIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aGlzIHdhaXQgZnJvbSB0aGUgaW52b2NhdGlvbnMgcXVldWUgKE8oMSkgZGVsZXRlIHVzaW5nIE1hcClcbiAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xuXG4gICAgICAgIC8vIFRoaXMgYHdhaXRfY29tcGxldGVkYCBpcyBhIGJyYW5jaC1kZWNpZGluZyByZXNvbHV0aW9uIHRoZSB3b3JrZmxvd1xuICAgICAgICAvLyBtYXkgYFByb21pc2UucmFjZWAgYWdhaW5zdCBhIGhvb2sgcGF5bG9hZC4gT3JkZXIgaXQgZGV0ZXJtaW5pc3RpY2FsbHlcbiAgICAgICAgLy8gYnkgZXZlbnQtbG9nIHBvc2l0aW9uIChzZWUgYHBlbmRpbmdEZWxpdmVyeUJhcnJpZXJzYCk6XG4gICAgICAgIC8vICAtIFJlZ2lzdGVyIGEgJ3dhaXQnIGJhcnJpZXIgYXQgdGhpcyBldmVudCdzIGluZGV4IHNvIGEgTEFURVItaW4tbG9nXG4gICAgICAgIC8vICAgIGhvb2sgcGF5bG9hZCBpcyBkZWxpdmVyZWQgb25seSBhZnRlciB0aGlzIHdhaXQuXG4gICAgICAgIC8vICAtIEJlZm9yZSByZXNvbHZpbmcsIGRlZmVyIGJlaGluZCBldmVyeSBFQVJMSUVSLWluLWxvZyBIT09LIGRlbGl2ZXJ5XG4gICAgICAgIC8vICAgIHNvIHRoaXMgd2FpdCBkb2VzIG5vdCBwcmVlbXB0IGEgaG9vayB0aGUgY29tbWl0dGVkIGxvZyBvcmRlcmVkXG4gICAgICAgIC8vICAgIGZpcnN0LiBUaGVuIG1hcmsgdGhpcyB3YWl0IGRlbGl2ZXJlZCB0byByZWxlYXNlIGxhdGVyIGhvb2tzLlxuICAgICAgICBjb25zdCBldmVudEluZGV4ID0gY3R4LmV2ZW50c0NvbnN1bWVyLmV2ZW50SW5kZXg7XG4gICAgICAgIGNvbnN0IGJhcnJpZXIgPSByZWdpc3RlckRlbGl2ZXJ5QmFycmllcihjdHgsIGV2ZW50SW5kZXgsICd3YWl0Jyk7XG4gICAgICAgIC8vIERlZmVyICsgcmVzb2x2ZSBpbiBhIERFVEFDSEVEIHByb21pc2UgKG5vdCBjaGFpbmVkIG9udG8gdGhlIHNlcmlhbFxuICAgICAgICAvLyBgcHJvbWlzZVF1ZXVlYCkuIGBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzYCBtYXkgd2FpdCBvbiBhbiBlYXJsaWVyXG4gICAgICAgIC8vIGhvb2sgZGVsaXZlcnkgd2hvc2Ugb3duIHJlc29sdXRpb24gaXMgaXRzZWxmIGRyaXZlbiBieSB0aGVcbiAgICAgICAgLy8gcHJvbWlzZVF1ZXVlOyBibG9ja2luZyBhIHF1ZXVlIHNsb3Qgb24gaXQgd291bGQgZGVhZGxvY2sgdGhlIHNlcmlhbFxuICAgICAgICAvLyBxdWV1ZS4gV2Ugc3RpbGwgYW5jaG9yIHRvIHRoZSBxdWV1ZSB0YWlsIGZpcnN0IHNvIHByaW9yIHF1ZXVlZFxuICAgICAgICAvLyBoeWRyYXRpb24vb3JkZXJpbmcgd29yayBydW5zIGluIGV2ZW50LWxvZyBvcmRlci5cbiAgICAgICAgY29uc3QgcXVldWVBdENvbXBsZXRpb24gPSBjdHgucHJvbWlzZVF1ZXVlO1xuICAgICAgICB2b2lkIHF1ZXVlQXRDb21wbGV0aW9uXG4gICAgICAgICAgLnRoZW4oKCkgPT4gYXdhaXRFYXJsaWVyRGVsaXZlcmllcyhjdHgsIGV2ZW50SW5kZXgsIFsnaG9vayddKSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBiYXJyaWVyLm1hcmtEZWxpdmVyZWQoKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgcmVwbGF5IGluc3RhbGxlZCBhIGRpZmZlcmVudCBjb25zdW1lciB0aGFuIHRoZSBzdG9yZWQgZXZlbnQgbmVlZHMuXG4gICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiBVbmV4cGVjdGVkIGV2ZW50IHR5cGUgZm9yIHdhaXQgJHtjb3JyZWxhdGlvbklkfSBcIiR7ZXZlbnQuZXZlbnRUeXBlfVwiYCxcbiAgICAgICAgICAgIHsgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCB9XG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICB9KTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xufVxuIl19
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2xlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBZ0Msa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEYsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBZ0M7SUFDMUQsT0FBTyxLQUFLLFVBQVUsU0FBUyxDQUM3QixLQUFrQztRQUVsQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsRUFBUSxDQUFDO1FBQ25ELE1BQU0sYUFBYSxHQUFHLFFBQVEsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7UUFFbkQsNEJBQTRCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVDLGdFQUFnRTtRQUNoRSxNQUFNLFFBQVEsR0FBNEI7WUFDeEMsSUFBSSxFQUFFLE1BQU07WUFDWixhQUFhO1lBQ2IsUUFBUTtTQUNULENBQUM7UUFDRixHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVsRCxHQUFHLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JDLCtEQUErRDtZQUMvRCw0Q0FBNEM7WUFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLGdCQUFnQixDQUFDLEdBQUcsRUFB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LENBQUMsQ0FBQztZQUNILE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcGxheURpdmVyZ2VuY2VFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgcGFyc2VEdXJhdGlvblRvRGF0ZSwgd2l0aFJlc29sdmVycyB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1ZhbHVlIH0gZnJvbSAnbXMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyB0eXBlIFdhaXRJbnZvY2F0aW9uUXVldWVJdGVtLCBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuLi9nbG9iYWwuanMnO1xuaW1wb3J0IHtcbiAgYXdhaXRFYXJsaWVyRGVsaXZlcmllcyxcbiAgcmVnaXN0ZXJEZWxpdmVyeUJhcnJpZXIsXG4gIHNjaGVkdWxlV2hlbklkbGUsXG4gIHR5cGUgV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0LFxufSBmcm9tICcuLi9wcml2YXRlLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNsZWVwKGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBzbGVlcEltcGwoXG4gICAgcGFyYW06IFN0cmluZ1ZhbHVlIHwgRGF0ZSB8IG51bWJlclxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHByb21pc2UsIHJlc29sdmUgfSA9IHdpdGhSZXNvbHZlcnM8dm9pZD4oKTtcbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gYHdhaXRfJHtjdHguZ2VuZXJhdGVVbGlkKCl9YDtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgcmVzdW1lIHRpbWVcbiAgICBjb25zdCByZXN1bWVBdCA9IHBhcnNlRHVyYXRpb25Ub0RhdGUocGFyYW0pO1xuXG4gICAgLy8gQWRkIHdhaXQgdG8gaW52b2NhdGlvbnMgcXVldWUgKHVzaW5nIE1hcCBmb3IgTygxKSBvcGVyYXRpb25zKVxuICAgIGNvbnN0IHdhaXRJdGVtOiBXYWl0SW52b2NhdGlvblF1ZXVlSXRlbSA9IHtcbiAgICAgIHR5cGU6ICd3YWl0JyxcbiAgICAgIGNvcnJlbGF0aW9uSWQsXG4gICAgICByZXN1bWVBdCxcbiAgICB9O1xuICAgIGN0eC5pbnZvY2F0aW9uc1F1ZXVlLnNldChjb3JyZWxhdGlvbklkLCB3YWl0SXRlbSk7XG5cbiAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBhbmQgd2UncmUgd2FpdGluZyBmb3Igd2FpdF9jb21wbGV0ZWQsXG4gICAgICAvLyBzdXNwZW5kIHRoZSB3b3JrZmxvdyB1bnRpbCB0aGUgd2FpdCBmaXJlc1xuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICBzY2hlZHVsZVdoZW5JZGxlKGN0eCwgKCkgPT4ge1xuICAgICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgICBuZXcgV29ya2Zsb3dTdXNwZW5zaW9uKGN0eC5pbnZvY2F0aW9uc1F1ZXVlLCBjdHguZ2xvYmFsVGhpcylcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jb3JyZWxhdGlvbklkICE9PSBjb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHdhaXRfY3JlYXRlZCBldmVudCB0byBtYXJrIHRoaXMgd2FpdCBhcyBoYXZpbmcgdGhlIGV2ZW50IGNyZWF0ZWRcbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnKSB7XG4gICAgICAgIC8vIE1hcmsgdGhpcyB3YWl0IGFzIGhhdmluZyB0aGUgY3JlYXRlZCBldmVudCwgYnV0IGtlZXAgaXQgaW4gdGhlIHF1ZXVlXG4gICAgICAgIC8vIE8oMSkgbG9va3VwIHVzaW5nIE1hcFxuICAgICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICAgIGlmIChxdWV1ZUl0ZW0gJiYgcXVldWVJdGVtLnR5cGUgPT09ICd3YWl0Jykge1xuICAgICAgICAgIHF1ZXVlSXRlbS5oYXNDcmVhdGVkRXZlbnQgPSB0cnVlO1xuICAgICAgICAgIHF1ZXVlSXRlbS5yZXN1bWVBdCA9IGV2ZW50LmV2ZW50RGF0YS5yZXN1bWVBdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Db25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHdhaXRfY29tcGxldGVkIGV2ZW50XG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnd2FpdF9jb21wbGV0ZWQnKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXQgPSBldmVudC5ldmVudERhdGE/LnJlc3VtZUF0O1xuICAgICAgICBpZiAoZXZlbnRSZXN1bWVBdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgcXVldWVJdGVtID0gY3R4Lmludm9jYXRpb25zUXVldWUuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdW1lQXQgPVxuICAgICAgICAgICAgcXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnd2FpdCdcbiAgICAgICAgICAgICAgPyBxdWV1ZUl0ZW0ucmVzdW1lQXRcbiAgICAgICAgICAgICAgOiByZXN1bWVBdDtcbiAgICAgICAgICBjb25zdCBldmVudFJlc3VtZUF0RGF0ZSA9IG5ldyBEYXRlKGV2ZW50UmVzdW1lQXQpO1xuICAgICAgICAgIGNvbnN0IGV2ZW50UmVzdW1lQXRNcyA9IGV2ZW50UmVzdW1lQXREYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VtZUF0TXMgPSBleHBlY3RlZFJlc3VtZUF0LmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBldmVudFJlc3VtZUF0Rm9yTWVzc2FnZSA9IE51bWJlci5pc0Zpbml0ZShldmVudFJlc3VtZUF0TXMpXG4gICAgICAgICAgICA/IGV2ZW50UmVzdW1lQXREYXRlLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogU3RyaW5nKGV2ZW50UmVzdW1lQXQpO1xuXG4gICAgICAgICAgaWYgKGV2ZW50UmVzdW1lQXRNcyAhPT0gZXhwZWN0ZWRSZXN1bWVBdE1zKSB7XG4gICAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgICAgICBuZXcgUmVwbGF5RGl2ZXJnZW5jZUVycm9yKFxuICAgICAgICAgICAgICAgICAgYFJlcGxheSBkaXZlcmdlbmNlOiB3YWl0X2NvbXBsZXRlZCBldmVudCBmb3IgJHtjb3JyZWxhdGlvbklkfSBoYXMgcmVzdW1lQXQgXCIke2V2ZW50UmVzdW1lQXRGb3JNZXNzYWdlfVwiLCBidXQgdGhlIGN1cnJlbnQgd2FpdCBjb25zdW1lciBleHBlY3RzIFwiJHtleHBlY3RlZFJlc3VtZUF0LnRvSVNPU3RyaW5nKCl9XCJgLFxuICAgICAgICAgICAgICAgICAgeyBldmVudElkOiBldmVudC5ldmVudElkIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSB0aGlzIHdhaXQgZnJvbSB0aGUgaW52b2NhdGlvbnMgcXVldWUgKE8oMSkgZGVsZXRlIHVzaW5nIE1hcClcbiAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xuXG4gICAgICAgIC8vIFRoaXMgYHdhaXRfY29tcGxldGVkYCBpcyBhIGJyYW5jaC1kZWNpZGluZyByZXNvbHV0aW9uIHRoZSB3b3JrZmxvd1xuICAgICAgICAvLyBtYXkgYFByb21pc2UucmFjZWAgYWdhaW5zdCBhIGhvb2sgcGF5bG9hZCwgb3IgYXdhaXQgb24gYSBicmFuY2hcbiAgICAgICAgLy8gcGFyYWxsZWwgdG8gb25lIGF3YWl0aW5nIGEgc3RlcC4gT3JkZXIgaXQgZGV0ZXJtaW5pc3RpY2FsbHkgYnlcbiAgICAgICAgLy8gZXZlbnQtbG9nIHBvc2l0aW9uIChzZWUgYHBlbmRpbmdEZWxpdmVyeUJhcnJpZXJzYCk6XG4gICAgICAgIC8vICAtIFJlZ2lzdGVyIGEgJ3dhaXQnIGJhcnJpZXIgYXQgdGhpcyBldmVudCdzIGluZGV4IHNvIGEgTEFURVItaW4tbG9nXG4gICAgICAgIC8vICAgIGhvb2sgcGF5bG9hZCBvciBzdGVwIHJlc3VsdCBpcyBkZWxpdmVyZWQgb25seSBhZnRlciB0aGlzIHdhaXQuXG4gICAgICAgIC8vICAtIEJlZm9yZSByZXNvbHZpbmcsIGRlZmVyIGJlaGluZCBldmVyeSBFQVJMSUVSLWluLWxvZyBIT09LIGFuZCBTVEVQXG4gICAgICAgIC8vICAgIGRlbGl2ZXJ5IHNvIHRoaXMgd2FpdCBkb2VzIG5vdCBwcmVlbXB0IG9uZSB0aGUgY29tbWl0dGVkIGxvZ1xuICAgICAgICAvLyAgICBvcmRlcmVkIGZpcnN0LiBUaGVuIG1hcmsgdGhpcyB3YWl0IGRlbGl2ZXJlZCB0byByZWxlYXNlIHRoZSBsYXRlclxuICAgICAgICAvLyAgICBkZWxpdmVyaWVzIGdhdGVkIG9uIGl0LlxuICAgICAgICBjb25zdCBldmVudEluZGV4ID0gY3R4LmV2ZW50c0NvbnN1bWVyLmV2ZW50SW5kZXg7XG4gICAgICAgIGNvbnN0IGJhcnJpZXIgPSByZWdpc3RlckRlbGl2ZXJ5QmFycmllcihjdHgsIGV2ZW50SW5kZXgsICd3YWl0Jyk7XG4gICAgICAgIC8vIFRoZSBkZWZlcnJhbCBpcyBjYXB0dXJlZCBIRVJFLCB3aGlsZSBjb25zdW1pbmcgdGhlIGV2ZW50LCBhbmQgbm90XG4gICAgICAgIC8vIGFmdGVyIHRoZSBxdWV1ZSB0YWlsIGJlbG93IOKAlCBzYW1lIHJlYXNvbmluZyBhcyBzdGVwLnRzLiBBbiBlYXJsaWVyXG4gICAgICAgIC8vIHN0ZXAgb3IgaG9vayB3aG9zZSBoeWRyYXRpb24gc2xvdCBzaXRzIGluIHRoYXQgdGFpbCBoYXMgdXN1YWxseVxuICAgICAgICAvLyBkZWxpdmVyZWQsIGFuZCBzbyBkZXJlZ2lzdGVyZWQgaXRzIGJhcnJpZXIsIGJ5IHRoZSB0aW1lIHRoZSB0YWlsXG4gICAgICAgIC8vIHJlc29sdmVzLiBSZWFkIHRoZW4sIGl0IHdvdWxkIGJlIGludmlzaWJsZSBhbmQgdGhpcyB3YWl0IHdvdWxkIHNraXBcbiAgICAgICAgLy8gYm90aCB0aGUgZ2F0ZSBBTkQgYGF3YWl0RWFybGllckRlbGl2ZXJpZXNgJyBtYWNyb3Rhc2sgeWllbGQsIGxldHRpbmdcbiAgICAgICAgLy8gaXQgb3ZlcnRha2UgdGhlIGJyYW5jaCB0aGF0IGVhcmxpZXIgZGVsaXZlcnkganVzdCB3b2tlLiBFdmVyeSBldmVudFxuICAgICAgICAvLyBpbiBvbmUgZHJhaW4gd2luZG93IGlzIGNvbnN1bWVkIGJlZm9yZSBhbnkgc2xvdCBydW5zLCBzbyBjYXB0dXJpbmdcbiAgICAgICAgLy8gYXQgY29uc3VtcHRpb24gdGltZSBzZWVzIGFsbCBvZiB0aGVtLlxuICAgICAgICBjb25zdCBlYXJsaWVyRGVsaXZlcmVkID0gYXdhaXRFYXJsaWVyRGVsaXZlcmllcyhcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgZXZlbnRJbmRleCxcbiAgICAgICAgICAnd2FpdCdcbiAgICAgICAgKTtcbiAgICAgICAgLy8gRGVmZXIgKyByZXNvbHZlIGluIGEgREVUQUNIRUQgcHJvbWlzZSAobm90IGNoYWluZWQgb250byB0aGUgc2VyaWFsXG4gICAgICAgIC8vIGBwcm9taXNlUXVldWVgKS4gYGF3YWl0RWFybGllckRlbGl2ZXJpZXNgIG1heSB3YWl0IG9uIGFuIGVhcmxpZXJcbiAgICAgICAgLy8gaG9vayBvciBzdGVwIGRlbGl2ZXJ5IHdob3NlIG93biByZXNvbHV0aW9uIGlzIGl0c2VsZiBkcml2ZW4gYnkgdGhlXG4gICAgICAgIC8vIHByb21pc2VRdWV1ZTsgYmxvY2tpbmcgYSBxdWV1ZSBzbG90IG9uIGl0IHdvdWxkIGRlYWRsb2NrIHRoZSBzZXJpYWxcbiAgICAgICAgLy8gcXVldWUuIFdlIHN0aWxsIGFuY2hvciB0byB0aGUgcXVldWUgdGFpbCBmaXJzdCBzbyBwcmlvciBxdWV1ZWRcbiAgICAgICAgLy8gaHlkcmF0aW9uL29yZGVyaW5nIHdvcmsgcnVucyBpbiBldmVudC1sb2cgb3JkZXIuXG4gICAgICAgIGNvbnN0IHF1ZXVlQXRDb21wbGV0aW9uID0gY3R4LnByb21pc2VRdWV1ZTtcbiAgICAgICAgdm9pZCBxdWV1ZUF0Q29tcGxldGlvblxuICAgICAgICAgIC50aGVuKCgpID0+IGVhcmxpZXJEZWxpdmVyZWQpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgYmFycmllci5tYXJrRGVsaXZlcmVkKCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIHJlcGxheSBpbnN0YWxsZWQgYSBkaWZmZXJlbnQgY29uc3VtZXIgdGhhbiB0aGUgc3RvcmVkIGV2ZW50IG5lZWRzLlxuICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgbmV3IFJlcGxheURpdmVyZ2VuY2VFcnJvcihcbiAgICAgICAgICAgIGBSZXBsYXkgZGl2ZXJnZW5jZTogVW5leHBlY3RlZCBldmVudCB0eXBlIGZvciB3YWl0ICR7Y29ycmVsYXRpb25JZH0gXCIke2V2ZW50LmV2ZW50VHlwZX1cImAsXG4gICAgICAgICAgICB7IGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQgfVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAYjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAyDpE,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,EAAE,SAAS,GAAG,SAAS;AACpC;;;;;;GAMG;AACH,kBAAkB,CAAC,EAAE,kBAAkB,GACtC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CAqsB/B"}
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAajD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAyDpE,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,EAAE,SAAS,GAAG,SAAS;AACpC;;;;;;GAMG;AACH,kBAAkB,CAAC,EAAE,kBAAkB,GACtC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CA6sB/B"}