@workflow/core 5.0.0-beta.51 → 5.0.0-beta.52

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.
@@ -11,6 +11,9 @@
11
11
  * FatalError: …
12
12
  * at … (trimmed stack, internals collapsed)
13
13
  *
14
+ * The stack body comes from the message when the caller embedded it there,
15
+ * and from the `errorStack` metadata field otherwise.
16
+ *
14
17
  * Without this composition, callers passing `${framing}\n${stack}` as the
15
18
  * message and structured fields as the metadata object got `util.inspect`'s
16
19
  * default object dump appended *after* the stack, which buries the run ID
@@ -1 +1 @@
1
- {"version":3,"file":"log-format.d.ts","sourceRoot":"","sources":["../src/log-format.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC5C,MAAM,CAUR"}
1
+ {"version":3,"file":"log-format.d.ts","sourceRoot":"","sources":["../src/log-format.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC5C,MAAM,CAkBR"}
@@ -13,6 +13,9 @@ import { formatStepName, formatWorkflowName, parseStepName, parseWorkflowName, }
13
13
  * FatalError: …
14
14
  * at … (trimmed stack, internals collapsed)
15
15
  *
16
+ * The stack body comes from the message when the caller embedded it there,
17
+ * and from the `errorStack` metadata field otherwise.
18
+ *
16
19
  * Without this composition, callers passing `${framing}\n${stack}` as the
17
20
  * message and structured fields as the metadata object got `util.inspect`'s
18
21
  * default object dump appended *after* the stack, which buries the run ID
@@ -25,7 +28,15 @@ import { formatStepName, formatWorkflowName, parseStepName, parseWorkflowName, }
25
28
  */
26
29
  export function composeLogLine(prefix, message, metadata) {
27
30
  const [framing, ...rest] = message.split('\n');
28
- const body = rest.join('\n');
31
+ const embeddedBody = rest.join('\n');
32
+ // Callers supply the stack one of two ways: embedded in the message (step
33
+ // executor / combined runtime render `${framing}\n${stack}`) or as an
34
+ // `errorStack` field next to a single-line framing (the run-failure log in
35
+ // runtime.ts). Promote the field when the message has no body of its own so
36
+ // the stack survives either way, and gets the same trimming either way.
37
+ const body = embeddedBody.trim()
38
+ ? embeddedBody
39
+ : (pickString(metadata ?? {}, 'errorStack') ?? '');
29
40
  const fields = renderStructuredFields(framing ?? '', body, metadata);
30
41
  const trimmedBody = trimStackBody(body);
31
42
  const lines = [`${prefix} ${framing ?? ''}`];
@@ -38,12 +49,13 @@ export function composeLogLine(prefix, message, metadata) {
38
49
  function renderStructuredFields(framing, body, metadata) {
39
50
  if (!metadata || Object.keys(metadata).length === 0)
40
51
  return null;
41
- // Drop fields that the message already encodes. We render framings and
42
- // stacks into the message string itself in step executor / combined runtime, so
43
- // repeating them here would be pure noise. A message with neither (a WARN
44
- // whose framing is a fixed sentence and whose `errorMessage` is the only
45
- // place the underlying error's text appears) keeps `errorMessage` and
46
- // renders it as its own row below.
52
+ // Drop fields the composed line already shows elsewhere. `errorStack` is
53
+ // always rendered as the body embedded in the message by the step
54
+ // executor / combined runtime, or promoted out of the field by
55
+ // composeLogLine so repeating it here would be pure noise. A message
56
+ // with neither (a WARN whose framing is a fixed sentence and whose
57
+ // `errorMessage` is the only place the underlying error's text appears)
58
+ // keeps `errorMessage` and renders it as its own row below.
47
59
  const redundant = new Set();
48
60
  redundant.add('errorStack');
49
61
  const errorMessage = pickString(metadata, 'errorMessage');
@@ -67,9 +79,16 @@ function renderStructuredFields(framing, body, metadata) {
67
79
  ]);
68
80
  const lines = [];
69
81
  // Header: error class + attribution badge.
82
+ //
83
+ // Without a badge the row is just the class name, which the stack header
84
+ // below (`Name: message`) already states — so it only earns its line when
85
+ // the stack doesn't open with that same name. A badge always earns its
86
+ // line: attribution is the one thing the stack cannot express, and the
87
+ // class stays attached to it as the thing being attributed.
70
88
  const errorName = pickString(metadata, 'errorName');
71
89
  const attribution = pickString(metadata, 'errorAttribution');
72
- if (errorName || attribution) {
90
+ const nameEchoedByStack = errorName !== null && stackHeaderNames(body, errorName);
91
+ if (attribution || (errorName && !nameEchoedByStack)) {
73
92
  const badge = attribution
74
93
  ? attribution === 'sdk'
75
94
  ? Ansi.magenta('sdk error')
@@ -216,6 +235,15 @@ function isFrameworkFrame(line) {
216
235
  }
217
236
  return false;
218
237
  }
238
+ /**
239
+ * True when the stack body opens with `<errorName>:` (or the bare name), the
240
+ * shape V8 gives `Error#stack`. Used to avoid restating the class in a
241
+ * header row directly above it.
242
+ */
243
+ function stackHeaderNames(body, errorName) {
244
+ const header = body.split('\n', 1)[0]?.trim() ?? '';
245
+ return header === errorName || header.startsWith(`${errorName}:`);
246
+ }
219
247
  function pickString(metadata, key) {
220
248
  const v = metadata[key];
221
249
  return typeof v === 'string' && v.length > 0 ? v : null;
@@ -254,4 +282,4 @@ function formatPassthroughValue(v) {
254
282
  return String(v);
255
283
  }
256
284
  }
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWZvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2ctZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBYyxFQUNkLE9BQWUsRUFDZixRQUE2QztJQUU3QyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV4QyxNQUFNLEtBQUssR0FBYSxDQUFDLEdBQUcsTUFBTSxJQUFJLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELElBQUksTUFBTTtRQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsSUFBSSxXQUFXO1FBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQzdCLE9BQWUsRUFDZixJQUFZLEVBQ1osUUFBNkM7SUFFN0MsSUFBSSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFB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QUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBYyxDQUFDLEVBQUU7UUFDbEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLE9BQU8sS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEUsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsQ0FBVTtJQUN4QyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQztpQkFDTCxLQUFLLENBQUMsSUFBSSxDQUFDO2lCQUNYLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBbnNpIGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMvYW5zaSc7XG5pbXBvcnQge1xuICBmb3JtYXRTdGVwTmFtZSxcbiAgZm9ybWF0V29ya2Zsb3dOYW1lLFxuICBwYXJzZVN0ZXBOYW1lLFxuICBwYXJzZVdvcmtmbG93TmFtZSxcbn0gZnJvbSAnQHdvcmtmbG93L3V0aWxzJztcblxuLyoqXG4gKiBTdHJ1Y3R1cmVkLWxvZyBjb21wb3NpdGlvbiBmb3IgYGNvbnNvbGUuZXJyb3JgIC8gYGNvbnNvbGUud2FybmAuIEVtaXRzXG4gKiBvbmUgc3RyaW5nIGluIHRocmVlIHNlY3Rpb25zIHNvIHRoZSBtb3N0IHVzZWZ1bCBpbmZvcm1hdGlvbiBpcyBhdCB0aGVcbiAqIHRvcCwgc3RhY2sgdHJhY2UgYXQgdGhlIGJvdHRvbTpcbiAqXG4gKiAgICAgW3dvcmtmbG93LXNka10gPGZyYW1pbmcgbGluZT5cbiAqICAgICAgIHVzZXIgZXJyb3IgwrcgRmF0YWxFcnJvclxuICogICAgICAgcnVuICAgIHdydW5f4oCmXG4gKiAgICAgICBzdGVwICAgc3RlcF/igKYgwrcgYWRkICguL3dvcmtmbG93cy94KVxuICogICAgICAgaGludDogIE1vdmUgdGhlIGNhbGwgdG8gYSBzdGVwIGZ1bmN0aW9uLlxuICogICAgIEZhdGFsRXJyb3I6IOKAplxuICogICAgICAgICBhdCDigKYgKHRyaW1tZWQgc3RhY2ssIGludGVybmFscyBjb2xsYXBzZWQpXG4gKlxuICogV2l0aG91dCB0aGlzIGNvbXBvc2l0aW9uLCBjYWxsZXJzIHBhc3NpbmcgYCR7ZnJhbWluZ31cXG4ke3N0YWNrfWAgYXMgdGhlXG4gKiBtZXNzYWdlIGFuZCBzdHJ1Y3R1cmVkIGZpZWxkcyBhcyB0aGUgbWV0YWRhdGEgb2JqZWN0IGdvdCBgdXRpbC5pbnNwZWN0YCdzXG4gKiBkZWZhdWx0IG9iamVjdCBkdW1wIGFwcGVuZGVkICphZnRlciogdGhlIHN0YWNrLCB3aGljaCBidXJpZXMgdGhlIHJ1biBJRFxuICogYW5kIGF0dHJpYnV0aW9uIGJhZGdlIHVuZGVyIDMwKyBsaW5lcyBvZiBgbm9kZV9tb2R1bGVzLy5wbnBtLy4uLmAgZnJhbWVzLlxuICpcbiAqIFRoZSBzYW1lIG1ldGFkYXRhIGlzIGFsc28gZW1pdHRlZCBhcyBzdHJ1Y3R1cmVkIE9UZWwgc3BhbiBldmVudHMgZnJvbVxuICogdGhlIGxvZ2dlciBpdHNlbGYsIHNvIGJhY2tlbmRzIHRoYXQgd2FudCBKU09OLXNoYXBlZCBkYXRhIHN0aWxsIGdldCBpdC5cbiAqIHdlYi93ZWItc2hhcmVkIGRvIG5vdCBjb25zdW1lIHN0ZGVyciBhdCBhbGw6IHRoZXkgcmVhZCBDQk9SL0pTT04gZXZlbnRcbiAqIHBheWxvYWRzIGZyb20gdGhlIFdvcmxkIGV2ZW50IGxvZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvc2VMb2dMaW5lKFxuICBwcmVmaXg6IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nLFxuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG4gIGNvbnN0IFtmcmFtaW5nLCAuLi5yZXN0XSA9IG1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBib2R5ID0gcmVzdC5qb2luKCdcXG4nKTtcbiAgY29uc3QgZmllbGRzID0gcmVuZGVyU3RydWN0dXJlZEZpZWxkcyhmcmFtaW5nID8/ICcnLCBib2R5LCBtZXRhZGF0YSk7XG4gIGNvbnN0IHRyaW1tZWRCb2R5ID0gdHJpbVN0YWNrQm9keShib2R5KTtcblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbYCR7cHJlZml4fSAke2ZyYW1pbmcgPz8gJyd9YF07XG4gIGlmIChmaWVsZHMpIGxpbmVzLnB1c2goZmllbGRzKTtcbiAgaWYgKHRyaW1tZWRCb2R5KSBsaW5lcy5wdXNoKHRyaW1tZWRCb2R5KTtcbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHJ1Y3R1cmVkRmllbGRzKFxuICBmcmFtaW5nOiBzdHJpbmcsXG4gIGJvZHk6IHN0cmluZyxcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFtZXRhZGF0YSB8fCBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAvLyBEcm9wIGZpZWxkcyB0aGF0IHRoZSBtZXNzYWdlIGFscmVhZHkgZW5jb2Rlcy4gV2UgcmVuZGVyIGZyYW1pbmdzIGFuZFxuICAvLyBzdGFja3MgaW50byB0aGUgbWVzc2FnZSBzdHJpbmcgaXRzZWxmIGluIHN0ZXAgZXhlY3V0b3IgLyBjb21iaW5lZCBydW50aW1lLCBzb1xuICAvLyByZXBlYXRpbmcgdGhlbSBoZXJlIHdvdWxkIGJlIHB1cmUgbm9pc2UuIEEgbWVzc2FnZSB3aXRoIG5laXRoZXIgKGEgV0FSTlxuICAvLyB3aG9zZSBmcmFtaW5nIGlzIGEgZml4ZWQgc2VudGVuY2UgYW5kIHdob3NlIGBlcnJvck1lc3NhZ2VgIGlzIHRoZSBvbmx5XG4gIC8vIHBsYWNlIHRoZSB1bmRlcmx5aW5nIGVycm9yJ3MgdGV4dCBhcHBlYXJzKSBrZWVwcyBgZXJyb3JNZXNzYWdlYCBhbmRcbiAgLy8gcmVuZGVycyBpdCBhcyBpdHMgb3duIHJvdyBiZWxvdy5cbiAgY29uc3QgcmVkdW5kYW50ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHJlZHVuZGFudC5hZGQoJ2Vycm9yU3RhY2snKTtcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yTWVzc2FnZScpO1xuICBpZiAoXG4gICAgZXJyb3JNZXNzYWdlICYmXG4gICAgKGZyYW1pbmcuaW5jbHVkZXMoZXJyb3JNZXNzYWdlKSB8fCBib2R5LmluY2x1ZGVzKGVycm9yTWVzc2FnZSkpXG4gICkge1xuICAgIHJlZHVuZGFudC5hZGQoJ2Vycm9yTWVzc2FnZScpO1xuICB9XG5cbiAgY29uc3Qgd2VsbEtub3duID0gbmV3IFNldChbXG4gICAgJ3dvcmtmbG93UnVuSWQnLFxuICAgICd3b3JrZmxvd05hbWUnLFxuICAgICdzdGVwSWQnLFxuICAgICdzdGVwTmFtZScsXG4gICAgJ2Vycm9yQXR0cmlidXRpb24nLFxuICAgICdlcnJvckNvZGUnLFxuICAgICdlcnJvck5hbWUnLFxuICAgICdlcnJvck1lc3NhZ2UnLFxuICAgICdlcnJvclN0YWNrJyxcbiAgICAnaGludCcsXG4gICAgJ2F0dGVtcHQnLFxuICAgICdyZXRyeUNvdW50JyxcbiAgXSk7XG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gSGVhZGVyOiBlcnJvciBjbGFzcyArIGF0dHJpYnV0aW9uIGJhZGdlLlxuICBjb25zdCBlcnJvck5hbWUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnZXJyb3JOYW1lJyk7XG4gIGNvbnN0IGF0dHJpYnV0aW9uID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yQXR0cmlidXRpb24nKTtcbiAgaWYgKGVycm9yTmFtZSB8fCBhdHRyaWJ1dGlvbikge1xuICAgIGNvbnN0IGJhZGdlID0gYXR0cmlidXRpb25cbiAgICAgID8gYXR0cmlidXRpb24gPT09ICdzZGsnXG4gICAgICAgID8gQW5zaS5tYWdlbnRhKCdzZGsgZXJyb3InKVxuICAgICAgICA6IEFuc2kucmVkKCd1c2VyIGVycm9yJylcbiAgICAgIDogJyc7XG4gICAgY29uc3QgY2xzID0gZXJyb3JOYW1lID8gQW5zaS5ib2xkKGVycm9yTmFtZSkgOiAnJztcbiAgICBjb25zdCBzZXAgPSBiYWRnZSAmJiBjbHMgPyBBbnNpLmRpbSgnIMK3ICcpIDogJyc7XG4gICAgbGluZXMucHVzaChgICAke2JhZGdlfSR7c2VwfSR7Y2xzfWApO1xuICB9XG5cbiAgLy8gSUQgKyBwYXJzZWQgZnJpZW5kbHktbmFtZSByb3dzLlxuICBjb25zdCBydW5JZCA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICd3b3JrZmxvd1J1bklkJyk7XG4gIGNvbnN0IHdmTmFtZSA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICd3b3JrZmxvd05hbWUnKTtcbiAgaWYgKHJ1bklkKSB7XG4gICAgbGluZXMucHVzaChmb3JtYXRJZFJvdygncnVuJywgcnVuSWQsIHdmTmFtZSwgZm9ybWF0V29ya2Zsb3dOYW1lKSk7XG4gIH0gZWxzZSBpZiAod2ZOYW1lKSB7XG4gICAgbGluZXMucHVzaChmb3JtYXRJZFJvdygncnVuJywgbnVsbCwgd2ZOYW1lLCBmb3JtYXRXb3JrZmxvd05hbWUpKTtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBJZCA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdzdGVwSWQnKTtcbiAgY29uc3Qgc3RlcE5hbWUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnc3RlcE5hbWUnKTtcbiAgaWYgKHN0ZXBJZCB8fCBzdGVwTmFtZSkge1xuICAgIGxpbmVzLnB1c2goZm9ybWF0SWRSb3coJ3N0ZXAnLCBzdGVwSWQsIHN0ZXBOYW1lLCBmb3JtYXRTdGVwTmFtZSkpO1xuICB9XG5cbiAgaWYgKG1ldGFkYXRhLmF0dGVtcHQgIT09IHVuZGVmaW5lZCB8fCBtZXRhZGF0YS5yZXRyeUNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBgYXR0ZW1wdGAgYW5kIGByZXRyeUNvdW50YCByZWFkIGFtYmlndW91c2x5IG5leHQgdG8gZWFjaCBvdGhlciAoaXNcbiAgICAvLyBcIjMgcmV0cmllc1wiIHRoZSBsaW1pdCBvciB3aGF0IGFscmVhZHkgaGFwcGVuZWQ/KS4gUmVuZGVyIHRoZSBsaW1pdFxuICAgIC8vIGFzIFwibWF4IHJldHJpZXNcIiB0byBtYWtlIHRoZSBib3VuZGFyeSBleHBsaWNpdCwgYW5kIGtlZXAgYGF0dGVtcHRgXG4gICAgLy8gYXMgdGhlIGNvdW50IG9mIHRvdGFsIGludm9jYXRpb25zIGluY2x1ZGluZyB0aGUgb3JpZ2luYWwuXG4gICAgY29uc3QgYSA9IG1ldGFkYXRhLmF0dGVtcHQ7XG4gICAgY29uc3QgciA9IG1ldGFkYXRhLnJldHJ5Q291bnQ7XG4gICAgaWYgKGEgIT09IHVuZGVmaW5lZCAmJiByICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgIGAgICR7a3ZLZXkoJ3JldHJ5Jyl9ICR7YX0gJHtBbnNpLmRpbSgnYXR0ZW1wdHMgwrcnKX0gJHtyfSAke0Fuc2kuZGltKCdtYXggcmV0cmllcycpfWBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgJHtrdktleSgncmV0cnknKX0gJHthfSAke0Fuc2kuZGltKCdhdHRlbXB0cycpfWApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGVycm9yQ29kZSA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdlcnJvckNvZGUnKTtcbiAgaWYgKGVycm9yQ29kZSAmJiBlcnJvckNvZGUgIT09IGVycm9yTmFtZSkge1xuICAgIGxpbmVzLnB1c2goYCAgJHtrdktleSgnY29kZScpfSAke0Fuc2kuZGltKGVycm9yQ29kZSl9YCk7XG4gIH1cblxuICBpZiAoZXJyb3JNZXNzYWdlICYmICFyZWR1bmRhbnQuaGFzKCdlcnJvck1lc3NhZ2UnKSkge1xuICAgIGxpbmVzLnB1c2goYCAgJHtrdktleSgnZXJyb3InKX0gJHtmb3JtYXRQYXNzdGhyb3VnaFZhbHVlKGVycm9yTWVzc2FnZSl9YCk7XG4gIH1cblxuICBjb25zdCBoaW50ID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2hpbnQnKTtcbiAgaWYgKGhpbnQpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7QW5zaS5oaW50KGhpbnQpfWApO1xuICB9XG5cbiAgLy8gU29ydGVkIHBhc3MtdGhyb3VnaCBmb3IgdW5rbm93biBmaWVsZHMuXG4gIGNvbnN0IHBhc3NUaHJvdWdoID0gT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpXG4gICAgLmZpbHRlcihcbiAgICAgIChbaywgdl0pID0+XG4gICAgICAgICF3ZWxsS25vd24uaGFzKGspICYmICFyZWR1bmRhbnQuaGFzKGspICYmIHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsXG4gICAgKVxuICAgIC5zb3J0KChbYV0sIFtiXSkgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgcGFzc1Rocm91Z2gpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoayl9ICR7Zm9ybWF0UGFzc3Rocm91Z2hWYWx1ZSh2KX1gKTtcbiAgfVxuXG4gIHJldHVybiBsaW5lcy5sZW5ndGggPyBsaW5lcy5qb2luKCdcXG4nKSA6IG51bGw7XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIHN0YWNrIGRvd24gdG8gZnJhbWVzIHRoZSB1c2VyIGNhbiBhY3Qgb24uIFY4IHN0YWNrcyBmb3Igb3VyXG4gKiBydW50aW1lIGVycm9ycyBsb29rIGxpa2U6XG4gKlxuICogICAgIE5hbWU6IG1lc3NhZ2VcbiAqICAgICAgICAgYXQgdXNlclN0ZXAgKC4vd29ya2Zsb3dzL2Zvby50czoxMjoxMSlcbiAqICAgICAgICAgYXQgPHVua25vd24+ICguLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9ydW50aW1lL3N0ZXAtZXhlY3V0b3IudHM6NTM1OjMyKVxuICogICAgICAgICBhdCA8dW5rbm93bj4gKC4uLi9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEDigKYv4oCmL2Jhc2Utc2VydmVyLmpzOjE0NTQ6OSlcbiAqICAgICAgICAgYXQgPHVua25vd24+ICguLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvcGVudGVsZW1ldHJ5K2FwaUDigKYv4oCmL2FwaS5qczo1NDQwKVxuICogICAgICAgICBhdCDigKYgKDE1IG1vcmUgZnJhbWVzIGludG8gTmV4dC5qcyAvIHBucG0gaW50ZXJuYWxzKVxuICpcbiAqIFR3by1wYXNzIHRyaW06XG4gKlxuICogICAxLiBEcm9wIGZyYW1ld29yay1pbnRlcm5hbCBmcmFtZXMgKGBub2RlX21vZHVsZXMvLnBucG0vYCwgYG5vZGU6aW50ZXJuYWwvYCxcbiAqICAgICAgVHVyYm9wYWNrLWJ1bmRsZWQgYG5vZGVfbW9kdWxlc19fcG5wbV8qYCAvIGBfbmV4dF9kaXN0XypgIGNodW5rcykuXG4gKiAgIDIuIENhcCB0aGUgc3Vydml2aW5nIGZyYW1lcyBhdCBgTUFYX1ZJU0lCTEVfRlJBTUVTYDogcGFzdCB0aGF0LCBldmVuXG4gKiAgICAgIFwidXNlci1pc2hcIiBmcmFtZXMgYXJlIHVzdWFsbHkgZGVlcCBhc3luYyB3cmFwcGluZyB0aGF0IGRvZXNuJ3QgaGVscFxuICogICAgICBwaW5wb2ludCB0aGUgdGhyb3cuIFRoZSB1c2VyIGNhbiBkcm9wIGludG8gdGhlIGluc3BlY3QgQ0xJIGZvciB0aGVcbiAqICAgICAgZnVsbCBzdGFjayBvbiBkZW1hbmQuXG4gKlxuICogRWFjaCBzdXBwcmVzc2VkIHJ1biBlbWl0cyBvbmUgc3VtbWFyeSBsaW5lIHNvIHBlb3BsZSBrbm93IGhvdyBtdWNoIHdhc1xuICogdHJpbW1lZC5cbiAqL1xuY29uc3QgTUFYX1ZJU0lCTEVfRlJBTUVTID0gNjtcblxuZnVuY3Rpb24gdHJpbVN0YWNrQm9keShib2R5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFib2R5KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgbGluZXMgPSBib2R5LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgZHJvcHBlZFJ1biA9IDA7XG4gIGxldCB2aXNpYmxlRnJhbWVDb3VudCA9IDA7XG4gIGxldCBjYXBwZWRGcmFtZXMgPSAwO1xuXG4gIGNvbnN0IGZsdXNoRHJvcHBlZCA9ICgpID0+IHtcbiAgICBpZiAoZHJvcHBlZFJ1biA+IDApIHtcbiAgICAgIG91dC5wdXNoKFxuICAgICAgICBBbnNpLmRpbShcbiAgICAgICAgICBgICAgICAgICDigKYgJHtkcm9wcGVkUnVufSBtb3JlICR7ZHJvcHBlZFJ1biA9PT0gMSA/ICdmcmFtZScgOiAnZnJhbWVzJ30gaW4gZnJhbWV3b3JrIGludGVybmFsc2BcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGRyb3BwZWRSdW4gPSAwO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICBjb25zdCBpc0ZyYW1lID0gbGluZS50cmltU3RhcnQoKS5zdGFydHNXaXRoKCdhdCAnKTtcbiAgICBpZiAoaXNGcmFtZSAmJiBpc0ZyYW1ld29ya0ZyYW1lKGxpbmUpKSB7XG4gICAgICBkcm9wcGVkUnVuKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGlzRnJhbWUgJiYgdmlzaWJsZUZyYW1lQ291bnQgPj0gTUFYX1ZJU0lCTEVfRlJBTUVTKSB7XG4gICAgICBjYXBwZWRGcmFtZXMrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmbHVzaERyb3BwZWQoKTtcbiAgICBvdXQucHVzaChsaW5lKTtcbiAgICBpZiAoaXNGcmFtZSkgdmlzaWJsZUZyYW1lQ291bnQrKztcbiAgfVxuICBmbHVzaERyb3BwZWQoKTtcbiAgaWYgKGNhcHBlZEZyYW1lcyA+IDApIHtcbiAgICBvdXQucHVzaChcbiAgICAgIEFuc2kuZGltKFxuICAgICAgICBgICAgICAgICDigKYgJHtjYXBwZWRGcmFtZXN9IG1vcmUgJHtjYXBwZWRGcmFtZXMgPT09IDEgPyAnZnJhbWUnIDogJ2ZyYW1lcyd9IChydW4gXFxgcG5wbSB3ZiBpbnNwZWN0IHJ1biA8aWQ+XFxgIGZvciB0aGUgZnVsbCBzdGFjaylgXG4gICAgICApXG4gICAgKTtcbiAgfVxuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBpc0ZyYW1ld29ya0ZyYW1lKGxpbmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBPbmx5IGF0LWZyYW1lcyBhcmUgY2FuZGlkYXRlcyBmb3Igc3RyaXBwaW5nLiBIZWFkZXIgbGluZXMgKGBOYW1lOiDigKZgKVxuICAvLyBhbmQgYXJiaXRyYXJ5IHRyYWlsaW5nIGNvbnRleHQgKGUuZy4gYGNvZGU6ICdVU0VSX0VSUk9SJ2ApIHBhc3MgdGhyb3VnaC5cbiAgY29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbVN0YXJ0KCk7XG4gIGlmICghdHJpbW1lZC5zdGFydHNXaXRoKCdhdCAnKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBub2RlOiogaW50ZXJuYWxzICh0aW1lcnMsIGFzeW5jIGhvb2tzLCB2bSwgZXRjLikgbmV2ZXIgaGVscCB1c2Vycy5cbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ25vZGU6aW50ZXJuYWwvJykpIHJldHVybiB0cnVlO1xuICAvLyBwbnBtLXJvb3RlZCBmcmFtZXdvcmtzIGluc3RhbGxlZCBhcyBub2RlX21vZHVsZXMgZGVwZW5kZW5jaWVzLlxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzLy5wbnBtLycpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVHVyYm9wYWNrL05leHQgYnVuZGxlIHRoZSBzYW1lIGZyYW1ld29yayBjb2RlIGludG8gY2h1bmtzIGxpa2VcbiAgLy8gYG5vZGVfbW9kdWxlc19fcG5wbV88aGFzaD4uXy5qc2AgYW5kIGA8Li4uPl9uZXh0X2Rpc3RfPGhhc2g+Ll8uanNgLFxuICAvLyBhbmQgZW1pdHMgTmV4dC5qcyBsb2FkZXIgcnVudGltZSBhcyBgMGR4Nl9uZXh0X2Rpc3RfPGhhc2g+Ll8uanNgLlxuICAvLyBUaGVzZSBhcmUgdGhlIGZyYW1lcyB0aGF0IHNob3cgdXAgYWZ0ZXIgVHVyYm9wYWNrIERDRSwgc2FtZSBpbnRlbnRcbiAgLy8gYXMgdGhlIHJhdyBgbm9kZV9tb2R1bGVzLy5wbnBtL2AgZmlsdGVyIGFib3ZlLlxuICBpZiAodHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzX19wbnBtXycpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ19uZXh0X2Rpc3RfJykpIHJldHVybiB0cnVlO1xuICAvLyBQbGFpbiBub2RlX21vZHVsZXMgKG5vbi1wbnBtIHNldHVwcykgZm9yIHRoZSBzYW1lIGtpbmRzIG9mIGZyYW1ld29ya3MuXG4gIGlmIChcbiAgICB0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvbmV4dC8nKSB8fFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy9Ab3BlbnRlbGVtZXRyeS8nKSB8fFxuICAgIHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy92aXRlc3QvJykgfHxcbiAgICB0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvQHZpdGVzdC8nKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBpY2tTdHJpbmcoXG4gIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAga2V5OiBzdHJpbmdcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB2ID0gbWV0YWRhdGFba2V5XTtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA+IDAgPyB2IDogbnVsbDtcbn1cblxuZnVuY3Rpb24ga3ZLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gQW5zaS5kaW0oa2V5LnBhZEVuZCg2KSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdElkUm93KFxuICBsYWJlbDogc3RyaW5nLFxuICBpZDogc3RyaW5nIHwgbnVsbCxcbiAgbmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgZm9ybWF0TmFtZTogKG46IHN0cmluZykgPT4gc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBpZENlbGwgPSBpZCA/IGlkIDogQW5zaS5kaW0oJ+KAlCcpO1xuICBjb25zdCBwYXJzZWQgPSBuYW1lXG4gICAgPyBsYWJlbCA9PT0gJ3J1bidcbiAgICAgID8gcGFyc2VXb3JrZmxvd05hbWUobmFtZSlcbiAgICAgIDogcGFyc2VTdGVwTmFtZShuYW1lKVxuICAgIDogbnVsbDtcbiAgY29uc3QgbmFtZUNlbGwgPSBwYXJzZWRcbiAgICA/IGAke0Fuc2kuZGltKCfCtycpfSAke2Zvcm1hdE5hbWUobmFtZSBhcyBzdHJpbmcpfWBcbiAgICA6ICcnO1xuICByZXR1cm4gYCAgJHtrdktleShsYWJlbCl9ICR7aWRDZWxsfSR7bmFtZUNlbGwgPyAnICcgKyBuYW1lQ2VsbCA6ICcnfWA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFBhc3N0aHJvdWdoVmFsdWUodjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodi5pbmNsdWRlcygnXFxuJykpIHtcbiAgICAgIHJldHVybiB2XG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLm1hcCgobGluZSwgaSkgPT4gKGkgPT09IDAgPyBsaW5lIDogYCAgICAgICAgICR7bGluZX1gKSlcbiAgICAgICAgLmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgICByZXR1cm4gdjtcbiAgfVxuICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIHJldHVybiBTdHJpbmcodik7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gU3RyaW5nKHYpO1xuICB9XG59XG4iXX0=
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWZvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2ctZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsTUFBYyxFQUNkLE9BQWUsRUFDZixRQUE2QztJQUU3QyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLDBFQUEwRTtJQUMxRSxzRUFBc0U7SUFDdEUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSx3RUFBd0U7SUFDeEUsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRTtRQUM5QixDQUFDLENBQUMsWUFBWTtRQUNkLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV4QyxNQUFNLEtBQUssR0FBYSxDQUFDLEdBQUcsTUFBTSxJQUFJLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELElBQUksTUFBTTtRQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxD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QUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDO2lCQUNMLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEFuc2kgZnJvbSAnQHdvcmtmbG93L2Vycm9ycy9hbnNpJztcbmltcG9ydCB7XG4gIGZvcm1hdFN0ZXBOYW1lLFxuICBmb3JtYXRXb3JrZmxvd05hbWUsXG4gIHBhcnNlU3RlcE5hbWUsXG4gIHBhcnNlV29ya2Zsb3dOYW1lLFxufSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuXG4vKipcbiAqIFN0cnVjdHVyZWQtbG9nIGNvbXBvc2l0aW9uIGZvciBgY29uc29sZS5lcnJvcmAgLyBgY29uc29sZS53YXJuYC4gRW1pdHNcbiAqIG9uZSBzdHJpbmcgaW4gdGhyZWUgc2VjdGlvbnMgc28gdGhlIG1vc3QgdXNlZnVsIGluZm9ybWF0aW9uIGlzIGF0IHRoZVxuICogdG9wLCBzdGFjayB0cmFjZSBhdCB0aGUgYm90dG9tOlxuICpcbiAqICAgICBbd29ya2Zsb3ctc2RrXSA8ZnJhbWluZyBsaW5lPlxuICogICAgICAgdXNlciBlcnJvciDCtyBGYXRhbEVycm9yXG4gKiAgICAgICBydW4gICAgd3J1bl/igKZcbiAqICAgICAgIHN0ZXAgICBzdGVwX+KApiDCtyBhZGQgKC4vd29ya2Zsb3dzL3gpXG4gKiAgICAgICBoaW50OiAgTW92ZSB0aGUgY2FsbCB0byBhIHN0ZXAgZnVuY3Rpb24uXG4gKiAgICAgRmF0YWxFcnJvcjog4oCmXG4gKiAgICAgICAgIGF0IOKApiAodHJpbW1lZCBzdGFjaywgaW50ZXJuYWxzIGNvbGxhcHNlZClcbiAqXG4gKiBUaGUgc3RhY2sgYm9keSBjb21lcyBmcm9tIHRoZSBtZXNzYWdlIHdoZW4gdGhlIGNhbGxlciBlbWJlZGRlZCBpdCB0aGVyZSxcbiAqIGFuZCBmcm9tIHRoZSBgZXJyb3JTdGFja2AgbWV0YWRhdGEgZmllbGQgb3RoZXJ3aXNlLlxuICpcbiAqIFdpdGhvdXQgdGhpcyBjb21wb3NpdGlvbiwgY2FsbGVycyBwYXNzaW5nIGAke2ZyYW1pbmd9XFxuJHtzdGFja31gIGFzIHRoZVxuICogbWVzc2FnZSBhbmQgc3RydWN0dXJlZCBmaWVsZHMgYXMgdGhlIG1ldGFkYXRhIG9iamVjdCBnb3QgYHV0aWwuaW5zcGVjdGAnc1xuICogZGVmYXVsdCBvYmplY3QgZHVtcCBhcHBlbmRlZCAqYWZ0ZXIqIHRoZSBzdGFjaywgd2hpY2ggYnVyaWVzIHRoZSBydW4gSURcbiAqIGFuZCBhdHRyaWJ1dGlvbiBiYWRnZSB1bmRlciAzMCsgbGluZXMgb2YgYG5vZGVfbW9kdWxlcy8ucG5wbS8uLi5gIGZyYW1lcy5cbiAqXG4gKiBUaGUgc2FtZSBtZXRhZGF0YSBpcyBhbHNvIGVtaXR0ZWQgYXMgc3RydWN0dXJlZCBPVGVsIHNwYW4gZXZlbnRzIGZyb21cbiAqIHRoZSBsb2dnZXIgaXRzZWxmLCBzbyBiYWNrZW5kcyB0aGF0IHdhbnQgSlNPTi1zaGFwZWQgZGF0YSBzdGlsbCBnZXQgaXQuXG4gKiB3ZWIvd2ViLXNoYXJlZCBkbyBub3QgY29uc3VtZSBzdGRlcnIgYXQgYWxsOiB0aGV5IHJlYWQgQ0JPUi9KU09OIGV2ZW50XG4gKiBwYXlsb2FkcyBmcm9tIHRoZSBXb3JsZCBldmVudCBsb2cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlTG9nTGluZShcbiAgcHJlZml4OiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcge1xuICBjb25zdCBbZnJhbWluZywgLi4ucmVzdF0gPSBtZXNzYWdlLnNwbGl0KCdcXG4nKTtcbiAgY29uc3QgZW1iZWRkZWRCb2R5ID0gcmVzdC5qb2luKCdcXG4nKTtcbiAgLy8gQ2FsbGVycyBzdXBwbHkgdGhlIHN0YWNrIG9uZSBvZiB0d28gd2F5czogZW1iZWRkZWQgaW4gdGhlIG1lc3NhZ2UgKHN0ZXBcbiAgLy8gZXhlY3V0b3IgLyBjb21iaW5lZCBydW50aW1lIHJlbmRlciBgJHtmcmFtaW5nfVxcbiR7c3RhY2t9YCkgb3IgYXMgYW5cbiAgLy8gYGVycm9yU3RhY2tgIGZpZWxkIG5leHQgdG8gYSBzaW5nbGUtbGluZSBmcmFtaW5nICh0aGUgcnVuLWZhaWx1cmUgbG9nIGluXG4gIC8vIHJ1bnRpbWUudHMpLiBQcm9tb3RlIHRoZSBmaWVsZCB3aGVuIHRoZSBtZXNzYWdlIGhhcyBubyBib2R5IG9mIGl0cyBvd24gc29cbiAgLy8gdGhlIHN0YWNrIHN1cnZpdmVzIGVpdGhlciB3YXksIGFuZCBnZXRzIHRoZSBzYW1lIHRyaW1taW5nIGVpdGhlciB3YXkuXG4gIGNvbnN0IGJvZHkgPSBlbWJlZGRlZEJvZHkudHJpbSgpXG4gICAgPyBlbWJlZGRlZEJvZHlcbiAgICA6IChwaWNrU3RyaW5nKG1ldGFkYXRhID8/IHt9LCAnZXJyb3JTdGFjaycpID8/ICcnKTtcbiAgY29uc3QgZmllbGRzID0gcmVuZGVyU3RydWN0dXJlZEZpZWxkcyhmcmFtaW5nID8/ICcnLCBib2R5LCBtZXRhZGF0YSk7XG4gIGNvbnN0IHRyaW1tZWRCb2R5ID0gdHJpbVN0YWNrQm9keShib2R5KTtcblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbYCR7cHJlZml4fSAke2ZyYW1pbmcgPz8gJyd9YF07XG4gIGlmIChmaWVsZHMpIGxpbmVzLnB1c2goZmllbGRzKTtcbiAgaWYgKHRyaW1tZWRCb2R5KSBsaW5lcy5wdXNoKHRyaW1tZWRCb2R5KTtcbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHJ1Y3R1cmVkRmllbGRzKFxuICBmcmFtaW5nOiBzdHJpbmcsXG4gIGJvZHk6IHN0cmluZyxcbiAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFtZXRhZGF0YSB8fCBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAvLyBEcm9wIGZpZWxkcyB0aGUgY29tcG9zZWQgbGluZSBhbHJlYWR5IHNob3dzIGVsc2V3aGVyZS4gYGVycm9yU3RhY2tgIGlzXG4gIC8vIGFsd2F5cyByZW5kZXJlZCBhcyB0aGUgYm9keSDigJQgZW1iZWRkZWQgaW4gdGhlIG1lc3NhZ2UgYnkgdGhlIHN0ZXBcbiAgLy8gZXhlY3V0b3IgLyBjb21iaW5lZCBydW50aW1lLCBvciBwcm9tb3RlZCBvdXQgb2YgdGhlIGZpZWxkIGJ5XG4gIC8vIGNvbXBvc2VMb2dMaW5lIOKAlCBzbyByZXBlYXRpbmcgaXQgaGVyZSB3b3VsZCBiZSBwdXJlIG5vaXNlLiBBIG1lc3NhZ2VcbiAgLy8gd2l0aCBuZWl0aGVyIChhIFdBUk4gd2hvc2UgZnJhbWluZyBpcyBhIGZpeGVkIHNlbnRlbmNlIGFuZCB3aG9zZVxuICAvLyBgZXJyb3JNZXNzYWdlYCBpcyB0aGUgb25seSBwbGFjZSB0aGUgdW5kZXJseWluZyBlcnJvcidzIHRleHQgYXBwZWFycylcbiAgLy8ga2VlcHMgYGVycm9yTWVzc2FnZWAgYW5kIHJlbmRlcnMgaXQgYXMgaXRzIG93biByb3cgYmVsb3cuXG4gIGNvbnN0IHJlZHVuZGFudCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICByZWR1bmRhbnQuYWRkKCdlcnJvclN0YWNrJyk7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdlcnJvck1lc3NhZ2UnKTtcbiAgaWYgKFxuICAgIGVycm9yTWVzc2FnZSAmJlxuICAgIChmcmFtaW5nLmluY2x1ZGVzKGVycm9yTWVzc2FnZSkgfHwgYm9keS5pbmNsdWRlcyhlcnJvck1lc3NhZ2UpKVxuICApIHtcbiAgICByZWR1bmRhbnQuYWRkKCdlcnJvck1lc3NhZ2UnKTtcbiAgfVxuXG4gIGNvbnN0IHdlbGxLbm93biA9IG5ldyBTZXQoW1xuICAgICd3b3JrZmxvd1J1bklkJyxcbiAgICAnd29ya2Zsb3dOYW1lJyxcbiAgICAnc3RlcElkJyxcbiAgICAnc3RlcE5hbWUnLFxuICAgICdlcnJvckF0dHJpYnV0aW9uJyxcbiAgICAnZXJyb3JDb2RlJyxcbiAgICAnZXJyb3JOYW1lJyxcbiAgICAnZXJyb3JNZXNzYWdlJyxcbiAgICAnZXJyb3JTdGFjaycsXG4gICAgJ2hpbnQnLFxuICAgICdhdHRlbXB0JyxcbiAgICAncmV0cnlDb3VudCcsXG4gIF0pO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIEhlYWRlcjogZXJyb3IgY2xhc3MgKyBhdHRyaWJ1dGlvbiBiYWRnZS5cbiAgLy9cbiAgLy8gV2l0aG91dCBhIGJhZGdlIHRoZSByb3cgaXMganVzdCB0aGUgY2xhc3MgbmFtZSwgd2hpY2ggdGhlIHN0YWNrIGhlYWRlclxuICAvLyBiZWxvdyAoYE5hbWU6IG1lc3NhZ2VgKSBhbHJlYWR5IHN0YXRlcyDigJQgc28gaXQgb25seSBlYXJucyBpdHMgbGluZSB3aGVuXG4gIC8vIHRoZSBzdGFjayBkb2Vzbid0IG9wZW4gd2l0aCB0aGF0IHNhbWUgbmFtZS4gQSBiYWRnZSBhbHdheXMgZWFybnMgaXRzXG4gIC8vIGxpbmU6IGF0dHJpYnV0aW9uIGlzIHRoZSBvbmUgdGhpbmcgdGhlIHN0YWNrIGNhbm5vdCBleHByZXNzLCBhbmQgdGhlXG4gIC8vIGNsYXNzIHN0YXlzIGF0dGFjaGVkIHRvIGl0IGFzIHRoZSB0aGluZyBiZWluZyBhdHRyaWJ1dGVkLlxuICBjb25zdCBlcnJvck5hbWUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnZXJyb3JOYW1lJyk7XG4gIGNvbnN0IGF0dHJpYnV0aW9uID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ2Vycm9yQXR0cmlidXRpb24nKTtcbiAgY29uc3QgbmFtZUVjaG9lZEJ5U3RhY2sgPVxuICAgIGVycm9yTmFtZSAhPT0gbnVsbCAmJiBzdGFja0hlYWRlck5hbWVzKGJvZHksIGVycm9yTmFtZSk7XG4gIGlmIChhdHRyaWJ1dGlvbiB8fCAoZXJyb3JOYW1lICYmICFuYW1lRWNob2VkQnlTdGFjaykpIHtcbiAgICBjb25zdCBiYWRnZSA9IGF0dHJpYnV0aW9uXG4gICAgICA/IGF0dHJpYnV0aW9uID09PSAnc2RrJ1xuICAgICAgICA/IEFuc2kubWFnZW50YSgnc2RrIGVycm9yJylcbiAgICAgICAgOiBBbnNpLnJlZCgndXNlciBlcnJvcicpXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGNscyA9IGVycm9yTmFtZSA/IEFuc2kuYm9sZChlcnJvck5hbWUpIDogJyc7XG4gICAgY29uc3Qgc2VwID0gYmFkZ2UgJiYgY2xzID8gQW5zaS5kaW0oJyDCtyAnKSA6ICcnO1xuICAgIGxpbmVzLnB1c2goYCAgJHtiYWRnZX0ke3NlcH0ke2Nsc31gKTtcbiAgfVxuXG4gIC8vIElEICsgcGFyc2VkIGZyaWVuZGx5LW5hbWUgcm93cy5cbiAgY29uc3QgcnVuSWQgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnd29ya2Zsb3dSdW5JZCcpO1xuICBjb25zdCB3Zk5hbWUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnd29ya2Zsb3dOYW1lJyk7XG4gIGlmIChydW5JZCkge1xuICAgIGxpbmVzLnB1c2goZm9ybWF0SWRSb3coJ3J1bicsIHJ1bklkLCB3Zk5hbWUsIGZvcm1hdFdvcmtmbG93TmFtZSkpO1xuICB9IGVsc2UgaWYgKHdmTmFtZSkge1xuICAgIGxpbmVzLnB1c2goZm9ybWF0SWRSb3coJ3J1bicsIG51bGwsIHdmTmFtZSwgZm9ybWF0V29ya2Zsb3dOYW1lKSk7XG4gIH1cblxuICBjb25zdCBzdGVwSWQgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnc3RlcElkJyk7XG4gIGNvbnN0IHN0ZXBOYW1lID0gcGlja1N0cmluZyhtZXRhZGF0YSwgJ3N0ZXBOYW1lJyk7XG4gIGlmIChzdGVwSWQgfHwgc3RlcE5hbWUpIHtcbiAgICBsaW5lcy5wdXNoKGZvcm1hdElkUm93KCdzdGVwJywgc3RlcElkLCBzdGVwTmFtZSwgZm9ybWF0U3RlcE5hbWUpKTtcbiAgfVxuXG4gIGlmIChtZXRhZGF0YS5hdHRlbXB0ICE9PSB1bmRlZmluZWQgfHwgbWV0YWRhdGEucmV0cnlDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gYGF0dGVtcHRgIGFuZCBgcmV0cnlDb3VudGAgcmVhZCBhbWJpZ3VvdXNseSBuZXh0IHRvIGVhY2ggb3RoZXIgKGlzXG4gICAgLy8gXCIzIHJldHJpZXNcIiB0aGUgbGltaXQgb3Igd2hhdCBhbHJlYWR5IGhhcHBlbmVkPykuIFJlbmRlciB0aGUgbGltaXRcbiAgICAvLyBhcyBcIm1heCByZXRyaWVzXCIgdG8gbWFrZSB0aGUgYm91bmRhcnkgZXhwbGljaXQsIGFuZCBrZWVwIGBhdHRlbXB0YFxuICAgIC8vIGFzIHRoZSBjb3VudCBvZiB0b3RhbCBpbnZvY2F0aW9ucyBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsLlxuICAgIGNvbnN0IGEgPSBtZXRhZGF0YS5hdHRlbXB0O1xuICAgIGNvbnN0IHIgPSBtZXRhZGF0YS5yZXRyeUNvdW50O1xuICAgIGlmIChhICE9PSB1bmRlZmluZWQgJiYgciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKFxuICAgICAgICBgICAke2t2S2V5KCdyZXRyeScpfSAke2F9ICR7QW5zaS5kaW0oJ2F0dGVtcHRzIMK3Jyl9ICR7cn0gJHtBbnNpLmRpbSgnbWF4IHJldHJpZXMnKX1gXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoJ3JldHJ5Jyl9ICR7YX0gJHtBbnNpLmRpbSgnYXR0ZW1wdHMnKX1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBlcnJvckNvZGUgPSBwaWNrU3RyaW5nKG1ldGFkYXRhLCAnZXJyb3JDb2RlJyk7XG4gIGlmIChlcnJvckNvZGUgJiYgZXJyb3JDb2RlICE9PSBlcnJvck5hbWUpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoJ2NvZGUnKX0gJHtBbnNpLmRpbShlcnJvckNvZGUpfWApO1xuICB9XG5cbiAgaWYgKGVycm9yTWVzc2FnZSAmJiAhcmVkdW5kYW50LmhhcygnZXJyb3JNZXNzYWdlJykpIHtcbiAgICBsaW5lcy5wdXNoKGAgICR7a3ZLZXkoJ2Vycm9yJyl9ICR7Zm9ybWF0UGFzc3Rocm91Z2hWYWx1ZShlcnJvck1lc3NhZ2UpfWApO1xuICB9XG5cbiAgY29uc3QgaGludCA9IHBpY2tTdHJpbmcobWV0YWRhdGEsICdoaW50Jyk7XG4gIGlmIChoaW50KSB7XG4gICAgbGluZXMucHVzaChgICAke0Fuc2kuaGludChoaW50KX1gKTtcbiAgfVxuXG4gIC8vIFNvcnRlZCBwYXNzLXRocm91Z2ggZm9yIHVua25vd24gZmllbGRzLlxuICBjb25zdCBwYXNzVGhyb3VnaCA9IE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKVxuICAgIC5maWx0ZXIoXG4gICAgICAoW2ssIHZdKSA9PlxuICAgICAgICAhd2VsbEtub3duLmhhcyhrKSAmJiAhcmVkdW5kYW50LmhhcyhrKSAmJiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbFxuICAgIClcbiAgICAuc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIHBhc3NUaHJvdWdoKSB7XG4gICAgbGluZXMucHVzaChgICAke2t2S2V5KGspfSAke2Zvcm1hdFBhc3N0aHJvdWdoVmFsdWUodil9YCk7XG4gIH1cblxuICByZXR1cm4gbGluZXMubGVuZ3RoID8gbGluZXMuam9pbignXFxuJykgOiBudWxsO1xufVxuXG4vKipcbiAqIFN0cmlwIHRoZSBzdGFjayBkb3duIHRvIGZyYW1lcyB0aGUgdXNlciBjYW4gYWN0IG9uLiBWOCBzdGFja3MgZm9yIG91clxuICogcnVudGltZSBlcnJvcnMgbG9vayBsaWtlOlxuICpcbiAqICAgICBOYW1lOiBtZXNzYWdlXG4gKiAgICAgICAgIGF0IHVzZXJTdGVwICguL3dvcmtmbG93cy9mb28udHM6MTI6MTEpXG4gKiAgICAgICAgIGF0IDx1bmtub3duPiAoLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcnVudGltZS9zdGVwLWV4ZWN1dG9yLnRzOjUzNTozMilcbiAqICAgICAgICAgYXQgPHVua25vd24+ICguLi4vbm9kZV9tb2R1bGVzLy5wbnBtL25leHRA4oCmL+KApi9iYXNlLXNlcnZlci5qczoxNDU0OjkpXG4gKiAgICAgICAgIGF0IDx1bmtub3duPiAoLi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab3BlbnRlbGVtZXRyeSthcGlA4oCmL+KApi9hcGkuanM6NTQ0MClcbiAqICAgICAgICAgYXQg4oCmICgxNSBtb3JlIGZyYW1lcyBpbnRvIE5leHQuanMgLyBwbnBtIGludGVybmFscylcbiAqXG4gKiBUd28tcGFzcyB0cmltOlxuICpcbiAqICAgMS4gRHJvcCBmcmFtZXdvcmstaW50ZXJuYWwgZnJhbWVzIChgbm9kZV9tb2R1bGVzLy5wbnBtL2AsIGBub2RlOmludGVybmFsL2AsXG4gKiAgICAgIFR1cmJvcGFjay1idW5kbGVkIGBub2RlX21vZHVsZXNfX3BucG1fKmAgLyBgX25leHRfZGlzdF8qYCBjaHVua3MpLlxuICogICAyLiBDYXAgdGhlIHN1cnZpdmluZyBmcmFtZXMgYXQgYE1BWF9WSVNJQkxFX0ZSQU1FU2A6IHBhc3QgdGhhdCwgZXZlblxuICogICAgICBcInVzZXItaXNoXCIgZnJhbWVzIGFyZSB1c3VhbGx5IGRlZXAgYXN5bmMgd3JhcHBpbmcgdGhhdCBkb2Vzbid0IGhlbHBcbiAqICAgICAgcGlucG9pbnQgdGhlIHRocm93LiBUaGUgdXNlciBjYW4gZHJvcCBpbnRvIHRoZSBpbnNwZWN0IENMSSBmb3IgdGhlXG4gKiAgICAgIGZ1bGwgc3RhY2sgb24gZGVtYW5kLlxuICpcbiAqIEVhY2ggc3VwcHJlc3NlZCBydW4gZW1pdHMgb25lIHN1bW1hcnkgbGluZSBzbyBwZW9wbGUga25vdyBob3cgbXVjaCB3YXNcbiAqIHRyaW1tZWQuXG4gKi9cbmNvbnN0IE1BWF9WSVNJQkxFX0ZSQU1FUyA9IDY7XG5cbmZ1bmN0aW9uIHRyaW1TdGFja0JvZHkoYm9keTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICghYm9keSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGxpbmVzID0gYm9keS5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGRyb3BwZWRSdW4gPSAwO1xuICBsZXQgdmlzaWJsZUZyYW1lQ291bnQgPSAwO1xuICBsZXQgY2FwcGVkRnJhbWVzID0gMDtcblxuICBjb25zdCBmbHVzaERyb3BwZWQgPSAoKSA9PiB7XG4gICAgaWYgKGRyb3BwZWRSdW4gPiAwKSB7XG4gICAgICBvdXQucHVzaChcbiAgICAgICAgQW5zaS5kaW0oXG4gICAgICAgICAgYCAgICAgICAg4oCmICR7ZHJvcHBlZFJ1bn0gbW9yZSAke2Ryb3BwZWRSdW4gPT09IDEgPyAnZnJhbWUnIDogJ2ZyYW1lcyd9IGluIGZyYW1ld29yayBpbnRlcm5hbHNgXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBkcm9wcGVkUnVuID0gMDtcbiAgICB9XG4gIH07XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgY29uc3QgaXNGcmFtZSA9IGxpbmUudHJpbVN0YXJ0KCkuc3RhcnRzV2l0aCgnYXQgJyk7XG4gICAgaWYgKGlzRnJhbWUgJiYgaXNGcmFtZXdvcmtGcmFtZShsaW5lKSkge1xuICAgICAgZHJvcHBlZFJ1bisrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChpc0ZyYW1lICYmIHZpc2libGVGcmFtZUNvdW50ID49IE1BWF9WSVNJQkxFX0ZSQU1FUykge1xuICAgICAgY2FwcGVkRnJhbWVzKys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZmx1c2hEcm9wcGVkKCk7XG4gICAgb3V0LnB1c2gobGluZSk7XG4gICAgaWYgKGlzRnJhbWUpIHZpc2libGVGcmFtZUNvdW50Kys7XG4gIH1cbiAgZmx1c2hEcm9wcGVkKCk7XG4gIGlmIChjYXBwZWRGcmFtZXMgPiAwKSB7XG4gICAgb3V0LnB1c2goXG4gICAgICBBbnNpLmRpbShcbiAgICAgICAgYCAgICAgICAg4oCmICR7Y2FwcGVkRnJhbWVzfSBtb3JlICR7Y2FwcGVkRnJhbWVzID09PSAxID8gJ2ZyYW1lJyA6ICdmcmFtZXMnfSAocnVuIFxcYHBucG0gd2YgaW5zcGVjdCBydW4gPGlkPlxcYCBmb3IgdGhlIGZ1bGwgc3RhY2spYFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG91dC5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gaXNGcmFtZXdvcmtGcmFtZShsaW5lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gT25seSBhdC1mcmFtZXMgYXJlIGNhbmRpZGF0ZXMgZm9yIHN0cmlwcGluZy4gSGVhZGVyIGxpbmVzIChgTmFtZTog4oCmYClcbiAgLy8gYW5kIGFyYml0cmFyeSB0cmFpbGluZyBjb250ZXh0IChlLmcuIGBjb2RlOiAnVVNFUl9FUlJPUidgKSBwYXNzIHRocm91Z2guXG4gIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW1TdGFydCgpO1xuICBpZiAoIXRyaW1tZWQuc3RhcnRzV2l0aCgnYXQgJykpIHJldHVybiBmYWxzZTtcbiAgLy8gbm9kZToqIGludGVybmFscyAodGltZXJzLCBhc3luYyBob29rcywgdm0sIGV0Yy4pIG5ldmVyIGhlbHAgdXNlcnMuXG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCdub2RlOmludGVybmFsLycpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gcG5wbS1yb290ZWQgZnJhbWV3b3JrcyBpbnN0YWxsZWQgYXMgbm9kZV9tb2R1bGVzIGRlcGVuZGVuY2llcy5cbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcy8ucG5wbS8nKSkgcmV0dXJuIHRydWU7XG4gIC8vIFR1cmJvcGFjay9OZXh0IGJ1bmRsZSB0aGUgc2FtZSBmcmFtZXdvcmsgY29kZSBpbnRvIGNodW5rcyBsaWtlXG4gIC8vIGBub2RlX21vZHVsZXNfX3BucG1fPGhhc2g+Ll8uanNgIGFuZCBgPC4uLj5fbmV4dF9kaXN0XzxoYXNoPi5fLmpzYCxcbiAgLy8gYW5kIGVtaXRzIE5leHQuanMgbG9hZGVyIHJ1bnRpbWUgYXMgYDBkeDZfbmV4dF9kaXN0XzxoYXNoPi5fLmpzYC5cbiAgLy8gVGhlc2UgYXJlIHRoZSBmcmFtZXMgdGhhdCBzaG93IHVwIGFmdGVyIFR1cmJvcGFjayBEQ0UsIHNhbWUgaW50ZW50XG4gIC8vIGFzIHRoZSByYXcgYG5vZGVfbW9kdWxlcy8ucG5wbS9gIGZpbHRlciBhYm92ZS5cbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlc19fcG5wbV8nKSkgcmV0dXJuIHRydWU7XG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCdfbmV4dF9kaXN0XycpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gUGxhaW4gbm9kZV9tb2R1bGVzIChub24tcG5wbSBzZXR1cHMpIGZvciB0aGUgc2FtZSBraW5kcyBvZiBmcmFtZXdvcmtzLlxuICBpZiAoXG4gICAgdHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzL25leHQvJykgfHxcbiAgICB0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvQG9wZW50ZWxlbWV0cnkvJykgfHxcbiAgICB0cmltbWVkLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvdml0ZXN0LycpIHx8XG4gICAgdHJpbW1lZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzL0B2aXRlc3QvJylcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFRydWUgd2hlbiB0aGUgc3RhY2sgYm9keSBvcGVucyB3aXRoIGA8ZXJyb3JOYW1lPjpgIChvciB0aGUgYmFyZSBuYW1lKSwgdGhlXG4gKiBzaGFwZSBWOCBnaXZlcyBgRXJyb3Ijc3RhY2tgLiBVc2VkIHRvIGF2b2lkIHJlc3RhdGluZyB0aGUgY2xhc3MgaW4gYVxuICogaGVhZGVyIHJvdyBkaXJlY3RseSBhYm92ZSBpdC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIZWFkZXJOYW1lcyhib2R5OiBzdHJpbmcsIGVycm9yTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGhlYWRlciA9IGJvZHkuc3BsaXQoJ1xcbicsIDEpWzBdPy50cmltKCkgPz8gJyc7XG4gIHJldHVybiBoZWFkZXIgPT09IGVycm9yTmFtZSB8fCBoZWFkZXIuc3RhcnRzV2l0aChgJHtlcnJvck5hbWV9OmApO1xufVxuXG5mdW5jdGlvbiBwaWNrU3RyaW5nKFxuICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGtleTogc3RyaW5nXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgdiA9IG1ldGFkYXRhW2tleV07XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdi5sZW5ndGggPiAwID8gdiA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGt2S2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIEFuc2kuZGltKGtleS5wYWRFbmQoNikpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRJZFJvdyhcbiAgbGFiZWw6IHN0cmluZyxcbiAgaWQ6IHN0cmluZyB8IG51bGwsXG4gIG5hbWU6IHN0cmluZyB8IG51bGwsXG4gIGZvcm1hdE5hbWU6IChuOiBzdHJpbmcpID0+IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgY29uc3QgaWRDZWxsID0gaWQgPyBpZCA6IEFuc2kuZGltKCfigJQnKTtcbiAgY29uc3QgcGFyc2VkID0gbmFtZVxuICAgID8gbGFiZWwgPT09ICdydW4nXG4gICAgICA/IHBhcnNlV29ya2Zsb3dOYW1lKG5hbWUpXG4gICAgICA6IHBhcnNlU3RlcE5hbWUobmFtZSlcbiAgICA6IG51bGw7XG4gIGNvbnN0IG5hbWVDZWxsID0gcGFyc2VkXG4gICAgPyBgJHtBbnNpLmRpbSgnwrcnKX0gJHtmb3JtYXROYW1lKG5hbWUgYXMgc3RyaW5nKX1gXG4gICAgOiAnJztcbiAgcmV0dXJuIGAgICR7a3ZLZXkobGFiZWwpfSAke2lkQ2VsbH0ke25hbWVDZWxsID8gJyAnICsgbmFtZUNlbGwgOiAnJ31gO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRQYXNzdGhyb3VnaFZhbHVlKHY6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHYuaW5jbHVkZXMoJ1xcbicpKSB7XG4gICAgICByZXR1cm4gdlxuICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgIC5tYXAoKGxpbmUsIGkpID0+IChpID09PSAwID8gbGluZSA6IGAgICAgICAgICAke2xpbmV9YCkpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH1cbiAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gU3RyaW5nKHYpO1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFN0cmluZyh2KTtcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/runtime/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/runtime/helpers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,EACL,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,KAAK,EACN,MAAM,iBAAiB,CAAC;AAezB,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,gCAAgC,CAAC;AAkBxC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,cAAc,CAWhB;AAWD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;;;;OAUG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,GACf,kBAAkB,GAAG,SAAS,CAMhC;AAYD;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,kBAAkB,EAC/B,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAmDf;AAED,MAAM,WAAW,kBAAkB;IACjC,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iGAAiG;IACjG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2ID,wBAAsB,WAAW,CAC/B,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAyF5B;AA0BD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,KAAK,EAAE,EACf,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACtB,IAAI,CAaN;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAiBxE;AAmCD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC,CAuGzB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE;IAAE,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC7D,IAAI,CAGN;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AA0BD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,KAAK,EAAE,EACf,MAAM,EAAE,SAAS,KAAK,EAAE,GACvB,MAAM,CAUR;AAED,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,KAAK,EAAE,EACf,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GACvD,iBAAiB,CAanB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,MAAM,GAAG,SAAS,CASzE;AAED,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,gBAAgB,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,KAAK,EAAE,GACvB,YAAY,GAAG,SAAS,CAkC1B;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAG3C;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC;IAAE,GAAG,EAAE,cAAc,CAAC;IAAC,GAAG,EAAE,YAAY,GAAG,SAAS,CAAA;CAAE,CAAC,CAejE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,KAAK,EAAE,GACvB,kBAAkB,CAGpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CA0BnD;AAED,4EAA4E;AAC5E,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,kBAAkB,EACxB,MAAM,CAAC,EAAE,iBAAiB,KACvB,OAAO,CAAC,WAAW,CAAC,CAAC;AAY1B;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,EAC5C,gBAAgB,CAAC,EAAE,MAAM,GACxB,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CA8BrC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC9C,KAAK,EAAE,MAAM,GACZ,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,IAAI,CACP,WAAW,EACX,OAAO,GAAG,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,YAAY,CACtE,GACA,kBAAkB,CAOpB;AAaD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,KAAK,EACZ,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,iBA0BxC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC5C,QAAQ,EAAE,SAAS;IACjB,OAAO,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1C,EAAE,GACF,OAAO,CAAC,IAAI,CAAC,CA8Df;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,IAAI,CAAA;CAAE;;cAS/D;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,WAAW,GAAG,MAAM,EAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAMjC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,WAAW,GAAG,MAAM,GAC5B,MAAM,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAQvC"}