@aws-cdk/toolkit-lib 1.28.0 → 1.29.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/build-info.json +2 -2
  2. package/db.json.gz +0 -0
  3. package/lib/actions/validate/index.d.ts +10 -0
  4. package/lib/actions/validate/index.js +1 -1
  5. package/lib/api/cloud-assembly/environment.js +16 -4
  6. package/lib/api/deployments/cfn-api.d.ts +24 -6
  7. package/lib/api/deployments/cfn-api.js +81 -33
  8. package/lib/api/hotswap/hotswap-deployments.js +3 -1
  9. package/lib/api/hotswap/lambda-functions.js +3 -33
  10. package/lib/api/io/private/index.d.ts +1 -0
  11. package/lib/api/io/private/index.js +2 -1
  12. package/lib/api/io/private/messages.d.ts +1 -0
  13. package/lib/api/io/private/messages.js +8 -4
  14. package/lib/api/io/private/span.d.ts +6 -0
  15. package/lib/api/io/private/span.js +10 -3
  16. package/lib/api/validate/validate-formatting.d.ts +5 -0
  17. package/lib/api/validate/validate-formatting.js +127 -0
  18. package/lib/api/work-graph/work-graph-builder.d.ts +3 -0
  19. package/lib/api/work-graph/work-graph-builder.js +38 -3
  20. package/lib/api/work-graph/work-graph-types.d.ts +19 -7
  21. package/lib/api/work-graph/work-graph-types.js +1 -1
  22. package/lib/api/work-graph/work-graph.d.ts +2 -1
  23. package/lib/api/work-graph/work-graph.js +8 -1
  24. package/lib/index_bg.wasm +0 -0
  25. package/lib/payloads/hotswap.d.ts +8 -1
  26. package/lib/payloads/hotswap.js +1 -1
  27. package/lib/private/tools.d.ts +2 -0
  28. package/lib/private/tools.js +120 -0
  29. package/lib/private/tools.js.plain +21 -0
  30. package/lib/toolkit/toolkit.d.ts +2 -1
  31. package/lib/toolkit/toolkit.js +103 -19
  32. package/lib/util/index.d.ts +0 -1
  33. package/lib/util/index.js +1 -2
  34. package/package.json +13 -11
  35. package/lib/util/archive.d.ts +0 -2
  36. package/lib/util/archive.js +0 -86
