@workflow/core 5.0.0-beta.40 → 5.0.0-beta.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/events-consumer.d.ts +127 -6
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +364 -50
- package/dist/private.d.ts +87 -18
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +116 -44
- package/dist/runtime/constants.d.ts +15 -1
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +22 -3
- package/dist/runtime/helpers.d.ts +116 -8
- package/dist/runtime/helpers.d.ts.map +1 -1
- package/dist/runtime/helpers.js +174 -2
- package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -1
- package/dist/runtime/quickjs-assets.generated.js +2 -2
- package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -1
- package/dist/runtime/quickjs-entrypoint.js +13 -5
- package/dist/runtime/quickjs-runtime.d.ts +36 -1
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -1
- package/dist/runtime/quickjs-runtime.js +613 -185
- package/dist/runtime/quickjs-serde.d.ts +107 -0
- package/dist/runtime/quickjs-serde.d.ts.map +1 -0
- package/dist/runtime/quickjs-serde.js +2098 -0
- package/dist/runtime/replay-budget.d.ts +5 -14
- package/dist/runtime/replay-budget.d.ts.map +1 -1
- package/dist/runtime/replay-budget.js +19 -72
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +5 -1
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +3 -4
- package/dist/runtime/start.js +2 -7
- package/dist/runtime/step-executor.d.ts.map +1 -1
- package/dist/runtime/step-executor.js +1 -4
- package/dist/runtime/suspension-handler.d.ts +7 -0
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +58 -11
- package/dist/runtime/world-compatibility.d.ts +15 -0
- package/dist/runtime/world-compatibility.d.ts.map +1 -1
- package/dist/runtime/world-compatibility.js +25 -5
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +474 -418
- package/dist/serialization/codec-devalue-vm.d.ts +7 -0
- package/dist/serialization/codec-devalue-vm.d.ts.map +1 -1
- package/dist/serialization/codec-devalue-vm.js +12 -1
- package/dist/serialization/workflow-vm.d.ts +8 -3
- package/dist/serialization/workflow-vm.d.ts.map +1 -1
- package/dist/serialization/workflow-vm.js +9 -4
- package/dist/step.js +2 -2
- package/dist/telemetry/semantic-conventions.d.ts +23 -0
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +18 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/index.d.ts.map +1 -1
- package/dist/vm/index.js +9 -6
- package/dist/workflow/abort-controller.d.ts.map +1 -1
- package/dist/workflow/abort-controller.js +4 -6
- package/dist/workflow/attribute-dispatcher.js +2 -2
- package/dist/workflow/hook.js +2 -2
- package/dist/workflow/sleep.js +2 -2
- package/dist/workflow.d.ts +10 -0
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +60 -19
- package/docs/how-it-works/event-sourcing.mdx +11 -3
- package/package.json +6 -6
- package/dist/correlation-id.d.ts +0 -109
- package/dist/correlation-id.d.ts.map +0 -1
- package/dist/correlation-id.js +0 -139
- package/dist/serialization/vm-bundle-entry.d.ts +0 -12
- package/dist/serialization/vm-bundle-entry.d.ts.map +0 -1
- package/dist/serialization/vm-bundle-entry.js +0 -58
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/core",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.41",
|
|
4
4
|
"description": "Core runtime and engine for Workflow SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"devalue": "5.9.0",
|
|
90
90
|
"ms": "2.1.3",
|
|
91
91
|
"nanoid": "5.1.6",
|
|
92
|
-
"quickjs-wasi": "3.
|
|
92
|
+
"quickjs-wasi": "3.4.0",
|
|
93
93
|
"seedrandom": "3.0.5",
|
|
94
94
|
"semver": "7.7.4",
|
|
95
95
|
"ulid": "~3.0.1",
|
|
@@ -97,9 +97,9 @@
|
|
|
97
97
|
"@workflow/errors": "5.0.0-beta.16",
|
|
98
98
|
"@workflow/serde": "5.0.0-beta.2",
|
|
99
99
|
"@workflow/utils": "5.0.0-beta.8",
|
|
100
|
-
"@workflow/world": "5.0.0-beta.
|
|
101
|
-
"@workflow/world-local": "5.0.0-beta.
|
|
102
|
-
"@workflow/world-vercel": "5.0.0-beta.
|
|
100
|
+
"@workflow/world": "5.0.0-beta.26",
|
|
101
|
+
"@workflow/world-local": "5.0.0-beta.35",
|
|
102
|
+
"@workflow/world-vercel": "5.0.0-beta.37"
|
|
103
103
|
},
|
|
104
104
|
"devDependencies": {
|
|
105
105
|
"@opentelemetry/api": "1.9.0",
|
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
}
|
|
125
125
|
},
|
|
126
126
|
"scripts": {
|
|
127
|
-
"build": "genversion --es6 src/version.ts && node scripts/build-
|
|
127
|
+
"build": "genversion --es6 src/version.ts && node scripts/build-quickjs-assets.js && tsc",
|
|
128
128
|
"dev": "genversion --es6 src/version.ts && tsc --watch",
|
|
129
129
|
"clean": "tsc --build --clean && rm -rf dist src/version.ts docs ||:",
|
|
130
130
|
"test": "cross-env WORKFLOW_TARGET_WORLD=local vitest run src",
|
package/dist/correlation-id.d.ts
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Correlation-id generation for the entity families a replay can create.
|
|
3
|
-
*
|
|
4
|
-
* Correlation ids are minted by the workflow VM and are the server's identity
|
|
5
|
-
* gate: a conditional create on the id is what makes a duplicate write from a
|
|
6
|
-
* second live replay idempotent instead of additive. That only works if two
|
|
7
|
-
* replays of the same run mint the same id for the same entity.
|
|
8
|
-
*
|
|
9
|
-
* Historically every id was the Nth draw of *one* monotonic ULID sequence per
|
|
10
|
-
* run, shared by steps, waits, hooks, attribute writes, abort controllers and
|
|
11
|
-
* stream ids alike. Every id was therefore an ordinal over the whole run, and a
|
|
12
|
-
* single extra draw of any kind renumbered every entity of every kind after it.
|
|
13
|
-
* Two replays that agreed about every step but disagreed about one `sleep()`
|
|
14
|
-
* would mint different ids for all subsequent steps, so their writes appended
|
|
15
|
-
* side by side instead of colliding, and the settled log ended up holding two
|
|
16
|
-
* names for one logical step. Only one of them can be consumed on the next
|
|
17
|
-
* replay; the other is fatal (`onUnconsumedEvent`).
|
|
18
|
-
*
|
|
19
|
-
* Per-kind sources narrow that coupling to one kind at a time: each family
|
|
20
|
-
* draws from its own independent incrementing sequence, so a disagreement about
|
|
21
|
-
* how many hooks or sleeps were created no longer renames steps.
|
|
22
|
-
*
|
|
23
|
-
* Ids stay syntactically valid ULIDs (10 Crockford characters of
|
|
24
|
-
* `fixedTimestamp` plus 16 of body), because correlation ids are validated as
|
|
25
|
-
* prefixed 26-char ULIDs by the backend, and they stay monotonic *within* a
|
|
26
|
-
* kind, because `hooks.list` is ordered by hook id.
|
|
27
|
-
*
|
|
28
|
-
* Monotonicity is per kind, and two kinds mint `hook_` ids (`hook` and
|
|
29
|
-
* `abortHook`), so listing order is only creation order *within* each of them.
|
|
30
|
-
* No world filters system hooks out of a listing, so a run that constructs an
|
|
31
|
-
* abort controller and also creates its own hooks lists that system hook at a
|
|
32
|
-
* position decided by its kind's hash rather than at its creation position.
|
|
33
|
-
* Order among the user's own hooks is unaffected.
|
|
34
|
-
*
|
|
35
|
-
* This does not make ids independent of *ordinal position within their own
|
|
36
|
-
* kind*: two replays that disagree about how many steps ran still mint
|
|
37
|
-
* different ids for the next step. That is a narrower failure than the shared
|
|
38
|
-
* sequence's, not an eliminated one.
|
|
39
|
-
*/
|
|
40
|
-
/** Entity families that draw correlation ids, each from its own sequence. */
|
|
41
|
-
export type CorrelationIdKind =
|
|
42
|
-
/** `step_` ids, one per step invocation. */
|
|
43
|
-
'step'
|
|
44
|
-
/** `wait_` ids, one per `sleep()`. */
|
|
45
|
-
| 'wait'
|
|
46
|
-
/** `hook_` ids for hooks created by workflow code. */
|
|
47
|
-
| 'hook'
|
|
48
|
-
/** `attr_` ids, one per attribute write. */
|
|
49
|
-
| 'attr'
|
|
50
|
-
/**
|
|
51
|
-
* The abort controller's own id, which becomes its stream name and hook
|
|
52
|
-
* token. Separate from `hook` so constructing an abort controller does not
|
|
53
|
-
* renumber later user hooks.
|
|
54
|
-
*/
|
|
55
|
-
| 'abort'
|
|
56
|
-
/** `hook_` ids for the internal system hook backing an abort controller. */
|
|
57
|
-
| 'abortHook'
|
|
58
|
-
/**
|
|
59
|
-
* Ids minted during serialization (`STABLE_ULID`): stream names, and an abort
|
|
60
|
-
* holder's stream name and `abrt_` hook token when it reaches serialization
|
|
61
|
-
* without an identity yet (`reduceAbortWithListener`), which is why `abort`
|
|
62
|
-
* above is not the only mint path for an abort identity. Not correlation ids,
|
|
63
|
-
* but they drew from the same shared sequence, so a workflow that serialized
|
|
64
|
-
* a stream renumbered every entity created after it.
|
|
65
|
-
*/
|
|
66
|
-
| 'stream';
|
|
67
|
-
/** Mints the ULID body of a correlation id for one entity family. */
|
|
68
|
-
export type CorrelationIdGenerator = (kind: CorrelationIdKind) => string;
|
|
69
|
-
/**
|
|
70
|
-
* Builds a replay's correlation-id generator.
|
|
71
|
-
*
|
|
72
|
-
* `perKind: false` returns the run's single shared monotonic sequence and
|
|
73
|
-
* ignores the kind entirely, so both schemes go through one call path and the
|
|
74
|
-
* flag is the only difference between them.
|
|
75
|
-
*/
|
|
76
|
-
export declare function createCorrelationIdGenerator(options: {
|
|
77
|
-
/**
|
|
78
|
-
* The run's replay-stable seed. Must not vary between replays of one run, and
|
|
79
|
-
* must differ between runs, or two runs would mint identical ids.
|
|
80
|
-
*/
|
|
81
|
-
seed: string;
|
|
82
|
-
fixedTimestamp: number;
|
|
83
|
-
/** The run's shared monotonic sequence, used as-is when `perKind` is false. */
|
|
84
|
-
positional: () => string;
|
|
85
|
-
perKind: boolean;
|
|
86
|
-
}): CorrelationIdGenerator;
|
|
87
|
-
/** Length of a ULID, exported so tests need not restate it. */
|
|
88
|
-
export declare const CORRELATION_ID_LENGTH: number;
|
|
89
|
-
/**
|
|
90
|
-
* Whether each entity family draws correlation ids from its own sequence rather
|
|
91
|
-
* than from one sequence shared by the whole run. Off unless opted in, so an SDK
|
|
92
|
-
* upgrade alone never moves a run between schemes.
|
|
93
|
-
*
|
|
94
|
-
* The invariant either way: a run must replay under the scheme that minted its
|
|
95
|
-
* ids. A replay under the other scheme mints ids its own earlier events do not
|
|
96
|
-
* carry, so it can consume none of them and fails the run. Two things can break
|
|
97
|
-
* it, and both are about turning the flag on rather than about upgrading:
|
|
98
|
-
*
|
|
99
|
-
* - Enabling it while runs are in flight. On Vercel, skew protection keeps a run
|
|
100
|
-
* on the deployment that started it, so a run only ever sees the value baked
|
|
101
|
-
* into its own deployment. Elsewhere (world-postgres, world-local, a
|
|
102
|
-
* self-hosted process) nothing pins a run to the code that started it, so
|
|
103
|
-
* enable it during a quiet window.
|
|
104
|
-
* - A rolling deploy that leaves both values live, which puts two schemes on one
|
|
105
|
-
* run concurrently — the side-by-side append this whole mechanism exists to
|
|
106
|
-
* avoid. Roll the value out to the whole fleet at once.
|
|
107
|
-
*/
|
|
108
|
-
export declare function isPerKindCorrelationIdsEnabled(): boolean;
|
|
109
|
-
//# sourceMappingURL=correlation-id.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"correlation-id.d.ts","sourceRoot":"","sources":["../src/correlation-id.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,6EAA6E;AAC7E,MAAM,MAAM,iBAAiB;AAC3B,4CAA4C;AAC1C,MAAM;AACR,sCAAsC;GACpC,MAAM;AACR,sDAAsD;GACpD,MAAM;AACR,4CAA4C;GAC1C,MAAM;AACR;;;;GAIG;GACD,OAAO;AACT,4EAA4E;GAC1E,WAAW;AACb;;;;;;;GAOG;GACD,QAAQ,CAAC;AAEb,qEAAqE;AACrE,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE,iBAAiB,KAAK,MAAM,CAAC;AAoGzE;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,sBAAsB,CAmBzB;AAED,+DAA+D;AAC/D,eAAO,MAAM,qBAAqB,QAA0B,CAAC;AAE7D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,8BAA8B,IAAI,OAAO,CAExD"}
|
package/dist/correlation-id.js
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { encodeTime, incrementBase32 } from 'ulid';
|
|
2
|
-
const CROCKFORD = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
|
|
3
|
-
/** Number of Crockford characters in a ULID's random component. */
|
|
4
|
-
const BODY_CHARS = 16;
|
|
5
|
-
/** Number of Crockford characters in a ULID's timestamp component. */
|
|
6
|
-
const TIME_CHARS = 10;
|
|
7
|
-
function mul32(a, b) {
|
|
8
|
-
return Math.imul(a, b) >>> 0;
|
|
9
|
-
}
|
|
10
|
-
function rotl32(value, shift) {
|
|
11
|
-
return ((value << shift) | (value >>> (32 - shift))) >>> 0;
|
|
12
|
-
}
|
|
13
|
-
/** MurmurHash3's 32-bit finalizer. */
|
|
14
|
-
function fmix32(input) {
|
|
15
|
-
let h = input >>> 0;
|
|
16
|
-
h = (h ^ (h >>> 16)) >>> 0;
|
|
17
|
-
h = mul32(h, 0x85ebca6b);
|
|
18
|
-
h = (h ^ (h >>> 13)) >>> 0;
|
|
19
|
-
h = mul32(h, 0xc2b2ae35);
|
|
20
|
-
return (h ^ (h >>> 16)) >>> 0;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Deterministic 128-bit hash of a string, as four 32-bit lanes.
|
|
24
|
-
*
|
|
25
|
-
* A MurmurHash3-style mixer over UTF-16 code units, rotating which lane absorbs
|
|
26
|
-
* each unit and diffusing across lanes at the end. Only determinism and
|
|
27
|
-
* diffusion matter here: this is not a cryptographic hash, claims no
|
|
28
|
-
* bit-compatibility with any reference implementation, and must not be used for
|
|
29
|
-
* anything that outlives a deployment's replays.
|
|
30
|
-
*/
|
|
31
|
-
function hash128(input) {
|
|
32
|
-
const lanes = [
|
|
33
|
-
0x9e3779b1, 0x85ebca77, 0xc2b2ae3d, 0x27d4eb2f,
|
|
34
|
-
];
|
|
35
|
-
for (let i = 0; i < input.length; i++) {
|
|
36
|
-
let k = input.charCodeAt(i) >>> 0;
|
|
37
|
-
k = mul32(k, 0xcc9e2d51);
|
|
38
|
-
k = rotl32(k, 15);
|
|
39
|
-
k = mul32(k, 0x1b873593);
|
|
40
|
-
const lane = i & 3;
|
|
41
|
-
let h = (lanes[lane] ^ k) >>> 0;
|
|
42
|
-
h = rotl32(h, 13);
|
|
43
|
-
lanes[lane] = (mul32(h, 5) + 0xe6546b64) >>> 0;
|
|
44
|
-
}
|
|
45
|
-
lanes[0] = (lanes[0] ^ input.length) >>> 0;
|
|
46
|
-
// Two passes so every lane depends on every other lane.
|
|
47
|
-
for (let pass = 0; pass < 2; pass++) {
|
|
48
|
-
for (let lane = 0; lane < 4; lane++) {
|
|
49
|
-
const previous = lanes[(lane + 3) & 3];
|
|
50
|
-
lanes[lane] = fmix32((lanes[lane] ^ previous) >>> 0);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return lanes;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Derives a kind's starting body: 80 bits of a 128-bit hash as 16 Crockford
|
|
57
|
-
* characters, most significant first.
|
|
58
|
-
*
|
|
59
|
-
* The leading character is confined to the alphabet's lower half so the body
|
|
60
|
-
* starts below half of the 80-bit space. `incrementBase32` throws on overflow,
|
|
61
|
-
* and without this a base that happened to land near `Z…Z` would make overflow
|
|
62
|
-
* reachable after few draws rather than after 2^79 of them.
|
|
63
|
-
*/
|
|
64
|
-
function deriveBody(seed, kind) {
|
|
65
|
-
const lanes = hash128(`${seed} correlation-kind ${kind}`);
|
|
66
|
-
const bytes = [
|
|
67
|
-
(lanes[0] >>> 24) & 0xff,
|
|
68
|
-
(lanes[0] >>> 16) & 0xff,
|
|
69
|
-
(lanes[0] >>> 8) & 0xff,
|
|
70
|
-
lanes[0] & 0xff,
|
|
71
|
-
(lanes[1] >>> 24) & 0xff,
|
|
72
|
-
(lanes[1] >>> 16) & 0xff,
|
|
73
|
-
(lanes[1] >>> 8) & 0xff,
|
|
74
|
-
lanes[1] & 0xff,
|
|
75
|
-
(lanes[2] >>> 24) & 0xff,
|
|
76
|
-
(lanes[2] >>> 16) & 0xff,
|
|
77
|
-
];
|
|
78
|
-
let body = '';
|
|
79
|
-
let accumulator = 0;
|
|
80
|
-
let bits = 0;
|
|
81
|
-
for (const byte of bytes) {
|
|
82
|
-
accumulator = ((accumulator << 8) | byte) >>> 0;
|
|
83
|
-
bits += 8;
|
|
84
|
-
while (bits >= 5) {
|
|
85
|
-
const index = (accumulator >>> (bits - 5)) & 31;
|
|
86
|
-
body += CROCKFORD[body.length === 0 ? index & 15 : index];
|
|
87
|
-
bits -= 5;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return body;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Builds a replay's correlation-id generator.
|
|
94
|
-
*
|
|
95
|
-
* `perKind: false` returns the run's single shared monotonic sequence and
|
|
96
|
-
* ignores the kind entirely, so both schemes go through one call path and the
|
|
97
|
-
* flag is the only difference between them.
|
|
98
|
-
*/
|
|
99
|
-
export function createCorrelationIdGenerator(options) {
|
|
100
|
-
const { seed, fixedTimestamp, positional, perKind } = options;
|
|
101
|
-
if (!perKind) {
|
|
102
|
-
return positional;
|
|
103
|
-
}
|
|
104
|
-
const time = encodeTime(fixedTimestamp, TIME_CHARS);
|
|
105
|
-
const bodies = new Map();
|
|
106
|
-
return (kind) => {
|
|
107
|
-
const previous = bodies.get(kind);
|
|
108
|
-
const body = previous === undefined
|
|
109
|
-
? deriveBody(seed, kind)
|
|
110
|
-
: incrementBase32(previous);
|
|
111
|
-
bodies.set(kind, body);
|
|
112
|
-
return `${time}${body}`;
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
/** Length of a ULID, exported so tests need not restate it. */
|
|
116
|
-
export const CORRELATION_ID_LENGTH = TIME_CHARS + BODY_CHARS;
|
|
117
|
-
/**
|
|
118
|
-
* Whether each entity family draws correlation ids from its own sequence rather
|
|
119
|
-
* than from one sequence shared by the whole run. Off unless opted in, so an SDK
|
|
120
|
-
* upgrade alone never moves a run between schemes.
|
|
121
|
-
*
|
|
122
|
-
* The invariant either way: a run must replay under the scheme that minted its
|
|
123
|
-
* ids. A replay under the other scheme mints ids its own earlier events do not
|
|
124
|
-
* carry, so it can consume none of them and fails the run. Two things can break
|
|
125
|
-
* it, and both are about turning the flag on rather than about upgrading:
|
|
126
|
-
*
|
|
127
|
-
* - Enabling it while runs are in flight. On Vercel, skew protection keeps a run
|
|
128
|
-
* on the deployment that started it, so a run only ever sees the value baked
|
|
129
|
-
* into its own deployment. Elsewhere (world-postgres, world-local, a
|
|
130
|
-
* self-hosted process) nothing pins a run to the code that started it, so
|
|
131
|
-
* enable it during a quiet window.
|
|
132
|
-
* - A rolling deploy that leaves both values live, which puts two schemes on one
|
|
133
|
-
* run concurrently — the side-by-side append this whole mechanism exists to
|
|
134
|
-
* avoid. Roll the value out to the whole fleet at once.
|
|
135
|
-
*/
|
|
136
|
-
export function isPerKindCorrelationIdsEnabled() {
|
|
137
|
-
return process.env.WORKFLOW_PER_KIND_CORRELATION_IDS === '1';
|
|
138
|
-
}
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ycmVsYXRpb24taWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29ycmVsYXRpb24taWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUF5RW5ELE1BQU0sU0FBUyxHQUFHLGtDQUFrQyxDQUFDO0FBRXJELG1FQUFtRTtBQUNuRSxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFFdEIsc0VBQXNFO0FBQ3RFLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUV0QixTQUFTLEtBQUssQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsU0FBUyxNQUFNLENBQUMsS0FBYSxFQUFFLEtBQWE7SUFDMUMsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELHNDQUFzQztBQUN0QyxTQUFTLE1BQU0sQ0FBQyxLQUFhO0lBQzNCLElBQUksQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6QixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsT0FBTyxDQUFDLEtBQWE7SUFDNUIsTUFBTSxLQUFLLEdBQXFDO1FBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7S0FDL0MsQ0FBQztJQUNGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDekIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLHdEQUF3RDtJQUN4RCxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7UUFDcEMsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2QyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxJQUFZLEVBQUUsSUFBdUI7SUFDdkQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxxQkFBcUIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxRCxNQUFNLEtBQUssR0FBRztRQUNaLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUk7UUFDeEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSTtRQUN4QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJO1FBQ3ZCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO1FBQ2YsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSTtRQUN4QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJO1FBQ3hCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUk7UUFDdkIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUk7UUFDZixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJO1FBQ3hCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUk7S0FDekIsQ0FBQztJQUNGLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNkLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNwQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ1YsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxXQUFXLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDaEQsSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUQsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUFDLE9BVTVDO0lBQ0MsTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUU5RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBNkIsQ0FBQztJQUVwRCxPQUFPLENBQUMsSUFBdUIsRUFBRSxFQUFFO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsTUFBTSxJQUFJLEdBQ1IsUUFBUSxLQUFLLFNBQVM7WUFDcEIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkIsT0FBTyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFFN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sVUFBVSw4QkFBOEI7SUFDNUMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxLQUFLLEdBQUcsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW5jb2RlVGltZSwgaW5jcmVtZW50QmFzZTMyIH0gZnJvbSAndWxpZCc7XG5cbi8qKlxuICogQ29ycmVsYXRpb24taWQgZ2VuZXJhdGlvbiBmb3IgdGhlIGVudGl0eSBmYW1pbGllcyBhIHJlcGxheSBjYW4gY3JlYXRlLlxuICpcbiAqIENvcnJlbGF0aW9uIGlkcyBhcmUgbWludGVkIGJ5IHRoZSB3b3JrZmxvdyBWTSBhbmQgYXJlIHRoZSBzZXJ2ZXIncyBpZGVudGl0eVxuICogZ2F0ZTogYSBjb25kaXRpb25hbCBjcmVhdGUgb24gdGhlIGlkIGlzIHdoYXQgbWFrZXMgYSBkdXBsaWNhdGUgd3JpdGUgZnJvbSBhXG4gKiBzZWNvbmQgbGl2ZSByZXBsYXkgaWRlbXBvdGVudCBpbnN0ZWFkIG9mIGFkZGl0aXZlLiBUaGF0IG9ubHkgd29ya3MgaWYgdHdvXG4gKiByZXBsYXlzIG9mIHRoZSBzYW1lIHJ1biBtaW50IHRoZSBzYW1lIGlkIGZvciB0aGUgc2FtZSBlbnRpdHkuXG4gKlxuICogSGlzdG9yaWNhbGx5IGV2ZXJ5IGlkIHdhcyB0aGUgTnRoIGRyYXcgb2YgKm9uZSogbW9ub3RvbmljIFVMSUQgc2VxdWVuY2UgcGVyXG4gKiBydW4sIHNoYXJlZCBieSBzdGVwcywgd2FpdHMsIGhvb2tzLCBhdHRyaWJ1dGUgd3JpdGVzLCBhYm9ydCBjb250cm9sbGVycyBhbmRcbiAqIHN0cmVhbSBpZHMgYWxpa2UuIEV2ZXJ5IGlkIHdhcyB0aGVyZWZvcmUgYW4gb3JkaW5hbCBvdmVyIHRoZSB3aG9sZSBydW4sIGFuZCBhXG4gKiBzaW5nbGUgZXh0cmEgZHJhdyBvZiBhbnkga2luZCByZW51bWJlcmVkIGV2ZXJ5IGVudGl0eSBvZiBldmVyeSBraW5kIGFmdGVyIGl0LlxuICogVHdvIHJlcGxheXMgdGhhdCBhZ3JlZWQgYWJvdXQgZXZlcnkgc3RlcCBidXQgZGlzYWdyZWVkIGFib3V0IG9uZSBgc2xlZXAoKWBcbiAqIHdvdWxkIG1pbnQgZGlmZmVyZW50IGlkcyBmb3IgYWxsIHN1YnNlcXVlbnQgc3RlcHMsIHNvIHRoZWlyIHdyaXRlcyBhcHBlbmRlZFxuICogc2lkZSBieSBzaWRlIGluc3RlYWQgb2YgY29sbGlkaW5nLCBhbmQgdGhlIHNldHRsZWQgbG9nIGVuZGVkIHVwIGhvbGRpbmcgdHdvXG4gKiBuYW1lcyBmb3Igb25lIGxvZ2ljYWwgc3RlcC4gT25seSBvbmUgb2YgdGhlbSBjYW4gYmUgY29uc3VtZWQgb24gdGhlIG5leHRcbiAqIHJlcGxheTsgdGhlIG90aGVyIGlzIGZhdGFsIChgb25VbmNvbnN1bWVkRXZlbnRgKS5cbiAqXG4gKiBQZXIta2luZCBzb3VyY2VzIG5hcnJvdyB0aGF0IGNvdXBsaW5nIHRvIG9uZSBraW5kIGF0IGEgdGltZTogZWFjaCBmYW1pbHlcbiAqIGRyYXdzIGZyb20gaXRzIG93biBpbmRlcGVuZGVudCBpbmNyZW1lbnRpbmcgc2VxdWVuY2UsIHNvIGEgZGlzYWdyZWVtZW50IGFib3V0XG4gKiBob3cgbWFueSBob29rcyBvciBzbGVlcHMgd2VyZSBjcmVhdGVkIG5vIGxvbmdlciByZW5hbWVzIHN0ZXBzLlxuICpcbiAqIElkcyBzdGF5IHN5bnRhY3RpY2FsbHkgdmFsaWQgVUxJRHMgKDEwIENyb2NrZm9yZCBjaGFyYWN0ZXJzIG9mXG4gKiBgZml4ZWRUaW1lc3RhbXBgIHBsdXMgMTYgb2YgYm9keSksIGJlY2F1c2UgY29ycmVsYXRpb24gaWRzIGFyZSB2YWxpZGF0ZWQgYXNcbiAqIHByZWZpeGVkIDI2LWNoYXIgVUxJRHMgYnkgdGhlIGJhY2tlbmQsIGFuZCB0aGV5IHN0YXkgbW9ub3RvbmljICp3aXRoaW4qIGFcbiAqIGtpbmQsIGJlY2F1c2UgYGhvb2tzLmxpc3RgIGlzIG9yZGVyZWQgYnkgaG9vayBpZC5cbiAqXG4gKiBNb25vdG9uaWNpdHkgaXMgcGVyIGtpbmQsIGFuZCB0d28ga2luZHMgbWludCBgaG9va19gIGlkcyAoYGhvb2tgIGFuZFxuICogYGFib3J0SG9va2ApLCBzbyBsaXN0aW5nIG9yZGVyIGlzIG9ubHkgY3JlYXRpb24gb3JkZXIgKndpdGhpbiogZWFjaCBvZiB0aGVtLlxuICogTm8gd29ybGQgZmlsdGVycyBzeXN0ZW0gaG9va3Mgb3V0IG9mIGEgbGlzdGluZywgc28gYSBydW4gdGhhdCBjb25zdHJ1Y3RzIGFuXG4gKiBhYm9ydCBjb250cm9sbGVyIGFuZCBhbHNvIGNyZWF0ZXMgaXRzIG93biBob29rcyBsaXN0cyB0aGF0IHN5c3RlbSBob29rIGF0IGFcbiAqIHBvc2l0aW9uIGRlY2lkZWQgYnkgaXRzIGtpbmQncyBoYXNoIHJhdGhlciB0aGFuIGF0IGl0cyBjcmVhdGlvbiBwb3NpdGlvbi5cbiAqIE9yZGVyIGFtb25nIHRoZSB1c2VyJ3Mgb3duIGhvb2tzIGlzIHVuYWZmZWN0ZWQuXG4gKlxuICogVGhpcyBkb2VzIG5vdCBtYWtlIGlkcyBpbmRlcGVuZGVudCBvZiAqb3JkaW5hbCBwb3NpdGlvbiB3aXRoaW4gdGhlaXIgb3duXG4gKiBraW5kKjogdHdvIHJlcGxheXMgdGhhdCBkaXNhZ3JlZSBhYm91dCBob3cgbWFueSBzdGVwcyByYW4gc3RpbGwgbWludFxuICogZGlmZmVyZW50IGlkcyBmb3IgdGhlIG5leHQgc3RlcC4gVGhhdCBpcyBhIG5hcnJvd2VyIGZhaWx1cmUgdGhhbiB0aGUgc2hhcmVkXG4gKiBzZXF1ZW5jZSdzLCBub3QgYW4gZWxpbWluYXRlZCBvbmUuXG4gKi9cblxuLyoqIEVudGl0eSBmYW1pbGllcyB0aGF0IGRyYXcgY29ycmVsYXRpb24gaWRzLCBlYWNoIGZyb20gaXRzIG93biBzZXF1ZW5jZS4gKi9cbmV4cG9ydCB0eXBlIENvcnJlbGF0aW9uSWRLaW5kID1cbiAgLyoqIGBzdGVwX2AgaWRzLCBvbmUgcGVyIHN0ZXAgaW52b2NhdGlvbi4gKi9cbiAgfCAnc3RlcCdcbiAgLyoqIGB3YWl0X2AgaWRzLCBvbmUgcGVyIGBzbGVlcCgpYC4gKi9cbiAgfCAnd2FpdCdcbiAgLyoqIGBob29rX2AgaWRzIGZvciBob29rcyBjcmVhdGVkIGJ5IHdvcmtmbG93IGNvZGUuICovXG4gIHwgJ2hvb2snXG4gIC8qKiBgYXR0cl9gIGlkcywgb25lIHBlciBhdHRyaWJ1dGUgd3JpdGUuICovXG4gIHwgJ2F0dHInXG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgY29udHJvbGxlcidzIG93biBpZCwgd2hpY2ggYmVjb21lcyBpdHMgc3RyZWFtIG5hbWUgYW5kIGhvb2tcbiAgICogdG9rZW4uIFNlcGFyYXRlIGZyb20gYGhvb2tgIHNvIGNvbnN0cnVjdGluZyBhbiBhYm9ydCBjb250cm9sbGVyIGRvZXMgbm90XG4gICAqIHJlbnVtYmVyIGxhdGVyIHVzZXIgaG9va3MuXG4gICAqL1xuICB8ICdhYm9ydCdcbiAgLyoqIGBob29rX2AgaWRzIGZvciB0aGUgaW50ZXJuYWwgc3lzdGVtIGhvb2sgYmFja2luZyBhbiBhYm9ydCBjb250cm9sbGVyLiAqL1xuICB8ICdhYm9ydEhvb2snXG4gIC8qKlxuICAgKiBJZHMgbWludGVkIGR1cmluZyBzZXJpYWxpemF0aW9uIChgU1RBQkxFX1VMSURgKTogc3RyZWFtIG5hbWVzLCBhbmQgYW4gYWJvcnRcbiAgICogaG9sZGVyJ3Mgc3RyZWFtIG5hbWUgYW5kIGBhYnJ0X2AgaG9vayB0b2tlbiB3aGVuIGl0IHJlYWNoZXMgc2VyaWFsaXphdGlvblxuICAgKiB3aXRob3V0IGFuIGlkZW50aXR5IHlldCAoYHJlZHVjZUFib3J0V2l0aExpc3RlbmVyYCksIHdoaWNoIGlzIHdoeSBgYWJvcnRgXG4gICAqIGFib3ZlIGlzIG5vdCB0aGUgb25seSBtaW50IHBhdGggZm9yIGFuIGFib3J0IGlkZW50aXR5LiBOb3QgY29ycmVsYXRpb24gaWRzLFxuICAgKiBidXQgdGhleSBkcmV3IGZyb20gdGhlIHNhbWUgc2hhcmVkIHNlcXVlbmNlLCBzbyBhIHdvcmtmbG93IHRoYXQgc2VyaWFsaXplZFxuICAgKiBhIHN0cmVhbSByZW51bWJlcmVkIGV2ZXJ5IGVudGl0eSBjcmVhdGVkIGFmdGVyIGl0LlxuICAgKi9cbiAgfCAnc3RyZWFtJztcblxuLyoqIE1pbnRzIHRoZSBVTElEIGJvZHkgb2YgYSBjb3JyZWxhdGlvbiBpZCBmb3Igb25lIGVudGl0eSBmYW1pbHkuICovXG5leHBvcnQgdHlwZSBDb3JyZWxhdGlvbklkR2VuZXJhdG9yID0gKGtpbmQ6IENvcnJlbGF0aW9uSWRLaW5kKSA9PiBzdHJpbmc7XG5cbmNvbnN0IENST0NLRk9SRCA9ICcwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWic7XG5cbi8qKiBOdW1iZXIgb2YgQ3JvY2tmb3JkIGNoYXJhY3RlcnMgaW4gYSBVTElEJ3MgcmFuZG9tIGNvbXBvbmVudC4gKi9cbmNvbnN0IEJPRFlfQ0hBUlMgPSAxNjtcblxuLyoqIE51bWJlciBvZiBDcm9ja2ZvcmQgY2hhcmFjdGVycyBpbiBhIFVMSUQncyB0aW1lc3RhbXAgY29tcG9uZW50LiAqL1xuY29uc3QgVElNRV9DSEFSUyA9IDEwO1xuXG5mdW5jdGlvbiBtdWwzMihhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLmltdWwoYSwgYikgPj4+IDA7XG59XG5cbmZ1bmN0aW9uIHJvdGwzMih2YWx1ZTogbnVtYmVyLCBzaGlmdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuICgodmFsdWUgPDwgc2hpZnQpIHwgKHZhbHVlID4+PiAoMzIgLSBzaGlmdCkpKSA+Pj4gMDtcbn1cblxuLyoqIE11cm11ckhhc2gzJ3MgMzItYml0IGZpbmFsaXplci4gKi9cbmZ1bmN0aW9uIGZtaXgzMihpbnB1dDogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IGggPSBpbnB1dCA+Pj4gMDtcbiAgaCA9IChoIF4gKGggPj4+IDE2KSkgPj4+IDA7XG4gIGggPSBtdWwzMihoLCAweDg1ZWJjYTZiKTtcbiAgaCA9IChoIF4gKGggPj4+IDEzKSkgPj4+IDA7XG4gIGggPSBtdWwzMihoLCAweGMyYjJhZTM1KTtcbiAgcmV0dXJuIChoIF4gKGggPj4+IDE2KSkgPj4+IDA7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5pc3RpYyAxMjgtYml0IGhhc2ggb2YgYSBzdHJpbmcsIGFzIGZvdXIgMzItYml0IGxhbmVzLlxuICpcbiAqIEEgTXVybXVySGFzaDMtc3R5bGUgbWl4ZXIgb3ZlciBVVEYtMTYgY29kZSB1bml0cywgcm90YXRpbmcgd2hpY2ggbGFuZSBhYnNvcmJzXG4gKiBlYWNoIHVuaXQgYW5kIGRpZmZ1c2luZyBhY3Jvc3MgbGFuZXMgYXQgdGhlIGVuZC4gT25seSBkZXRlcm1pbmlzbSBhbmRcbiAqIGRpZmZ1c2lvbiBtYXR0ZXIgaGVyZTogdGhpcyBpcyBub3QgYSBjcnlwdG9ncmFwaGljIGhhc2gsIGNsYWltcyBub1xuICogYml0LWNvbXBhdGliaWxpdHkgd2l0aCBhbnkgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLCBhbmQgbXVzdCBub3QgYmUgdXNlZCBmb3JcbiAqIGFueXRoaW5nIHRoYXQgb3V0bGl2ZXMgYSBkZXBsb3ltZW50J3MgcmVwbGF5cy5cbiAqL1xuZnVuY3Rpb24gaGFzaDEyOChpbnB1dDogc3RyaW5nKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBsYW5lczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgMHg5ZTM3NzliMSwgMHg4NWViY2E3NywgMHhjMmIyYWUzZCwgMHgyN2Q0ZWIyZixcbiAgXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGxldCBrID0gaW5wdXQuY2hhckNvZGVBdChpKSA+Pj4gMDtcbiAgICBrID0gbXVsMzIoaywgMHhjYzllMmQ1MSk7XG4gICAgayA9IHJvdGwzMihrLCAxNSk7XG4gICAgayA9IG11bDMyKGssIDB4MWI4NzM1OTMpO1xuICAgIGNvbnN0IGxhbmUgPSBpICYgMztcbiAgICBsZXQgaCA9IChsYW5lc1tsYW5lXSBeIGspID4+PiAwO1xuICAgIGggPSByb3RsMzIoaCwgMTMpO1xuICAgIGxhbmVzW2xhbmVdID0gKG11bDMyKGgsIDUpICsgMHhlNjU0NmI2NCkgPj4+IDA7XG4gIH1cbiAgbGFuZXNbMF0gPSAobGFuZXNbMF0gXiBpbnB1dC5sZW5ndGgpID4+PiAwO1xuICAvLyBUd28gcGFzc2VzIHNvIGV2ZXJ5IGxhbmUgZGVwZW5kcyBvbiBldmVyeSBvdGhlciBsYW5lLlxuICBmb3IgKGxldCBwYXNzID0gMDsgcGFzcyA8IDI7IHBhc3MrKykge1xuICAgIGZvciAobGV0IGxhbmUgPSAwOyBsYW5lIDwgNDsgbGFuZSsrKSB7XG4gICAgICBjb25zdCBwcmV2aW91cyA9IGxhbmVzWyhsYW5lICsgMykgJiAzXTtcbiAgICAgIGxhbmVzW2xhbmVdID0gZm1peDMyKChsYW5lc1tsYW5lXSBeIHByZXZpb3VzKSA+Pj4gMCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsYW5lcztcbn1cblxuLyoqXG4gKiBEZXJpdmVzIGEga2luZCdzIHN0YXJ0aW5nIGJvZHk6IDgwIGJpdHMgb2YgYSAxMjgtYml0IGhhc2ggYXMgMTYgQ3JvY2tmb3JkXG4gKiBjaGFyYWN0ZXJzLCBtb3N0IHNpZ25pZmljYW50IGZpcnN0LlxuICpcbiAqIFRoZSBsZWFkaW5nIGNoYXJhY3RlciBpcyBjb25maW5lZCB0byB0aGUgYWxwaGFiZXQncyBsb3dlciBoYWxmIHNvIHRoZSBib2R5XG4gKiBzdGFydHMgYmVsb3cgaGFsZiBvZiB0aGUgODAtYml0IHNwYWNlLiBgaW5jcmVtZW50QmFzZTMyYCB0aHJvd3Mgb24gb3ZlcmZsb3csXG4gKiBhbmQgd2l0aG91dCB0aGlzIGEgYmFzZSB0aGF0IGhhcHBlbmVkIHRvIGxhbmQgbmVhciBgWuKAplpgIHdvdWxkIG1ha2Ugb3ZlcmZsb3dcbiAqIHJlYWNoYWJsZSBhZnRlciBmZXcgZHJhd3MgcmF0aGVyIHRoYW4gYWZ0ZXIgMl43OSBvZiB0aGVtLlxuICovXG5mdW5jdGlvbiBkZXJpdmVCb2R5KHNlZWQ6IHN0cmluZywga2luZDogQ29ycmVsYXRpb25JZEtpbmQpOiBzdHJpbmcge1xuICBjb25zdCBsYW5lcyA9IGhhc2gxMjgoYCR7c2VlZH0gY29ycmVsYXRpb24ta2luZCAke2tpbmR9YCk7XG4gIGNvbnN0IGJ5dGVzID0gW1xuICAgIChsYW5lc1swXSA+Pj4gMjQpICYgMHhmZixcbiAgICAobGFuZXNbMF0gPj4+IDE2KSAmIDB4ZmYsXG4gICAgKGxhbmVzWzBdID4+PiA4KSAmIDB4ZmYsXG4gICAgbGFuZXNbMF0gJiAweGZmLFxuICAgIChsYW5lc1sxXSA+Pj4gMjQpICYgMHhmZixcbiAgICAobGFuZXNbMV0gPj4+IDE2KSAmIDB4ZmYsXG4gICAgKGxhbmVzWzFdID4+PiA4KSAmIDB4ZmYsXG4gICAgbGFuZXNbMV0gJiAweGZmLFxuICAgIChsYW5lc1syXSA+Pj4gMjQpICYgMHhmZixcbiAgICAobGFuZXNbMl0gPj4+IDE2KSAmIDB4ZmYsXG4gIF07XG4gIGxldCBib2R5ID0gJyc7XG4gIGxldCBhY2N1bXVsYXRvciA9IDA7XG4gIGxldCBiaXRzID0gMDtcbiAgZm9yIChjb25zdCBieXRlIG9mIGJ5dGVzKSB7XG4gICAgYWNjdW11bGF0b3IgPSAoKGFjY3VtdWxhdG9yIDw8IDgpIHwgYnl0ZSkgPj4+IDA7XG4gICAgYml0cyArPSA4O1xuICAgIHdoaWxlIChiaXRzID49IDUpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gKGFjY3VtdWxhdG9yID4+PiAoYml0cyAtIDUpKSAmIDMxO1xuICAgICAgYm9keSArPSBDUk9DS0ZPUkRbYm9keS5sZW5ndGggPT09IDAgPyBpbmRleCAmIDE1IDogaW5kZXhdO1xuICAgICAgYml0cyAtPSA1O1xuICAgIH1cbiAgfVxuICByZXR1cm4gYm9keTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSByZXBsYXkncyBjb3JyZWxhdGlvbi1pZCBnZW5lcmF0b3IuXG4gKlxuICogYHBlcktpbmQ6IGZhbHNlYCByZXR1cm5zIHRoZSBydW4ncyBzaW5nbGUgc2hhcmVkIG1vbm90b25pYyBzZXF1ZW5jZSBhbmRcbiAqIGlnbm9yZXMgdGhlIGtpbmQgZW50aXJlbHksIHNvIGJvdGggc2NoZW1lcyBnbyB0aHJvdWdoIG9uZSBjYWxsIHBhdGggYW5kIHRoZVxuICogZmxhZyBpcyB0aGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvcnJlbGF0aW9uSWRHZW5lcmF0b3Iob3B0aW9uczoge1xuICAvKipcbiAgICogVGhlIHJ1bidzIHJlcGxheS1zdGFibGUgc2VlZC4gTXVzdCBub3QgdmFyeSBiZXR3ZWVuIHJlcGxheXMgb2Ygb25lIHJ1biwgYW5kXG4gICAqIG11c3QgZGlmZmVyIGJldHdlZW4gcnVucywgb3IgdHdvIHJ1bnMgd291bGQgbWludCBpZGVudGljYWwgaWRzLlxuICAgKi9cbiAgc2VlZDogc3RyaW5nO1xuICBmaXhlZFRpbWVzdGFtcDogbnVtYmVyO1xuICAvKiogVGhlIHJ1bidzIHNoYXJlZCBtb25vdG9uaWMgc2VxdWVuY2UsIHVzZWQgYXMtaXMgd2hlbiBgcGVyS2luZGAgaXMgZmFsc2UuICovXG4gIHBvc2l0aW9uYWw6ICgpID0+IHN0cmluZztcbiAgcGVyS2luZDogYm9vbGVhbjtcbn0pOiBDb3JyZWxhdGlvbklkR2VuZXJhdG9yIHtcbiAgY29uc3QgeyBzZWVkLCBmaXhlZFRpbWVzdGFtcCwgcG9zaXRpb25hbCwgcGVyS2luZCB9ID0gb3B0aW9ucztcblxuICBpZiAoIXBlcktpbmQpIHtcbiAgICByZXR1cm4gcG9zaXRpb25hbDtcbiAgfVxuXG4gIGNvbnN0IHRpbWUgPSBlbmNvZGVUaW1lKGZpeGVkVGltZXN0YW1wLCBUSU1FX0NIQVJTKTtcbiAgY29uc3QgYm9kaWVzID0gbmV3IE1hcDxDb3JyZWxhdGlvbklkS2luZCwgc3RyaW5nPigpO1xuXG4gIHJldHVybiAoa2luZDogQ29ycmVsYXRpb25JZEtpbmQpID0+IHtcbiAgICBjb25zdCBwcmV2aW91cyA9IGJvZGllcy5nZXQoa2luZCk7XG4gICAgY29uc3QgYm9keSA9XG4gICAgICBwcmV2aW91cyA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gZGVyaXZlQm9keShzZWVkLCBraW5kKVxuICAgICAgICA6IGluY3JlbWVudEJhc2UzMihwcmV2aW91cyk7XG4gICAgYm9kaWVzLnNldChraW5kLCBib2R5KTtcbiAgICByZXR1cm4gYCR7dGltZX0ke2JvZHl9YDtcbiAgfTtcbn1cblxuLyoqIExlbmd0aCBvZiBhIFVMSUQsIGV4cG9ydGVkIHNvIHRlc3RzIG5lZWQgbm90IHJlc3RhdGUgaXQuICovXG5leHBvcnQgY29uc3QgQ09SUkVMQVRJT05fSURfTEVOR1RIID0gVElNRV9DSEFSUyArIEJPRFlfQ0hBUlM7XG5cbi8qKlxuICogV2hldGhlciBlYWNoIGVudGl0eSBmYW1pbHkgZHJhd3MgY29ycmVsYXRpb24gaWRzIGZyb20gaXRzIG93biBzZXF1ZW5jZSByYXRoZXJcbiAqIHRoYW4gZnJvbSBvbmUgc2VxdWVuY2Ugc2hhcmVkIGJ5IHRoZSB3aG9sZSBydW4uIE9mZiB1bmxlc3Mgb3B0ZWQgaW4sIHNvIGFuIFNES1xuICogdXBncmFkZSBhbG9uZSBuZXZlciBtb3ZlcyBhIHJ1biBiZXR3ZWVuIHNjaGVtZXMuXG4gKlxuICogVGhlIGludmFyaWFudCBlaXRoZXIgd2F5OiBhIHJ1biBtdXN0IHJlcGxheSB1bmRlciB0aGUgc2NoZW1lIHRoYXQgbWludGVkIGl0c1xuICogaWRzLiBBIHJlcGxheSB1bmRlciB0aGUgb3RoZXIgc2NoZW1lIG1pbnRzIGlkcyBpdHMgb3duIGVhcmxpZXIgZXZlbnRzIGRvIG5vdFxuICogY2FycnksIHNvIGl0IGNhbiBjb25zdW1lIG5vbmUgb2YgdGhlbSBhbmQgZmFpbHMgdGhlIHJ1bi4gVHdvIHRoaW5ncyBjYW4gYnJlYWtcbiAqIGl0LCBhbmQgYm90aCBhcmUgYWJvdXQgdHVybmluZyB0aGUgZmxhZyBvbiByYXRoZXIgdGhhbiBhYm91dCB1cGdyYWRpbmc6XG4gKlxuICogLSBFbmFibGluZyBpdCB3aGlsZSBydW5zIGFyZSBpbiBmbGlnaHQuIE9uIFZlcmNlbCwgc2tldyBwcm90ZWN0aW9uIGtlZXBzIGEgcnVuXG4gKiAgIG9uIHRoZSBkZXBsb3ltZW50IHRoYXQgc3RhcnRlZCBpdCwgc28gYSBydW4gb25seSBldmVyIHNlZXMgdGhlIHZhbHVlIGJha2VkXG4gKiAgIGludG8gaXRzIG93biBkZXBsb3ltZW50LiBFbHNld2hlcmUgKHdvcmxkLXBvc3RncmVzLCB3b3JsZC1sb2NhbCwgYVxuICogICBzZWxmLWhvc3RlZCBwcm9jZXNzKSBub3RoaW5nIHBpbnMgYSBydW4gdG8gdGhlIGNvZGUgdGhhdCBzdGFydGVkIGl0LCBzb1xuICogICBlbmFibGUgaXQgZHVyaW5nIGEgcXVpZXQgd2luZG93LlxuICogLSBBIHJvbGxpbmcgZGVwbG95IHRoYXQgbGVhdmVzIGJvdGggdmFsdWVzIGxpdmUsIHdoaWNoIHB1dHMgdHdvIHNjaGVtZXMgb24gb25lXG4gKiAgIHJ1biBjb25jdXJyZW50bHkg4oCUIHRoZSBzaWRlLWJ5LXNpZGUgYXBwZW5kIHRoaXMgd2hvbGUgbWVjaGFuaXNtIGV4aXN0cyB0b1xuICogICBhdm9pZC4gUm9sbCB0aGUgdmFsdWUgb3V0IHRvIHRoZSB3aG9sZSBmbGVldCBhdCBvbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQZXJLaW5kQ29ycmVsYXRpb25JZHNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfUEVSX0tJTkRfQ09SUkVMQVRJT05fSURTID09PSAnMSc7XG59XG4iXX0=
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Entry point for the VM serialization bundle.
|
|
3
|
-
*
|
|
4
|
-
* This file is bundled by esbuild into a self-contained IIFE that
|
|
5
|
-
* sets up serialize/deserialize on globalThis. The bundled output
|
|
6
|
-
* is evaluated inside the QuickJS VM during bootstrap.
|
|
7
|
-
*
|
|
8
|
-
* TextEncoder, TextDecoder, and Headers are provided by native C
|
|
9
|
-
* extensions in quickjs-wasi, so no polyfills are needed.
|
|
10
|
-
*/
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=vm-bundle-entry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vm-bundle-entry.d.ts","sourceRoot":"","sources":["../../src/serialization/vm-bundle-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Entry point for the VM serialization bundle.
|
|
3
|
-
*
|
|
4
|
-
* This file is bundled by esbuild into a self-contained IIFE that
|
|
5
|
-
* sets up serialize/deserialize on globalThis. The bundled output
|
|
6
|
-
* is evaluated inside the QuickJS VM during bootstrap.
|
|
7
|
-
*
|
|
8
|
-
* TextEncoder, TextDecoder, and Headers are provided by native C
|
|
9
|
-
* extensions in quickjs-wasi, so no polyfills are needed.
|
|
10
|
-
*/
|
|
11
|
-
import { monotonicFactory } from 'ulid';
|
|
12
|
-
import { deserialize, serialize } from './workflow-vm.js';
|
|
13
|
-
// Install on global scope under the public well-known symbols. The
|
|
14
|
-
// snapshot runtime's bootstrap (and the various inline-evaluated JS
|
|
15
|
-
// strings in `snapshot-runtime.ts`) reach the same functions via
|
|
16
|
-
// `globalThis[Symbol.for('workflow-serialize')]` etc.
|
|
17
|
-
globalThis[Symbol.for('workflow-serialize')] = serialize;
|
|
18
|
-
globalThis[Symbol.for('workflow-deserialize')] = deserialize;
|
|
19
|
-
// ULID generator for correlationIds — uses the same monotonicFactory
|
|
20
|
-
// as the node:vm engine. Both inputs MUST be set by the host before the
|
|
21
|
-
// first ULID is drawn, otherwise the seeded-ULID determinism guarantee
|
|
22
|
-
// is silently broken:
|
|
23
|
-
//
|
|
24
|
-
// * `Math.random` must be replaced with the host's seeded PRNG via
|
|
25
|
-
// `vm.newFunction('random', …)` (see `quickjs-runtime.ts`, the
|
|
26
|
-
// `Seeded Math.random` block). Two workflow invocations of the same
|
|
27
|
-
// run MUST observe an identical random sequence so their
|
|
28
|
-
// correlationIds collide and the world's EntityConflictError dedup
|
|
29
|
-
// applies. We pass it explicitly to `monotonicFactory` because
|
|
30
|
-
// ULID's auto-detect (`detectPRNG`) only knows about
|
|
31
|
-
// `crypto.getRandomValues` / `crypto.randomBytes`, neither of which
|
|
32
|
-
// exist in QuickJS. The PRNG is deliberately LATE-BOUND (the arrow
|
|
33
|
-
// reads `Math.random` at draw time, not at bundle-eval time) so
|
|
34
|
-
// that this bundle can be evaluated during static VM initialization
|
|
35
|
-
// — before the per-run seeded PRNG is installed — without capturing
|
|
36
|
-
// the unseeded built-in. This is also what allows a future VM
|
|
37
|
-
// snapshot taken after bundle eval to have its PRNG swapped
|
|
38
|
-
// post-restore.
|
|
39
|
-
// * `globalThis.__ulidTimestamp` must be a number (typically
|
|
40
|
-
// `workflowRun.startedAt`). It's used in place of `Date.now()` so
|
|
41
|
-
// the time portion of the ULID is also stable across concurrent
|
|
42
|
-
// invocations of the same run.
|
|
43
|
-
//
|
|
44
|
-
// The timestamp prerequisite is validated below — fail loudly rather
|
|
45
|
-
// than fall back to `Date.now()`, which would re-introduce
|
|
46
|
-
// non-determinism that replay relies on us NOT having.
|
|
47
|
-
const ulid = monotonicFactory(() => Math.random());
|
|
48
|
-
globalThis.__generateUlid = () => {
|
|
49
|
-
const t = globalThis.__ulidTimestamp;
|
|
50
|
-
if (typeof t !== 'number') {
|
|
51
|
-
throw new Error('__generateUlid: globalThis.__ulidTimestamp must be a number set by ' +
|
|
52
|
-
'the host before the serde bundle is evaluated. Without it, ULIDs ' +
|
|
53
|
-
'would fall back to Date.now() and concurrent workflow invocations ' +
|
|
54
|
-
'of the same resumption would produce divergent correlationIds.');
|
|
55
|
-
}
|
|
56
|
-
return ulid(t);
|
|
57
|
-
};
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm0tYnVuZGxlLWVudHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcmlhbGl6YXRpb24vdm0tYnVuZGxlLWVudHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFELG1FQUFtRTtBQUNuRSxvRUFBb0U7QUFDcEUsaUVBQWlFO0FBQ2pFLHNEQUFzRDtBQUNyRCxVQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqRSxVQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUV0RSxxRUFBcUU7QUFDckUsd0VBQXdFO0FBQ3hFLHVFQUF1RTtBQUN2RSxzQkFBc0I7QUFDdEIsRUFBRTtBQUNGLHFFQUFxRTtBQUNyRSxtRUFBbUU7QUFDbkUsd0VBQXdFO0FBQ3hFLDZEQUE2RDtBQUM3RCx1RUFBdUU7QUFDdkUsbUVBQW1FO0FBQ25FLHlEQUF5RDtBQUN6RCx3RUFBd0U7QUFDeEUsdUVBQXVFO0FBQ3ZFLG9FQUFvRTtBQUNwRSx3RUFBd0U7QUFDeEUsd0VBQXdFO0FBQ3hFLGtFQUFrRTtBQUNsRSxnRUFBZ0U7QUFDaEUsb0JBQW9CO0FBQ3BCLCtEQUErRDtBQUMvRCxzRUFBc0U7QUFDdEUsb0VBQW9FO0FBQ3BFLG1DQUFtQztBQUNuQyxFQUFFO0FBQ0YscUVBQXFFO0FBQ3JFLDJEQUEyRDtBQUMzRCx1REFBdUQ7QUFDdkQsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDbEQsVUFBa0IsQ0FBQyxjQUFjLEdBQUcsR0FBRyxFQUFFO0lBQ3hDLE1BQU0sQ0FBQyxHQUFJLFVBQWtCLENBQUMsZUFBZSxDQUFDO0lBQzlDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FDYixxRUFBcUU7WUFDbkUsbUVBQW1FO1lBQ25FLG9FQUFvRTtZQUNwRSxnRUFBZ0UsQ0FDbkUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVudHJ5IHBvaW50IGZvciB0aGUgVk0gc2VyaWFsaXphdGlvbiBidW5kbGUuXG4gKlxuICogVGhpcyBmaWxlIGlzIGJ1bmRsZWQgYnkgZXNidWlsZCBpbnRvIGEgc2VsZi1jb250YWluZWQgSUlGRSB0aGF0XG4gKiBzZXRzIHVwIHNlcmlhbGl6ZS9kZXNlcmlhbGl6ZSBvbiBnbG9iYWxUaGlzLiBUaGUgYnVuZGxlZCBvdXRwdXRcbiAqIGlzIGV2YWx1YXRlZCBpbnNpZGUgdGhlIFF1aWNrSlMgVk0gZHVyaW5nIGJvb3RzdHJhcC5cbiAqXG4gKiBUZXh0RW5jb2RlciwgVGV4dERlY29kZXIsIGFuZCBIZWFkZXJzIGFyZSBwcm92aWRlZCBieSBuYXRpdmUgQ1xuICogZXh0ZW5zaW9ucyBpbiBxdWlja2pzLXdhc2ksIHNvIG5vIHBvbHlmaWxscyBhcmUgbmVlZGVkLlxuICovXG5cbmltcG9ydCB7IG1vbm90b25pY0ZhY3RvcnkgfSBmcm9tICd1bGlkJztcbmltcG9ydCB7IGRlc2VyaWFsaXplLCBzZXJpYWxpemUgfSBmcm9tICcuL3dvcmtmbG93LXZtLmpzJztcblxuLy8gSW5zdGFsbCBvbiBnbG9iYWwgc2NvcGUgdW5kZXIgdGhlIHB1YmxpYyB3ZWxsLWtub3duIHN5bWJvbHMuIFRoZVxuLy8gc25hcHNob3QgcnVudGltZSdzIGJvb3RzdHJhcCAoYW5kIHRoZSB2YXJpb3VzIGlubGluZS1ldmFsdWF0ZWQgSlNcbi8vIHN0cmluZ3MgaW4gYHNuYXBzaG90LXJ1bnRpbWUudHNgKSByZWFjaCB0aGUgc2FtZSBmdW5jdGlvbnMgdmlhXG4vLyBgZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKV1gIGV0Yy5cbihnbG9iYWxUaGlzIGFzIGFueSlbU3ltYm9sLmZvcignd29ya2Zsb3ctc2VyaWFsaXplJyldID0gc2VyaWFsaXplO1xuKGdsb2JhbFRoaXMgYXMgYW55KVtTeW1ib2wuZm9yKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpXSA9IGRlc2VyaWFsaXplO1xuXG4vLyBVTElEIGdlbmVyYXRvciBmb3IgY29ycmVsYXRpb25JZHMg4oCUIHVzZXMgdGhlIHNhbWUgbW9ub3RvbmljRmFjdG9yeVxuLy8gYXMgdGhlIG5vZGU6dm0gZW5naW5lLiBCb3RoIGlucHV0cyBNVVNUIGJlIHNldCBieSB0aGUgaG9zdCBiZWZvcmUgdGhlXG4vLyBmaXJzdCBVTElEIGlzIGRyYXduLCBvdGhlcndpc2UgdGhlIHNlZWRlZC1VTElEIGRldGVybWluaXNtIGd1YXJhbnRlZVxuLy8gaXMgc2lsZW50bHkgYnJva2VuOlxuLy9cbi8vICAgKiBgTWF0aC5yYW5kb21gIG11c3QgYmUgcmVwbGFjZWQgd2l0aCB0aGUgaG9zdCdzIHNlZWRlZCBQUk5HIHZpYVxuLy8gICAgIGB2bS5uZXdGdW5jdGlvbigncmFuZG9tJywg4oCmKWAgKHNlZSBgcXVpY2tqcy1ydW50aW1lLnRzYCwgdGhlXG4vLyAgICAgYFNlZWRlZCBNYXRoLnJhbmRvbWAgYmxvY2spLiBUd28gd29ya2Zsb3cgaW52b2NhdGlvbnMgb2YgdGhlIHNhbWVcbi8vICAgICBydW4gTVVTVCBvYnNlcnZlIGFuIGlkZW50aWNhbCByYW5kb20gc2VxdWVuY2Ugc28gdGhlaXJcbi8vICAgICBjb3JyZWxhdGlvbklkcyBjb2xsaWRlIGFuZCB0aGUgd29ybGQncyBFbnRpdHlDb25mbGljdEVycm9yIGRlZHVwXG4vLyAgICAgYXBwbGllcy4gV2UgcGFzcyBpdCBleHBsaWNpdGx5IHRvIGBtb25vdG9uaWNGYWN0b3J5YCBiZWNhdXNlXG4vLyAgICAgVUxJRCdzIGF1dG8tZGV0ZWN0IChgZGV0ZWN0UFJOR2ApIG9ubHkga25vd3MgYWJvdXRcbi8vICAgICBgY3J5cHRvLmdldFJhbmRvbVZhbHVlc2AgLyBgY3J5cHRvLnJhbmRvbUJ5dGVzYCwgbmVpdGhlciBvZiB3aGljaFxuLy8gICAgIGV4aXN0IGluIFF1aWNrSlMuIFRoZSBQUk5HIGlzIGRlbGliZXJhdGVseSBMQVRFLUJPVU5EICh0aGUgYXJyb3dcbi8vICAgICByZWFkcyBgTWF0aC5yYW5kb21gIGF0IGRyYXcgdGltZSwgbm90IGF0IGJ1bmRsZS1ldmFsIHRpbWUpIHNvXG4vLyAgICAgdGhhdCB0aGlzIGJ1bmRsZSBjYW4gYmUgZXZhbHVhdGVkIGR1cmluZyBzdGF0aWMgVk0gaW5pdGlhbGl6YXRpb25cbi8vICAgICDigJQgYmVmb3JlIHRoZSBwZXItcnVuIHNlZWRlZCBQUk5HIGlzIGluc3RhbGxlZCDigJQgd2l0aG91dCBjYXB0dXJpbmdcbi8vICAgICB0aGUgdW5zZWVkZWQgYnVpbHQtaW4uIFRoaXMgaXMgYWxzbyB3aGF0IGFsbG93cyBhIGZ1dHVyZSBWTVxuLy8gICAgIHNuYXBzaG90IHRha2VuIGFmdGVyIGJ1bmRsZSBldmFsIHRvIGhhdmUgaXRzIFBSTkcgc3dhcHBlZFxuLy8gICAgIHBvc3QtcmVzdG9yZS5cbi8vICAgKiBgZ2xvYmFsVGhpcy5fX3VsaWRUaW1lc3RhbXBgIG11c3QgYmUgYSBudW1iZXIgKHR5cGljYWxseVxuLy8gICAgIGB3b3JrZmxvd1J1bi5zdGFydGVkQXRgKS4gSXQncyB1c2VkIGluIHBsYWNlIG9mIGBEYXRlLm5vdygpYCBzb1xuLy8gICAgIHRoZSB0aW1lIHBvcnRpb24gb2YgdGhlIFVMSUQgaXMgYWxzbyBzdGFibGUgYWNyb3NzIGNvbmN1cnJlbnRcbi8vICAgICBpbnZvY2F0aW9ucyBvZiB0aGUgc2FtZSBydW4uXG4vL1xuLy8gVGhlIHRpbWVzdGFtcCBwcmVyZXF1aXNpdGUgaXMgdmFsaWRhdGVkIGJlbG93IOKAlCBmYWlsIGxvdWRseSByYXRoZXJcbi8vIHRoYW4gZmFsbCBiYWNrIHRvIGBEYXRlLm5vdygpYCwgd2hpY2ggd291bGQgcmUtaW50cm9kdWNlXG4vLyBub24tZGV0ZXJtaW5pc20gdGhhdCByZXBsYXkgcmVsaWVzIG9uIHVzIE5PVCBoYXZpbmcuXG5jb25zdCB1bGlkID0gbW9ub3RvbmljRmFjdG9yeSgoKSA9PiBNYXRoLnJhbmRvbSgpKTtcbihnbG9iYWxUaGlzIGFzIGFueSkuX19nZW5lcmF0ZVVsaWQgPSAoKSA9PiB7XG4gIGNvbnN0IHQgPSAoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fdWxpZFRpbWVzdGFtcDtcbiAgaWYgKHR5cGVvZiB0ICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdfX2dlbmVyYXRlVWxpZDogZ2xvYmFsVGhpcy5fX3VsaWRUaW1lc3RhbXAgbXVzdCBiZSBhIG51bWJlciBzZXQgYnkgJyArXG4gICAgICAgICd0aGUgaG9zdCBiZWZvcmUgdGhlIHNlcmRlIGJ1bmRsZSBpcyBldmFsdWF0ZWQuIFdpdGhvdXQgaXQsIFVMSURzICcgK1xuICAgICAgICAnd291bGQgZmFsbCBiYWNrIHRvIERhdGUubm93KCkgYW5kIGNvbmN1cnJlbnQgd29ya2Zsb3cgaW52b2NhdGlvbnMgJyArXG4gICAgICAgICdvZiB0aGUgc2FtZSByZXN1bXB0aW9uIHdvdWxkIHByb2R1Y2UgZGl2ZXJnZW50IGNvcnJlbGF0aW9uSWRzLidcbiAgICApO1xuICB9XG4gIHJldHVybiB1bGlkKHQpO1xufTtcbiJdfQ==
|