@@ -13,6 +13,9 @@ class WorkGraphBuilder {
13
13
  /**
14
14
  * Default priorities for nodes
15
15
  *
16
+ * Messages have the highest priority to ensure they are emitted as soon as
17
+ * possible (because they will be used for measuring timings).
18
+ *
16
19
  * Assets builds have higher priority than the other two operations, to make good on our promise that
17
20
  * '--prebuild-assets' will actually do assets before stacks (if it can). Unfortunately it is the
18
21
  * default :(
@@ -23,6 +26,7 @@ class WorkGraphBuilder {
23
26
  'asset-build': 10,
24
27
  'asset-publish': 0,
25
28
  'stack': 5,
29
+ 'marker': 100,
26
30
  };
27
31
  graph;
28
32
  ioHelper;
@@ -49,8 +53,35 @@ class WorkGraphBuilder {
49
53
  addAsset(parentStack, assetManifestArtifact, assetManifest, asset) {
50
54
  // Just the artifact identifier
51
55
  const assetId = asset.id.assetId;
52
- const buildId = `build-${assetId}-${(0, util_1.contentHashAny)([assetId, asset.genericSource]).substring(0, 10)}`;
53
- const publishId = `publish-${assetId}-${(0, util_1.contentHashAny)([assetId, asset.genericDestination]).substring(0, 10)}`;
56
+ // Build node, contains hash of source (build only once)
57
+ const sourceHash = (0, util_1.contentHashAny)([assetId, asset.genericSource]).substring(0, 10);
58
+ const buildId = `build-${assetId}-${sourceHash}`;
59
+ // Publish node, contains hash of both source and dest
60
+ const publishId = `publish-${assetId}-${sourceHash}${(0, util_1.contentHashAny)([assetId, asset.genericDestination]).substring(0, 10)}`;
61
+ // Message to emit when we start on an asset
62
+ const startId = `start-${assetId}`;
63
+ if (!this.graph.tryGetNode(startId)) {
64
+ this.graph.addNodes({
65
+ type: 'marker',
66
+ id: startId,
67
+ dependencies: new Set(),
68
+ deploymentState: work_graph_types_1.DeploymentState.PENDING,
69
+ priority: WorkGraphBuilder.PRIORITIES.marker,
70
+ marker: { type: 'start-asset', asset },
71
+ });
72
+ }
73
+ // Message to emit when we end an asset
74
+ const endId = `end-${assetId}`;
75
+ if (!this.graph.tryGetNode(endId)) {
76
+ this.graph.addNodes({
77
+ type: 'marker',
78
+ id: endId,
79
+ dependencies: new Set(),
80
+ deploymentState: work_graph_types_1.DeploymentState.PENDING,
81
+ priority: WorkGraphBuilder.PRIORITIES.marker,
82
+ marker: { type: 'end-asset', asset },
83
+ });
84
+ }
54
85
  // Build node only gets added once because they are all the same
55
86
  if (!this.graph.tryGetNode(buildId)) {
56
87
  const node = {
@@ -58,6 +89,8 @@ class WorkGraphBuilder {
58
89
  id: buildId,
59
90
  note: asset.displayName(false),
60
91
  dependencies: new Set([
92
+ // Build depends on the start message having been emitted.
93
+ startId,
61
94
  ...this.stackArtifactIds(assetManifestArtifact.dependencies),
62
95
  // If we disable prebuild, then assets inherit (stack) dependencies from their parent stack
63
96
  ...!this.prebuildAssets ? this.stackArtifactIds(onlyStacks(parentStack.dependencies)) : [],
@@ -87,6 +120,8 @@ class WorkGraphBuilder {
87
120
  deploymentState: work_graph_types_1.DeploymentState.PENDING,
88
121
  priority: WorkGraphBuilder.PRIORITIES['asset-publish'],
89
122
  });
123
+ // Every publish node that we add must complete before we fire the "done with publishing this asset" message.
124
+ this.graph.addDependency(endId, publishId);
90
125
  }
91
126
  for (const inheritedDep of this.stackArtifactIds(onlyStacks(parentStack.dependencies))) {
92
127
  // The asset publish step also depends on the stacks that the parent depends on.
@@ -169,4 +204,4 @@ function stacksFromAssets(artifacts) {
169
204
  function onlyStacks(artifacts) {
170
205
  return artifacts.filter(x => cxapi.CloudFormationStackArtifact.isCloudFormationStackArtifact(x));
171
206
  }
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1ncmFwaC1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid29yay1ncmFwaC1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDREQUE2RTtBQUM3RSxxREFBcUQ7QUFDckQsNkNBQXlDO0FBRXpDLHlEQUFxRDtBQUNyRCwrREFBMkQ7QUFDM0QscUNBQTRDO0FBRzVDLE1BQWEsZ0JBQWdCO0lBb0JSO0lBQ0E7SUFwQm5COzs7Ozs7OztPQVFHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsR0FBcUM7UUFDM0QsYUFBYSxFQUFFLEVBQUU7UUFDakIsZUFBZSxFQUFFLENBQUM7UUFDbEIsT0FBTyxFQUFFLENBQUM7S0FDWCxDQUFDO0lBQ2UsS0FBSyxDQUFZO0lBQ2pCLFFBQVEsQ0FBVztJQUVwQyxZQUNFLFFBQWtCLEVBQ0QsY0FBdUIsRUFDdkIsV0FBVyxFQUFFO1FBRGIsbUJBQWMsR0FBZCxjQUFjLENBQVM7UUFDdkIsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUU5QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksc0JBQVMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVPLFFBQVEsQ0FBQyxRQUEyQztRQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUNsQixJQUFJLEVBQUUsT0FBTztZQUNiLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxZQUFZLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUMvRSxLQUFLLEVBQUUsUUFBUTtZQUNmLGVBQWUsRUFBRSxrQ0FBZSxDQUFDLE9BQU87WUFDeEMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLFVB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Q2xELE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25HLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3NldE1hbmlmZXN0LCB0eXBlIElNYW5pZmVzdEVudHJ5IH0gZnJvbSAnQGF3cy1jZGsvY2RrLWFzc2V0cy1saWInO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB7IFdvcmtHcmFwaCB9IGZyb20gJy4vd29yay1ncmFwaCc7XG5pbXBvcnQgdHlwZSB7IEFzc2V0QnVpbGROb2RlLCBXb3JrTm9kZSB9IGZyb20gJy4vd29yay1ncmFwaC10eXBlcyc7XG5pbXBvcnQgeyBEZXBsb3ltZW50U3RhdGUgfSBmcm9tICcuL3dvcmstZ3JhcGgtdHlwZXMnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB7IGNvbnRlbnRIYXNoQW55IH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5cbmV4cG9ydCBjbGFzcyBXb3JrR3JhcGhCdWlsZGVyIHtcbiAgLyoqXG4gICAqIERlZmF1bHQgcHJpb3JpdGllcyBmb3Igbm9kZXNcbiAgICpcbiAgICogQXNzZXRzIGJ1aWxkcyBoYXZlIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoZSBvdGhlciB0d28gb3BlcmF0aW9ucywgdG8gbWFrZSBnb29kIG9uIG91ciBwcm9taXNlIHRoYXRcbiAgICogJy0tcHJlYnVpbGQtYXNzZXRzJyB3aWxsIGFjdHVhbGx5IGRvIGFzc2V0cyBiZWZvcmUgc3RhY2tzIChpZiBpdCBjYW4pLiBVbmZvcnR1bmF0ZWx5IGl0IGlzIHRoZVxuICAgKiBkZWZhdWx0IDooXG4gICAqXG4gICAqIEJ1dCBiZXR3ZWVuIHN0YWNrIGRlcGVuZGVuY2llcyBhbmQgcHVibGlzaCBkZXBlbmRlbmNpZXMsIHN0YWNrIGRlcGVuZGVuY2llcyBnbyBmaXJzdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBQUklPUklUSUVTOiBSZWNvcmQ8V29ya05vZGVbJ3R5cGUnXSwgbnVtYmVyPiA9IHtcbiAgICAnYXNzZXQtYnVpbGQnOiAxMCxcbiAgICAnYXNzZXQtcHVibGlzaCc6IDAsXG4gICAgJ3N0YWNrJzogNSxcbiAgfTtcbiAgcHJpdmF0ZSByZWFkb25seSBncmFwaDogV29ya0dyYXBoO1xuICBwcml2YXRlIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmVidWlsZEFzc2V0czogYm9vbGVhbixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlkUHJlZml4ID0gJycsXG4gICkge1xuICAgIHRoaXMuZ3JhcGggPSBuZXcgV29ya0dyYXBoKHt9LCBpb0hlbHBlcik7XG4gICAgdGhpcy5pb0hlbHBlciA9IGlvSGVscGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTdGFjayhhcnRpZmFjdDogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KSB7XG4gICAgdGhpcy5ncmFwaC5hZGROb2Rlcyh7XG4gICAgICB0eXBlOiAnc3RhY2snLFxuICAgICAgaWQ6IGAke3RoaXMuaWRQcmVmaXh9JHthcnRpZmFjdC5pZH1gLFxuICAgICAgZGVwZW5kZW5jaWVzOiBuZXcgU2V0KHRoaXMuc3RhY2tBcnRpZmFjdElkcyhvbmx5U3RhY2tzKGFydGlmYWN0LmRlcGVuZGVuY2llcykpKSxcbiAgICAgIHN0YWNrOiBhcnRpZmFjdCxcbiAgICAgIGRlcGxveW1lbnRTdGF0ZTogRGVwbG95bWVudFN0YXRlLlBFTkRJTkcsXG4gICAgICBwcmlvcml0eTogV29ya0dyYXBoQnVpbGRlci5QUklPUklUSUVTLnN0YWNrLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9vZiwgc2VlIHRoaXMgcGFyYW1ldGVyIGxpc3RcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc3R5bGlzdGljL21heC1sZW5cbiAgcHJpdmF0ZSBhZGRBc3NldChwYXJlbnRTdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LCBhc3NldE1hbmlmZXN0QXJ0aWZhY3Q6IGN4YXBpLkFzc2V0TWFuaWZlc3RBcnRpZmFjdCwgYXNzZXRNYW5pZmVzdDogQXNzZXRNYW5pZmVzdCwgYXNzZXQ6IElNYW5pZmVzdEVudHJ5KSB7XG4gICAgLy8gSnVzdCB0aGUgYXJ0aWZhY3QgaWRlbnRpZmllclxuICAgIGNvbnN0IGFzc2V0SWQgPSBhc3NldC5pZC5hc3NldElkO1xuXG4gICAgY29uc3QgYnVpbGRJZCA9IGBidWlsZC0ke2Fzc2V0SWR9LSR7Y29udGVudEhhc2hBbnkoW2Fzc2V0SWQsIGFzc2V0LmdlbmVyaWNTb3VyY2VdKS5zdWJzdHJpbmcoMCwgMTApfWA7XG4gICAgY29uc3QgcHVibGlzaElkID0gYHB1Ymxpc2gtJHthc3NldElkfS0ke2NvbnRlbnRIYXNoQW55KFthc3NldElkLCBhc3NldC5nZW5lcmljRGVzdGluYXRpb25dKS5zdWJzdHJpbmcoMCwgMTApfWA7XG5cbiAgICAvLyBCdWlsZCBub2RlIG9ubHkgZ2V0cyBhZGRlZCBvbmNlIGJlY2F1c2UgdGhleSBhcmUgYWxsIHRoZSBzYW1lXG4gICAgaWYgKCF0aGlzLmdyYXBoLnRyeUdldE5vZGUoYnVpbGRJZCkpIHtcbiAgICAgIGNvbnN0IG5vZGU6IEFzc2V0QnVpbGROb2RlID0ge1xuICAgICAgICB0eXBlOiAnYXNzZXQtYnVpbGQnLFxuICAgICAgICBpZDogYnVpbGRJZCxcbiAgICAgICAgbm90ZTogYXNzZXQuZGlzcGxheU5hbWUoZmFsc2UpLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IG5ldyBTZXQoW1xuICAgICAgICAgIC4uLnRoaXMuc3RhY2tBcnRpZmFjdElkcyhhc3NldE1hbmlmZXN0QXJ0aWZhY3QuZGVwZW5kZW5jaWVzKSxcbiAgICAgICAgICAvLyBJZiB3ZSBkaXNhYmxlIHByZWJ1aWxkLCB0aGVuIGFzc2V0cyBpbmhlcml0IChzdGFjaykgZGVwZW5kZW5jaWVzIGZyb20gdGhlaXIgcGFyZW50IHN0YWNrXG4gICAgICAgICAgLi4uIXRoaXMucHJlYnVpbGRBc3NldHMgPyB0aGlzLnN0YWNrQXJ0aWZhY3RJZHMob25seVN0YWNrcyhwYXJlbnRTdGFjay5kZXBlbmRlbmNpZXMpKSA6IFtdLFxuICAgICAgICBdKSxcbiAgICAgICAgcGFyZW50U3RhY2s6IHBhcmVudFN0YWNrLFxuICAgICAgICBhc3NldE1hbmlmZXN0QXJ0aWZhY3QsXG4gICAgICAgIGFzc2V0TWFuaWZlc3QsXG4gICAgICAgIGFzc2V0LFxuICAgICAgICBkZXBsb3ltZW50U3RhdGU6IERlcGxveW1lbnRTdGF0ZS5QRU5ESU5HLFxuICAgICAgICBwcmlvcml0eTogV29ya0dyYXBoQnVpbGRlci5QUklPUklUSUVTWydhc3NldC1idWlsZCddLFxuICAgICAgfTtcbiAgICAgIHRoaXMuZ3JhcGguYWRkTm9kZXMobm9kZSk7XG4gICAgfVxuXG4gICAgY29uc3QgcHVibGlzaE5vZGUgPSB0aGlzLmdyYXBoLnRyeUdldE5vZGUocHVibGlzaElkKTtcbiAgICBpZiAoIXB1Ymxpc2hOb2RlKSB7XG4gICAgICB0aGlzLmdyYXBoLmFkZE5vZGVzKHtcbiAgICAgICAgdHlwZTogJ2Fzc2V0LXB1Ymxpc2gnLFxuICAgICAgICBpZDogcHVibGlzaElkLFxuICAgICAgICBub3RlOiBhc3NldC5kaXNwbGF5TmFtZSh0cnVlKSxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBuZXcgU2V0KFtcbiAgICAgICAgICBidWlsZElkLFxuICAgICAgICBdKSxcbiAgICAgICAgcGFyZW50U3RhY2ssXG4gICAgICAgIGFzc2V0TWFuaWZlc3RBcnRpZmFjdCxcbiAgICAgICAgYXNzZXRNYW5pZmVzdCxcbiAgICAgICAgYXNzZXQsXG4gICAgICAgIGRlcGxveW1lbnRTdGF0ZTogRGVwbG95bWVudFN0YXRlLlBFTkRJTkcsXG4gICAgICAgIHByaW9yaXR5OiBXb3JrR3JhcGhCdWlsZGVyLlBSSU9SSVRJRVNbJ2Fzc2V0LXB1Ymxpc2gnXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgaW5oZXJpdGVkRGVwIG9mIHRoaXMuc3RhY2tBcnRpZmFjdElkcyhvbmx5U3RhY2tzKHBhcmVudFN0YWNrLmRlcGVuZGVuY2llcykpKSB7XG4gICAgICAvLyBUaGUgYXNzZXQgcHVibGlzaCBzdGVwIGFsc28gZGVwZW5kcyBvbiB0aGUgc3RhY2tzIHRoYXQgdGhlIHBhcmVudCBkZXBlbmRzIG9uLlxuICAgICAgLy8gVGhpcyBpcyBwdXJlbHkgY29zbWV0aWM6IGlmIHdlIGRvbid0IGRvIHRoaXMsIHRoZSBwcm9ncmVzcyBwcmludGluZyBvZiBhc3NldCBwdWJsaXNoaW5nXG4gICAgICAvLyBpcyBnb2luZyB0byBpbnRlcmZlcmUgd2l0aCB0aGUgcHJvZ3Jlc3MgYmFyIG9mIHRoZSBzdGFjayBkZXBsb3ltZW50LiBXZSBjb3VsZCByZW1vdmUgdGhpc1xuICAgICAgLy8gZm9yIG92ZXJhbGwgZmFzdGVyIGRlcGxveW1lbnRzIGlmIHdlIGV2ZXIgaGF2ZSBhIGJldHRlciBtZXRob2Qgb2YgcHJvZ3Jlc3MgZGlzcGxheWluZy5cbiAgICAgIC8vIE5vdGU6IHRoaXMgbWF5IGludHJvZHVjZSBhIGN5Y2xlIGlmIG9uZSBvZiB0aGUgcGFyZW50J3MgZGVwZW5kZW5jaWVzIGlzIGFub3RoZXIgc3RhY2sgdGhhdFxuICAgICAgLy8gZGVwZW5kcyBvbiB0aGlzIGFzc2V0LiBUbyB3b3JrYXJvdW5kIHRoaXMgd2UgcmVtb3ZlIHRoZXNlIGN5Y2xlcyBvbmNlIGFsbCBub2RlcyBoYXZlXG4gICAgICAvLyBiZWVuIGFkZGVkIHRvIHRoZSBncmFwaC5cbiAgICAgIHRoaXMuZ3JhcGguYWRkRGVwZW5kZW5jeShwdWJsaXNoSWQsIGluaGVyaXRlZERlcCk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyB3aWxsIHdvcmsgd2hldGhlciB0aGUgc3RhY2sgbm9kZSBoYXMgYmVlbiBhZGRlZCB5ZXQgb3Igbm90XG4gICAgdGhpcy5ncmFwaC5hZGREZXBlbmRlbmN5KGAke3RoaXMuaWRQcmVmaXh9JHtwYXJlbnRTdGFjay5pZH1gLCBwdWJsaXNoSWQpO1xuICB9XG5cbiAgcHVibGljIGJ1aWxkKGFydGlmYWN0czogY3hhcGkuQ2xvdWRBcnRpZmFjdFtdKTogV29ya0dyYXBoIHtcbiAgICBjb25zdCBwYXJlbnRTdGFja3MgPSBzdGFja3NGcm9tQXNzZXRzKGFydGlmYWN0cyk7XG5cbiAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIGFydGlmYWN0cykge1xuICAgICAgaWYgKGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdC5pc0Nsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdChhcnRpZmFjdCkpIHtcbiAgICAgICAgdGhpcy5hZGRTdGFjayhhcnRpZmFjdCk7XG4gICAgICB9IGVsc2UgaWYgKGN4YXBpLkFzc2V0TWFuaWZlc3RBcnRpZmFjdC5pc0Fzc2V0TWFuaWZlc3RBcnRpZmFjdChhcnRpZmFjdCkpIHtcbiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSBBc3NldE1hbmlmZXN0LmZyb21GaWxlKGFydGlmYWN0LmZpbGUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgbWFuaWZlc3QuZW50cmllcykge1xuICAgICAgICAgIGNvbnN0IHBhcmVudFN0YWNrID0gcGFyZW50U3RhY2tzLmdldChhcnRpZmFjdCk7XG4gICAgICAgICAgaWYgKHBhcmVudFN0YWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ09ycGhhbmVkQXNzZXRNYW5pZmVzdCcsICdGb3VuZCBhbiBhc3NldCBtYW5pZmVzdCB0aGF0IGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBzdGFjaycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFkZEFzc2V0KHBhcmVudFN0YWNrLCBhcnRpZmFjdCwgbWFuaWZlc3QsIGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjeGFwaS5OZXN0ZWRDbG91ZEFzc2VtYmx5QXJ0aWZhY3QuaXNOZXN0ZWRDbG91ZEFzc2VtYmx5QXJ0aWZhY3QoYXJ0aWZhY3QpKSB7XG4gICAgICAgIGNvbnN0IGFzc2VtYmx5ID0gbmV3IGN4YXBpLkNsb3VkQXNzZW1ibHkoYXJ0aWZhY3QuZnVsbFBhdGgsIHsgdG9wb1NvcnQ6IGZhbHNlIH0pO1xuICAgICAgICBjb25zdCBuZXN0ZWRHcmFwaCA9IG5ldyBXb3JrR3JhcGhCdWlsZGVyKFxuICAgICAgICAgIHRoaXMuaW9IZWxwZXIsXG4gICAgICAgICAgdGhpcy5wcmVidWlsZEFzc2V0cyxcbiAgICAgICAgICBgJHt0aGlzLmlkUHJlZml4fSR7YXJ0aWZhY3QuaWR9LmAsXG4gICAgICAgICkuYnVpbGQoYXNzZW1ibHkuYXJ0aWZhY3RzKTtcbiAgICAgICAgdGhpcy5ncmFwaC5hYnNvcmIobmVzdGVkR3JhcGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWdub3JlIHdoYXRldmVyIGVsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoLnJlbW92ZVVuYXZhaWxhYmxlRGVwZW5kZW5jaWVzKCk7XG5cbiAgICAvLyBSZW1vdmUgYW55IHBvdGVudGlhbGx5IGludHJvZHVjZWQgY3ljbGVzIGJldHdlZW4gYXNzZXQgcHVibGlzaGluZyBhbmQgdGhlIHN0YWNrcyB0aGF0IGRlcGVuZCBvbiB0aGVtLlxuICAgIHRoaXMucmVtb3ZlU3RhY2tQdWJsaXNoQ3ljbGVzKCk7XG5cbiAgICByZXR1cm4gdGhpcy5ncmFwaDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhY2tBcnRpZmFjdElkcyhkZXBzOiBjeGFwaS5DbG91ZEFydGlmYWN0W10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGRlcHMuZmxhdE1hcCgoZCkgPT4gY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LmlzQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KGQpID8gW3RoaXMuc3RhY2tBcnRpZmFjdElkKGQpXSA6IFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhY2tBcnRpZmFjdElkKGFydGlmYWN0OiBjeGFwaS5DbG91ZEFydGlmYWN0KTogc3RyaW5nIHtcbiAgICBpZiAoIWN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdC5pc0Nsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdChhcnRpZmFjdCkpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0ludmFsaWRBcnRpZmFjdFR5cGUnLCBgQ2FuIG9ubHkgY2FsbCB0aGlzIG9uIENsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCwgZ290OiAke2FydGlmYWN0LmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLmlkUHJlZml4fSR7YXJ0aWZhY3QuaWR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXZSBtYXkgaGF2ZSBhY2NpZGVudGFsbHkgaW50cm9kdWNlZCBjeWNsZXMgaW4gYW4gYXR0ZW1wdCB0byBtYWtlIHRoZSBtZXNzYWdlcyBwcmludGVkIHRvIHRoZVxuICAgKiBjb25zb2xlIG5vdCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyIHRvbyBtdWNoLiBSZW1vdmUgdGhlbSBhZ2Fpbi5cbiAgICovXG4gIHByaXZhdGUgcmVtb3ZlU3RhY2tQdWJsaXNoQ3ljbGVzKCkge1xuICAgIGNvbnN0IHB1Ymxpc2hTdGVwcyA9IHRoaXMuZ3JhcGgubm9kZXNPZlR5cGUoJ2Fzc2V0LXB1Ymxpc2gnKTtcbiAgICBmb3IgKGNvbnN0IHB1Ymxpc2hTdGVwIG9mIHB1Ymxpc2hTdGVwcykge1xuICAgICAgZm9yIChjb25zdCBkZXAgb2YgcHVibGlzaFN0ZXAuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGlmICh0aGlzLmdyYXBoLnJlYWNoYWJsZShkZXAsIHB1Ymxpc2hTdGVwLmlkKSkge1xuICAgICAgICAgIHB1Ymxpc2hTdGVwLmRlcGVuZGVuY2llcy5kZWxldGUoZGVwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFja3NGcm9tQXNzZXRzKGFydGlmYWN0czogY3hhcGkuQ2xvdWRBcnRpZmFjdFtdKSB7XG4gIGNvbnN0IHJldCA9IG5ldyBNYXA8Y3hhcGkuQXNzZXRNYW5pZmVzdEFydGlmYWN0LCBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q+KCk7XG4gIGZvciAoY29uc3Qgc3RhY2sgb2YgYXJ0aWZhY3RzLmZpbHRlcih4ID0+IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdC5pc0Nsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCh4KSkpIHtcbiAgICBjb25zdCBhc3NldEFydGlmYWN0cyA9IHN0YWNrLmRlcGVuZGVuY2llcy5maWx0ZXIoKHgpID0+IGN4YXBpLkFzc2V0TWFuaWZlc3RBcnRpZmFjdC5pc0Fzc2V0TWFuaWZlc3RBcnRpZmFjdCh4KSk7XG4gICAgZm9yIChjb25zdCBhcnQgb2YgYXNzZXRBcnRpZmFjdHMpIHtcbiAgICAgIHJldC5zZXQoYXJ0LCBzdGFjayk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25seVN0YWNrcyhhcnRpZmFjdHM6IGN4YXBpLkNsb3VkQXJ0aWZhY3RbXSkge1xuICByZXR1cm4gYXJ0aWZhY3RzLmZpbHRlcih4ID0+IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdC5pc0Nsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCh4KSk7XG59XG5cbiJdfQ==
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1ncmFwaC1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid29yay1ncmFwaC1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDREQUE2RTtBQUM3RSxxREFBcUQ7QUFDckQsNkNBQXlDO0FBRXpDLHlEQUFxRDtBQUNyRCwrREFBMkQ7QUFDM0QscUNBQTRDO0FBRzVDLE1BQWEsZ0JBQWdCO0lBd0JSO0lBQ0E7SUF4Qm5COzs7Ozs7Ozs7OztPQVdHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsR0FBcUM7UUFDM0QsYUFBYSxFQUFFLEVBQUU7UUFDakIsZUFBZSxFQUFFLENBQUM7UUFDbEIsT0FBTyxFQUFFLENBQUM7UUFDVixRQUFRLEVBQUUsR0FBRztLQUNkLENBQUM7SUFDZSxLQUFLLENBQVk7SUFDakIsUUFBUSxDQUFXO0lBRXBDLFlBQ0UsUUFBa0IsRUFDRCxjQUF1QixFQUN2QixXQUFXLEVBQUU7UUFEYixtQkFBYyxHQUFkLGNBQWMsQ0FBUztRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUFLO1FBRTlCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxzQkFBUyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRU8sUUFBUSxDQUFDLFFBQTJDO1FBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ2xCLElBQUksRUFBRSxPQUFPO1lBQ2IsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQ3BDLFlBQVksRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQy9FLEtBQUssRUFBRSxRQUFRO1lBQ2YsZUFBZSxFQUFFLGtDQUFlLENBQUMsT0FBTztZQUN4QyxR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O0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsU0FBZ0M7SUFDbEQsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzc2V0TWFuaWZlc3QsIHR5cGUgSU1hbmlmZXN0RW50cnkgfSBmcm9tICdAYXdzLWNkay9jZGstYXNzZXRzLWxpYic7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuaW1wb3J0IHsgV29ya0dyYXBoIH0gZnJvbSAnLi93b3JrLWdyYXBoJztcbmltcG9ydCB0eXBlIHsgQXNzZXRCdWlsZE5vZGUsIE1hcmtlck5vZGUsIFdvcmtOb2RlIH0gZnJvbSAnLi93b3JrLWdyYXBoLXR5cGVzJztcbmltcG9ydCB7IERlcGxveW1lbnRTdGF0ZSB9IGZyb20gJy4vd29yay1ncmFwaC10eXBlcyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgY29udGVudEhhc2hBbnkgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcblxuZXhwb3J0IGNsYXNzIFdvcmtHcmFwaEJ1aWxkZXIge1xuICAvKipcbiAgICogRGVmYXVsdCBwcmlvcml0aWVzIGZvciBub2Rlc1xuICAgKlxuICAgKiBNZXNzYWdlcyBoYXZlIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRvIGVuc3VyZSB0aGV5IGFyZSBlbWl0dGVkIGFzIHNvb24gYXNcbiAgICogcG9zc2libGUgKGJlY2F1c2UgdGhleSB3aWxsIGJlIHVzZWQgZm9yIG1lYXN1cmluZyB0aW1pbmdzKS5cbiAgICpcbiAgICogQXNzZXRzIGJ1aWxkcyBoYXZlIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoZSBvdGhlciB0d28gb3BlcmF0aW9ucywgdG8gbWFrZSBnb29kIG9uIG91ciBwcm9taXNlIHRoYXRcbiAgICogJy0tcHJlYnVpbGQtYXNzZXRzJyB3aWxsIGFjdHVhbGx5IGRvIGFzc2V0cyBiZWZvcmUgc3RhY2tzIChpZiBpdCBjYW4pLiBVbmZvcnR1bmF0ZWx5IGl0IGlzIHRoZVxuICAgKiBkZWZhdWx0IDooXG4gICAqXG4gICAqIEJ1dCBiZXR3ZWVuIHN0YWNrIGRlcGVuZGVuY2llcyBhbmQgcHVibGlzaCBkZXBlbmRlbmNpZXMsIHN0YWNrIGRlcGVuZGVuY2llcyBnbyBmaXJzdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBQUklPUklUSUVTOiBSZWNvcmQ8V29ya05vZGVbJ3R5cGUnXSwgbnVtYmVyPiA9IHtcbiAgICAnYXNzZXQtYnVpbGQnOiAxMCxcbiAgICAnYXNzZXQtcHVibGlzaCc6IDAsXG4gICAgJ3N0YWNrJzogNSxcbiAgICAnbWFya2VyJzogMTAwLFxuICB9O1xuICBwcml2YXRlIHJlYWRvbmx5IGdyYXBoOiBXb3JrR3JhcGg7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByZWJ1aWxkQXNzZXRzOiBib29sZWFuLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWRQcmVmaXggPSAnJyxcbiAgKSB7XG4gICAgdGhpcy5ncmFwaCA9IG5ldyBXb3JrR3JhcGgoe30sIGlvSGVscGVyKTtcbiAgICB0aGlzLmlvSGVscGVyID0gaW9IZWxwZXI7XG4gIH1cblxuICBwcml2YXRlIGFkZFN0YWNrKGFydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QpIHtcbiAgICB0aGlzLmdyYXBoLmFkZE5vZGVzKHtcbiAgICAgIHR5cGU6ICdzdGFjaycsXG4gICAgICBpZDogYCR7dGhpcy5pZFByZWZpeH0ke2FydGlmYWN0LmlkfWAsXG4gICAgICBkZXBlbmRlbmNpZXM6IG5ldyBTZXQodGhpcy5zdGFja0FydGlmYWN0SWRzKG9ubHlTdGFja3MoYXJ0aWZhY3QuZGVwZW5kZW5jaWVzKSkpLFxuICAgICAgc3RhY2s6IGFydGlmYWN0LFxuICAgICAgZGVwbG95bWVudFN0YXRlOiBEZXBsb3ltZW50U3RhdGUuUEVORElORyxcbiAgICAgIHByaW9yaXR5OiBXb3JrR3JhcGhCdWlsZGVyLlBSSU9SSVRJRVMuc3RhY2ssXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT29mLCBzZWUgdGhpcyBwYXJhbWV0ZXIgbGlzdFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzdHlsaXN0aWMvbWF4LWxlblxuICBwcml2YXRlIGFkZEFzc2V0KHBhcmVudFN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsIGFzc2V0TWFuaWZlc3RBcnRpZmFjdDogY3hhcGkuQXNzZXRNYW5pZmVzdEFydGlmYWN0LCBhc3NldE1hbmlmZXN0OiBBc3NldE1hbmlmZXN0LCBhc3NldDogSU1hbmlmZXN0RW50cnkpIHtcbiAgICAvLyBKdXN0IHRoZSBhcnRpZmFjdCBpZGVudGlmaWVyXG4gICAgY29uc3QgYXNzZXRJZCA9IGFzc2V0LmlkLmFzc2V0SWQ7XG5cbiAgICAvLyBCdWlsZCBub2RlLCBjb250YWlucyBoYXNoIG9mIHNvdXJjZSAoYnVpbGQgb25seSBvbmNlKVxuICAgIGNvbnN0IHNvdXJjZUhhc2ggPSBjb250ZW50SGFzaEFueShbYXNzZXRJZCwgYXNzZXQuZ2VuZXJpY1NvdXJjZV0pLnN1YnN0cmluZygwLCAxMCk7XG4gICAgY29uc3QgYnVpbGRJZCA9IGBidWlsZC0ke2Fzc2V0SWR9LSR7c291cmNlSGFzaH1gO1xuICAgIC8vIFB1Ymxpc2ggbm9kZSwgY29udGFpbnMgaGFzaCBvZiBib3RoIHNvdXJjZSBhbmQgZGVzdFxuICAgIGNvbnN0IHB1Ymxpc2hJZCA9IGBwdWJsaXNoLSR7YXNzZXRJZH0tJHtzb3VyY2VIYXNofSR7Y29udGVudEhhc2hBbnkoW2Fzc2V0SWQsIGFzc2V0LmdlbmVyaWNEZXN0aW5hdGlvbl0pLnN1YnN0cmluZygwLCAxMCl9YDtcblxuICAgIC8vIE1lc3NhZ2UgdG8gZW1pdCB3aGVuIHdlIHN0YXJ0IG9uIGFuIGFzc2V0XG4gICAgY29uc3Qgc3RhcnRJZCA9IGBzdGFydC0ke2Fzc2V0SWR9YDtcbiAgICBpZiAoIXRoaXMuZ3JhcGgudHJ5R2V0Tm9kZShzdGFydElkKSkge1xuICAgICAgdGhpcy5ncmFwaC5hZGROb2Rlcyh7XG4gICAgICAgIHR5cGU6ICdtYXJrZXInLFxuICAgICAgICBpZDogc3RhcnRJZCxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBuZXcgU2V0KCksXG4gICAgICAgIGRlcGxveW1lbnRTdGF0ZTogRGVwbG95bWVudFN0YXRlLlBFTkRJTkcsXG4gICAgICAgIHByaW9yaXR5OiBXb3JrR3JhcGhCdWlsZGVyLlBSSU9SSVRJRVMubWFya2VyLFxuICAgICAgICBtYXJrZXI6IHsgdHlwZTogJ3N0YXJ0LWFzc2V0JywgYXNzZXQgfSxcbiAgICAgIH0gc2F0aXNmaWVzIE1hcmtlck5vZGUpO1xuICAgIH1cblxuICAgIC8vIE1lc3NhZ2UgdG8gZW1pdCB3aGVuIHdlIGVuZCBhbiBhc3NldFxuICAgIGNvbnN0IGVuZElkID0gYGVuZC0ke2Fzc2V0SWR9YDtcbiAgICBpZiAoIXRoaXMuZ3JhcGgudHJ5R2V0Tm9kZShlbmRJZCkpIHtcbiAgICAgIHRoaXMuZ3JhcGguYWRkTm9kZXMoe1xuICAgICAgICB0eXBlOiAnbWFya2VyJyxcbiAgICAgICAgaWQ6IGVuZElkLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IG5ldyBTZXQoKSxcbiAgICAgICAgZGVwbG95bWVudFN0YXRlOiBEZXBsb3ltZW50U3RhdGUuUEVORElORyxcbiAgICAgICAgcHJpb3JpdHk6IFdvcmtHcmFwaEJ1aWxkZXIuUFJJT1JJVElFUy5tYXJrZXIsXG4gICAgICAgIG1hcmtlcjogeyB0eXBlOiAnZW5kLWFzc2V0JywgYXNzZXQgfSxcbiAgICAgIH0gc2F0aXNmaWVzIE1hcmtlck5vZGUpO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIG5vZGUgb25seSBnZXRzIGFkZGVkIG9uY2UgYmVjYXVzZSB0aGV5IGFyZSBhbGwgdGhlIHNhbWVcbiAgICBpZiAoIXRoaXMuZ3JhcGgudHJ5R2V0Tm9kZShidWlsZElkKSkge1xuICAgICAgY29uc3Qgbm9kZTogQXNzZXRCdWlsZE5vZGUgPSB7XG4gICAgICAgIHR5cGU6ICdhc3NldC1idWlsZCcsXG4gICAgICAgIGlkOiBidWlsZElkLFxuICAgICAgICBub3RlOiBhc3NldC5kaXNwbGF5TmFtZShmYWxzZSksXG4gICAgICAgIGRlcGVuZGVuY2llczogbmV3IFNldChbXG4gICAgICAgICAgLy8gQnVpbGQgZGVwZW5kcyBvbiB0aGUgc3RhcnQgbWVzc2FnZSBoYXZpbmcgYmVlbiBlbWl0dGVkLlxuICAgICAgICAgIHN0YXJ0SWQsXG4gICAgICAgICAgLi4udGhpcy5zdGFja0FydGlmYWN0SWRzKGFzc2V0TWFuaWZlc3RBcnRpZmFjdC5kZXBlbmRlbmNpZXMpLFxuICAgICAgICAgIC8vIElmIHdlIGRpc2FibGUgcHJlYnVpbGQsIHRoZW4gYXNzZXRzIGluaGVyaXQgKHN0YWNrKSBkZXBlbmRlbmNpZXMgZnJvbSB0aGVpciBwYXJlbnQgc3RhY2tcbiAgICAgICAgICAuLi4hdGhpcy5wcmVidWlsZEFzc2V0cyA/IHRoaXMuc3RhY2tBcnRpZmFjdElkcyhvbmx5U3RhY2tzKHBhcmVudFN0YWNrLmRlcGVuZGVuY2llcykpIDogW10sXG4gICAgICAgIF0pLFxuICAgICAgICBwYXJlbnRTdGFjazogcGFyZW50U3RhY2ssXG4gICAgICAgIGFzc2V0TWFuaWZlc3RBcnRpZmFjdCxcbiAgICAgICAgYXNzZXRNYW5pZmVzdCxcbiAgICAgICAgYXNzZXQsXG4gICAgICAgIGRlcGxveW1lbnRTdGF0ZTogRGVwbG95bWVudFN0YXRlLlBFTkRJTkcsXG4gICAgICAgIHByaW9yaXR5OiBXb3JrR3JhcGhCdWlsZGVyLlBSSU9SSVRJRVNbJ2Fzc2V0LWJ1aWxkJ10sXG4gICAgICB9O1xuICAgICAgdGhpcy5ncmFwaC5hZGROb2Rlcyhub2RlKTtcbiAgICB9XG5cbiAgICBjb25zdCBwdWJsaXNoTm9kZSA9IHRoaXMuZ3JhcGgudHJ5R2V0Tm9kZShwdWJsaXNoSWQpO1xuICAgIGlmICghcHVibGlzaE5vZGUpIHtcbiAgICAgIHRoaXMuZ3JhcGguYWRkTm9kZXMoe1xuICAgICAgICB0eXBlOiAnYXNzZXQtcHVibGlzaCcsXG4gICAgICAgIGlkOiBwdWJsaXNoSWQsXG4gICAgICAgIG5vdGU6IGFzc2V0LmRpc3BsYXlOYW1lKHRydWUpLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IG5ldyBTZXQoW1xuICAgICAgICAgIGJ1aWxkSWQsXG4gICAgICAgIF0pLFxuICAgICAgICBwYXJlbnRTdGFjayxcbiAgICAgICAgYXNzZXRNYW5pZmVzdEFydGlmYWN0LFxuICAgICAgICBhc3NldE1hbmlmZXN0LFxuICAgICAgICBhc3NldCxcbiAgICAgICAgZGVwbG95bWVudFN0YXRlOiBEZXBsb3ltZW50U3RhdGUuUEVORElORyxcbiAgICAgICAgcHJpb3JpdHk6IFdvcmtHcmFwaEJ1aWxkZXIuUFJJT1JJVElFU1snYXNzZXQtcHVibGlzaCddLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEV2ZXJ5IHB1Ymxpc2ggbm9kZSB0aGF0IHdlIGFkZCBtdXN0IGNvbXBsZXRlIGJlZm9yZSB3ZSBmaXJlIHRoZSBcImRvbmUgd2l0aCBwdWJsaXNoaW5nIHRoaXMgYXNzZXRcIiBtZXNzYWdlLlxuICAgICAgdGhpcy5ncmFwaC5hZGREZXBlbmRlbmN5KGVuZElkLCBwdWJsaXNoSWQpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgaW5oZXJpdGVkRGVwIG9mIHRoaXMuc3RhY2tBcnRpZmFjdElkcyhvbmx5U3RhY2tzKHBhcmVudFN0YWNrLmRlcGVuZGVuY2llcykpKSB7XG4gICAgICAvLyBUaGUgYXNzZXQgcHVibGlzaCBzdGVwIGFsc28gZGVwZW5kcyBvbiB0aGUgc3RhY2tzIHRoYXQgdGhlIHBhcmVudCBkZXBlbmRzIG9uLlxuICAgICAgLy8gVGhpcyBpcyBwdXJlbHkgY29zbWV0aWM6IGlmIHdlIGRvbid0IGRvIHRoaXMsIHRoZSBwcm9ncmVzcyBwcmludGluZyBvZiBhc3NldCBwdWJsaXNoaW5nXG4gICAgICAvLyBpcyBnb2luZyB0byBpbnRlcmZlcmUgd2l0aCB0aGUgcHJvZ3Jlc3MgYmFyIG9mIHRoZSBzdGFjayBkZXBsb3ltZW50LiBXZSBjb3VsZCByZW1vdmUgdGhpc1xuICAgICAgLy8gZm9yIG92ZXJhbGwgZmFzdGVyIGRlcGxveW1lbnRzIGlmIHdlIGV2ZXIgaGF2ZSBhIGJldHRlciBtZXRob2Qgb2YgcHJvZ3Jlc3MgZGlzcGxheWluZy5cbiAgICAgIC8vIE5vdGU6IHRoaXMgbWF5IGludHJvZHVjZSBhIGN5Y2xlIGlmIG9uZSBvZiB0aGUgcGFyZW50J3MgZGVwZW5kZW5jaWVzIGlzIGFub3RoZXIgc3RhY2sgdGhhdFxuICAgICAgLy8gZGVwZW5kcyBvbiB0aGlzIGFzc2V0LiBUbyB3b3JrYXJvdW5kIHRoaXMgd2UgcmVtb3ZlIHRoZXNlIGN5Y2xlcyBvbmNlIGFsbCBub2RlcyBoYXZlXG4gICAgICAvLyBiZWVuIGFkZGVkIHRvIHRoZSBncmFwaC5cbiAgICAgIHRoaXMuZ3JhcGguYWRkRGVwZW5kZW5jeShwdWJsaXNoSWQsIGluaGVyaXRlZERlcCk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyB3aWxsIHdvcmsgd2hldGhlciB0aGUgc3RhY2sgbm9kZSBoYXMgYmVlbiBhZGRlZCB5ZXQgb3Igbm90XG4gICAgdGhpcy5ncmFwaC5hZGREZXBlbmRlbmN5KGAke3RoaXMuaWRQcmVmaXh9JHtwYXJlbnRTdGFjay5pZH1gLCBwdWJsaXNoSWQpO1xuICB9XG5cbiAgcHVibGljIGJ1aWxkKGFydGlmYWN0czogY3hhcGkuQ2xvdWRBcnRpZmFjdFtdKTogV29ya0dyYXBoIHtcbiAgICBjb25zdCBwYXJlbnRTdGFja3MgPSBzdGFja3NGcm9tQXNzZXRzKGFydGlmYWN0cyk7XG5cbiAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIGFydGlmYWN0cykge1xuICAgICAgaWYgKGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdC5pc0Nsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdChhcnRpZmFjdCkpIHtcbiAgICAgICAgdGhpcy5hZGRTdGFjayhhcnRpZmFjdCk7XG4gICAgICB9IGVsc2UgaWYgKGN4YXBpLkFzc2V0TWFuaWZlc3RBcnRpZmFjdC5pc0Fzc2V0TWFuaWZlc3RBcnRpZmFjdChhcnRpZmFjdCkpIHtcbiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSBBc3NldE1hbmlmZXN0LmZyb21GaWxlKGFydGlmYWN0LmZpbGUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgbWFuaWZlc3QuZW50cmllcykge1xuICAgICAgICAgIGNvbnN0IHBhcmVudFN0YWNrID0gcGFyZW50U3RhY2tzLmdldChhcnRpZmFjdCk7XG4gICAgICAgICAgaWYgKHBhcmVudFN0YWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ09ycGhhbmVkQXNzZXRNYW5pZmVzdCcsICdGb3VuZCBhbiBhc3NldCBtYW5pZmVzdCB0aGF0IGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBzdGFjaycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFkZEFzc2V0KHBhcmVudFN0YWNrLCBhcnRpZmFjdCwgbWFuaWZlc3QsIGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjeGFwaS5OZXN0ZWRDbG91ZEFzc2VtYmx5QXJ0aWZhY3QuaXNOZXN0ZWRDbG91ZEFzc2VtYmx5QXJ0aWZhY3QoYXJ0aWZhY3QpKSB7XG4gICAgICAgIGNvbnN0IGFzc2VtYmx5ID0gbmV3IGN4YXBpLkNsb3VkQXNzZW1ibHkoYXJ0aWZhY3QuZnVsbFBhdGgsIHsgdG9wb1NvcnQ6IGZhbHNlIH0pO1xuICAgICAgICBjb25zdCBuZXN0ZWRHcmFwaCA9IG5ldyBXb3JrR3JhcGhCdWlsZGVyKFxuICAgICAgICAgIHRoaXMuaW9IZWxwZXIsXG4gICAgICAgICAgdGhpcy5wcmVidWlsZEFzc2V0cyxcbiAgICAgICAgICBgJHt0aGlzLmlkUHJlZml4fSR7YXJ0aWZhY3QuaWR9LmAsXG4gICAgICAgICkuYnVpbGQoYXNzZW1ibHkuYXJ0aWZhY3RzKTtcbiAgICAgICAgdGhpcy5ncmFwaC5hYnNvcmIobmVzdGVkR3JhcGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWdub3JlIHdoYXRldmVyIGVsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoLnJlbW92ZVVuYXZhaWxhYmxlRGVwZW5kZW5jaWVzKCk7XG5cbiAgICAvLyBSZW1vdmUgYW55IHBvdGVudGlhbGx5IGludHJvZHVjZWQgY3ljbGVzIGJldHdlZW4gYXNzZXQgcHVibGlzaGluZyBhbmQgdGhlIHN0YWNrcyB0aGF0IGRlcGVuZCBvbiB0aGVtLlxuICAgIHRoaXMucmVtb3ZlU3RhY2tQdWJsaXNoQ3ljbGVzKCk7XG5cbiAgICByZXR1cm4gdGhpcy5ncmFwaDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhY2tBcnRpZmFjdElkcyhkZXBzOiBjeGFwaS5DbG91ZEFydGlmYWN0W10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGRlcHMuZmxhdE1hcCgoZCkgPT4gY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LmlzQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KGQpID8gW3RoaXMuc3RhY2tBcnRpZmFjdElkKGQpXSA6IFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhY2tBcnRpZmFjdElkKGFydGlmYWN0OiBjeGFwaS5DbG91ZEFydGlmYWN0KTogc3RyaW5nIHtcbiAgICBpZiAoIWN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdC5pc0Nsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdChhcnRpZmFjdCkpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0ludmFsaWRBcnRpZmFjdFR5cGUnLCBgQ2FuIG9ubHkgY2FsbCB0aGlzIG9uIENsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCwgZ290OiAke2FydGlmYWN0LmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLmlkUHJlZml4fSR7YXJ0aWZhY3QuaWR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXZSBtYXkgaGF2ZSBhY2NpZGVudGFsbHkgaW50cm9kdWNlZCBjeWNsZXMgaW4gYW4gYXR0ZW1wdCB0byBtYWtlIHRoZSBtZXNzYWdlcyBwcmludGVkIHRvIHRoZVxuICAgKiBjb25zb2xlIG5vdCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyIHRvbyBtdWNoLiBSZW1vdmUgdGhlbSBhZ2Fpbi5cbiAgICovXG4gIHByaXZhdGUgcmVtb3ZlU3RhY2tQdWJsaXNoQ3ljbGVzKCkge1xuICAgIGNvbnN0IHB1Ymxpc2hTdGVwcyA9IHRoaXMuZ3JhcGgubm9kZXNPZlR5cGUoJ2Fzc2V0LXB1Ymxpc2gnKTtcbiAgICBmb3IgKGNvbnN0IHB1Ymxpc2hTdGVwIG9mIHB1Ymxpc2hTdGVwcykge1xuICAgICAgZm9yIChjb25zdCBkZXAgb2YgcHVibGlzaFN0ZXAuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGlmICh0aGlzLmdyYXBoLnJlYWNoYWJsZShkZXAsIHB1Ymxpc2hTdGVwLmlkKSkge1xuICAgICAgICAgIHB1Ymxpc2hTdGVwLmRlcGVuZGVuY2llcy5kZWxldGUoZGVwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFja3NGcm9tQXNzZXRzKGFydGlmYWN0czogY3hhcGkuQ2xvdWRBcnRpZmFjdFtdKSB7XG4gIGNvbnN0IHJldCA9IG5ldyBNYXA8Y3hhcGkuQXNzZXRNYW5pZmVzdEFydGlmYWN0LCBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q+KCk7XG4gIGZvciAoY29uc3Qgc3RhY2sgb2YgYXJ0aWZhY3RzLmZpbHRlcih4ID0+IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdC5pc0Nsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCh4KSkpIHtcbiAgICBjb25zdCBhc3NldEFydGlmYWN0cyA9IHN0YWNrLmRlcGVuZGVuY2llcy5maWx0ZXIoKHgpID0+IGN4YXBpLkFzc2V0TWFuaWZlc3RBcnRpZmFjdC5pc0Fzc2V0TWFuaWZlc3RBcnRpZmFjdCh4KSk7XG4gICAgZm9yIChjb25zdCBhcnQgb2YgYXNzZXRBcnRpZmFjdHMpIHtcbiAgICAgIHJldC5zZXQoYXJ0LCBzdGFjayk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25seVN0YWNrcyhhcnRpZmFjdHM6IGN4YXBpLkNsb3VkQXJ0aWZhY3RbXSkge1xuICByZXR1cm4gYXJ0aWZhY3RzLmZpbHRlcih4ID0+IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdC5pc0Nsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCh4KSk7XG59XG5cbiJdfQ==
@@ -8,19 +8,19 @@ export declare enum DeploymentState {
8
8
  FAILED = "failed",
9
9
  SKIPPED = "skipped"
10
10
  }
11
- export type WorkNode = StackNode | AssetBuildNode | AssetPublishNode;
11
+ export type WorkNode = StackNode | AssetBuildNode | AssetPublishNode | MarkerNode;
12
12
  export interface WorkNodeCommon {
13
13
  readonly id: string;
14
14
  readonly dependencies: Set<string>;
15
15
  deploymentState: DeploymentState;
16
16
  /** Some readable information to attach to the id, which may be unreadable */
17
17
  readonly note?: string;
18
+ /** Sort by priority when picking up work, higher is earlier */
19
+ readonly priority?: number;
18
20
  }
19
21
  export interface StackNode extends WorkNodeCommon {
20
22
  readonly type: 'stack';
21
23
  readonly stack: cxapi.CloudFormationStackArtifact;
22
- /** Sort by priority when picking up work, higher is earlier */
23
- readonly priority?: number;
24
24
  }
25
25
  export interface AssetBuildNode extends WorkNodeCommon {
26
26
  readonly type: 'asset-build';
@@ -32,8 +32,6 @@ export interface AssetBuildNode extends WorkNodeCommon {
32
32
  readonly parentStack: cxapi.CloudFormationStackArtifact;
33
33
  /** The asset that needs to be built */
34
34
  readonly asset: IManifestEntry;
35
- /** Sort by priority when picking up work, higher is earlier */
36
- readonly priority?: number;
37
35
  }
38
36
  export interface AssetPublishNode extends WorkNodeCommon {
39
37
  readonly type: 'asset-publish';
@@ -45,7 +43,21 @@ export interface AssetPublishNode extends WorkNodeCommon {
45
43
  readonly parentStack: cxapi.CloudFormationStackArtifact;
46
44
  /** The asset that needs to be published */
47
45
  readonly asset: IManifestEntry;
48
- /** Sort by priority when picking up work, higher is earlier */
49
- readonly priority?: number;
46
+ }
47
+ /**
48
+ * A node that represents a message to the IoHost to be emitted at a certain point in the graph execution.
49
+ *
50
+ * These are used to bookend certain parts of the graph.
51
+ */
52
+ export interface MarkerNode extends WorkNodeCommon {
53
+ readonly type: 'marker';
54
+ /** The event to emit when this node is reached. */
55
+ readonly marker: {
56
+ type: 'start-asset';
57
+ asset: IManifestEntry;
58
+ } | {
59
+ type: 'end-asset';
60
+ asset: IManifestEntry;
61
+ };
50
62
  }
51
63
  //# sourceMappingURL=work-graph-types.d.ts.map
@@ -10,4 +10,4 @@ var DeploymentState;
10
10
  DeploymentState["FAILED"] = "failed";
11
11
  DeploymentState["SKIPPED"] = "skipped";
12
12
  })(DeploymentState || (exports.DeploymentState = DeploymentState = {}));
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1ncmFwaC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndvcmstZ3JhcGgtdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsSUFBWSxlQU9YO0FBUEQsV0FBWSxlQUFlO0lBQ3pCLHNDQUFtQixDQUFBO0lBQ25CLG9DQUFpQixDQUFBO0lBQ2pCLDBDQUF1QixDQUFBO0lBQ3ZCLDBDQUF1QixDQUFBO0lBQ3ZCLG9DQUFpQixDQUFBO0lBQ2pCLHNDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFQVyxlQUFlLCtCQUFmLGVBQWUsUUFPMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFzc2V0TWFuaWZlc3QsIElNYW5pZmVzdEVudHJ5IH0gZnJvbSAnQGF3cy1jZGsvY2RrLWFzc2V0cy1saWInO1xuaW1wb3J0IHR5cGUgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuXG5leHBvcnQgZW51bSBEZXBsb3ltZW50U3RhdGUge1xuICBQRU5ESU5HID0gJ3BlbmRpbmcnLFxuICBRVUVVRUQgPSAncXVldWVkJyxcbiAgREVQTE9ZSU5HID0gJ2RlcGxveWluZycsXG4gIENPTVBMRVRFRCA9ICdjb21wbGV0ZWQnLFxuICBGQUlMRUQgPSAnZmFpbGVkJyxcbiAgU0tJUFBFRCA9ICdza2lwcGVkJyxcbn1cblxuZXhwb3J0IHR5cGUgV29ya05vZGUgPSBTdGFja05vZGUgfCBBc3NldEJ1aWxkTm9kZSB8IEFzc2V0UHVibGlzaE5vZGU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya05vZGVDb21tb24ge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM6IFNldDxzdHJpbmc+O1xuICBkZXBsb3ltZW50U3RhdGU6IERlcGxveW1lbnRTdGF0ZTtcbiAgLyoqIFNvbWUgcmVhZGFibGUgaW5mb3JtYXRpb24gdG8gYXR0YWNoIHRvIHRoZSBpZCwgd2hpY2ggbWF5IGJlIHVucmVhZGFibGUgKi9cbiAgcmVhZG9ubHkgbm90ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFja05vZGUgZXh0ZW5kcyBXb3JrTm9kZUNvbW1vbiB7XG4gIHJlYWRvbmx5IHR5cGU6ICdzdGFjayc7XG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG4gIC8qKiBTb3J0IGJ5IHByaW9yaXR5IHdoZW4gcGlja2luZyB1cCB3b3JrLCBoaWdoZXIgaXMgZWFybGllciAqL1xuICByZWFkb25seSBwcmlvcml0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc3NldEJ1aWxkTm9kZSBleHRlbmRzIFdvcmtOb2RlQ29tbW9uIHtcbiAgcmVhZG9ubHkgdHlwZTogJ2Fzc2V0LWJ1aWxkJztcbiAgLyoqIFRoZSBhc3NldCBtYW5pZmVzdCB0aGlzIGFzc2V0IHJlc2lkZXMgaW4gKGFydGlmYWN0KSAqL1xuICByZWFkb25seSBhc3NldE1hbmlmZXN0QXJ0aWZhY3Q6IGN4YXBpLkFzc2V0TWFuaWZlc3RBcnRpZmFjdDtcbiAgLyoqIFRoZSBhc3NldCBtYW5pZmVzdCB0aGlzIGFzc2V0IHJlc2lkZXMgaW4gKi9cbiAgcmVhZG9ubHkgYXNzZXRNYW5pZmVzdDogQXNzZXRNYW5pZmVzdDtcbiAgLyoqIFRoZSBzdGFjayB0aGlzIGFzc2V0IHdhcyBkZWZpbmVkIGluICh1c2VkIGZvciBlbnZpcm9ubWVudCBzZXR0aW5ncykgKi9cbiAgcmVhZG9ubHkgcGFyZW50U3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcbiAgLyoqIFRoZSBhc3NldCB0aGF0IG5lZWRzIHRvIGJlIGJ1aWx0ICovXG4gIHJlYWRvbmx5IGFzc2V0OiBJTWFuaWZlc3RFbnRyeTtcbiAgLyoqIFNvcnQgYnkgcHJpb3JpdHkgd2hlbiBwaWNraW5nIHVwIHdvcmssIGhpZ2hlciBpcyBlYXJsaWVyICovXG4gIHJlYWRvbmx5IHByaW9yaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0UHVibGlzaE5vZGUgZXh0ZW5kcyBXb3JrTm9kZUNvbW1vbiB7XG4gIHJlYWRvbmx5IHR5cGU6ICdhc3NldC1wdWJsaXNoJztcbiAgLyoqIFRoZSBhc3NldCBtYW5pZmVzdCB0aGlzIGFzc2V0IHJlc2lkZXMgaW4gKGFydGlmYWN0KSAqL1xuICByZWFkb25seSBhc3NldE1hbmlmZXN0QXJ0aWZhY3Q6IGN4YXBpLkFzc2V0TWFuaWZlc3RBcnRpZmFjdDtcbiAgLyoqIFRoZSBhc3NldCBtYW5pZmVzdCB0aGlzIGFzc2V0IHJlc2lkZXMgaW4gKi9cbiAgcmVhZG9ubHkgYXNzZXRNYW5pZmVzdDogQXNzZXRNYW5pZmVzdDtcbiAgLyoqIFRoZSBzdGFjayB0aGlzIGFzc2V0IHdhcyBkZWZpbmVkIGluICh1c2VkIGZvciBlbnZpcm9ubWVudCBzZXR0aW5ncykgKi9cbiAgcmVhZG9ubHkgcGFyZW50U3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcbiAgLyoqIFRoZSBhc3NldCB0aGF0IG5lZWRzIHRvIGJlIHB1Ymxpc2hlZCAqL1xuICByZWFkb25seSBhc3NldDogSU1hbmlmZXN0RW50cnk7XG4gIC8qKiBTb3J0IGJ5IHByaW9yaXR5IHdoZW4gcGlja2luZyB1cCB3b3JrLCBoaWdoZXIgaXMgZWFybGllciAqL1xuICByZWFkb25seSBwcmlvcml0eT86IG51bWJlcjtcbn1cbiJdfQ==
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1ncmFwaC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndvcmstZ3JhcGgtdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsSUFBWSxlQU9YO0FBUEQsV0FBWSxlQUFlO0lBQ3pCLHNDQUFtQixDQUFBO0lBQ25CLG9DQUFpQixDQUFBO0lBQ2pCLDBDQUF1QixDQUFBO0lBQ3ZCLDBDQUF1QixDQUFBO0lBQ3ZCLG9DQUFpQixDQUFBO0lBQ2pCLHNDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFQVyxlQUFlLCtCQUFmLGVBQWUsUUFPMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFzc2V0TWFuaWZlc3QsIElNYW5pZmVzdEVudHJ5IH0gZnJvbSAnQGF3cy1jZGsvY2RrLWFzc2V0cy1saWInO1xuaW1wb3J0IHR5cGUgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuXG5leHBvcnQgZW51bSBEZXBsb3ltZW50U3RhdGUge1xuICBQRU5ESU5HID0gJ3BlbmRpbmcnLFxuICBRVUVVRUQgPSAncXVldWVkJyxcbiAgREVQTE9ZSU5HID0gJ2RlcGxveWluZycsXG4gIENPTVBMRVRFRCA9ICdjb21wbGV0ZWQnLFxuICBGQUlMRUQgPSAnZmFpbGVkJyxcbiAgU0tJUFBFRCA9ICdza2lwcGVkJyxcbn1cblxuZXhwb3J0IHR5cGUgV29ya05vZGUgPSBTdGFja05vZGUgfCBBc3NldEJ1aWxkTm9kZSB8IEFzc2V0UHVibGlzaE5vZGUgfCBNYXJrZXJOb2RlO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtOb2RlQ29tbW9uIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzOiBTZXQ8c3RyaW5nPjtcbiAgZGVwbG95bWVudFN0YXRlOiBEZXBsb3ltZW50U3RhdGU7XG4gIC8qKiBTb21lIHJlYWRhYmxlIGluZm9ybWF0aW9uIHRvIGF0dGFjaCB0byB0aGUgaWQsIHdoaWNoIG1heSBiZSB1bnJlYWRhYmxlICovXG4gIHJlYWRvbmx5IG5vdGU/OiBzdHJpbmc7XG4gIC8qKiBTb3J0IGJ5IHByaW9yaXR5IHdoZW4gcGlja2luZyB1cCB3b3JrLCBoaWdoZXIgaXMgZWFybGllciAqL1xuICByZWFkb25seSBwcmlvcml0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFja05vZGUgZXh0ZW5kcyBXb3JrTm9kZUNvbW1vbiB7XG4gIHJlYWRvbmx5IHR5cGU6ICdzdGFjayc7XG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZXRCdWlsZE5vZGUgZXh0ZW5kcyBXb3JrTm9kZUNvbW1vbiB7XG4gIHJlYWRvbmx5IHR5cGU6ICdhc3NldC1idWlsZCc7XG4gIC8qKiBUaGUgYXNzZXQgbWFuaWZlc3QgdGhpcyBhc3NldCByZXNpZGVzIGluIChhcnRpZmFjdCkgKi9cbiAgcmVhZG9ubHkgYXNzZXRNYW5pZmVzdEFydGlmYWN0OiBjeGFwaS5Bc3NldE1hbmlmZXN0QXJ0aWZhY3Q7XG4gIC8qKiBUaGUgYXNzZXQgbWFuaWZlc3QgdGhpcyBhc3NldCByZXNpZGVzIGluICovXG4gIHJlYWRvbmx5IGFzc2V0TWFuaWZlc3Q6IEFzc2V0TWFuaWZlc3Q7XG4gIC8qKiBUaGUgc3RhY2sgdGhpcyBhc3NldCB3YXMgZGVmaW5lZCBpbiAodXNlZCBmb3IgZW52aXJvbm1lbnQgc2V0dGluZ3MpICovXG4gIHJlYWRvbmx5IHBhcmVudFN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG4gIC8qKiBUaGUgYXNzZXQgdGhhdCBuZWVkcyB0byBiZSBidWlsdCAqL1xuICByZWFkb25seSBhc3NldDogSU1hbmlmZXN0RW50cnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZXRQdWJsaXNoTm9kZSBleHRlbmRzIFdvcmtOb2RlQ29tbW9uIHtcbiAgcmVhZG9ubHkgdHlwZTogJ2Fzc2V0LXB1Ymxpc2gnO1xuICAvKiogVGhlIGFzc2V0IG1hbmlmZXN0IHRoaXMgYXNzZXQgcmVzaWRlcyBpbiAoYXJ0aWZhY3QpICovXG4gIHJlYWRvbmx5IGFzc2V0TWFuaWZlc3RBcnRpZmFjdDogY3hhcGkuQXNzZXRNYW5pZmVzdEFydGlmYWN0O1xuICAvKiogVGhlIGFzc2V0IG1hbmlmZXN0IHRoaXMgYXNzZXQgcmVzaWRlcyBpbiAqL1xuICByZWFkb25seSBhc3NldE1hbmlmZXN0OiBBc3NldE1hbmlmZXN0O1xuICAvKiogVGhlIHN0YWNrIHRoaXMgYXNzZXQgd2FzIGRlZmluZWQgaW4gKHVzZWQgZm9yIGVudmlyb25tZW50IHNldHRpbmdzKSAqL1xuICByZWFkb25seSBwYXJlbnRTdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICAvKiogVGhlIGFzc2V0IHRoYXQgbmVlZHMgdG8gYmUgcHVibGlzaGVkICovXG4gIHJlYWRvbmx5IGFzc2V0OiBJTWFuaWZlc3RFbnRyeTtcbn1cblxuLyoqXG4gKiBBIG5vZGUgdGhhdCByZXByZXNlbnRzIGEgbWVzc2FnZSB0byB0aGUgSW9Ib3N0IHRvIGJlIGVtaXR0ZWQgYXQgYSBjZXJ0YWluIHBvaW50IGluIHRoZSBncmFwaCBleGVjdXRpb24uXG4gKlxuICogVGhlc2UgYXJlIHVzZWQgdG8gYm9va2VuZCBjZXJ0YWluIHBhcnRzIG9mIHRoZSBncmFwaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXJrZXJOb2RlIGV4dGVuZHMgV29ya05vZGVDb21tb24ge1xuICByZWFkb25seSB0eXBlOiAnbWFya2VyJztcblxuICAvKiogVGhlIGV2ZW50IHRvIGVtaXQgd2hlbiB0aGlzIG5vZGUgaXMgcmVhY2hlZC4gKi9cbiAgcmVhZG9ubHkgbWFya2VyOlxuICAgIHwgeyB0eXBlOiAnc3RhcnQtYXNzZXQnOyBhc3NldDogSU1hbmlmZXN0RW50cnkgfVxuICAgIHwgeyB0eXBlOiAnZW5kLWFzc2V0JzsgYXNzZXQ6IElNYW5pZmVzdEVudHJ5IH07XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import type { WorkNode, StackNode, AssetBuildNode, AssetPublishNode } from './work-graph-types';
1
+ import type { WorkNode, StackNode, AssetBuildNode, AssetPublishNode, MarkerNode } from './work-graph-types';
2
2
  import type { IoHelper } from '../io/private';
3
3
  export type Concurrency = number | Record<WorkNode['type'], number>;
4
4
  export declare class WorkGraph {
@@ -80,5 +80,6 @@ export interface WorkGraphActions {
80
80
  deployStack: (stackNode: StackNode) => Promise<void>;
81
81
  buildAsset: (assetNode: AssetBuildNode) => Promise<void>;
82
82
  publishAsset: (assetNode: AssetPublishNode) => Promise<void>;
83
+ marker: (markerNode: MarkerNode) => Promise<void>;
83
84
  }
84
85
  //# sourceMappingURL=work-graph.d.ts.map
@@ -24,6 +24,8 @@ class WorkGraph {
24
24
  if (this.nodes[node.id]) {
25
25
  throw new toolkit_error_1.ToolkitError('DuplicateNodeId', `Duplicate use of node id: ${node.id}`);
26
26
  }
27
+ // If there are dependencies added before the node itself is added, copy them onto the target
28
+ // object and remove them from the lazy table.
27
29
  const ld = this.lazyDependencies.get(node.id);
28
30
  if (ld) {
29
31
  for (const x of ld) {
@@ -102,6 +104,9 @@ class WorkGraph {
102
104
  case 'asset-publish':
103
105
  await actions.publishAsset(x);
104
106
  break;
107
+ case 'marker':
108
+ await actions.marker(x);
109
+ break;
105
110
  }
106
111
  });
107
112
  }
@@ -135,6 +140,7 @@ class WorkGraph {
135
140
  'asset-build': n,
136
141
  'asset-publish': n,
137
142
  'stack': n,
143
+ 'marker': 1,
138
144
  } : n;
139
145
  const totalMax = typeof n === 'number' ? n : sum(Object.values(n));
140
146
  return new Promise((ok, fail) => {
@@ -142,6 +148,7 @@ class WorkGraph {
142
148
  'asset-build': 0,
143
149
  'asset-publish': 0,
144
150
  'stack': 0,
151
+ 'marker': 0,
145
152
  };
146
153
  function totalActive() {
147
154
  return sum(Object.values(active));
@@ -364,4 +371,4 @@ function gv(id, attrs) {
364
371
  function simplifyId(id) {
365
372
  return id.replace(/([0-9a-f]{6})[0-9a-f]{6,}/g, '$1');
366
373
  }
367
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1ncmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndvcmstZ3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseURBQXFEO0FBQ3JELCtEQUEyRDtBQUMzRCxxQ0FBOEM7QUFJOUMsTUFBYSxTQUFTO0lBQ3BCOztPQUVHO0lBQ0ksTUFBTSxDQUFVLElBQUksR0FBbUMsS0FBSyxJQUFJLEVBQUU7SUFDekUsQ0FBQyxDQUFDO0lBRWMsS0FBSyxDQUEyQjtJQUMvQixTQUFTLEdBQW9CLEVBQUUsQ0FBQztJQUNoQyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztJQUMvQyxRQUFRLENBQVc7SUFFN0IsS0FBSyxDQUFTO0lBRXJCLFlBQW1CLEtBQStCLEVBQUUsUUFBa0I7UUFDcEUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVNLFFBQVEsQ0FBQyxHQUFHLEtBQWlCO1FBQ2xDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN4QixNQUFNLElBQUksNEJBQVksQ0FBQyxpQkFBaUIsRUFBRSw2QkFBNkIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEYsQ0FBQztZQUVELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ1AsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLENBQUM7Z0JBQ0Qs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QXNzZXRCdWlsZE5vZGUsIEFzc2V0UHVibGlzaE5vZGUgfSBmcm9tICcuL3dvcmstZ3JhcGgtdHlwZXMnO1xuaW1wb3J0IHsgRGVwbG95bWVudFN0YXRlIH0gZnJvbSAnLi93b3JrLWdyYXBoLXR5cGVzJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBwYXJhbGxlbFByb21pc2VzIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5leHBvcnQgdHlwZSBDb25jdXJyZW5jeSA9IG51bWJlciB8IFJlY29yZDxXb3JrTm9kZVsndHlwZSddLCBudW1iZXI+O1xuXG5leHBvcnQgY2xhc3MgV29ya0dyYXBoIHtcbiAgLyoqXG4gICAqIEEgaGVscGVyIHRvIGRlY2xhcmUgYSBub29wIGFjdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9PUDogKC4uLl86IGFueVtdKSA9PiBQcm9taXNlPHZvaWQ+ID0gYXN5bmMgKCkgPT4ge1xuICB9O1xuXG4gIHB1YmxpYyByZWFkb25seSBub2RlczogUmVjb3JkPHN0cmluZywgV29ya05vZGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlYWR5UG9vbDogQXJyYXk8V29ya05vZGU+ID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbGF6eURlcGVuZGVuY2llcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgcHVibGljIGVycm9yPzogRXJyb3I7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG5vZGVzOiBSZWNvcmQ8c3RyaW5nLCBXb3JrTm9kZT4sIGlvSGVscGVyOiBJb0hlbHBlcikge1xuICAgIHRoaXMubm9kZXMgPSB7IC4uLm5vZGVzIH07XG4gICAgdGhpcy5pb0hlbHBlciA9IGlvSGVscGVyO1xuICB9XG5cbiAgcHVibGljIGFkZE5vZGVzKC4uLm5vZGVzOiBXb3JrTm9kZVtdKSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAodGhpcy5ub2Rlc1tub2RlLmlkXSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdEdXBsaWNhdGVOb2RlSWQnLCBgRHVwbGljYXRlIHVzZSBvZiBub2RlIGlkOiAke25vZGUuaWR9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxkID0gdGhpcy5sYXp5RGVwZW5kZW5jaWVzLmdldChub2RlLmlkKTtcbiAgICAgIGlmIChsZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHggb2YgbGQpIHtcbiAgICAgICAgICBub2RlLmRlcGVuZGVuY2llcy5hZGQoeCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXp5RGVwZW5kZW5jaWVzLmRlbGV0ZShub2RlLmlkKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ub2Rlc1tub2RlLmlkXSA9IG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZU5vZGUobm9kZUlkOiBzdHJpbmcgfCBXb3JrTm9kZSkge1xuICAgIGNvbnN0IGlkID0gdHlwZW9mIG5vZGVJZCA9PT0gJ3N0cmluZycgPyBub2RlSWQgOiBub2RlSWQuaWQ7XG4gICAgY29uc3QgcmVtb3ZlZE5vZGUgPSB0aGlzLm5vZGVzW2lkXTtcblxuICAgIHRoaXMubGF6eURlcGVuZGVuY2llcy5kZWxldGUoaWQpO1xuICAgIGRlbGV0ZSB0aGlzLm5vZGVzW2lkXTtcblxuICAgIGlmIChyZW1vdmVkTm9kZSkge1xuICAgICAgZm9yIChjb25zdCBub2RlIG9mIE9iamVjdC52YWx1ZXModGhpcy5ub2RlcykpIHtcbiAgICAgICAgbm9kZS5kZXBlbmRlbmNpZXMuZGVsZXRlKHJlbW92ZWROb2RlLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBub2RlcyBvZiBhIGdpdmVuIHR5cGVcbiAgICovXG4gIHB1YmxpYyBub2Rlc09mVHlwZTxUIGV4dGVuZHMgV29ya05vZGVbJ3R5cGUnXT4odHlwZTogVCk6IEV4dHJhY3Q8V29ya05vZGUsIHsgdHlwZTogVCB9PltdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIobiA9PiBuLnR5cGUgPT09IHR5cGUpIGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIG5vZGVzIHRoYXQgZGVwZW5kIG9uIGEgZ2l2ZW4gbm9kZVxuICAgKi9cbiAgcHVibGljIGRlcGVuZGVlcyhub2RlSWQ6IHN0cmluZyB8IFdvcmtOb2RlKSB7XG4gICAgY29uc3QgaWQgPSB0eXBlb2Ygbm9kZUlkID09PSAnc3RyaW5nJyA/IG5vZGVJZCA6IG5vZGVJZC5pZDtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIobiA9PiBuLmRlcGVuZGVuY2llcy5oYXMoaWQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkZXBlbmRlbmN5LCB0aGF0IG1heSBjb21lIGJlZm9yZSBvciBhZnRlciB0aGUgbm9kZXMgaW52b2x2ZWRcbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KGZyb21JZDogc3RyaW5nLCB0b0lkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5ub2Rlc1tmcm9tSWRdO1xuICAgIGlmIChub2RlKSB7XG4gICAgICBub2RlLmRlcGVuZGVuY2llcy5hZGQodG9JZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBsYXp5RGVwcyA9IHRoaXMubGF6eURlcGVuZGVuY2llcy5nZXQoZnJvbUlkKTtcbiAgICBpZiAoIWxhenlEZXBzKSB7XG4gICAgICBsYXp5RGVwcyA9IFtdO1xuICAgICAgdGhpcy5sYXp5RGVwZW5kZW5jaWVzLnNldChmcm9tSWQsIGxhenlEZXBzKTtcbiAgICB9XG4gICAgbGF6eURlcHMucHVzaCh0b0lkKTtcbiAgfVxuXG4gIHB1YmxpYyB0cnlHZXROb2RlKGlkOiBzdHJpbmcpOiBXb3JrTm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXNbaWRdO1xuICB9XG5cbiAgcHVibGljIG5vZGUoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHJldCA9IHRoaXMubm9kZXNbaWRdO1xuICAgIGlmICghcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdOb2RlTm90Rm91bmQnLCBgTm8gbm9kZSB3aXRoIGlkICR7aWR9IGFtb25nICR7T2JqZWN0LmtleXModGhpcy5ub2Rlcyl9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwdWJsaWMgYWJzb3JiKGdyYXBoOiBXb3JrR3JhcGgpIHtcbiAgICB0aGlzLmFkZE5vZGVzKC4uLk9iamVjdC52YWx1ZXMoZ3JhcGgubm9kZXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzRmFpbGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpLnNvbWUoKG4pID0+IG4uZGVwbG95bWVudFN0YXRlID09PSBEZXBsb3ltZW50U3RhdGUuRkFJTEVEKTtcbiAgfVxuXG4gIHB1YmxpYyBkb1BhcmFsbGVsKGNvbmN1cnJlbmN5OiBDb25jdXJyZW5jeSwgYWN0aW9uczogV29ya0dyYXBoQWN0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZvckFsbEFydGlmYWN0cyhjb25jdXJyZW5jeSwgYXN5bmMgKHg6IFdvcmtOb2RlKSA9PiB7XG4gICAgICBzd2l0Y2ggKHgudHlwZSkge1xuICAgICAgICBjYXNlICdzdGFjayc6XG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5kZXBsb3lTdGFjayh4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXNzZXQtYnVpbGQnOlxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuYnVpbGRBc3NldCh4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXNzZXQtcHVibGlzaCc6XG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5wdWJsaXNoQXNzZXQoeCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhbGwgc3RhY2sgbm9kZXMgaW4gZGVwZW5kZW5jeSBvcmRlciB3aXRoIHRoZSBnaXZlbiBjb25jdXJyZW5jeS5cbiAgICpcbiAgICogVW5saWtlIGBkb1BhcmFsbGVsYCwgdGhpcyBtZXRob2Qgb25seSBoYW5kbGVzIHN0YWNrIG5vZGVzIGFuZCB0YWtlcyBhXG4gICAqIHNpbXBsZSBjYWxsYmFjay4gSW50ZW5kZWQgZm9yIGRlc3Ryb3kgd2hlcmUgdGhlcmUgYXJlIG5vIGFzc2V0IG5vZGVzLlxuICAgKi9cbiAgcHVibGljIHByb2Nlc3NTdGFja3MoY29uY3VycmVuY3k6IG51bWJlciwgZm46IChzdGFja05vZGU6IFN0YWNrTm9kZSkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHJldHVybiB0aGlzLmZvckFsbEFydGlmYWN0cyhjb25jdXJyZW5jeSwgYXN5bmMgKHg6IFdvcmtOb2RlKSA9PiB7XG4gICAgICBpZiAoeC50eXBlICE9PSAnc3RhY2snKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGZuKHgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2V0IG9mIHVuYmxvY2tlZCBub2Rlc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8UmVhZG9ubHlBcnJheTxXb3JrTm9kZT4+IHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVJlYWR5UG9vbCgpO1xuICAgIHJldHVybiB0aGlzLnJlYWR5UG9vbDtcbiAgfVxuXG4gIHByaXZhdGUgZm9yQWxsQXJ0aWZhY3RzKG46IENvbmN1cnJlbmN5LCBmbjogKHg6IFdvcmtOb2RlKSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZ3JhcGggPSB0aGlzO1xuXG4gICAgLy8gSWYgJ24nIGlzIGEgbnVtYmVyLCB3ZSBsaW1pdCBhbGwgY29uY3VycmVuY3kgZXF1YWxseSAoZWZmZWN0aXZlbHkgd2Ugd2lsbCBiZSB1c2luZyB0b3RhbE1heClcbiAgICAvLyBJZiAnbicgaXMgYSByZWNvcmQsIHdlIGxpbWl0IGVhY2ggam9iIGluZGVwZW5kZW50bHkgKGVmZmVjdGl2ZWx5IHdlIHdpbGwgYmUgdXNpbmcgbWF4KVxuICAgIGNvbnN0IG1heDogUmVjb3JkPFdvcmtOb2RlWyd0eXBlJ10sIG51bWJlcj4gPSB0eXBlb2YgbiA9PT0gJ251bWJlcicgP1xuICAgICAge1xuICAgICAgICAnYXNzZXQtYnVpbGQnOiBuLFxuICAgICAgICAnYXNzZXQtcHVibGlzaCc6IG4sXG4gICAgICAgICdzdGFjayc6IG4sXG4gICAgICB9IDogbjtcbiAgICBjb25zdCB0b3RhbE1heCA9IHR5cGVvZiBuID09PSAnbnVtYmVyJyA/IG4gOiBzdW0oT2JqZWN0LnZhbHVlcyhuKSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKG9rLCBmYWlsKSA9PiB7XG4gICAgICBsZXQgYWN0aXZlOiBSZWNvcmQ8V29ya05vZGVbJ3R5cGUnXSwgbnVtYmVyPiA9IHtcbiAgICAgICAgJ2Fzc2V0LWJ1aWxkJzogMCxcbiAgICAgICAgJ2Fzc2V0LXB1Ymxpc2gnOiAwLFxuICAgICAgICAnc3RhY2snOiAwLFxuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIHRvdGFsQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gc3VtKE9iamVjdC52YWx1ZXMoYWN0aXZlKSk7XG4gICAgICB9XG5cbiAgICAgIHN0YXJ0KCk7XG5cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgICAgICBncmFwaC51cGRhdGVSZWFkeVBvb2woKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyYXBoLnJlYWR5UG9vbC5sZW5ndGg7ICkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGdyYXBoLnJlYWR5UG9vbFtpXTtcblxuICAgICAgICAgICAgaWYgKGFjdGl2ZVtub2RlLnR5cGVdIDwgbWF4W25vZGUudHlwZV0gJiYgdG90YWxBY3RpdmUoKSA8IHRvdGFsTWF4KSB7XG4gICAgICAgICAgICAgIGdyYXBoLnJlYWR5UG9vbC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgIHN0YXJ0T25lKG5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0b3RhbEFjdGl2ZSgpID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoZ3JhcGguZG9uZSgpKSB7XG4gICAgICAgICAgICAgIG9rKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3YWl0IGZvciBvdGhlciBhY3RpdmUgZGVwbG95cyB0byBmaW5pc2ggYmVmb3JlIGZhaWxpbmdcbiAgICAgICAgICAgIGlmIChncmFwaC5oYXNGYWlsZWQoKSkge1xuICAgICAgICAgICAgICBmYWlsKGdyYXBoLmVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgZmFpbChlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0T25lKHg6IFdvcmtOb2RlKSB7XG4gICAgICAgIHguZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLkRFUExPWUlORztcbiAgICAgICAgYWN0aXZlW3gudHlwZV0rKztcbiAgICAgICAgdm9pZCBmbih4KVxuICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIGFjdGl2ZVt4LnR5cGVdLS07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBncmFwaC5kZXBsb3llZCh4KTtcbiAgICAgICAgICAgIHN0YXJ0KCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgLy8gQnkgcmVjb3JkaW5nIHRoZSBmYWlsdXJlIGltbWVkaWF0ZWx5IGFzIHRoZSBxdWV1ZWQgdGFzayBleGl0cywgd2UgcHJldmVudCB0aGUgbmV4dFxuICAgICAgICAgICAgLy8gcXVldWVkIHRhc2sgZnJvbSBzdGFydGluZy5cbiAgICAgICAgICAgIGdyYXBoLmZhaWxlZCh4LCBlcnIpO1xuICAgICAgICAgICAgc3RhcnQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5ldmVyeSgobikgPT4gRGVwbG95bWVudFN0YXRlLkNPTVBMRVRFRCA9PT0gbi5kZXBsb3ltZW50U3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXBsb3llZChub2RlOiBXb3JrTm9kZSkge1xuICAgIG5vZGUuZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLkNPTVBMRVRFRDtcbiAgfVxuXG4gIHByaXZhdGUgZmFpbGVkKG5vZGU6IFdvcmtOb2RlLCBlcnJvcj86IEVycm9yKSB7XG4gICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgIG5vZGUuZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLkZBSUxFRDtcbiAgICB0aGlzLnNraXBSZXN0KCk7XG4gICAgdGhpcy5yZWFkeVBvb2wuc3BsaWNlKDApO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBbXG4gICAgICAnZGlncmFwaCBEIHsnLFxuICAgICAgLi4uT2JqZWN0LmVudHJpZXModGhpcy5ub2RlcykuZmxhdE1hcCgoW2lkLCBub2RlXSkgPT4gcmVuZGVyTm9kZShpZCwgbm9kZSkpLFxuICAgICAgJ30nLFxuICAgIF0uam9pbignXFxuJyk7XG5cbiAgICBmdW5jdGlvbiByZW5kZXJOb2RlKGlkOiBzdHJpbmcsIG5vZGU6IFdvcmtOb2RlKTogc3RyaW5nW10ge1xuICAgICAgY29uc3QgcmV0ID0gW107XG4gICAgICBpZiAobm9kZS5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5DT01QTEVURUQpIHtcbiAgICAgICAgcmV0LnB1c2goYCAgJHtndihpZCwgeyBzdHlsZTogJ2ZpbGxlZCcsIGZpbGxjb2xvcjogJ3llbGxvdycsIGNvbW1lbnQ6IG5vZGUubm90ZSB9KX07YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQucHVzaChgICAke2d2KGlkLCB7IGNvbW1lbnQ6IG5vZGUubm90ZSB9KX07YCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiBub2RlLmRlcGVuZGVuY2llcykge1xuICAgICAgICByZXQucHVzaChgICAke2d2KGlkKX0gLT4gJHtndihkZXApfTtgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSBhbGwgZGVwZW5kZW5jaWVzIGFjdHVhbGx5IGV4aXN0LiBUaGlzIHByb3RlY3RzIGFnYWluc3Qgc2NlbmFyaW9zIHN1Y2ggYXMgdGhlIGZvbGxvd2luZzpcbiAgICogU3RhY2tBIGRlcGVuZHMgb24gU3RhY2tCLCBidXQgU3RhY2tCIGlzIG5vdCBzZWxlY3RlZCB0byBkZXBsb3kuIFRoZSBkZXBlbmRlbmN5IGlzIHJlZHVuZGFudFxuICAgKiBhbmQgd2lsbCBiZSBkcm9wcGVkLlxuICAgKiBUaGlzIGFzc3VtZXMgdGhlIG1hbmlmZXN0IGNvbWVzIHVuY29ycnVwdGVkIHNvIHdlIHdpbGwgbm90IGZhaWwgaWYgYSBkZXBlbmRlbmN5IGlzIG5vdCBmb3VuZC5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVVbmF2YWlsYWJsZURlcGVuZGVuY2llcygpIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKSkge1xuICAgICAgY29uc3QgcmVtb3ZlRGVwcyA9IEFycmF5LmZyb20obm9kZS5kZXBlbmRlbmNpZXMpLmZpbHRlcigoZGVwKSA9PiB0aGlzLm5vZGVzW2RlcF0gPT09IHVuZGVmaW5lZCk7XG5cbiAgICAgIHJlbW92ZURlcHMuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICBub2RlLmRlcGVuZGVuY2llcy5kZWxldGUoZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBhc3NldCBwdWJsaXNoaW5nIHN0ZXBzIGZvciBhc3NldHMgdGhhdCBhcmUgYWxyZWFkeSBwdWJsaXNoZWQsIGFuZCB0aGVuIGJ1aWxkXG4gICAqIHRoYXQgYXJlbid0IHVzZWQgYW55bW9yZS5cbiAgICpcbiAgICogRG8gdGhpcyBpbiBwYXJhbGxlbCwgYmVjYXVzZSB0aGVyZSBtYXkgYmUgYSBsb3Qgb2YgYXNzZXRzIGluIGFuIGFwcGxpY2F0aW9uIChzZWVuIGluIHByYWN0aWNlOiA+MTAwIGFzc2V0cylcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZW1vdmVVbm5lY2Vzc2FyeUFzc2V0cyhpc1VubmVjZXNzYXJ5OiAoeDogQXNzZXRQdWJsaXNoTm9kZSkgPT4gUHJvbWlzZTxib29sZWFuPikge1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoJ0NoZWNraW5nIGZvciBwcmV2aW91c2x5IHB1Ymxpc2hlZCBhc3NldHMnKTtcblxuICAgIGNvbnN0IHB1Ymxpc2hlcyA9IHRoaXMubm9kZXNPZlR5cGUoJ2Fzc2V0LXB1Ymxpc2gnKTtcblxuICAgIGNvbnN0IGNsYXNzaWZpZWROb2RlcyA9IGF3YWl0IHBhcmFsbGVsUHJvbWlzZXMoXG4gICAgICA4LFxuICAgICAgcHVibGlzaGVzLm1hcCgoYXNzZXROb2RlKSA9PiBhc3luYygpID0+IFthc3NldE5vZGUsIGF3YWl0IGlzVW5uZWNlc3NhcnkoYXNzZXROb2RlKV0gYXMgY29uc3QpKTtcblxuICAgIGNvbnN0IGFscmVhZHlQdWJsaXNoZWQgPSBjbGFzc2lmaWVkTm9kZXMuZmlsdGVyKChbXywgdW5uZWNlc3NhcnldKSA9PiB1bm5lY2Vzc2FyeSkubWFwKChbYXNzZXROb2RlLCBfXSkgPT4gYXNzZXROb2RlKTtcbiAgICBmb3IgKGNvbnN0IGFzc2V0Tm9kZSBvZiBhbHJlYWR5UHVibGlzaGVkKSB7XG4gICAgICB0aGlzLnJlbW92ZU5vZGUoYXNzZXROb2RlKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke3B1Ymxpc2hlcy5sZW5ndGh9IHRvdGFsIGFzc2V0cywgJHtwdWJsaXNoZXMubGVuZ3RoIC0gYWxyZWFkeVB1Ymxpc2hlZC5sZW5ndGh9IHN0aWxsIG5lZWQgdG8gYmUgcHVibGlzaGVkYCk7XG5cbiAgICAvLyBOb3cgYWxzbyByZW1vdmUgYW55IGFzc2V0IGJ1aWxkIHN0ZXBzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZW0gYW55bW9yZVxuICAgIGNvbnN0IHVudXNlZEJ1aWxkcyA9IHRoaXMubm9kZXNPZlR5cGUoJ2Fzc2V0LWJ1aWxkJykuZmlsdGVyKGJ1aWxkID0+IHRoaXMuZGVwZW5kZWVzKGJ1aWxkKS5sZW5ndGggPT09IDApO1xuICAgIGZvciAoY29uc3QgdW51c2VkQnVpbGQgb2YgdW51c2VkQnVpbGRzKSB7XG4gICAgICB0aGlzLnJlbW92ZU5vZGUodW51c2VkQnVpbGQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlUmVhZHlQb29sKCkge1xuICAgIGNvbnN0IGFjdGl2ZUNvdW50ID0gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIoKHgpID0+IHguZGVwbG95bWVudFN0YXRlID09PSBEZXBsb3ltZW50U3RhdGUuREVQTE9ZSU5HKS5sZW5ndGg7XG4gICAgY29uc3QgcGVuZGluZ0NvdW50ID0gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIoKHgpID0+IHguZGVwbG95bWVudFN0YXRlID09PSBEZXBsb3ltZW50U3RhdGUuUEVORElORykubGVuZ3RoO1xuXG4gICAgY29uc3QgbmV3bHlSZWFkeSA9IE9iamVjdC52YWx1ZXModGhpcy5ub2RlcykuZmlsdGVyKCh4KSA9PlxuICAgICAgeC5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5QRU5ESU5HICYmXG4gICAgICBBcnJheS5mcm9tKHguZGVwZW5kZW5jaWVzKS5ldmVyeSgoaWQpID0+IHRoaXMubm9kZShpZCkuZGVwbG95bWVudFN0YXRlID09PSBEZXBsb3ltZW50U3RhdGUuQ09NUExFVEVEKSk7XG5cbiAgICAvLyBBZGQgbmV3bHkgYXZhaWxhYmxlIG5vZGVzIHRvIHRoZSByZWFkeSBwb29sXG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5ld2x5UmVhZHkpIHtcbiAgICAgIG5vZGUuZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLlFVRVVFRDtcbiAgICAgIHRoaXMucmVhZHlQb29sLnB1c2gobm9kZSk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIG5vZGVzIGZyb20gdGhlIHJlYWR5IHBvb2wgdGhhdCBoYXZlIGFscmVhZHkgc3RhcnRlZCBkZXBsb3lpbmdcbiAgICByZXRhaW5Pbmx5KHRoaXMucmVhZHlQb29sLCAobm9kZSkgPT4gbm9kZS5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5RVUVVRUQpO1xuXG4gICAgLy8gU29ydCBieSByZXZlcnNlIHByaW9yaXR5XG4gICAgdGhpcy5yZWFkeVBvb2wuc29ydCgoYSwgYikgPT4gKGIucHJpb3JpdHkgPz8gMCkgLSAoYS5wcmlvcml0eSA/PyAwKSk7XG5cbiAgICBpZiAodGhpcy5yZWFkeVBvb2wubGVuZ3RoID09PSAwICYmIGFjdGl2ZUNvdW50ID09PSAwICYmIHBlbmRpbmdDb3VudCA+IDApIHtcbiAgICAgIGNvbnN0IGN5Y2xlID0gdGhpcy5maW5kQ3ljbGUoKSA/PyBbJ05vIGN5Y2xlIGZvdW5kISddO1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy50cmFjZShgQ3ljbGUgJHtjeWNsZS5qb2luKCcgLT4gJyl9IGluIGdyYXBoICR7dGhpc31gKTtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0RlcGVuZGVuY3lDeWNsZScsIGBVbmFibGUgdG8gbWFrZSBwcm9ncmVzcyBhbnltb3JlLCBkZXBlbmRlbmN5IGN5Y2xlIGJldHdlZW4gcmVtYWluaW5nIGFydGlmYWN0czogJHtjeWNsZS5qb2luKCcgLT4gJyl9IChydW4gd2l0aCAtdnYgZm9yIGZ1bGwgZ3JhcGgpYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBza2lwUmVzdCgpIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKSkge1xuICAgICAgaWYgKFtEZXBsb3ltZW50U3RhdGUuUVVFVUVELCBEZXBsb3ltZW50U3RhdGUuUEVORElOR10uaW5jbHVkZXMobm9kZS5kZXBsb3ltZW50U3RhdGUpKSB7XG4gICAgICAgIG5vZGUuZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLlNLSVBQRUQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgY3ljbGVzIGluIGEgZ3JhcGhcbiAgICpcbiAgICogTm90IHRoZSBmYXN0ZXN0LCBidXQgZWZmZWN0aXZlIGFuZCBzaG91bGQgYmUgcmFyZVxuICAgKi9cbiAgcHVibGljIGZpbmRDeWNsZSgpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIG9mIE9iamVjdC5rZXlzKHRoaXMubm9kZXMpKSB7XG4gICAgICBjb25zdCBjeWNsZSA9IHJlY3Vyc2Uobm9kZUlkLCBbbm9kZUlkXSk7XG4gICAgICBpZiAoY3ljbGUpIHtcbiAgICAgICAgcmV0dXJuIGN5Y2xlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgZnVuY3Rpb24gcmVjdXJzZShub2RlSWQ6IHN0cmluZywgcGF0aDogc3RyaW5nW10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAoc2Vlbi5oYXMobm9kZUlkKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChjb25zdCBkZXAgb2Ygc2VsZi5ub2Rlc1tub2RlSWRdLmRlcGVuZGVuY2llcyA/PyBbXSkge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGF0aC5pbmRleE9mKGRlcCk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4ucGF0aC5zbGljZShpbmRleCksIGRlcF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY3ljbGUgPSByZWN1cnNlKGRlcCwgWy4uLnBhdGgsIGRlcF0pO1xuICAgICAgICAgIGlmIChjeWNsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGN5Y2xlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZWVuLmFkZChub2RlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBgZW5kYCBub2RlIGlzIHJlYWNoYWJsZSBmcm9tIHRoZSBgc3RhcnRgIG5vZGUsIGZvbGxvd2luZyB0aGUgZGVwZW5kZW5jeSBhcnJvd3NcbiAgICovXG4gIHB1YmxpYyByZWFjaGFibGUoc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIHJlY3Vyc2Uoc3RhcnQpO1xuXG4gICAgZnVuY3Rpb24gcmVjdXJzZShjdXJyZW50OiBzdHJpbmcpIHtcbiAgICAgIGlmIChzZWVuLmhhcyhjdXJyZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChjdXJyZW50KTtcblxuICAgICAgaWYgKGN1cnJlbnQgPT09IGVuZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHNlbGYubm9kZXNbY3VycmVudF0uZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGlmIChyZWN1cnNlKGRlcCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtHcmFwaEFjdGlvbnMge1xuICBkZXBsb3lTdGFjazogKHN0YWNrTm9kZTogU3RhY2tOb2RlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBidWlsZEFzc2V0OiAoYXNzZXROb2RlOiBBc3NldEJ1aWxkTm9kZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHVibGlzaEFzc2V0OiAoYXNzZXROb2RlOiBBc3NldFB1Ymxpc2hOb2RlKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5mdW5jdGlvbiBzdW0oeHM6IG51bWJlcltdKSB7XG4gIGxldCByZXQgPSAwO1xuICBmb3IgKGNvbnN0IHggb2YgeHMpIHtcbiAgICByZXQgKz0geDtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiByZXRhaW5Pbmx5PEE+KHhzOiBBW10sIHByZWQ6ICh4OiBBKSA9PiBib29sZWFuKSB7XG4gIHhzLnNwbGljZSgwLCB4cy5sZW5ndGgsIC4uLnhzLmZpbHRlcihwcmVkKSk7XG59XG5cbmZ1bmN0aW9uIGd2KGlkOiBzdHJpbmcsIGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPikge1xuICBjb25zdCBhdHRyU3RyaW5nID0gT2JqZWN0LmVudHJpZXMoYXR0cnMgPz8ge30pLmZsYXRNYXAoKFtrLCB2XSkgPT4gdiAhPT0gdW5kZWZpbmVkID8gW2Ake2t9PVwiJHt2fVwiYF0gOiBbXSkuam9pbignLCcpO1xuXG4gIHJldHVybiBhdHRyU3RyaW5nID8gYFwiJHtzaW1wbGlmeUlkKGlkKX1cIiBbJHthdHRyU3RyaW5nfV1gIDogYFwiJHtzaW1wbGlmeUlkKGlkKX1cImA7XG59XG5cbmZ1bmN0aW9uIHNpbXBsaWZ5SWQoaWQ6IHN0cmluZykge1xuICByZXR1cm4gaWQucmVwbGFjZSgvKFswLTlhLWZdezZ9KVswLTlhLWZdezYsfS9nLCAnJDEnKTtcbn1cbiJdfQ==
374
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1ncmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndvcmstZ3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseURBQXFEO0FBQ3JELCtEQUEyRDtBQUMzRCxxQ0FBOEM7QUFJOUMsTUFBYSxTQUFTO0lBQ3BCOztPQUVHO0lBQ0ksTUFBTSxDQUFVLElBQUksR0FBbUMsS0FBSyxJQUFJLEVBQUU7SUFDekUsQ0FBQyxDQUFDO0lBRWMsS0FBSyxDQUEyQjtJQUMvQixTQUFTLEdBQW9CLEVBQUUsQ0FBQztJQUNoQyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztJQUMvQyxRQUFRLENBQVc7SUFFN0IsS0FBSyxDQUFTO0lBRXJCLFlBQW1CLEtBQStCLEVBQUUsUUFBa0I7UUFDcEUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVNLFFBQVEsQ0FBQyxHQUFHLEtBQWlCO1FBQ2xDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN4QixNQUFNLElBQUksNEJBQVksQ0FBQyxpQkFBaUIsRUFBRSw2QkFBNkIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEYsQ0FBQztZQUVELDZGQUE2RjtZQUM3Riw4Q0FBOEM7WUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDUCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsQ0FBQztnQkFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRU0sVUFBVSxDQUFDLE1BQXlCO1FBQ3pDLE1BQU0sRUFBRSxHQUFHLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEIsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVcsQ0FBNkIsSUFBTztRQUNwRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFRLENBQUM7SUFDdkUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLE1BQXlCO1FBQ3hDLE1BQU0sRUFBRSxHQUFHLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDL0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRU0sVUFBVSxDQUFDLEVBQVU7UUFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxJQUFJLENBQUMsRUFBVTtRQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSw0QkFBWSxDQUFDLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRyxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQWdCO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxTQUFTO1FBQ2YsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLEtBQUssa0NBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRU0sVUFBVSxDQUFDLFdBQXdCLEVBQUUsT0FBeUI7UUFDbkUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBVyxFQUFFLEVBQUU7WUFDN0QsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2YsS0FBSyxPQUFPO29CQUNWLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDN0IsTUFBTTtnQkFDUixLQUFLLGFBQWE7b0JBQ2hCLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDNUIsTUFBTTtnQkFDUixLQUFLLGVBQWU7b0JBQ2xCLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUIsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4QixNQUFNO1lBQ1YsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksYUFBYSxDQUFDLFdBQW1CLEVBQUUsRUFBMkM7UUFDbkYsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBVyxFQUFFLEVBQUU7WUFDN0QsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUN2QixPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsS0FBSztRQUNoQixNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxDQUFjLEVBQUUsRUFBa0M7UUFDeEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRW5CLCtGQUErRjtRQUMvRix5RkFBeUY7UUFDekYsTUFBTSxHQUFHLEdBQXFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1lBQ25FO2dCQUNFLGFBQWEsRUFBRSxDQUFDO2dCQUNoQixlQUFlLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsUUFBUSxFQUFFLENBQUM7YUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuRSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQzlCLElBQUksTUFBTSxHQUFxQztnQkFDN0MsYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLGVBQWUsRUFBRSxDQUFDO2dCQUNsQixPQUFPLEVBQUUsQ0FBQztnQkFDVixRQUFRLEVBQUUsQ0FBQzthQUNaLENBQUM7WUFDRixTQUFTLFdBQVc7Z0JBQ2xCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBRUQsS0FBSyxFQUFFLENBQUM7WUFFUixTQUFTLEtBQUs7Z0JBQ1osS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBSSxDQUFDO3dCQUM3QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUVoQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQzs0QkFDbkUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2pCLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNULENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxJQUFJLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUN4QixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDOzRCQUNqQixFQUFFLEVBQUUsQ0FBQzt3QkFDUCxDQUFDO3dCQUNELHlEQUF5RDt3QkFDekQsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQzs0QkFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDcEIsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDVixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxTQUFTLFFBQVEsQ0FBQyxDQUFXO2dCQUMzQixDQUFDLENBQUMsZUFBZSxHQUFHLGtDQUFlLENBQUMsU0FBUyxDQUFDO2dCQUM5QyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2pCLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDUCxPQUFPLENBQUMsR0FBRyxFQUFFO29CQUNaLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDO3FCQUNELElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ1QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEIsS0FBSyxFQUFFLENBQUM7Z0JBQ1YsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ2YscUZBQXFGO29CQUNyRiw2QkFBNkI7b0JBQzdCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNyQixLQUFLLEVBQUUsQ0FBQztnQkFDVixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxJQUFJO1FBQ1YsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGtDQUFlLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRU8sUUFBUSxDQUFDLElBQWM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxrQ0FBZSxDQUFDLFNBQVMsQ0FBQztJQUNuRCxDQUFDO0lBRU8sTUFBTSxDQUFDLElBQWMsRUFBRSxLQUFhO1FBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsa0NBQWUsQ0FBQyxNQUFNLENBQUM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTSxRQUFRO1FBQ2IsT0FBTztZQUNMLGFBQWE7WUFDYixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzNFLEdBQUc7U0FDSixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUViLFNBQVMsVUFBVSxDQUFDLEVBQVUsRUFBRSxJQUFjO1lBQzVDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNmLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxrQ0FBZSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN2RCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkQsQ0FBQztZQUNELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNwQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLDZCQUE2QjtRQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0MsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBRWhHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLHVCQUF1QixDQUFDLGFBQXdEO1FBQzNGLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFFL0UsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVwRCxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUEsdUJBQWdCLEVBQzVDLENBQUMsRUFDRCxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUcsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFVLENBQUMsQ0FBQyxDQUFDO1FBRWpHLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEgsS0FBSyxNQUFNLFNBQVMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUVELE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sa0JBQWtCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSw2QkFBNkIsQ0FBQyxDQUFDO1FBRWpKLHlGQUF5RjtRQUN6RixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pHLEtBQUssTUFBTSxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlO1FBQzNCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsS0FBSyxrQ0FBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNwSCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLEtBQUssa0NBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFbkgsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDeEQsQ0FBQyxDQUFDLGVBQWUsS0FBSyxrQ0FBZSxDQUFDLE9BQU87WUFDN0MsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsS0FBSyxrQ0FBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFekcsOENBQThDO1FBQzlDLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxrQ0FBZSxDQUFDLE1BQU0sQ0FBQztZQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBRUQsdUVBQXVFO1FBQ3ZFLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxLQUFLLGtDQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEYsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFdBQVcsS0FBSyxDQUFDLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDdEQsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbkYsTUFBTSxJQUFJLDRCQUFZLENBQUMsaUJBQWlCLEVBQUUsa0ZBQWtGLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDbEwsQ0FBQztJQUNILENBQUM7SUFFTyxRQUFRO1FBQ2QsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxrQ0FBZSxDQUFDLE1BQU0sRUFBRSxrQ0FBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDckYsSUFBSSxDQUFDLGVBQWUsR0FBRyxrQ0FBZSxDQUFDLE9BQU8sQ0FBQztZQUNqRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksU0FBUztRQUNkLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN4QyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztRQUVqQixTQUFTLE9BQU8sQ0FBQyxNQUFjLEVBQUUsSUFBYztZQUM3QyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUN4RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNoQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNmLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3JDLENBQUM7b0JBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzNDLElBQUksS0FBSyxFQUFFLENBQUM7d0JBQ1YsT0FBTyxLQUFLLENBQUM7b0JBQ2YsQ0FBQztnQkFDSCxDQUFDO2dCQUVELE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7b0JBQVMsQ0FBQztnQkFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLEtBQWEsRUFBRSxHQUFXO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRCLFNBQVMsT0FBTyxDQUFDLE9BQWU7WUFDOUIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFbEIsSUFBSSxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDakIsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDOztBQWpaSCw4QkFrWkM7QUFTRCxTQUFTLEdBQUcsQ0FBQyxFQUFZO0lBQ3ZCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNaLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDbkIsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBSSxFQUFPLEVBQUUsSUFBdUI7SUFDckQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsU0FBUyxFQUFFLENBQUMsRUFBVSxFQUFFLEtBQTBDO0lBQ2hFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVySCxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFDcEYsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEVBQVU7SUFDNUIsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFdvcmtOb2RlLCBTdGFja05vZGUsIEFzc2V0QnVpbGROb2RlLCBBc3NldFB1Ymxpc2hOb2RlLCBNYXJrZXJOb2RlIH0gZnJvbSAnLi93b3JrLWdyYXBoLXR5cGVzJztcbmltcG9ydCB7IERlcGxveW1lbnRTdGF0ZSB9IGZyb20gJy4vd29yay1ncmFwaC10eXBlcyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgcGFyYWxsZWxQcm9taXNlcyB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuZXhwb3J0IHR5cGUgQ29uY3VycmVuY3kgPSBudW1iZXIgfCBSZWNvcmQ8V29ya05vZGVbJ3R5cGUnXSwgbnVtYmVyPjtcblxuZXhwb3J0IGNsYXNzIFdvcmtHcmFwaCB7XG4gIC8qKlxuICAgKiBBIGhlbHBlciB0byBkZWNsYXJlIGEgbm9vcCBhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PT1A6ICguLi5fOiBhbnlbXSkgPT4gUHJvbWlzZTx2b2lkPiA9IGFzeW5jICgpID0+IHtcbiAgfTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXM6IFJlY29yZDxzdHJpbmcsIFdvcmtOb2RlPjtcbiAgcHJpdmF0ZSByZWFkb25seSByZWFkeVBvb2w6IEFycmF5PFdvcmtOb2RlPiA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGxhenlEZXBlbmRlbmNpZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuXG4gIHB1YmxpYyBlcnJvcj86IEVycm9yO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihub2RlczogUmVjb3JkPHN0cmluZywgV29ya05vZGU+LCBpb0hlbHBlcjogSW9IZWxwZXIpIHtcbiAgICB0aGlzLm5vZGVzID0geyAuLi5ub2RlcyB9O1xuICAgIHRoaXMuaW9IZWxwZXIgPSBpb0hlbHBlcjtcbiAgfVxuXG4gIHB1YmxpYyBhZGROb2RlcyguLi5ub2RlczogV29ya05vZGVbXSkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgaWYgKHRoaXMubm9kZXNbbm9kZS5pZF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignRHVwbGljYXRlTm9kZUlkJywgYER1cGxpY2F0ZSB1c2Ugb2Ygbm9kZSBpZDogJHtub2RlLmlkfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzIGFkZGVkIGJlZm9yZSB0aGUgbm9kZSBpdHNlbGYgaXMgYWRkZWQsIGNvcHkgdGhlbSBvbnRvIHRoZSB0YXJnZXRcbiAgICAgIC8vIG9iamVjdCBhbmQgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgbGF6eSB0YWJsZS5cbiAgICAgIGNvbnN0IGxkID0gdGhpcy5sYXp5RGVwZW5kZW5jaWVzLmdldChub2RlLmlkKTtcbiAgICAgIGlmIChsZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHggb2YgbGQpIHtcbiAgICAgICAgICBub2RlLmRlcGVuZGVuY2llcy5hZGQoeCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXp5RGVwZW5kZW5jaWVzLmRlbGV0ZShub2RlLmlkKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ub2Rlc1tub2RlLmlkXSA9IG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZU5vZGUobm9kZUlkOiBzdHJpbmcgfCBXb3JrTm9kZSkge1xuICAgIGNvbnN0IGlkID0gdHlwZW9mIG5vZGVJZCA9PT0gJ3N0cmluZycgPyBub2RlSWQgOiBub2RlSWQuaWQ7XG4gICAgY29uc3QgcmVtb3ZlZE5vZGUgPSB0aGlzLm5vZGVzW2lkXTtcblxuICAgIHRoaXMubGF6eURlcGVuZGVuY2llcy5kZWxldGUoaWQpO1xuICAgIGRlbGV0ZSB0aGlzLm5vZGVzW2lkXTtcblxuICAgIGlmIChyZW1vdmVkTm9kZSkge1xuICAgICAgZm9yIChjb25zdCBub2RlIG9mIE9iamVjdC52YWx1ZXModGhpcy5ub2RlcykpIHtcbiAgICAgICAgbm9kZS5kZXBlbmRlbmNpZXMuZGVsZXRlKHJlbW92ZWROb2RlLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBub2RlcyBvZiBhIGdpdmVuIHR5cGVcbiAgICovXG4gIHB1YmxpYyBub2Rlc09mVHlwZTxUIGV4dGVuZHMgV29ya05vZGVbJ3R5cGUnXT4odHlwZTogVCk6IEV4dHJhY3Q8V29ya05vZGUsIHsgdHlwZTogVCB9PltdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIobiA9PiBuLnR5cGUgPT09IHR5cGUpIGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIG5vZGVzIHRoYXQgZGVwZW5kIG9uIGEgZ2l2ZW4gbm9kZVxuICAgKi9cbiAgcHVibGljIGRlcGVuZGVlcyhub2RlSWQ6IHN0cmluZyB8IFdvcmtOb2RlKSB7XG4gICAgY29uc3QgaWQgPSB0eXBlb2Ygbm9kZUlkID09PSAnc3RyaW5nJyA/IG5vZGVJZCA6IG5vZGVJZC5pZDtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIobiA9PiBuLmRlcGVuZGVuY2llcy5oYXMoaWQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkZXBlbmRlbmN5LCB0aGF0IG1heSBjb21lIGJlZm9yZSBvciBhZnRlciB0aGUgbm9kZXMgaW52b2x2ZWRcbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KGZyb21JZDogc3RyaW5nLCB0b0lkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5ub2Rlc1tmcm9tSWRdO1xuICAgIGlmIChub2RlKSB7XG4gICAgICBub2RlLmRlcGVuZGVuY2llcy5hZGQodG9JZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBsYXp5RGVwcyA9IHRoaXMubGF6eURlcGVuZGVuY2llcy5nZXQoZnJvbUlkKTtcbiAgICBpZiAoIWxhenlEZXBzKSB7XG4gICAgICBsYXp5RGVwcyA9IFtdO1xuICAgICAgdGhpcy5sYXp5RGVwZW5kZW5jaWVzLnNldChmcm9tSWQsIGxhenlEZXBzKTtcbiAgICB9XG4gICAgbGF6eURlcHMucHVzaCh0b0lkKTtcbiAgfVxuXG4gIHB1YmxpYyB0cnlHZXROb2RlKGlkOiBzdHJpbmcpOiBXb3JrTm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXNbaWRdO1xuICB9XG5cbiAgcHVibGljIG5vZGUoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHJldCA9IHRoaXMubm9kZXNbaWRdO1xuICAgIGlmICghcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdOb2RlTm90Rm91bmQnLCBgTm8gbm9kZSB3aXRoIGlkICR7aWR9IGFtb25nICR7T2JqZWN0LmtleXModGhpcy5ub2Rlcyl9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwdWJsaWMgYWJzb3JiKGdyYXBoOiBXb3JrR3JhcGgpIHtcbiAgICB0aGlzLmFkZE5vZGVzKC4uLk9iamVjdC52YWx1ZXMoZ3JhcGgubm9kZXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzRmFpbGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpLnNvbWUoKG4pID0+IG4uZGVwbG95bWVudFN0YXRlID09PSBEZXBsb3ltZW50U3RhdGUuRkFJTEVEKTtcbiAgfVxuXG4gIHB1YmxpYyBkb1BhcmFsbGVsKGNvbmN1cnJlbmN5OiBDb25jdXJyZW5jeSwgYWN0aW9uczogV29ya0dyYXBoQWN0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZvckFsbEFydGlmYWN0cyhjb25jdXJyZW5jeSwgYXN5bmMgKHg6IFdvcmtOb2RlKSA9PiB7XG4gICAgICBzd2l0Y2ggKHgudHlwZSkge1xuICAgICAgICBjYXNlICdzdGFjayc6XG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5kZXBsb3lTdGFjayh4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXNzZXQtYnVpbGQnOlxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuYnVpbGRBc3NldCh4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXNzZXQtcHVibGlzaCc6XG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5wdWJsaXNoQXNzZXQoeCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21hcmtlcic6XG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5tYXJrZXIoeCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhbGwgc3RhY2sgbm9kZXMgaW4gZGVwZW5kZW5jeSBvcmRlciB3aXRoIHRoZSBnaXZlbiBjb25jdXJyZW5jeS5cbiAgICpcbiAgICogVW5saWtlIGBkb1BhcmFsbGVsYCwgdGhpcyBtZXRob2Qgb25seSBoYW5kbGVzIHN0YWNrIG5vZGVzIGFuZCB0YWtlcyBhXG4gICAqIHNpbXBsZSBjYWxsYmFjay4gSW50ZW5kZWQgZm9yIGRlc3Ryb3kgd2hlcmUgdGhlcmUgYXJlIG5vIGFzc2V0IG5vZGVzLlxuICAgKi9cbiAgcHVibGljIHByb2Nlc3NTdGFja3MoY29uY3VycmVuY3k6IG51bWJlciwgZm46IChzdGFja05vZGU6IFN0YWNrTm9kZSkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHJldHVybiB0aGlzLmZvckFsbEFydGlmYWN0cyhjb25jdXJyZW5jeSwgYXN5bmMgKHg6IFdvcmtOb2RlKSA9PiB7XG4gICAgICBpZiAoeC50eXBlICE9PSAnc3RhY2snKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGZuKHgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2V0IG9mIHVuYmxvY2tlZCBub2Rlc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8UmVhZG9ubHlBcnJheTxXb3JrTm9kZT4+IHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVJlYWR5UG9vbCgpO1xuICAgIHJldHVybiB0aGlzLnJlYWR5UG9vbDtcbiAgfVxuXG4gIHByaXZhdGUgZm9yQWxsQXJ0aWZhY3RzKG46IENvbmN1cnJlbmN5LCBmbjogKHg6IFdvcmtOb2RlKSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZ3JhcGggPSB0aGlzO1xuXG4gICAgLy8gSWYgJ24nIGlzIGEgbnVtYmVyLCB3ZSBsaW1pdCBhbGwgY29uY3VycmVuY3kgZXF1YWxseSAoZWZmZWN0aXZlbHkgd2Ugd2lsbCBiZSB1c2luZyB0b3RhbE1heClcbiAgICAvLyBJZiAnbicgaXMgYSByZWNvcmQsIHdlIGxpbWl0IGVhY2ggam9iIGluZGVwZW5kZW50bHkgKGVmZmVjdGl2ZWx5IHdlIHdpbGwgYmUgdXNpbmcgbWF4KVxuICAgIGNvbnN0IG1heDogUmVjb3JkPFdvcmtOb2RlWyd0eXBlJ10sIG51bWJlcj4gPSB0eXBlb2YgbiA9PT0gJ251bWJlcicgP1xuICAgICAge1xuICAgICAgICAnYXNzZXQtYnVpbGQnOiBuLFxuICAgICAgICAnYXNzZXQtcHVibGlzaCc6IG4sXG4gICAgICAgICdzdGFjayc6IG4sXG4gICAgICAgICdtYXJrZXInOiAxLFxuICAgICAgfSA6IG47XG4gICAgY29uc3QgdG90YWxNYXggPSB0eXBlb2YgbiA9PT0gJ251bWJlcicgPyBuIDogc3VtKE9iamVjdC52YWx1ZXMobikpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChvaywgZmFpbCkgPT4ge1xuICAgICAgbGV0IGFjdGl2ZTogUmVjb3JkPFdvcmtOb2RlWyd0eXBlJ10sIG51bWJlcj4gPSB7XG4gICAgICAgICdhc3NldC1idWlsZCc6IDAsXG4gICAgICAgICdhc3NldC1wdWJsaXNoJzogMCxcbiAgICAgICAgJ3N0YWNrJzogMCxcbiAgICAgICAgJ21hcmtlcic6IDAsXG4gICAgICB9O1xuICAgICAgZnVuY3Rpb24gdG90YWxBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiBzdW0oT2JqZWN0LnZhbHVlcyhhY3RpdmUpKTtcbiAgICAgIH1cblxuICAgICAgc3RhcnQoKTtcblxuICAgICAgZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgICAgIGdyYXBoLnVwZGF0ZVJlYWR5UG9vbCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JhcGgucmVhZHlQb29sLmxlbmd0aDsgKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gZ3JhcGgucmVhZHlQb29sW2ldO1xuXG4gICAgICAgICAgICBpZiAoYWN0aXZlW25vZGUudHlwZV0gPCBtYXhbbm9kZS50eXBlXSAmJiB0b3RhbEFjdGl2ZSgpIDwgdG90YWxNYXgpIHtcbiAgICAgICAgICAgICAgZ3JhcGgucmVhZHlQb29sLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgc3RhcnRPbmUobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRvdGFsQWN0aXZlKCkgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChncmFwaC5kb25lKCkpIHtcbiAgICAgICAgICAgICAgb2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHdhaXQgZm9yIG90aGVyIGFjdGl2ZSBkZXBsb3lzIHRvIGZpbmlzaCBiZWZvcmUgZmFpbGluZ1xuICAgICAgICAgICAgaWYgKGdyYXBoLmhhc0ZhaWxlZCgpKSB7XG4gICAgICAgICAgICAgIGZhaWwoZ3JhcGguZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICBmYWlsKGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc3RhcnRPbmUoeDogV29ya05vZGUpIHtcbiAgICAgICAgeC5kZXBsb3ltZW50U3RhdGUgPSBEZXBsb3ltZW50U3RhdGUuREVQTE9ZSU5HO1xuICAgICAgICBhY3RpdmVbeC50eXBlXSsrO1xuICAgICAgICB2b2lkIGZuKHgpXG4gICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgYWN0aXZlW3gudHlwZV0tLTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGdyYXBoLmRlcGxveWVkKHgpO1xuICAgICAgICAgICAgc3RhcnQoKTtcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAvLyBCeSByZWNvcmRpbmcgdGhlIGZhaWx1cmUgaW1tZWRpYXRlbHkgYXMgdGhlIHF1ZXVlZCB0YXNrIGV4aXRzLCB3ZSBwcmV2ZW50IHRoZSBuZXh0XG4gICAgICAgICAgICAvLyBxdWV1ZWQgdGFzayBmcm9tIHN0YXJ0aW5nLlxuICAgICAgICAgICAgZ3JhcGguZmFpbGVkKHgsIGVycik7XG4gICAgICAgICAgICBzdGFydCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpLmV2ZXJ5KChuKSA9PiBEZXBsb3ltZW50U3RhdGUuQ09NUExFVEVEID09PSBuLmRlcGxveW1lbnRTdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGRlcGxveWVkKG5vZGU6IFdvcmtOb2RlKSB7XG4gICAgbm9kZS5kZXBsb3ltZW50U3RhdGUgPSBEZXBsb3ltZW50U3RhdGUuQ09NUExFVEVEO1xuICB9XG5cbiAgcHJpdmF0ZSBmYWlsZWQobm9kZTogV29ya05vZGUsIGVycm9yPzogRXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgbm9kZS5kZXBsb3ltZW50U3RhdGUgPSBEZXBsb3ltZW50U3RhdGUuRkFJTEVEO1xuICAgIHRoaXMuc2tpcFJlc3QoKTtcbiAgICB0aGlzLnJlYWR5UG9vbC5zcGxpY2UoMCk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdkaWdyYXBoIEQgeycsXG4gICAgICAuLi5PYmplY3QuZW50cmllcyh0aGlzLm5vZGVzKS5mbGF0TWFwKChbaWQsIG5vZGVdKSA9PiByZW5kZXJOb2RlKGlkLCBub2RlKSksXG4gICAgICAnfScsXG4gICAgXS5qb2luKCdcXG4nKTtcblxuICAgIGZ1bmN0aW9uIHJlbmRlck5vZGUoaWQ6IHN0cmluZywgbm9kZTogV29ya05vZGUpOiBzdHJpbmdbXSB7XG4gICAgICBjb25zdCByZXQgPSBbXTtcbiAgICAgIGlmIChub2RlLmRlcGxveW1lbnRTdGF0ZSA9PT0gRGVwbG95bWVudFN0YXRlLkNPTVBMRVRFRCkge1xuICAgICAgICByZXQucHVzaChgICAke2d2KGlkLCB7IHN0eWxlOiAnZmlsbGVkJywgZmlsbGNvbG9yOiAneWVsbG93JywgY29tbWVudDogbm9kZS5ub3RlIH0pfTtgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldC5wdXNoKGAgICR7Z3YoaWQsIHsgY29tbWVudDogbm9kZS5ub3RlIH0pfTtgKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIG5vZGUuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIHJldC5wdXNoKGAgICR7Z3YoaWQpfSAtPiAke2d2KGRlcCl9O2ApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIGFsbCBkZXBlbmRlbmNpZXMgYWN0dWFsbHkgZXhpc3QuIFRoaXMgcHJvdGVjdHMgYWdhaW5zdCBzY2VuYXJpb3Mgc3VjaCBhcyB0aGUgZm9sbG93aW5nOlxuICAgKiBTdGFja0EgZGVwZW5kcyBvbiBTdGFja0IsIGJ1dCBTdGFja0IgaXMgbm90IHNlbGVjdGVkIHRvIGRlcGxveS4gVGhlIGRlcGVuZGVuY3kgaXMgcmVkdW5kYW50XG4gICAqIGFuZCB3aWxsIGJlIGRyb3BwZWQuXG4gICAqIFRoaXMgYXNzdW1lcyB0aGUgbWFuaWZlc3QgY29tZXMgdW5jb3JydXB0ZWQgc28gd2Ugd2lsbCBub3QgZmFpbCBpZiBhIGRlcGVuZGVuY3kgaXMgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZVVuYXZhaWxhYmxlRGVwZW5kZW5jaWVzKCkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpKSB7XG4gICAgICBjb25zdCByZW1vdmVEZXBzID0gQXJyYXkuZnJvbShub2RlLmRlcGVuZGVuY2llcykuZmlsdGVyKChkZXApID0+IHRoaXMubm9kZXNbZGVwXSA9PT0gdW5kZWZpbmVkKTtcblxuICAgICAgcmVtb3ZlRGVwcy5mb3JFYWNoKChkKSA9PiB7XG4gICAgICAgIG5vZGUuZGVwZW5kZW5jaWVzLmRlbGV0ZShkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGFzc2V0IHB1Ymxpc2hpbmcgc3RlcHMgZm9yIGFzc2V0cyB0aGF0IGFyZSBhbHJlYWR5IHB1Ymxpc2hlZCwgYW5kIHRoZW4gYnVpbGRcbiAgICogdGhhdCBhcmVuJ3QgdXNlZCBhbnltb3JlLlxuICAgKlxuICAgKiBEbyB0aGlzIGluIHBhcmFsbGVsLCBiZWNhdXNlIHRoZXJlIG1heSBiZSBhIGxvdCBvZiBhc3NldHMgaW4gYW4gYXBwbGljYXRpb24gKHNlZW4gaW4gcHJhY3RpY2U6ID4xMDAgYXNzZXRzKVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlbW92ZVVubmVjZXNzYXJ5QXNzZXRzKGlzVW5uZWNlc3Nhcnk6ICh4OiBBc3NldFB1Ymxpc2hOb2RlKSA9PiBQcm9taXNlPGJvb2xlYW4+KSB7XG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZygnQ2hlY2tpbmcgZm9yIHByZXZpb3VzbHkgcHVibGlzaGVkIGFzc2V0cycpO1xuXG4gICAgY29uc3QgcHVibGlzaGVzID0gdGhpcy5ub2Rlc09mVHlwZSgnYXNzZXQtcHVibGlzaCcpO1xuXG4gICAgY29uc3QgY2xhc3NpZmllZE5vZGVzID0gYXdhaXQgcGFyYWxsZWxQcm9taXNlcyhcbiAgICAgIDgsXG4gICAgICBwdWJsaXNoZXMubWFwKChhc3NldE5vZGUpID0+IGFzeW5jKCkgPT4gW2Fzc2V0Tm9kZSwgYXdhaXQgaXNVbm5lY2Vzc2FyeShhc3NldE5vZGUpXSBhcyBjb25zdCkpO1xuXG4gICAgY29uc3QgYWxyZWFkeVB1Ymxpc2hlZCA9IGNsYXNzaWZpZWROb2Rlcy5maWx0ZXIoKFtfLCB1bm5lY2Vzc2FyeV0pID0+IHVubmVjZXNzYXJ5KS5tYXAoKFthc3NldE5vZGUsIF9dKSA9PiBhc3NldE5vZGUpO1xuICAgIGZvciAoY29uc3QgYXNzZXROb2RlIG9mIGFscmVhZHlQdWJsaXNoZWQpIHtcbiAgICAgIHRoaXMucmVtb3ZlTm9kZShhc3NldE5vZGUpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoYCR7cHVibGlzaGVzLmxlbmd0aH0gdG90YWwgYXNzZXRzLCAke3B1Ymxpc2hlcy5sZW5ndGggLSBhbHJlYWR5UHVibGlzaGVkLmxlbmd0aH0gc3RpbGwgbmVlZCB0byBiZSBwdWJsaXNoZWRgKTtcblxuICAgIC8vIE5vdyBhbHNvIHJlbW92ZSBhbnkgYXNzZXQgYnVpbGQgc3RlcHMgdGhhdCBkb24ndCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlbSBhbnltb3JlXG4gICAgY29uc3QgdW51c2VkQnVpbGRzID0gdGhpcy5ub2Rlc09mVHlwZSgnYXNzZXQtYnVpbGQnKS5maWx0ZXIoYnVpbGQgPT4gdGhpcy5kZXBlbmRlZXMoYnVpbGQpLmxlbmd0aCA9PT0gMCk7XG4gICAgZm9yIChjb25zdCB1bnVzZWRCdWlsZCBvZiB1bnVzZWRCdWlsZHMpIHtcbiAgICAgIHRoaXMucmVtb3ZlTm9kZSh1bnVzZWRCdWlsZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVSZWFkeVBvb2woKSB7XG4gICAgY29uc3QgYWN0aXZlQ291bnQgPSBPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpLmZpbHRlcigoeCkgPT4geC5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5ERVBMT1lJTkcpLmxlbmd0aDtcbiAgICBjb25zdCBwZW5kaW5nQ291bnQgPSBPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpLmZpbHRlcigoeCkgPT4geC5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5QRU5ESU5HKS5sZW5ndGg7XG5cbiAgICBjb25zdCBuZXdseVJlYWR5ID0gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIoKHgpID0+XG4gICAgICB4LmRlcGxveW1lbnRTdGF0ZSA9PT0gRGVwbG95bWVudFN0YXRlLlBFTkRJTkcgJiZcbiAgICAgIEFycmF5LmZyb20oeC5kZXBlbmRlbmNpZXMpLmV2ZXJ5KChpZCkgPT4gdGhpcy5ub2RlKGlkKS5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5DT01QTEVURUQpKTtcblxuICAgIC8vIEFkZCBuZXdseSBhdmFpbGFibGUgbm9kZXMgdG8gdGhlIHJlYWR5IHBvb2xcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgbmV3bHlSZWFkeSkge1xuICAgICAgbm9kZS5kZXBsb3ltZW50U3RhdGUgPSBEZXBsb3ltZW50U3RhdGUuUVVFVUVEO1xuICAgICAgdGhpcy5yZWFkeVBvb2wucHVzaChub2RlKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbm9kZXMgZnJvbSB0aGUgcmVhZHkgcG9vbCB0aGF0IGhhdmUgYWxyZWFkeSBzdGFydGVkIGRlcGxveWluZ1xuICAgIHJldGFpbk9ubHkodGhpcy5yZWFkeVBvb2wsIChub2RlKSA9PiBub2RlLmRlcGxveW1lbnRTdGF0ZSA9PT0gRGVwbG95bWVudFN0YXRlLlFVRVVFRCk7XG5cbiAgICAvLyBTb3J0IGJ5IHJldmVyc2UgcHJpb3JpdHlcbiAgICB0aGlzLnJlYWR5UG9vbC5zb3J0KChhLCBiKSA9PiAoYi5wcmlvcml0eSA/PyAwKSAtIChhLnByaW9yaXR5ID8/IDApKTtcblxuICAgIGlmICh0aGlzLnJlYWR5UG9vbC5sZW5ndGggPT09IDAgJiYgYWN0aXZlQ291bnQgPT09IDAgJiYgcGVuZGluZ0NvdW50ID4gMCkge1xuICAgICAgY29uc3QgY3ljbGUgPSB0aGlzLmZpbmRDeWNsZSgpID8/IFsnTm8gY3ljbGUgZm91bmQhJ107XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLnRyYWNlKGBDeWNsZSAke2N5Y2xlLmpvaW4oJyAtPiAnKX0gaW4gZ3JhcGggJHt0aGlzfWApO1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignRGVwZW5kZW5jeUN5Y2xlJywgYFVuYWJsZSB0byBtYWtlIHByb2dyZXNzIGFueW1vcmUsIGRlcGVuZGVuY3kgY3ljbGUgYmV0d2VlbiByZW1haW5pbmcgYXJ0aWZhY3RzOiAke2N5Y2xlLmpvaW4oJyAtPiAnKX0gKHJ1biB3aXRoIC12diBmb3IgZnVsbCBncmFwaClgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNraXBSZXN0KCkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpKSB7XG4gICAgICBpZiAoW0RlcGxveW1lbnRTdGF0ZS5RVUVVRUQsIERlcGxveW1lbnRTdGF0ZS5QRU5ESU5HXS5pbmNsdWRlcyhub2RlLmRlcGxveW1lbnRTdGF0ZSkpIHtcbiAgICAgICAgbm9kZS5kZXBsb3ltZW50U3RhdGUgPSBEZXBsb3ltZW50U3RhdGUuU0tJUFBFRDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBjeWNsZXMgaW4gYSBncmFwaFxuICAgKlxuICAgKiBOb3QgdGhlIGZhc3Rlc3QsIGJ1dCBlZmZlY3RpdmUgYW5kIHNob3VsZCBiZSByYXJlXG4gICAqL1xuICBwdWJsaWMgZmluZEN5Y2xlKCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgZm9yIChjb25zdCBub2RlSWQgb2YgT2JqZWN0LmtleXModGhpcy5ub2RlcykpIHtcbiAgICAgIGNvbnN0IGN5Y2xlID0gcmVjdXJzZShub2RlSWQsIFtub2RlSWRdKTtcbiAgICAgIGlmIChjeWNsZSkge1xuICAgICAgICByZXR1cm4gY3ljbGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBmdW5jdGlvbiByZWN1cnNlKG5vZGVJZDogc3RyaW5nLCBwYXRoOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmIChzZWVuLmhhcyhub2RlSWQpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBzZWxmLm5vZGVzW25vZGVJZF0uZGVwZW5kZW5jaWVzID8/IFtdKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBwYXRoLmluZGV4T2YoZGVwKTtcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5wYXRoLnNsaWNlKGluZGV4KSwgZGVwXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjeWNsZSA9IHJlY3Vyc2UoZGVwLCBbLi4ucGF0aCwgZGVwXSk7XG4gICAgICAgICAgaWYgKGN5Y2xlKSB7XG4gICAgICAgICAgICByZXR1cm4gY3ljbGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNlZW4uYWRkKG5vZGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGBlbmRgIG5vZGUgaXMgcmVhY2hhYmxlIGZyb20gdGhlIGBzdGFydGAgbm9kZSwgZm9sbG93aW5nIHRoZSBkZXBlbmRlbmN5IGFycm93c1xuICAgKi9cbiAgcHVibGljIHJlYWNoYWJsZShzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gcmVjdXJzZShzdGFydCk7XG5cbiAgICBmdW5jdGlvbiByZWN1cnNlKGN1cnJlbnQ6IHN0cmluZykge1xuICAgICAgaWYgKHNlZW4uaGFzKGN1cnJlbnQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHNlZW4uYWRkKGN1cnJlbnQpO1xuXG4gICAgICBpZiAoY3VycmVudCA9PT0gZW5kKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBkZXAgb2Ygc2VsZi5ub2Rlc1tjdXJyZW50XS5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgaWYgKHJlY3Vyc2UoZGVwKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya0dyYXBoQWN0aW9ucyB7XG4gIGRlcGxveVN0YWNrOiAoc3RhY2tOb2RlOiBTdGFja05vZGUpID0+IFByb21pc2U8dm9pZD47XG4gIGJ1aWxkQXNzZXQ6IChhc3NldE5vZGU6IEFzc2V0QnVpbGROb2RlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwdWJsaXNoQXNzZXQ6IChhc3NldE5vZGU6IEFzc2V0UHVibGlzaE5vZGUpID0+IFByb21pc2U8dm9pZD47XG4gIG1hcmtlcjogKG1hcmtlck5vZGU6IE1hcmtlck5vZGUpID0+IFByb21pc2U8dm9pZD47XG59XG5cbmZ1bmN0aW9uIHN1bSh4czogbnVtYmVyW10pIHtcbiAgbGV0IHJldCA9IDA7XG4gIGZvciAoY29uc3QgeCBvZiB4cykge1xuICAgIHJldCArPSB4O1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIHJldGFpbk9ubHk8QT4oeHM6IEFbXSwgcHJlZDogKHg6IEEpID0+IGJvb2xlYW4pIHtcbiAgeHMuc3BsaWNlKDAsIHhzLmxlbmd0aCwgLi4ueHMuZmlsdGVyKHByZWQpKTtcbn1cblxuZnVuY3Rpb24gZ3YoaWQ6IHN0cmluZywgYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KSB7XG4gIGNvbnN0IGF0dHJTdHJpbmcgPSBPYmplY3QuZW50cmllcyhhdHRycyA/PyB7fSkuZmxhdE1hcCgoW2ssIHZdKSA9PiB2ICE9PSB1bmRlZmluZWQgPyBbYCR7a309XCIke3Z9XCJgXSA6IFtdKS5qb2luKCcsJyk7XG5cbiAgcmV0dXJuIGF0dHJTdHJpbmcgPyBgXCIke3NpbXBsaWZ5SWQoaWQpfVwiIFske2F0dHJTdHJpbmd9XWAgOiBgXCIke3NpbXBsaWZ5SWQoaWQpfVwiYDtcbn1cblxuZnVuY3Rpb24gc2ltcGxpZnlJZChpZDogc3RyaW5nKSB7XG4gIHJldHVybiBpZC5yZXBsYWNlKC8oWzAtOWEtZl17Nn0pWzAtOWEtZl17Nix9L2csICckMScpO1xufVxuIl19
package/lib/index_bg.wasm CHANGED
Binary file
@@ -206,9 +206,16 @@ export interface HotswapResult extends Duration, HotswapDeploymentDetails {
206
206
  /**
207
207
  * Whether hotswapping happened or not.
208
208
  *
209
- * `false` indicates that the deployment could not be hotswapped and full deployment may be attempted as fallback.
209
+ * `false` indicates that the deployment failed during the hotswap step or that the deployment
210
+ * could not be hotswapped and full deployment may be attempted as fallback.
210
211
  */
211
212
  readonly hotswapped: boolean;
213
+ /**
214
+ * Whether a hotswap fallback deployment is being completed
215
+ *
216
+ * `true` indicates a full deployment is being attempted
217
+ */
218
+ readonly hotswapFallback: boolean;
212
219
  /**
213
220
  * An error that occurred during the hotswap deployment, if any.
214
221
  *
@@ -40,4 +40,4 @@ var NonHotswappableReason;
40
40
  */
41
41
  NonHotswappableReason["NESTED_STACK_CREATION"] = "nested-stack-creation";
42
42
  })(NonHotswappableReason || (exports.NonHotswappableReason = NonHotswappableReason = {}));
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvdHN3YXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUZBLElBQVkscUJBcUNYO0FBckNELFdBQVkscUJBQXFCO0lBQy9COztPQUVHO0lBQ0gsc0NBQWEsQ0FBQTtJQUNiOztPQUVHO0lBQ0gsa0RBQXlCLENBQUE7SUFDekI7O09BRUc7SUFDSCwwQ0FBaUIsQ0FBQTtJQUNqQjs7T0FFRztJQUNILDBFQUFpRCxDQUFBO0lBQ2pEOztPQUVHO0lBQ0gsc0VBQTZDLENBQUE7SUFDN0M7O09BRUc7SUFDSCxnRUFBdUMsQ0FBQTtJQUN2Qzs7T0FFRztJQUNILGdFQUF1QyxDQUFBO0lBQ3ZDOztPQUVHO0lBQ0gsd0VBQStDLENBQUE7SUFDL0M7O09BRUc7SUFDSCx3RUFBK0MsQ0FBQTtBQUNqRCxDQUFDLEVBckNXLHFCQUFxQixxQ0FBckIscUJBQXFCLFFBcUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlEaWZmZXJlbmNlLCBSZXNvdXJjZSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHR5cGUgeyBEdXJhdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZU1ldGFkYXRhIH0gZnJvbSAnLi4vYXBpL3Jlc291cmNlLW1ldGFkYXRhL3Jlc291cmNlLW1ldGFkYXRhJztcbmV4cG9ydCB0eXBlIHsgUmVzb3VyY2VNZXRhZGF0YSB9IGZyb20gJy4uL2FwaS9yZXNvdXJjZS1tZXRhZGF0YS9yZXNvdXJjZS1tZXRhZGF0YSc7XG5cbi8qKlxuICogQSByZXNvdXJjZSBhZmZlY3RlZCBieSBhIGNoYW5nZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFmZmVjdGVkUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIGxvZ2ljYWwgSUQgb2YgdGhlIGFmZmVjdGVkIHJlc291cmNlIGluIHRoZSB0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gdHlwZSBvZiB0aGUgcmVzb3VyY2VcbiAgICogVGhpcyBjb3VsZCBiZSBhIGN1c3RvbSB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZnJpZW5kbHkgZGVzY3JpcHRpb24gb2YgdGhlIGFmZmVjdGVkIHJlc291cmNlXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwaHlzaWNhbCBuYW1lIG9mIHRoZSByZXNvdXJjZSB3aGVuIGRlcGxveWVkLlxuICAgKlxuICAgKiBBIHBoeXNpY2FsIG5hbWUgaXMgbm90IGFsd2F5cyBhdmFpbGFibGUsIGUuZy4gbmV3IHJlc291cmNlcyB3aWxsIG5vdCBoYXZlIG9uZSB1bnRpbCBhZnRlciB0aGUgZGVwbG95bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgcGh5c2ljYWxOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogUmVzb3VyY2UgbWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhlIGxvZ2ljYWwgaWQgZnJvbSB0aGUgY2xvdWQgYXNzZW1ibHlcbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IHByZXNlbnQgaWYgdGhlIHJlc291cmNlIGlzIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgQ2xvdWQgQXNzZW1ibHksXG4gICAqIGkuZS4gcmVzb3VyY2UgZGVsZXRpb25zIHdpbGwgbm90IGhhdmUgbWV0YWRhdGEuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFJlc291cmNlTWV0YWRhdGE7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNoYW5nZSBpbiBhIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGxvZ2ljYWwgSUQgb2YgdGhlIHJlc291cmNlIHdoaWNoIGlzIGJlaW5nIGNoYW5nZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2ljYWxJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRoZSByZXNvdXJjZSBpcyBiZWluZyB1cGRhdGVkIGZyb21cbiAgICovXG4gIHJlYWRvbmx5IG9sZFZhbHVlOiBSZXNvdXJjZTtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0aGUgcmVzb3VyY2UgaXMgYmVpbmcgdXBkYXRlZCB0b1xuICAgKi9cbiAgcmVhZG9ubHkgbmV3VmFsdWU6IFJlc291cmNlO1xuICAvKipcbiAgICogVGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGVydHlVcGRhdGVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eURpZmZlcmVuY2U8dW5rbm93bj4+O1xuICAvKipcbiAgICogUmVzb3VyY2UgbWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhlIGxvZ2ljYWwgaWQgZnJvbSB0aGUgY2xvdWQgYXNzZW1ibHlcbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IHByZXNlbnQgaWYgdGhlIHJlc291cmNlIGlzIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgQ2xvdWQgQXNzZW1ibHksXG4gICAqIGkuZS4gcmVzb3VyY2UgZGVsZXRpb25zIHdpbGwgbm90IGhhdmUgbWV0YWRhdGEuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFJlc291cmNlTWV0YWRhdGE7XG59XG5cbi8qKlxuICogQSBjaGFuZ2UgdGhhdCBjYW4gYmUgaG90c3dhcHBlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdHN3YXBwYWJsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgY2hhbmdlIHRoYXQgaXMgY2F1c2luZyB0aGUgaG90c3dhcC5cbiAgICovXG4gIHJlYWRvbmx5IGNhdXNlOiBSZXNvdXJjZUNoYW5nZTtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgYmVpbmcgaG90c3dhcHBlZCBhcyBwYXJ0IG9mIHRoZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlczogQWZmZWN0ZWRSZXNvdXJjZVtdO1xufVxuXG5leHBvcnQgZW51bSBOb25Ib3Rzd2FwcGFibGVSZWFzb24ge1xuICAvKipcbiAgICogVGFncyBhcmUgbm90IGhvdHN3YXBwYWJsZVxuICAgKi9cbiAgVEFHUyA9ICd0YWdzJyxcbiAgLyoqXG4gICAqIENoYW5nZWQgcmVzb3VyY2UgcHJvcGVydGllcyBhcmUgbm90IGhvdHN3YXBwYWJsZSBvbiB0aGlzIHJlc291cmNlIHR5cGVcbiAgICovXG4gIFBST1BFUlRJRVMgPSAncHJvcGVydGllcycsXG4gIC8qKlxuICAgKiBBIHN0YWNrIG91dHB1dCBoYXMgY2hhbmdlZFxuICAgKi9cbiAgT1VUUFVUID0gJ291dHB1dCcsXG4gIC8qKlxuICAgKiBBIGRlcGVuZGFudCByZXNvdXJjZSBpcyBub3QgaG90c3dhcHBhYmxlXG4gICAqL1xuICBERVBFTkRFTkNZX1VOU1VQUE9SVEVEID0gJ2RlcGVuZGVuY3ktdW5zdXBwb3J0ZWQnLFxuICAvKipcbiAgICogVGhlIHJlc291cmNlIHR5cGUgaXMgbm90IGhvdHN3YXBwYWJsZVxuICAgKi9cbiAgUkVTT1VSQ0VfVU5TVVBQT1JURUQgPSAncmVzb3VyY2UtdW5zdXBwb3J0ZWQnLFxuICAvKipcbiAgICogVGhlIHJlc291cmNlIGlzIGNyZWF0ZWQgaW4gdGhlIGRlcGxveW1lbnRcbiAgICovXG4gIFJFU09VUkNFX0NSRUFUSU9OID0gJ3Jlc291cmNlLWNyZWF0aW9uJyxcbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBpcyByZW1vdmVkIGluIHRoZSBkZXBsb3ltZW50XG4gICAqL1xuICBSRVNPVVJDRV9ERUxFVElPTiA9ICdyZXNvdXJjZS1kZWxldGlvbicsXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgaWRlbnRpZmllZCBieSB0aGUgbG9naWNhbCBpZCBoYXMgaXRzIHR5cGUgY2hhbmdlZFxuICAgKi9cbiAgUkVTT1VSQ0VfVFlQRV9DSEFOR0VEID0gJ3Jlc291cmNlLXR5cGUtY2hhbmdlZCcsXG4gIC8qKlxuICAgKiBUaGUgbmVzdGVkIHN0YWNrIGlzIGNyZWF0ZWQgaW4gdGhlIGRlcGxveW1lbnRcbiAgICovXG4gIE5FU1RFRF9TVEFDS19DUkVBVElPTiA9ICduZXN0ZWQtc3RhY2stY3JlYXRpb24nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlamVjdGlvblN1YmplY3Qge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHJlamVjdGlvbiBzdWJqZWN0LCBlLmcuIFJlc291cmNlIG9yIE91dHB1dFxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9naWNhbCBJRCBvZiB0aGUgY2hhbmdlIHRoYXQgaXMgbm90IGhvdHN3YXBwYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSZXNvdXJjZSBtZXRhZGF0YSBhdHRhY2hlZCB0byB0aGUgbG9naWNhbCBpZCBmcm9tIHRoZSBjbG91ZCBhc3NlbWJseVxuICAgKlxuICAgKiBUaGlzIGlzIG9ubHkgcHJlc2VudCBpZiB0aGUgcmVzb3VyY2UgaXMgcHJlc2VudCBpbiB0aGUgY3VycmVudCBDbG91ZCBBc3NlbWJseSxcbiAgICogaS5lLiByZXNvdXJjZSBkZWxldGlvbnMgd2lsbCBub3QgaGF2ZSBtZXRhZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogUmVzb3VyY2VNZXRhZGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVN1YmplY3QgZXh0ZW5kcyBSZWplY3Rpb25TdWJqZWN0IHtcbiAgLyoqXG4gICAqIEEgcmVqZWN0ZWQgcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6ICdSZXNvdXJjZSc7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVqZWN0ZWQgcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcHJvcGVydGllcyB0aGF0IGFyZSBjYXVzZSBmb3IgdGhlIHJlamVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVqZWN0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0U3ViamVjdCBleHRlbmRzIFJlamVjdGlvblN1YmplY3Qge1xuICAvKipcbiAgICogQSByZWplY3RlZCBvdXRwdXRcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6ICdPdXRwdXQnO1xufVxuXG4vKipcbiAqIEEgY2hhbmdlIHRoYXQgY2FuIG5vdCBiZSBob3Rzd2FwcGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9uSG90c3dhcHBhYmxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBzdWJqZWN0IG9mIHRoZSBjaGFuZ2UgdGhhdCB3YXMgcmVqZWN0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN1YmplY3Q6IFJlc291cmNlU3ViamVjdCB8IE91dHB1dFN1YmplY3Q7XG4gIC8qKlxuICAgKiBXaHkgd2FzIHRoaXMgY2hhbmdlIHdhcyBkZWVtZWQgbm9uLWhvdHN3YXBwYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBOb25Ib3Rzd2FwcGFibGVSZWFzb247XG4gIC8qKlxuICAgKiBUZWxscyB0aGUgdXNlciBleGFjdGx5IHdoeSB0aGlzIGNoYW5nZSB3YXMgZGVlbWVkIG5vbi1ob3Rzd2FwcGFibGUgYW5kIHdoYXQgaXRzIGxvZ2ljYWwgSUQgaXMuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIGBkaXNwbGF5UmVhc29uYCBkZWZhdWx0IHRvIHN0YXRlIHRoYXQgdGhlIHByb3BlcnRpZXMgbGlzdGVkIGluIGByZWplY3RlZENoYW5nZXNgIGFyZSBub3QgaG90c3dhcHBhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIb3Rzd2FwRGVwbG95bWVudEF0dGVtcHQge1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRoYXQncyBjdXJyZW50bHkgYmVpbmcgZGVwbG95ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RlIHRoZSBob3Rzd2FwIGRlcGxveW1lbnQgd2FzIGluaXRpYXRlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZTogJ2hvdHN3YXAtb25seScgfCAnZmFsbC1iYWNrJztcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCBhIGhvdHN3YXAgZGVwbG95bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdHN3YXBEZXBsb3ltZW50RGV0YWlscyB7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdGhhdCdzIGN1cnJlbnRseSBiZWluZyBkZXBsb3llZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogVGhlIG1vZGUgdGhlIGhvdHN3YXAgZGVwbG95bWVudCB3YXMgaW5pdGlhdGVkIHdpdGguXG4gICAqL1xuICByZWFkb25seSBtb2RlOiAnaG90c3dhcC1vbmx5JyB8ICdmYWxsLWJhY2snO1xuICAvKipcbiAgICogVGhlIGNoYW5nZXMgdGhhdCB3ZXJlIGRlZW1lZCBob3Rzd2FwcGFibGVcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXBwYWJsZUNoYW5nZXM6IEhvdHN3YXBwYWJsZUNoYW5nZVtdO1xuICAvKipcbiAgICogVGhlIGNoYW5nZXMgdGhhdCB3ZXJlIGRlZW1lZCBub3QgaG90c3dhcHBhYmxlXG4gICAqL1xuICByZWFkb25seSBub25Ib3Rzd2FwcGFibGVDaGFuZ2VzOiBOb25Ib3Rzd2FwcGFibGVDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGFuIGF0dGVtcHRlZCBob3Rzd2FwIGRlcGxveW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3Rzd2FwUmVzdWx0IGV4dGVuZHMgRHVyYXRpb24sIEhvdHN3YXBEZXBsb3ltZW50RGV0YWlscyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGhvdHN3YXBwaW5nIGhhcHBlbmVkIG9yIG5vdC5cbiAgICpcbiAgICogYGZhbHNlYCBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVwbG95bWVudCBjb3VsZCBub3QgYmUgaG90c3dhcHBlZCBhbmQgZnVsbCBkZXBsb3ltZW50IG1heSBiZSBhdHRlbXB0ZWQgYXMgZmFsbGJhY2suXG4gICAqL1xuICByZWFkb25seSBob3Rzd2FwcGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbiBlcnJvciB0aGF0IG9jY3VycmVkIGR1cmluZyB0aGUgaG90c3dhcCBkZXBsb3ltZW50LCBpZiBhbnkuXG4gICAqXG4gICAqIFdoZW4gc2V0LCBgaG90c3dhcHBlZGAgd2lsbCBiZSBgZmFsc2VgLiBUaGUgZXJyb3IgaXMgY2FwdHVyZWQgc28gdGhhdFxuICAgKiB0aGUgaG90c3dhcCBzcGFuIGNhbiBiZSBlbmRlZCB3aXRoIGZ1bGwgY29udGV4dCBiZWZvcmUgcmUtdGhyb3dpbmcuXG4gICAqL1xuICByZWFkb25seSBlcnJvcj86IEVycm9yO1xufVxuIl19
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvdHN3YXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUZBLElBQVkscUJBcUNYO0FBckNELFdBQVkscUJBQXFCO0lBQy9COztPQUVHO0lBQ0gsc0NBQWEsQ0FBQTtJQUNiOztPQUVHO0lBQ0gsa0RBQXlCLENBQUE7SUFDekI7O09BRUc7SUFDSCwwQ0FBaUIsQ0FBQTtJQUNqQjs7T0FFRztJQUNILDBFQUFpRCxDQUFBO0lBQ2pEOztPQUVHO0lBQ0gsc0VBQTZDLENBQUE7SUFDN0M7O09BRUc7SUFDSCxnRUFBdUMsQ0FBQTtJQUN2Qzs7T0FFRztJQUNILGdFQUF1QyxDQUFBO0lBQ3ZDOztPQUVHO0lBQ0gsd0VBQStDLENBQUE7SUFDL0M7O09BRUc7SUFDSCx3RUFBK0MsQ0FBQTtBQUNqRCxDQUFDLEVBckNXLHFCQUFxQixxQ0FBckIscUJBQXFCLFFBcUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlEaWZmZXJlbmNlLCBSZXNvdXJjZSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHR5cGUgeyBEdXJhdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZU1ldGFkYXRhIH0gZnJvbSAnLi4vYXBpL3Jlc291cmNlLW1ldGFkYXRhL3Jlc291cmNlLW1ldGFkYXRhJztcbmV4cG9ydCB0eXBlIHsgUmVzb3VyY2VNZXRhZGF0YSB9IGZyb20gJy4uL2FwaS9yZXNvdXJjZS1tZXRhZGF0YS9yZXNvdXJjZS1tZXRhZGF0YSc7XG5cbi8qKlxuICogQSByZXNvdXJjZSBhZmZlY3RlZCBieSBhIGNoYW5nZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFmZmVjdGVkUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIGxvZ2ljYWwgSUQgb2YgdGhlIGFmZmVjdGVkIHJlc291cmNlIGluIHRoZSB0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gdHlwZSBvZiB0aGUgcmVzb3VyY2VcbiAgICogVGhpcyBjb3VsZCBiZSBhIGN1c3RvbSB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZnJpZW5kbHkgZGVzY3JpcHRpb24gb2YgdGhlIGFmZmVjdGVkIHJlc291cmNlXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwaHlzaWNhbCBuYW1lIG9mIHRoZSByZXNvdXJjZSB3aGVuIGRlcGxveWVkLlxuICAgKlxuICAgKiBBIHBoeXNpY2FsIG5hbWUgaXMgbm90IGFsd2F5cyBhdmFpbGFibGUsIGUuZy4gbmV3IHJlc291cmNlcyB3aWxsIG5vdCBoYXZlIG9uZSB1bnRpbCBhZnRlciB0aGUgZGVwbG95bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgcGh5c2ljYWxOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogUmVzb3VyY2UgbWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhlIGxvZ2ljYWwgaWQgZnJvbSB0aGUgY2xvdWQgYXNzZW1ibHlcbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IHByZXNlbnQgaWYgdGhlIHJlc291cmNlIGlzIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgQ2xvdWQgQXNzZW1ibHksXG4gICAqIGkuZS4gcmVzb3VyY2UgZGVsZXRpb25zIHdpbGwgbm90IGhhdmUgbWV0YWRhdGEuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFJlc291cmNlTWV0YWRhdGE7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNoYW5nZSBpbiBhIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGxvZ2ljYWwgSUQgb2YgdGhlIHJlc291cmNlIHdoaWNoIGlzIGJlaW5nIGNoYW5nZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2ljYWxJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRoZSByZXNvdXJjZSBpcyBiZWluZyB1cGRhdGVkIGZyb21cbiAgICovXG4gIHJlYWRvbmx5IG9sZFZhbHVlOiBSZXNvdXJjZTtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0aGUgcmVzb3VyY2UgaXMgYmVpbmcgdXBkYXRlZCB0b1xuICAgKi9cbiAgcmVhZG9ubHkgbmV3VmFsdWU6IFJlc291cmNlO1xuICAvKipcbiAgICogVGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGVydHlVcGRhdGVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eURpZmZlcmVuY2U8dW5rbm93bj4+O1xuICAvKipcbiAgICogUmVzb3VyY2UgbWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhlIGxvZ2ljYWwgaWQgZnJvbSB0aGUgY2xvdWQgYXNzZW1ibHlcbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IHByZXNlbnQgaWYgdGhlIHJlc291cmNlIGlzIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgQ2xvdWQgQXNzZW1ibHksXG4gICAqIGkuZS4gcmVzb3VyY2UgZGVsZXRpb25zIHdpbGwgbm90IGhhdmUgbWV0YWRhdGEuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFJlc291cmNlTWV0YWRhdGE7XG59XG5cbi8qKlxuICogQSBjaGFuZ2UgdGhhdCBjYW4gYmUgaG90c3dhcHBlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdHN3YXBwYWJsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgY2hhbmdlIHRoYXQgaXMgY2F1c2luZyB0aGUgaG90c3dhcC5cbiAgICovXG4gIHJlYWRvbmx5IGNhdXNlOiBSZXNvdXJjZUNoYW5nZTtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgYmVpbmcgaG90c3dhcHBlZCBhcyBwYXJ0IG9mIHRoZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlczogQWZmZWN0ZWRSZXNvdXJjZVtdO1xufVxuXG5leHBvcnQgZW51bSBOb25Ib3Rzd2FwcGFibGVSZWFzb24ge1xuICAvKipcbiAgICogVGFncyBhcmUgbm90IGhvdHN3YXBwYWJsZVxuICAgKi9cbiAgVEFHUyA9ICd0YWdzJyxcbiAgLyoqXG4gICAqIENoYW5nZWQgcmVzb3VyY2UgcHJvcGVydGllcyBhcmUgbm90IGhvdHN3YXBwYWJsZSBvbiB0aGlzIHJlc291cmNlIHR5cGVcbiAgICovXG4gIFBST1BFUlRJRVMgPSAncHJvcGVydGllcycsXG4gIC8qKlxuICAgKiBBIHN0YWNrIG91dHB1dCBoYXMgY2hhbmdlZFxuICAgKi9cbiAgT1VUUFVUID0gJ291dHB1dCcsXG4gIC8qKlxuICAgKiBBIGRlcGVuZGFudCByZXNvdXJjZSBpcyBub3QgaG90c3dhcHBhYmxlXG4gICAqL1xuICBERVBFTkRFTkNZX1VOU1VQUE9SVEVEID0gJ2RlcGVuZGVuY3ktdW5zdXBwb3J0ZWQnLFxuICAvKipcbiAgICogVGhlIHJlc291cmNlIHR5cGUgaXMgbm90IGhvdHN3YXBwYWJsZVxuICAgKi9cbiAgUkVTT1VSQ0VfVU5TVVBQT1JURUQgPSAncmVzb3VyY2UtdW5zdXBwb3J0ZWQnLFxuICAvKipcbiAgICogVGhlIHJlc291cmNlIGlzIGNyZWF0ZWQgaW4gdGhlIGRlcGxveW1lbnRcbiAgICovXG4gIFJFU09VUkNFX0NSRUFUSU9OID0gJ3Jlc291cmNlLWNyZWF0aW9uJyxcbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBpcyByZW1vdmVkIGluIHRoZSBkZXBsb3ltZW50XG4gICAqL1xuICBSRVNPVVJDRV9ERUxFVElPTiA9ICdyZXNvdXJjZS1kZWxldGlvbicsXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgaWRlbnRpZmllZCBieSB0aGUgbG9naWNhbCBpZCBoYXMgaXRzIHR5cGUgY2hhbmdlZFxuICAgKi9cbiAgUkVTT1VSQ0VfVFlQRV9DSEFOR0VEID0gJ3Jlc291cmNlLXR5cGUtY2hhbmdlZCcsXG4gIC8qKlxuICAgKiBUaGUgbmVzdGVkIHN0YWNrIGlzIGNyZWF0ZWQgaW4gdGhlIGRlcGxveW1lbnRcbiAgICovXG4gIE5FU1RFRF9TVEFDS19DUkVBVElPTiA9ICduZXN0ZWQtc3RhY2stY3JlYXRpb24nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlamVjdGlvblN1YmplY3Qge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHJlamVjdGlvbiBzdWJqZWN0LCBlLmcuIFJlc291cmNlIG9yIE91dHB1dFxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9naWNhbCBJRCBvZiB0aGUgY2hhbmdlIHRoYXQgaXMgbm90IGhvdHN3YXBwYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSZXNvdXJjZSBtZXRhZGF0YSBhdHRhY2hlZCB0byB0aGUgbG9naWNhbCBpZCBmcm9tIHRoZSBjbG91ZCBhc3NlbWJseVxuICAgKlxuICAgKiBUaGlzIGlzIG9ubHkgcHJlc2VudCBpZiB0aGUgcmVzb3VyY2UgaXMgcHJlc2VudCBpbiB0aGUgY3VycmVudCBDbG91ZCBBc3NlbWJseSxcbiAgICogaS5lLiByZXNvdXJjZSBkZWxldGlvbnMgd2lsbCBub3QgaGF2ZSBtZXRhZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogUmVzb3VyY2VNZXRhZGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVN1YmplY3QgZXh0ZW5kcyBSZWplY3Rpb25TdWJqZWN0IHtcbiAgLyoqXG4gICAqIEEgcmVqZWN0ZWQgcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6ICdSZXNvdXJjZSc7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVqZWN0ZWQgcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcHJvcGVydGllcyB0aGF0IGFyZSBjYXVzZSBmb3IgdGhlIHJlamVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVqZWN0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0U3ViamVjdCBleHRlbmRzIFJlamVjdGlvblN1YmplY3Qge1xuICAvKipcbiAgICogQSByZWplY3RlZCBvdXRwdXRcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6ICdPdXRwdXQnO1xufVxuXG4vKipcbiAqIEEgY2hhbmdlIHRoYXQgY2FuIG5vdCBiZSBob3Rzd2FwcGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9uSG90c3dhcHBhYmxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBzdWJqZWN0IG9mIHRoZSBjaGFuZ2UgdGhhdCB3YXMgcmVqZWN0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN1YmplY3Q6IFJlc291cmNlU3ViamVjdCB8IE91dHB1dFN1YmplY3Q7XG4gIC8qKlxuICAgKiBXaHkgd2FzIHRoaXMgY2hhbmdlIHdhcyBkZWVtZWQgbm9uLWhvdHN3YXBwYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBOb25Ib3Rzd2FwcGFibGVSZWFzb247XG4gIC8qKlxuICAgKiBUZWxscyB0aGUgdXNlciBleGFjdGx5IHdoeSB0aGlzIGNoYW5nZSB3YXMgZGVlbWVkIG5vbi1ob3Rzd2FwcGFibGUgYW5kIHdoYXQgaXRzIGxvZ2ljYWwgSUQgaXMuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIGBkaXNwbGF5UmVhc29uYCBkZWZhdWx0IHRvIHN0YXRlIHRoYXQgdGhlIHByb3BlcnRpZXMgbGlzdGVkIGluIGByZWplY3RlZENoYW5nZXNgIGFyZSBub3QgaG90c3dhcHBhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIb3Rzd2FwRGVwbG95bWVudEF0dGVtcHQge1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRoYXQncyBjdXJyZW50bHkgYmVpbmcgZGVwbG95ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RlIHRoZSBob3Rzd2FwIGRlcGxveW1lbnQgd2FzIGluaXRpYXRlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZTogJ2hvdHN3YXAtb25seScgfCAnZmFsbC1iYWNrJztcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCBhIGhvdHN3YXAgZGVwbG95bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdHN3YXBEZXBsb3ltZW50RGV0YWlscyB7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdGhhdCdzIGN1cnJlbnRseSBiZWluZyBkZXBsb3llZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogVGhlIG1vZGUgdGhlIGhvdHN3YXAgZGVwbG95bWVudCB3YXMgaW5pdGlhdGVkIHdpdGguXG4gICAqL1xuICByZWFkb25seSBtb2RlOiAnaG90c3dhcC1vbmx5JyB8ICdmYWxsLWJhY2snO1xuICAvKipcbiAgICogVGhlIGNoYW5nZXMgdGhhdCB3ZXJlIGRlZW1lZCBob3Rzd2FwcGFibGVcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXBwYWJsZUNoYW5nZXM6IEhvdHN3YXBwYWJsZUNoYW5nZVtdO1xuICAvKipcbiAgICogVGhlIGNoYW5nZXMgdGhhdCB3ZXJlIGRlZW1lZCBub3QgaG90c3dhcHBhYmxlXG4gICAqL1xuICByZWFkb25seSBub25Ib3Rzd2FwcGFibGVDaGFuZ2VzOiBOb25Ib3Rzd2FwcGFibGVDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGFuIGF0dGVtcHRlZCBob3Rzd2FwIGRlcGxveW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3Rzd2FwUmVzdWx0IGV4dGVuZHMgRHVyYXRpb24sIEhvdHN3YXBEZXBsb3ltZW50RGV0YWlscyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGhvdHN3YXBwaW5nIGhhcHBlbmVkIG9yIG5vdC5cbiAgICpcbiAgICogYGZhbHNlYCBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVwbG95bWVudCBmYWlsZWQgZHVyaW5nIHRoZSBob3Rzd2FwIHN0ZXAgb3IgdGhhdCB0aGUgZGVwbG95bWVudFxuICAgKiBjb3VsZCBub3QgYmUgaG90c3dhcHBlZCBhbmQgZnVsbCBkZXBsb3ltZW50IG1heSBiZSBhdHRlbXB0ZWQgYXMgZmFsbGJhY2suXG4gICAqL1xuICByZWFkb25seSBob3Rzd2FwcGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgaG90c3dhcCBmYWxsYmFjayBkZXBsb3ltZW50IGlzIGJlaW5nIGNvbXBsZXRlZFxuICAgKlxuICAgKiBgdHJ1ZWAgaW5kaWNhdGVzIGEgZnVsbCBkZXBsb3ltZW50IGlzIGJlaW5nIGF0dGVtcHRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaG90c3dhcEZhbGxiYWNrOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbiBlcnJvciB0aGF0IG9jY3VycmVkIGR1cmluZyB0aGUgaG90c3dhcCBkZXBsb3ltZW50LCBpZiBhbnkuXG4gICAqXG4gICAqIFdoZW4gc2V0LCBgaG90c3dhcHBlZGAgd2lsbCBiZSBgZmFsc2VgLiBUaGUgZXJyb3IgaXMgY2FwdHVyZWQgc28gdGhhdFxuICAgKiB0aGUgaG90c3dhcCBzcGFuIGNhbiBiZSBlbmRlZCB3aXRoIGZ1bGwgY29udGV4dCBiZWZvcmUgcmUtdGhyb3dpbmcuXG4gICAqL1xuICByZWFkb25seSBlcnJvcj86IEVycm9yO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from '@aws-cdk/private-tools/lib/zip';
2
+ //# sourceMappingURL=tools.d.ts.map