@cdktn/cli-core 0.25.0-pre.1 → 0.25.0-pre.3
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.
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) HashiCorp, Inc.
|
|
3
3
|
* SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
*/
|
|
5
|
-
import { EventObject,
|
|
5
|
+
import { ActorRefFrom, EventObject, InspectionEvent, SnapshotFrom } from "xstate";
|
|
6
6
|
import { spawnInteractive, InteractiveSpawnConfig } from "./interactive-process";
|
|
7
7
|
interface DeployContext {
|
|
8
8
|
exitCode?: number;
|
|
@@ -52,41 +52,6 @@ export type DeployEvent = {
|
|
|
52
52
|
export declare function isDeployEvent<DeployEventType extends DeployEvent["type"]>(event: EventObject, type: DeployEventType): event is DeployEvent & {
|
|
53
53
|
type: DeployEventType;
|
|
54
54
|
};
|
|
55
|
-
export type DeployState = {
|
|
56
|
-
value: "idle";
|
|
57
|
-
context: DeployContext;
|
|
58
|
-
} | {
|
|
59
|
-
value: "running";
|
|
60
|
-
context: DeployContext;
|
|
61
|
-
} | {
|
|
62
|
-
value: {
|
|
63
|
-
running: "processing";
|
|
64
|
-
};
|
|
65
|
-
context: DeployContext;
|
|
66
|
-
} | {
|
|
67
|
-
value: {
|
|
68
|
-
running: "awaiting_approval";
|
|
69
|
-
};
|
|
70
|
-
context: DeployContext;
|
|
71
|
-
} | {
|
|
72
|
-
value: {
|
|
73
|
-
running: "awaiting_sentinel_override";
|
|
74
|
-
};
|
|
75
|
-
context: DeployContext;
|
|
76
|
-
} | {
|
|
77
|
-
value: {
|
|
78
|
-
running: "stopping";
|
|
79
|
-
};
|
|
80
|
-
context: DeployContext;
|
|
81
|
-
} | {
|
|
82
|
-
value: "exited";
|
|
83
|
-
context: DeployContext & {
|
|
84
|
-
exitCode: number;
|
|
85
|
-
};
|
|
86
|
-
} | {
|
|
87
|
-
value: "stopped";
|
|
88
|
-
context: DeployContext;
|
|
89
|
-
};
|
|
90
55
|
/**
|
|
91
56
|
* Returns true if any line in the given (ANSI-stripped) output is terraform's
|
|
92
57
|
* interactive prompt for a missing variable.
|
|
@@ -103,8 +68,95 @@ interface BufferedReceiverFunction {
|
|
|
103
68
|
}
|
|
104
69
|
export declare function bufferUnterminatedLines(handler: (output: string) => void): BufferedReceiverFunction;
|
|
105
70
|
export declare function handleLineReceived(send: (event: DeployEvent) => void): (output: string) => void;
|
|
106
|
-
|
|
107
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Input passed to the invoked pty actor, carrying the spawn config from the START event.
|
|
73
|
+
*/
|
|
74
|
+
export interface PtyActorInput {
|
|
75
|
+
pty: InteractiveSpawnConfig;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Builds the invoked actor that runs terraform in a pty. It relays completed lines back to the parent machine via
|
|
79
|
+
* `sendBack` and forwards SEND_LINE events from the parent to the pty via `receive`. The `spawn` function is a
|
|
80
|
+
* parameter so tests can inject a mock pty.
|
|
81
|
+
*/
|
|
82
|
+
export declare function makeTerraformPtyService(spawn?: typeof spawnInteractive): import("xstate").CallbackActorLogic<DeployEvent, PtyActorInput, EventObject>;
|
|
83
|
+
export declare const terraformPtyService: import("xstate").CallbackActorLogic<DeployEvent, PtyActorInput, EventObject>;
|
|
84
|
+
export declare const deployMachine: import("xstate").StateMachine<DeployContext, {
|
|
85
|
+
type: "START";
|
|
86
|
+
pty: InteractiveSpawnConfig;
|
|
87
|
+
} | {
|
|
88
|
+
type: "STOP";
|
|
89
|
+
} | {
|
|
90
|
+
type: "SEND_LINE";
|
|
91
|
+
input: string;
|
|
92
|
+
} | {
|
|
93
|
+
type: "OUTPUT_RECEIVED";
|
|
94
|
+
output: string;
|
|
95
|
+
} | {
|
|
96
|
+
type: "APPROVED_EXTERNALLY";
|
|
97
|
+
} | {
|
|
98
|
+
type: "REJECTED_EXTERNALLY";
|
|
99
|
+
} | {
|
|
100
|
+
type: "OVERRIDDEN_EXTERNALLY";
|
|
101
|
+
} | {
|
|
102
|
+
type: "OVERRIDE_REJECTED_EXTERNALLY";
|
|
103
|
+
} | {
|
|
104
|
+
type: "OVERRIDE";
|
|
105
|
+
} | {
|
|
106
|
+
type: "REJECT_OVERRIDE";
|
|
107
|
+
} | {
|
|
108
|
+
type: "REQUEST_APPROVAL";
|
|
109
|
+
} | {
|
|
110
|
+
type: "VARIABLE_MISSING";
|
|
111
|
+
variableName: string;
|
|
112
|
+
} | {
|
|
113
|
+
type: "REQUEST_SENTINEL_OVERRIDE";
|
|
114
|
+
} | {
|
|
115
|
+
type: "APPROVE";
|
|
116
|
+
} | {
|
|
117
|
+
type: "REJECT";
|
|
118
|
+
} | {
|
|
119
|
+
type: "EXITED";
|
|
120
|
+
exitCode: number;
|
|
121
|
+
}, {
|
|
122
|
+
[x: string]: import("xstate").ActorRefFromLogic<import("xstate").CallbackActorLogic<DeployEvent, PtyActorInput, EventObject>> | undefined;
|
|
123
|
+
}, {
|
|
124
|
+
src: "runTerraformInPty";
|
|
125
|
+
logic: import("xstate").CallbackActorLogic<DeployEvent, PtyActorInput, EventObject>;
|
|
126
|
+
id: string | undefined;
|
|
127
|
+
}, never, never, never, "idle" | "stopped" | "exited" | {
|
|
128
|
+
running: "processing" | "awaiting_approval" | "awaiting_sentinel_override" | "stopping";
|
|
129
|
+
}, string, import("xstate").NonReducibleUnknown, {
|
|
130
|
+
exitCode?: number | undefined;
|
|
131
|
+
}, EventObject, import("xstate").MetaObject, {
|
|
132
|
+
id: "root";
|
|
133
|
+
states: {
|
|
134
|
+
readonly idle: {};
|
|
135
|
+
readonly running: {
|
|
136
|
+
states: {
|
|
137
|
+
readonly processing: {};
|
|
138
|
+
readonly awaiting_approval: {};
|
|
139
|
+
readonly awaiting_sentinel_override: {};
|
|
140
|
+
readonly stopping: {};
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
readonly exited: {};
|
|
144
|
+
readonly stopped: {};
|
|
145
|
+
};
|
|
146
|
+
}>;
|
|
147
|
+
/**
|
|
148
|
+
* A snapshot of the deploy machine, carrying the current state value and context.
|
|
149
|
+
*/
|
|
150
|
+
export type DeploySnapshot = SnapshotFrom<typeof deployMachine>;
|
|
151
|
+
/**
|
|
152
|
+
* A running actor for the deploy machine, as returned by the createAndStart* factories.
|
|
153
|
+
*/
|
|
154
|
+
export type DeployActor = ActorRefFrom<typeof deployMachine>;
|
|
155
|
+
/**
|
|
156
|
+
* Callback invoked for every inspection event on the deploy actor. Consumers use it to observe both the events
|
|
157
|
+
* flowing through the machine and each resulting snapshot.
|
|
158
|
+
*/
|
|
159
|
+
export type DeployInspectionHandler = (inspectionEvent: InspectionEvent) => void;
|
|
108
160
|
export declare function createAndStartDeployService(options: {
|
|
109
161
|
refreshOnly?: boolean;
|
|
110
162
|
parallelism: number;
|
|
@@ -115,7 +167,69 @@ export declare function createAndStartDeployService(options: {
|
|
|
115
167
|
workdir: string;
|
|
116
168
|
vars?: string[];
|
|
117
169
|
varFiles?: string[];
|
|
118
|
-
}): import("xstate").
|
|
170
|
+
}, inspect?: DeployInspectionHandler): import("xstate").Actor<import("xstate").StateMachine<DeployContext, {
|
|
171
|
+
type: "START";
|
|
172
|
+
pty: InteractiveSpawnConfig;
|
|
173
|
+
} | {
|
|
174
|
+
type: "STOP";
|
|
175
|
+
} | {
|
|
176
|
+
type: "SEND_LINE";
|
|
177
|
+
input: string;
|
|
178
|
+
} | {
|
|
179
|
+
type: "OUTPUT_RECEIVED";
|
|
180
|
+
output: string;
|
|
181
|
+
} | {
|
|
182
|
+
type: "APPROVED_EXTERNALLY";
|
|
183
|
+
} | {
|
|
184
|
+
type: "REJECTED_EXTERNALLY";
|
|
185
|
+
} | {
|
|
186
|
+
type: "OVERRIDDEN_EXTERNALLY";
|
|
187
|
+
} | {
|
|
188
|
+
type: "OVERRIDE_REJECTED_EXTERNALLY";
|
|
189
|
+
} | {
|
|
190
|
+
type: "OVERRIDE";
|
|
191
|
+
} | {
|
|
192
|
+
type: "REJECT_OVERRIDE";
|
|
193
|
+
} | {
|
|
194
|
+
type: "REQUEST_APPROVAL";
|
|
195
|
+
} | {
|
|
196
|
+
type: "VARIABLE_MISSING";
|
|
197
|
+
variableName: string;
|
|
198
|
+
} | {
|
|
199
|
+
type: "REQUEST_SENTINEL_OVERRIDE";
|
|
200
|
+
} | {
|
|
201
|
+
type: "APPROVE";
|
|
202
|
+
} | {
|
|
203
|
+
type: "REJECT";
|
|
204
|
+
} | {
|
|
205
|
+
type: "EXITED";
|
|
206
|
+
exitCode: number;
|
|
207
|
+
}, {
|
|
208
|
+
[x: string]: import("xstate").ActorRefFromLogic<import("xstate").CallbackActorLogic<DeployEvent, PtyActorInput, EventObject>> | undefined;
|
|
209
|
+
}, {
|
|
210
|
+
src: "runTerraformInPty";
|
|
211
|
+
logic: import("xstate").CallbackActorLogic<DeployEvent, PtyActorInput, EventObject>;
|
|
212
|
+
id: string | undefined;
|
|
213
|
+
}, never, never, never, "idle" | "stopped" | "exited" | {
|
|
214
|
+
running: "processing" | "awaiting_approval" | "awaiting_sentinel_override" | "stopping";
|
|
215
|
+
}, string, import("xstate").NonReducibleUnknown, {
|
|
216
|
+
exitCode?: number | undefined;
|
|
217
|
+
}, EventObject, import("xstate").MetaObject, {
|
|
218
|
+
id: "root";
|
|
219
|
+
states: {
|
|
220
|
+
readonly idle: {};
|
|
221
|
+
readonly running: {
|
|
222
|
+
states: {
|
|
223
|
+
readonly processing: {};
|
|
224
|
+
readonly awaiting_approval: {};
|
|
225
|
+
readonly awaiting_sentinel_override: {};
|
|
226
|
+
readonly stopping: {};
|
|
227
|
+
};
|
|
228
|
+
};
|
|
229
|
+
readonly exited: {};
|
|
230
|
+
readonly stopped: {};
|
|
231
|
+
};
|
|
232
|
+
}>>;
|
|
119
233
|
export declare function createAndStartDestroyService(options: {
|
|
120
234
|
parallelism: number;
|
|
121
235
|
extraOptions: string[];
|
|
@@ -125,6 +239,68 @@ export declare function createAndStartDestroyService(options: {
|
|
|
125
239
|
workdir: string;
|
|
126
240
|
vars?: string[];
|
|
127
241
|
varFiles?: string[];
|
|
128
|
-
}): import("xstate").
|
|
242
|
+
}, inspect?: DeployInspectionHandler): import("xstate").Actor<import("xstate").StateMachine<DeployContext, {
|
|
243
|
+
type: "START";
|
|
244
|
+
pty: InteractiveSpawnConfig;
|
|
245
|
+
} | {
|
|
246
|
+
type: "STOP";
|
|
247
|
+
} | {
|
|
248
|
+
type: "SEND_LINE";
|
|
249
|
+
input: string;
|
|
250
|
+
} | {
|
|
251
|
+
type: "OUTPUT_RECEIVED";
|
|
252
|
+
output: string;
|
|
253
|
+
} | {
|
|
254
|
+
type: "APPROVED_EXTERNALLY";
|
|
255
|
+
} | {
|
|
256
|
+
type: "REJECTED_EXTERNALLY";
|
|
257
|
+
} | {
|
|
258
|
+
type: "OVERRIDDEN_EXTERNALLY";
|
|
259
|
+
} | {
|
|
260
|
+
type: "OVERRIDE_REJECTED_EXTERNALLY";
|
|
261
|
+
} | {
|
|
262
|
+
type: "OVERRIDE";
|
|
263
|
+
} | {
|
|
264
|
+
type: "REJECT_OVERRIDE";
|
|
265
|
+
} | {
|
|
266
|
+
type: "REQUEST_APPROVAL";
|
|
267
|
+
} | {
|
|
268
|
+
type: "VARIABLE_MISSING";
|
|
269
|
+
variableName: string;
|
|
270
|
+
} | {
|
|
271
|
+
type: "REQUEST_SENTINEL_OVERRIDE";
|
|
272
|
+
} | {
|
|
273
|
+
type: "APPROVE";
|
|
274
|
+
} | {
|
|
275
|
+
type: "REJECT";
|
|
276
|
+
} | {
|
|
277
|
+
type: "EXITED";
|
|
278
|
+
exitCode: number;
|
|
279
|
+
}, {
|
|
280
|
+
[x: string]: import("xstate").ActorRefFromLogic<import("xstate").CallbackActorLogic<DeployEvent, PtyActorInput, EventObject>> | undefined;
|
|
281
|
+
}, {
|
|
282
|
+
src: "runTerraformInPty";
|
|
283
|
+
logic: import("xstate").CallbackActorLogic<DeployEvent, PtyActorInput, EventObject>;
|
|
284
|
+
id: string | undefined;
|
|
285
|
+
}, never, never, never, "idle" | "stopped" | "exited" | {
|
|
286
|
+
running: "processing" | "awaiting_approval" | "awaiting_sentinel_override" | "stopping";
|
|
287
|
+
}, string, import("xstate").NonReducibleUnknown, {
|
|
288
|
+
exitCode?: number | undefined;
|
|
289
|
+
}, EventObject, import("xstate").MetaObject, {
|
|
290
|
+
id: "root";
|
|
291
|
+
states: {
|
|
292
|
+
readonly idle: {};
|
|
293
|
+
readonly running: {
|
|
294
|
+
states: {
|
|
295
|
+
readonly processing: {};
|
|
296
|
+
readonly awaiting_approval: {};
|
|
297
|
+
readonly awaiting_sentinel_override: {};
|
|
298
|
+
readonly stopping: {};
|
|
299
|
+
};
|
|
300
|
+
};
|
|
301
|
+
readonly exited: {};
|
|
302
|
+
readonly stopped: {};
|
|
303
|
+
};
|
|
304
|
+
}>>;
|
|
129
305
|
export {};
|
|
130
306
|
//# sourceMappingURL=deploy-machine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-machine.d.ts","sourceRoot":"","sources":["../../../src/lib/models/deploy-machine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"deploy-machine.d.ts","sourceRoot":"","sources":["../../../src/lib/models/deploy-machine.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
7
7
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
8
|
};
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.createAndStartDestroyService = exports.createAndStartDeployService = exports.terraformPtyService = exports.
|
|
10
|
+
exports.createAndStartDestroyService = exports.createAndStartDeployService = exports.deployMachine = exports.terraformPtyService = exports.makeTerraformPtyService = exports.handleLineReceived = exports.bufferUnterminatedLines = exports.extractVariableNameFromPrompt = exports.isMissingVariablePrompt = exports.isDeployEvent = void 0;
|
|
11
11
|
const xstate_1 = require("xstate");
|
|
12
12
|
const commons_1 = require("@cdktn/commons");
|
|
13
13
|
const errors_1 = require("../errors");
|
|
@@ -119,8 +119,50 @@ function handleLineReceived(send) {
|
|
|
119
119
|
};
|
|
120
120
|
}
|
|
121
121
|
exports.handleLineReceived = handleLineReceived;
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
/**
|
|
123
|
+
* Builds the invoked actor that runs terraform in a pty. It relays completed lines back to the parent machine via
|
|
124
|
+
* `sendBack` and forwards SEND_LINE events from the parent to the pty via `receive`. The `spawn` function is a
|
|
125
|
+
* parameter so tests can inject a mock pty.
|
|
126
|
+
*/
|
|
127
|
+
function makeTerraformPtyService(spawn = interactive_process_1.spawnInteractive) {
|
|
128
|
+
return (0, xstate_1.fromCallback)(({ sendBack, receive, input }) => {
|
|
129
|
+
const { pty } = input;
|
|
130
|
+
// Communication from the pty to the caller
|
|
131
|
+
const receiver = bufferUnterminatedLines(handleLineReceived(sendBack));
|
|
132
|
+
const { exitCode, actions } = spawn(pty, (data) => {
|
|
133
|
+
receiver(data);
|
|
134
|
+
});
|
|
135
|
+
// Communication from the caller to the pty
|
|
136
|
+
receive((event) => {
|
|
137
|
+
if (event.type === "SEND_LINE") {
|
|
138
|
+
actions.writeLine(event.input);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
exitCode.then((exitCode) => {
|
|
142
|
+
const lastBuffer = receiver.getBuffer();
|
|
143
|
+
if (lastBuffer.length > 0) {
|
|
144
|
+
commons_1.logger.debug(`Terraform CLI exited but the last outputted line was not terminated with a newline and hence is still in the buffer and wasn't printed: "${lastBuffer}"`);
|
|
145
|
+
}
|
|
146
|
+
sendBack({ type: "EXITED", exitCode });
|
|
147
|
+
});
|
|
148
|
+
return () => {
|
|
149
|
+
commons_1.logger.trace("Terraform CLI state machine: cleaning up pty");
|
|
150
|
+
actions.stop();
|
|
151
|
+
};
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
exports.makeTerraformPtyService = makeTerraformPtyService;
|
|
155
|
+
exports.terraformPtyService = makeTerraformPtyService();
|
|
156
|
+
exports.deployMachine = (0, xstate_1.setup)({
|
|
157
|
+
types: {
|
|
158
|
+
context: {},
|
|
159
|
+
events: {},
|
|
160
|
+
output: {},
|
|
161
|
+
},
|
|
162
|
+
actors: {
|
|
163
|
+
runTerraformInPty: exports.terraformPtyService,
|
|
164
|
+
},
|
|
165
|
+
}).createMachine({
|
|
124
166
|
context: {},
|
|
125
167
|
initial: "idle",
|
|
126
168
|
id: "root",
|
|
@@ -134,9 +176,18 @@ exports.deployMachine = (0, xstate_1.createMachine)({
|
|
|
134
176
|
invoke: {
|
|
135
177
|
id: "pty",
|
|
136
178
|
src: "runTerraformInPty",
|
|
179
|
+
input: ({ event }) => {
|
|
180
|
+
if (event.type !== "START") {
|
|
181
|
+
throw commons_1.Errors.Internal(`Terraform CLI invocation state machine: Unexpected event caused transition to the running state: ${event.type}`);
|
|
182
|
+
}
|
|
183
|
+
return { pty: event.pty };
|
|
184
|
+
},
|
|
137
185
|
},
|
|
138
186
|
on: {
|
|
139
|
-
EXITED:
|
|
187
|
+
EXITED: {
|
|
188
|
+
target: "exited",
|
|
189
|
+
actions: (0, xstate_1.assign)(({ event }) => ({ exitCode: event.exitCode })),
|
|
190
|
+
},
|
|
140
191
|
STOP: ".stopping", // wait for terraform to exit, don't stop immediately (see the "stopping" state)
|
|
141
192
|
},
|
|
142
193
|
initial: "processing",
|
|
@@ -147,7 +198,11 @@ exports.deployMachine = (0, xstate_1.createMachine)({
|
|
|
147
198
|
REQUEST_APPROVAL: "awaiting_approval",
|
|
148
199
|
REQUEST_SENTINEL_OVERRIDE: "awaiting_sentinel_override",
|
|
149
200
|
VARIABLE_MISSING: {
|
|
150
|
-
|
|
201
|
+
// Send to self rather than raise() so consumers observing the actor via inspection still see this event.
|
|
202
|
+
actions: (0, xstate_1.sendTo)(({ self }) => self, {
|
|
203
|
+
type: "EXITED",
|
|
204
|
+
exitCode: 1,
|
|
205
|
+
}),
|
|
151
206
|
},
|
|
152
207
|
},
|
|
153
208
|
},
|
|
@@ -160,15 +215,13 @@ exports.deployMachine = (0, xstate_1.createMachine)({
|
|
|
160
215
|
},
|
|
161
216
|
APPROVE: {
|
|
162
217
|
target: "processing",
|
|
163
|
-
actions: (0, xstate_1.
|
|
218
|
+
actions: (0, xstate_1.sendTo)("pty", { type: "SEND_LINE", input: "yes" }),
|
|
164
219
|
},
|
|
165
220
|
REJECT: {
|
|
166
221
|
target: "processing",
|
|
167
222
|
actions: [
|
|
168
|
-
(0, xstate_1.
|
|
169
|
-
(0, xstate_1.assign)({
|
|
170
|
-
cancelled: true,
|
|
171
|
-
}),
|
|
223
|
+
(0, xstate_1.sendTo)("pty", { type: "SEND_LINE", input: "no" }),
|
|
224
|
+
(0, xstate_1.assign)({ cancelled: true }),
|
|
172
225
|
],
|
|
173
226
|
},
|
|
174
227
|
},
|
|
@@ -180,23 +233,23 @@ exports.deployMachine = (0, xstate_1.createMachine)({
|
|
|
180
233
|
target: "#root.exited",
|
|
181
234
|
actions: (0, xstate_1.assign)({ cancelled: true }),
|
|
182
235
|
},
|
|
183
|
-
//
|
|
184
|
-
//
|
|
185
|
-
//
|
|
236
|
+
// The external discard message posted by the Terraform UI is the same as during apply, so we capture it
|
|
237
|
+
// and re-send a more specific event. Sent to self rather than raise() so consumers observing the actor
|
|
238
|
+
// via inspection still see it.
|
|
186
239
|
REJECTED_EXTERNALLY: {
|
|
187
|
-
actions: (0, xstate_1.
|
|
240
|
+
actions: (0, xstate_1.sendTo)(({ self }) => self, {
|
|
241
|
+
type: "OVERRIDE_REJECTED_EXTERNALLY",
|
|
242
|
+
}),
|
|
188
243
|
},
|
|
189
244
|
OVERRIDE: {
|
|
190
245
|
target: "processing",
|
|
191
|
-
actions: (0, xstate_1.
|
|
246
|
+
actions: (0, xstate_1.sendTo)("pty", { type: "SEND_LINE", input: "override" }),
|
|
192
247
|
},
|
|
193
248
|
REJECT_OVERRIDE: {
|
|
194
249
|
target: "processing",
|
|
195
250
|
actions: [
|
|
196
|
-
(0, xstate_1.
|
|
197
|
-
(0, xstate_1.assign)({
|
|
198
|
-
cancelled: true,
|
|
199
|
-
}),
|
|
251
|
+
(0, xstate_1.sendTo)("pty", { type: "SEND_LINE", input: "no" }),
|
|
252
|
+
(0, xstate_1.assign)({ cancelled: true }),
|
|
200
253
|
],
|
|
201
254
|
},
|
|
202
255
|
},
|
|
@@ -207,7 +260,10 @@ exports.deployMachine = (0, xstate_1.createMachine)({
|
|
|
207
260
|
stopping: {
|
|
208
261
|
entry: (0, xstate_1.assign)({ cancelled: true }),
|
|
209
262
|
on: {
|
|
210
|
-
EXITED:
|
|
263
|
+
EXITED: {
|
|
264
|
+
target: "#root.stopped",
|
|
265
|
+
actions: (0, xstate_1.assign)(({ event }) => ({ exitCode: event.exitCode })),
|
|
266
|
+
},
|
|
211
267
|
},
|
|
212
268
|
},
|
|
213
269
|
},
|
|
@@ -215,44 +271,13 @@ exports.deployMachine = (0, xstate_1.createMachine)({
|
|
|
215
271
|
exited: { type: "final" },
|
|
216
272
|
stopped: { type: "final" },
|
|
217
273
|
},
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
},
|
|
274
|
+
// The machine's output is produced when it reaches a top-level final state (exited/stopped), carrying the
|
|
275
|
+
// terraform exit code captured into context on the EXITED transition.
|
|
276
|
+
output: ({ context }) => ({ exitCode: context.exitCode }),
|
|
222
277
|
});
|
|
223
|
-
function
|
|
224
|
-
return (send, onReceive) => {
|
|
225
|
-
if (event.type !== "START") {
|
|
226
|
-
throw commons_1.Errors.Internal(`Terraform CLI invocation state machine: Unexpected event caused transition to the running state: ${event.type}`);
|
|
227
|
-
}
|
|
228
|
-
// Communication from the pty to the caller
|
|
229
|
-
const receiver = bufferUnterminatedLines(handleLineReceived(send));
|
|
230
|
-
const { exitCode, actions } = spawn(event.pty, (data) => {
|
|
231
|
-
receiver(data);
|
|
232
|
-
});
|
|
233
|
-
// Communication from the caller to the pty
|
|
234
|
-
onReceive((event) => {
|
|
235
|
-
if (event.type === "SEND_LINE") {
|
|
236
|
-
actions.writeLine(event.input);
|
|
237
|
-
}
|
|
238
|
-
});
|
|
239
|
-
exitCode.then((exitCode) => {
|
|
240
|
-
const lastBuffer = receiver.getBuffer();
|
|
241
|
-
if (lastBuffer.length > 0) {
|
|
242
|
-
commons_1.logger.debug(`Terraform CLI exited but the last outputted line was not terminated with a newline and hence is still in the buffer and wasn't printed: "${lastBuffer}"`);
|
|
243
|
-
}
|
|
244
|
-
send({ type: "EXITED", exitCode });
|
|
245
|
-
});
|
|
246
|
-
return () => {
|
|
247
|
-
commons_1.logger.trace("Terraform CLI state machine: cleaning up pty");
|
|
248
|
-
actions.stop();
|
|
249
|
-
};
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
exports.terraformPtyService = terraformPtyService;
|
|
253
|
-
function createAndStartDeployService(options) {
|
|
278
|
+
function createAndStartDeployService(options, inspect) {
|
|
254
279
|
var _a, _b;
|
|
255
|
-
const service = (0, xstate_1.
|
|
280
|
+
const service = (0, xstate_1.createActor)(exports.deployMachine, { inspect });
|
|
256
281
|
const args = [
|
|
257
282
|
"apply",
|
|
258
283
|
...(options.autoApprove ? ["-auto-approve"] : []),
|
|
@@ -279,13 +304,14 @@ function createAndStartDeployService(options) {
|
|
|
279
304
|
env: process.env, // TODO: make this explicit and move to caller or whatever
|
|
280
305
|
},
|
|
281
306
|
};
|
|
307
|
+
service.start();
|
|
282
308
|
service.send({ type: "START", pty: config });
|
|
283
309
|
return service;
|
|
284
310
|
}
|
|
285
311
|
exports.createAndStartDeployService = createAndStartDeployService;
|
|
286
|
-
function createAndStartDestroyService(options) {
|
|
312
|
+
function createAndStartDestroyService(options, inspect) {
|
|
287
313
|
var _a, _b;
|
|
288
|
-
const service = (0, xstate_1.
|
|
314
|
+
const service = (0, xstate_1.createActor)(exports.deployMachine, { inspect });
|
|
289
315
|
const args = [
|
|
290
316
|
"destroy",
|
|
291
317
|
...(options.autoApprove ? ["-auto-approve"] : []),
|
|
@@ -311,8 +337,9 @@ function createAndStartDestroyService(options) {
|
|
|
311
337
|
env: process.env, // TODO: make this explicit and move to caller or whatever
|
|
312
338
|
},
|
|
313
339
|
};
|
|
340
|
+
service.start();
|
|
314
341
|
service.send({ type: "START", pty: config });
|
|
315
342
|
return service;
|
|
316
343
|
}
|
|
317
344
|
exports.createAndStartDestroyService = createAndStartDestroyService;
|
|
318
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LW1hY2hpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21vZGVscy9kZXBsb3ktbWFjaGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7QUFFSCxtQ0FRZ0I7QUFDaEIsNENBQWdEO0FBQ2hELHNDQUE0QztBQUM1Qyw0REFBbUM7QUFDbkMsMkJBQXlCO0FBQ3pCLCtEQUcrQjtBQTRCL0IsU0FBZ0IsYUFBYSxDQUMzQixLQUFrQixFQUNsQixJQUFxQjtJQUVyQixPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO0FBQzdCLENBQUM7QUFMRCxzQ0FLQztBQW9DRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLHdDQUF3QyxDQUFDO0FBRXZFOzs7R0FHRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLFdBQW1CO0lBQ3pELE9BQU8sV0FBVztTQUNmLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDWCxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFKRCwwREFJQztBQUVELFNBQWdCLDZCQUE2QixDQUFDLElBQVk7SUFDeEQsTUFBTSxXQUFXLEdBQUcsSUFBQSxvQkFBUyxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsTUFBTSxLQUFLLEdBQUcsS0FBSztTQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUMxQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQXlCLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDbEQsSUFBSSxDQUFD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QUFPLENBQUMsSUFBSSwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztJQUVILE1BQUEsT0FBTyxDQUFDLFFBQVEsMENBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxnQkFBTSxDQUFDLEtBQUssQ0FDVixhQUFhLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUN4RCxPQUFPLENBQUMsT0FDVixFQUFFLENBQ0gsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUEyQjtRQUNyQyxJQUFJLEVBQUUsT0FBTyxDQUFDLG1CQUFtQjtRQUNqQyxJQUFJO1FBQ0osT0FBTyxFQUFFO1lBQ1AsR0FBRyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3BCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBZ0MsRUFBRSwwREFBMEQ7U0FDMUc7S0FDRixDQUFDO0lBRUYsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFN0MsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQWxERCxvRUFrREMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmMuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuICovXG5cbmltcG9ydCB7XG4gIGNyZWF0ZU1hY2hpbmUsXG4gIHNlbmQsXG4gIGludGVycHJldCxcbiAgRXZlbnRPYmplY3QsXG4gIGFzc2lnbixcbiAgU2VuZGVyLFxuICBSZWNlaXZlcixcbn0gZnJvbSBcInhzdGF0ZVwiO1xuaW1wb3J0IHsgRXJyb3JzLCBsb2dnZXIgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IG1pc3NpbmdWYXJpYWJsZSB9IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSBcInN0cmlwLWFuc2lcIjtcbmltcG9ydCB7IEVPTCB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHtcbiAgc3Bhd25JbnRlcmFjdGl2ZSxcbiAgSW50ZXJhY3RpdmVTcGF3bkNvbmZpZyxcbn0gZnJvbSBcIi4vaW50ZXJhY3RpdmUtcHJvY2Vzc1wiO1xuXG5pbnRlcmZhY2UgRGVwbG95Q29udGV4dCB7XG4gIGV4aXRDb2RlPzogbnVtYmVyO1xuICAvKipcbiAgICogVGVycmFmb3JtIHdpbGwgZXhpdCB3aXRoIDEgaWYgaXQgd2FzIGNhbmNlbGxlZCwgYnV0IHdlIGRvbid0IHdhbnQgdG8gZmFpbCBpbiB0aGF0IGNhc2VcbiAgICovXG4gIGNhbmNlbGxlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIERlcGxveUV2ZW50ID1cbiAgfCB7IHR5cGU6IFwiU1RBUlRcIjsgcHR5OiBJbnRlcmFjdGl2ZVNwYXduQ29uZmlnIH1cbiAgfCB7IHR5cGU6IFwiU1RPUFwiIH1cbiAgfCB7IHR5cGU6IFwiU0VORF9MSU5FXCI7IGlucHV0OiBzdHJpbmcgfVxuICB8IHsgdHlwZTogXCJPVVRQVVRfUkVDRUlWRURcIjsgb3V0cHV0OiBzdHJpbmcgfVxuICB8IHsgdHlwZTogXCJBUFBST1ZFRF9FWFRFUk5BTExZXCIgfSAvLyBlLmcuIHZpYSBURkMgVUkgb3IgQVBJXG4gIHwgeyB0eXBlOiBcIlJFSkVDVEVEX0VYVEVSTkFMTFlcIiB9XG4gIHwgeyB0eXBlOiBcIk9WRVJSSURERU5fRVhURVJOQUxMWVwiIH1cbiAgfCB7IHR5cGU6IFwiT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWVwiIH1cbiAgfCB7IHR5cGU6IFwiT1ZFUlJJREVcIiB9XG4gIHwgeyB0eXBlOiBcIlJFSkVDVF9PVkVSUklERVwiIH1cbiAgfCB7IHR5cGU6IFwiUkVRVUVTVF9BUFBST1ZBTFwiIH1cbiAgfCB7IHR5cGU6IFwiVkFSSUFCTEVfTUlTU0lOR1wiOyB2YXJpYWJsZU5hbWU6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcIlJFUVVFU1RfU0VOVElORUxfT1ZFUlJJREVcIiB9XG4gIHwgeyB0eXBlOiBcIkFQUFJPVkVcIiB9XG4gIHwgeyB0eXBlOiBcIlJFSkVDVFwiIH1cbiAgfCB7IHR5cGU6IFwiRVhJVEVEXCI7IGV4aXRDb2RlOiBudW1iZXIgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVwbG95RXZlbnQ8RGVwbG95RXZlbnRUeXBlIGV4dGVuZHMgRGVwbG95RXZlbnRbXCJ0eXBlXCJdPihcbiAgZXZlbnQ6IEV2ZW50T2JqZWN0LFxuICB0eXBlOiBEZXBsb3lFdmVudFR5cGUsXG4pOiBldmVudCBpcyBEZXBsb3lFdmVudCAmIHsgdHlwZTogRGVwbG95RXZlbnRUeXBlIH0ge1xuICByZXR1cm4gZXZlbnQudHlwZSA9PT0gdHlwZTtcbn1cblxuZXhwb3J0IHR5cGUgRGVwbG95U3RhdGUgPVxuICB8IHtcbiAgICAgIHZhbHVlOiBcImlkbGVcIjtcbiAgICAgIGNvbnRleHQ6IERlcGxveUNvbnRleHQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHZhbHVlOiBcInJ1bm5pbmdcIjtcbiAgICAgIGNvbnRleHQ6IERlcGxveUNvbnRleHQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHZhbHVlOiB7IHJ1bm5pbmc6IFwicHJvY2Vzc2luZ1wiIH07XG4gICAgICBjb250ZXh0OiBEZXBsb3lDb250ZXh0O1xuICAgIH1cbiAgfCB7XG4gICAgICB2YWx1ZTogeyBydW5uaW5nOiBcImF3YWl0aW5nX2FwcHJvdmFsXCIgfTtcbiAgICAgIGNvbnRleHQ6IERlcGxveUNvbnRleHQ7XG4gICAgfVxuICB8IHtcbiAgICAgIHZhbHVlOiB7IHJ1bm5pbmc6IFwiYXdhaXRpbmdfc2VudGluZWxfb3ZlcnJpZGVcIiB9O1xuICAgICAgY29udGV4dDogRGVwbG95Q29udGV4dDtcbiAgICB9XG4gIHwge1xuICAgICAgdmFsdWU6IHsgcnVubmluZzogXCJzdG9wcGluZ1wiIH07XG4gICAgICBjb250ZXh0OiBEZXBsb3lDb250ZXh0O1xuICAgIH1cbiAgfCB7XG4gICAgICB2YWx1ZTogXCJleGl0ZWRcIjtcbiAgICAgIGNvbnRleHQ6IERlcGxveUNvbnRleHQgJiB7IGV4aXRDb2RlOiBudW1iZXIgfTtcbiAgICB9XG4gIHwge1xuICAgICAgdmFsdWU6IFwic3RvcHBlZFwiO1xuICAgICAgY29udGV4dDogRGVwbG95Q29udGV4dDtcbiAgICB9O1xuXG4vKipcbiAqIFRlcnJhZm9ybSdzIGludGVyYWN0aXZlIHByb21wdCBmb3IgYSBtaXNzaW5nIHZhcmlhYmxlIGxvb2tzIGxpa2U6XG4gKlxuICogICB2YXIuPG5hbWU+XG4gKiAgICAgRW50ZXIgYSB2YWx1ZTpcbiAqXG4gKiBUaGUgdmFyaWFibGUgbmFtZSBhcHBlYXJzIG9uIGl0cyBvd24gbGluZSwgcHJlZml4ZWQgd2l0aCBcInZhci5cIiAob3B0aW9uYWxseVxuICogaW5kZW50ZWQpLiBXZSBtYXRjaCB0aGlzIHByZWNpc2VseSBzbyB3ZSBkb24ndCBtaXN0YWtlIHRlcnJhZm9ybSBlcnJvciBvdXRwdXRcbiAqIHRoYXQgbWVyZWx5IHJlZmVyZW5jZXMgYSB2YXJpYWJsZSAoZS5nLiBcIjkyOiAgIG1pcnJvciA9IHZhci5taXJyb3JcIiBmcm9tIGFuXG4gKiBcIlVuc3VwcG9ydGVkIGFyZ3VtZW50XCIgZXJyb3IpIGZvciBhbiBhY3R1YWwgcHJvbXB0LiBUZXJyYWZvcm0gdmFyaWFibGUgbmFtZXNcbiAqIHN0YXJ0IHdpdGggYSBsZXR0ZXIgb3IgdW5kZXJzY29yZSBhbmQgbWF5IGNvbnRhaW4gbGV0dGVycywgZGlnaXRzLFxuICogdW5kZXJzY29yZXMgYW5kIGRhc2hlcy4gKCMyNjUpXG4gKi9cbmNvbnN0IFZBUklBQkxFX1BST01QVF9SRUdFWCA9IC9eXFxzKnZhclxcLihbQS1aYS16X11bQS1aYS16MC05Xy1dKilcXHMqJC87XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGFueSBsaW5lIGluIHRoZSBnaXZlbiAoQU5TSS1zdHJpcHBlZCkgb3V0cHV0IGlzIHRlcnJhZm9ybSdzXG4gKiBpbnRlcmFjdGl2ZSBwcm9tcHQgZm9yIGEgbWlzc2luZyB2YXJpYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWlzc2luZ1ZhcmlhYmxlUHJvbXB0KG5vQ29sb3JMaW5lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIG5vQ29sb3JMaW5lXG4gICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgLnNvbWUoKGxpbmUpID0+IFZBUklBQkxFX1BST01QVF9SRUdFWC50ZXN0KGxpbmUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RWYXJpYWJsZU5hbWVGcm9tUHJvbXB0KGxpbmU6IHN0cmluZykge1xuICBjb25zdCBub0NvbG9yTGluZSA9IHN0cmlwQW5zaShsaW5lKTtcbiAgY29uc3QgbGluZXMgPSBub0NvbG9yTGluZS5zcGxpdChcIlxcblwiKTtcbiAgY29uc3QgbWF0Y2ggPSBsaW5lc1xuICAgIC5tYXAoKGwpID0+IGwubWF0Y2goVkFSSUFCTEVfUFJPTVBUX1JFR0VYKSlcbiAgICAuZmluZCgobSk6IG0gaXMgUmVnRXhwTWF0Y2hBcnJheSA9PiBtICE9PSBudWxsKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcbiAgICAgIGBDb3VsZCBub3QgZmluZCB2YXJpYWJsZSBuYW1lIGluIHByb21wdDogJHtsaW5lfS4gVGhpcyBpcyBtb3N0IGxpa2VseSBhIGJ1ZyBpbiBjZGt0bi4gUGxlYXNlIHJlcG9ydCBpdCBhdCBodHRwOi8vY2RrdG4uaW8vaXNzdWVzYCxcbiAgICApO1xuICB9XG4gIHJldHVybiBtYXRjaFsxXTtcbn1cblxuaW50ZXJmYWNlIEJ1ZmZlcmVkUmVjZWl2ZXJGdW5jdGlvbiB7XG4gIChvdXRwdXQ6IHN0cmluZyk6IHZvaWQ7XG4gIC8qKlxuICAgKiB1c2VkIHRvIGdldCB0aGUgbGFzdCBidWZmZXIgd2hlbiB0aGUgUFRZIGV4aXRzIHRvIGxvZyBhIGRlYnVnIG1lc3NhZ2UgaWYgdGhlcmUncyBvdXRwdXQgbGVmdCBpbiB0aGVyZVxuICAgKiAobWlnaHQgaGVscCBkZWJ1Z2dpbmcgb24gV2luZG93cyBpZiBFT0wgZnJvbSBOb2RlanMgZG9lc24ndCB3b3JrIGluIFdTTClcbiAgICovXG4gIGdldEJ1ZmZlcjogKCkgPT4gc3RyaW5nO1xufVxuXG4vLyB1c2VkIHRvIG9ubHkgc2VuZCBjb21wbGV0ZWQgbGluZXMgKD0gd2l0aCBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGVtKSB0byBvdXIgbG9naWMgKCMyODI3KVxuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlclVudGVybWluYXRlZExpbmVzKFxuICBoYW5kbGVyOiAob3V0cHV0OiBzdHJpbmcpID0+IHZvaWQsXG4pOiBCdWZmZXJlZFJlY2VpdmVyRnVuY3Rpb24ge1xuICBsZXQgYnVmZmVyID0gXCJcIjtcbiAgZnVuY3Rpb24gYnVmZmVyZWRSZWNlaXZlckZ1bmN0aW9uKG91dHB1dDogc3RyaW5nKSB7XG4gICAgYnVmZmVyICs9IG91dHB1dDtcbiAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgvW1xcblxccl0rLyk7XG5cbiAgICAvLyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBcXG4gdGhpcyB3aWxsIGJlIGFuIGVtcHR5IHN0cmluZ1xuICAgIC8vIGVsc2UgaXQgd2lsbCBjb250YWluIGFuIFwidW5maW5pc2hlZFwiIGxpbmVcbiAgICAvLyB0aGUgZmFsbGJhY2sgdG8gYW4gZW1wdHkgc3RyaW5nIGlzIHRvIG1ha2UgVFMgaGFwcHkgYW5kIHNob3VsZCBuZXZlciBoYXBwZW5cbiAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCBcIlwiO1xuXG4gICAgaWYgKGxpbmVzLmxlbmd0aCA+IDApIGhhbmRsZXIobGluZXMuam9pbihFT0wpICsgRU9MKTtcbiAgfVxuICBidWZmZXJlZFJlY2VpdmVyRnVuY3Rpb24uZ2V0QnVmZmVyID0gKCkgPT4gYnVmZmVyO1xuXG4gIHJldHVybiBidWZmZXJlZFJlY2VpdmVyRnVuY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVMaW5lUmVjZWl2ZWQoc2VuZDogKGV2ZW50OiBEZXBsb3lFdmVudCkgPT4gdm9pZCkge1xuICByZXR1cm4gKG91dHB1dDogc3RyaW5nKSA9PiB7XG4gICAgbGV0IGhpZGVPdXRwdXQgPSBmYWxzZTtcbiAgICBjb25zdCBub0NvbG9yTGluZSA9IHN0cmlwQW5zaShvdXRwdXQpO1xuXG4gICAgLy8gcG9zc2libGUgZXZlbnRzIGJhc2VkIG9uIGxpbmVcbiAgICBpZiAobm9Db2xvckxpbmUuaW5jbHVkZXMoXCJhcHByb3ZlZCB1c2luZyB0aGUgVUkgb3IgQVBJXCIpKSB7XG4gICAgICBzZW5kKHsgdHlwZTogXCJBUFBST1ZFRF9FWFRFUk5BTExZXCIgfSk7XG4gICAgfSBlbHNlIGlmIChub0NvbG9yTGluZS5pbmNsdWRlcyhcImRpc2NhcmRlZCB1c2luZyB0aGUgVUkgb3IgQVBJXCIpKSB7XG4gICAgICBzZW5kKHsgdHlwZTogXCJSRUpFQ1RFRF9FWFRFUk5BTExZXCIgfSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG5vQ29sb3JMaW5lLmluY2x1ZGVzKFwiRG8geW91IHdhbnQgdG8gcGVyZm9ybSB0aGVzZSBhY3Rpb25zXCIpIHx8XG4gICAgICBub0NvbG9yTGluZS5pbmNsdWRlcyhcIkRvIHlvdSByZWFsbHkgd2FudCB0byBkZXN0cm95IGFsbCByZXNvdXJjZXM/XCIpIHx8XG4gICAgICBub0NvbG9yTGluZS5pbmNsdWRlcyhcbiAgICAgICAgXCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVzdHJveSBhbGwgcmVzb3VyY2VzIGluIHdvcmtzcGFjZVwiLFxuICAgICAgKVxuICAgICkge1xuICAgICAgaGlkZU91dHB1dCA9IHRydWU7XG4gICAgICBzZW5kKHsgdHlwZTogXCJPVVRQVVRfUkVDRUlWRURcIiwgb3V0cHV0IH0pO1xuICAgICAgc2VuZCh7IHR5cGU6IFwiUkVRVUVTVF9BUFBST1ZBTFwiIH0pO1xuICAgIH0gZWxzZSBpZiAoaXNNaXNzaW5nVmFyaWFibGVQcm9tcHQobm9Db2xvckxpbmUpKSB7XG4gICAgICBoaWRlT3V0cHV0ID0gdHJ1ZTtcblxuICAgICAgY29uc3QgdmFyaWFibGVOYW1lID0gZXh0cmFjdFZhcmlhYmxlTmFtZUZyb21Qcm9tcHQob3V0cHV0KTtcbiAgICAgIHNlbmQoe1xuICAgICAgICB0eXBlOiBcIk9VVFBVVF9SRUNFSVZFRFwiLFxuICAgICAgICBvdXRwdXQ6IG1pc3NpbmdWYXJpYWJsZSh2YXJpYWJsZU5hbWUpLFxuICAgICAgfSk7XG4gICAgICBzZW5kKHsgdHlwZTogXCJWQVJJQUJMRV9NSVNTSU5HXCIsIHZhcmlhYmxlTmFtZSB9KTtcbiAgICB9IGVsc2UgaWYgKG5vQ29sb3JMaW5lLmluY2x1ZGVzKFwiRW50ZXIgYSB2YWx1ZTpcIikpIHtcbiAgICAgIC8vIFRoaXMgY29tZXMgYWxvbmcgd2l0aCBhYm92ZSBibG9jaywgYnV0IGlzIGEgc2VwYXJhdGUgbGluZVxuICAgICAgaGlkZU91dHB1dCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG5vQ29sb3JMaW5lLmluY2x1ZGVzKFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBzb2Z0IGZhaWxlZCBwb2xpY3kgY2hlY2s/XCIsXG4gICAgICApXG4gICAgKSB7XG4gICAgICBoaWRlT3V0cHV0ID0gdHJ1ZTtcbiAgICAgIHNlbmQoeyB0eXBlOiBcIk9VVFBVVF9SRUNFSVZFRFwiLCBvdXRwdXQgfSk7XG5cbiAgICAgIHNlbmQoeyB0eXBlOiBcIlJFUVVFU1RfU0VOVElORUxfT1ZFUlJJREVcIiB9KTtcbiAgICB9IGVsc2UgaWYgKG5vQ29sb3JMaW5lLmluY2x1ZGVzKFwib3ZlcnJpZGRlbiB1c2luZyB0aGUgVUkgb3IgQVBJXCIpKSB7XG4gICAgICBzZW5kKHsgdHlwZTogXCJPVkVSUklEREVOX0VYVEVSTkFMTFlcIiB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWhpZGVPdXRwdXQpIHtcbiAgICAgIHNlbmQoe1xuICAgICAgICB0eXBlOiBcIk9VVFBVVF9SRUNFSVZFRFwiLFxuICAgICAgICBvdXRwdXQsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBkZXBsb3lNYWNoaW5lID0gY3JlYXRlTWFjaGluZTxcbiAgRGVwbG95Q29udGV4dCxcbiAgRGVwbG95RXZlbnQsXG4gIERlcGxveVN0YXRlXG4+KFxuICB7XG4gICAgcHJlZGljdGFibGVBY3Rpb25Bcmd1bWVudHM6IHRydWUsXG4gICAgY29udGV4dDoge30sXG4gICAgaW5pdGlhbDogXCJpZGxlXCIsXG4gICAgaWQ6IFwicm9vdFwiLFxuICAgIHN0YXRlczoge1xuICAgICAgaWRsZToge1xuICAgICAgICBvbjoge1xuICAgICAgICAgIFNUQVJUOiB7IHRhcmdldDogXCJydW5uaW5nXCIgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBydW5uaW5nOiB7XG4gICAgICAgIGludm9rZToge1xuICAgICAgICAgIGlkOiBcInB0eVwiLFxuICAgICAgICAgIHNyYzogXCJydW5UZXJyYWZvcm1JblB0eVwiLFxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIEVYSVRFRDogXCJleGl0ZWRcIixcbiAgICAgICAgICBTVE9QOiBcIi5zdG9wcGluZ1wiLCAvLyB3YWl0IGZvciB0ZXJyYWZvcm0gdG8gZXhpdCwgZG9uJ3Qgc3RvcCBpbW1lZGlhdGVseSAoc2VlIHRoZSBcInN0b3BwaW5nXCIgc3RhdGUpXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRpYWw6IFwicHJvY2Vzc2luZ1wiLFxuICAgICAgICBzdGF0ZXM6IHtcbiAgICAgICAgICAvLyBUT0RPOiB3aGF0IGVsc2UgbWlnaHQgVEYgQ0xJIGJlIGFza2luZz8gQ2FuIHdlIGRldGVjdCBhbnkgcXVlc3Rpb24gZnJvbSB0aGUgVEYgQ0xJIHRvIHNob3cgYSBnb29kIGVycm9yP1xuICAgICAgICAgIHByb2Nlc3Npbmc6IHtcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIFJFUVVFU1RfQVBQUk9WQUw6IFwiYXdhaXRpbmdfYXBwcm92YWxcIixcbiAgICAgICAgICAgICAgUkVRVUVTVF9TRU5USU5FTF9PVkVSUklERTogXCJhd2FpdGluZ19zZW50aW5lbF9vdmVycmlkZVwiLFxuICAgICAgICAgICAgICBWQVJJQUJMRV9NSVNTSU5HOiB7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogc2VuZCh7IHR5cGU6IFwiRVhJVEVEXCIsIGV4aXRDb2RlOiAxIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGF3YWl0aW5nX2FwcHJvdmFsOiB7XG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBBUFBST1ZFRF9FWFRFUk5BTExZOiBcInByb2Nlc3NpbmdcIixcbiAgICAgICAgICAgICAgUkVKRUNURURfRVhURVJOQUxMWToge1xuICAgICAgICAgICAgICAgIHRhcmdldDogXCIjcm9vdC5leGl0ZWRcIixcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBhc3NpZ248XG4gICAgICAgICAgICAgICAgICBEZXBsb3lDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgRGVwbG95RXZlbnQgJiB7IHR5cGU6IFwiUkVKRUNURURfRVhURVJOQUxMWVwiIH1cbiAgICAgICAgICAgICAgICA+KHsgY2FuY2VsbGVkOiB0cnVlIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBBUFBST1ZFOiB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBcInByb2Nlc3NpbmdcIixcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBzZW5kKFxuICAgICAgICAgICAgICAgICAgeyB0eXBlOiBcIlNFTkRfTElORVwiLCBpbnB1dDogXCJ5ZXNcIiB9LFxuICAgICAgICAgICAgICAgICAgeyB0bzogXCJwdHlcIiB9LFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFJFSkVDVDoge1xuICAgICAgICAgICAgICAgIHRhcmdldDogXCJwcm9jZXNzaW5nXCIsXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgc2VuZCh7IHR5cGU6IFwiU0VORF9MSU5FXCIsIGlucHV0OiBcIm5vXCIgfSwgeyB0bzogXCJwdHlcIiB9KSxcbiAgICAgICAgICAgICAgICAgIGFzc2lnbjxEZXBsb3lDb250ZXh0LCBEZXBsb3lFdmVudCAmIHsgdHlwZTogXCJSRUpFQ1RcIiB9Pih7XG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXdhaXRpbmdfc2VudGluZWxfb3ZlcnJpZGU6IHtcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIE9WRVJSSURERU5fRVhURVJOQUxMWTogXCJwcm9jZXNzaW5nXCIsXG4gICAgICAgICAgICAgIE9WRVJSSURFX1JFSkVDVEVEX0VYVEVSTkFMTFk6IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiI3Jvb3QuZXhpdGVkXCIsXG4gICAgICAgICAgICAgICAgYWN0aW9uczogYXNzaWduPFxuICAgICAgICAgICAgICAgICAgRGVwbG95Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgIERlcGxveUV2ZW50ICYgeyB0eXBlOiBcIk9WRVJSSURFX1JFSkVDVEVEX0VYVEVSTkFMTFlcIiB9XG4gICAgICAgICAgICAgICAgPih7IGNhbmNlbGxlZDogdHJ1ZSB9KSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2ssIGJlY2F1c2UgdGhlIGV4dGVybmFsIGRpc2NhcmQgbWVzc2FnZVxuICAgICAgICAgICAgICAvLyBwb3N0ZWQgYnkgVGVycmFmb3JtIFVJIGlzIHRoZSBzYW1lIGFzIGR1cmluZyBhcHBseS4gU28sIHdlIGNhcHR1cmUgdGhhdFxuICAgICAgICAgICAgICAvLyBhbmQgZW1pdCBvdXIgb3duIGV2ZW50IHRvIG1ha2UgaXQgbW9yZSBzcGVjaWZpYy5cbiAgICAgICAgICAgICAgUkVKRUNURURfRVhURVJOQUxMWToge1xuICAgICAgICAgICAgICAgIGFjdGlvbnM6IHNlbmQoeyB0eXBlOiBcIk9WRVJSSURFX1JFSkVDVEVEX0VYVEVSTkFMTFlcIiB9KSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgT1ZFUlJJREU6IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IFwicHJvY2Vzc2luZ1wiLFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IHNlbmQoXG4gICAgICAgICAgICAgICAgICB7IHR5cGU6IFwiU0VORF9MSU5FXCIsIGlucHV0OiBcIm92ZXJyaWRlXCIgfSxcbiAgICAgICAgICAgICAgICAgIHsgdG86IFwicHR5XCIgfSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBSRUpFQ1RfT1ZFUlJJREU6IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IFwicHJvY2Vzc2luZ1wiLFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgIHNlbmQoeyB0eXBlOiBcIlNFTkRfTElORVwiLCBpbnB1dDogXCJub1wiIH0sIHsgdG86IFwicHR5XCIgfSksXG4gICAgICAgICAgICAgICAgICBhc3NpZ248XG4gICAgICAgICAgICAgICAgICAgIERlcGxveUNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgIERlcGxveUV2ZW50ICYgeyB0eXBlOiBcIlJFSkVDVF9PVkVSUklERVwiIH1cbiAgICAgICAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgICAgICBjYW5jZWxsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIE9uIFNUT1AsIHdhaXQgZm9yIHRlcnJhZm9ybSdzIG93biBFWElURUQgYmVmb3JlIHJlYWNoaW5nIHRoZSBmaW5hbCBcInN0b3BwZWRcIiBzdGF0ZSwgc28gdGhlIHJ1biBvbmx5XG4gICAgICAgICAgLy8gcmVzb2x2ZXMgb25jZSBpdCBoYXMgZXhpdGVkIGFuZCByZWxlYXNlZCBpdHMgbG9jay4gRG9uJ3QgcmUtc2lnbmFsIGl0IOKAlCBpdCBhbHJlYWR5IGdvdCB0aGUgaW50ZXJydXB0IHZpYVxuICAgICAgICAgIC8vIHRoZSBwcm9jZXNzIGdyb3VwLCBhbmQgYSBzZWNvbmQgc2lnbmFsIGFib3J0cyBpdHMgZ3JhY2VmdWwgc2h1dGRvd24uXG4gICAgICAgICAgc3RvcHBpbmc6IHtcbiAgICAgICAgICAgIGVudHJ5OiBhc3NpZ248RGVwbG95Q29udGV4dCwgRGVwbG95RXZlbnQ+KHsgY2FuY2VsbGVkOiB0cnVlIH0pLFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgRVhJVEVEOiBcIiNyb290LnN0b3BwZWRcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBleGl0ZWQ6IHsgdHlwZTogXCJmaW5hbFwiIH0sXG4gICAgICBzdG9wcGVkOiB7IHR5cGU6IFwiZmluYWxcIiB9LFxuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBzZXJ2aWNlczoge1xuICAgICAgcnVuVGVycmFmb3JtSW5QdHk6IChjb250ZXh0LCBldmVudCkgPT5cbiAgICAgICAgdGVycmFmb3JtUHR5U2VydmljZShjb250ZXh0LCBldmVudCwgc3Bhd25JbnRlcmFjdGl2ZSksXG4gICAgfSxcbiAgfSxcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJyYWZvcm1QdHlTZXJ2aWNlKFxuICBfY29udGV4dDogRGVwbG95Q29udGV4dCxcbiAgZXZlbnQ6IERlcGxveUV2ZW50LFxuICBzcGF3biA9IHNwYXduSW50ZXJhY3RpdmUsXG4pOiAoc2VuZDogU2VuZGVyPERlcGxveUV2ZW50Piwgb25SZWNlaXZlOiBSZWNlaXZlcjxEZXBsb3lFdmVudD4pID0+IHZvaWQge1xuICByZXR1cm4gKHNlbmQ6IFNlbmRlcjxEZXBsb3lFdmVudD4sIG9uUmVjZWl2ZTogUmVjZWl2ZXI8RGVwbG95RXZlbnQ+KSA9PiB7XG4gICAgaWYgKGV2ZW50LnR5cGUgIT09IFwiU1RBUlRcIikge1xuICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICBgVGVycmFmb3JtIENMSSBpbnZvY2F0aW9uIHN0YXRlIG1hY2hpbmU6IFVuZXhwZWN0ZWQgZXZlbnQgY2F1c2VkIHRyYW5zaXRpb24gdG8gdGhlIHJ1bm5pbmcgc3RhdGU6ICR7ZXZlbnQudHlwZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb21tdW5pY2F0aW9uIGZyb20gdGhlIHB0eSB0byB0aGUgY2FsbGVyXG4gICAgY29uc3QgcmVjZWl2ZXIgPSBidWZmZXJVbnRlcm1pbmF0ZWRMaW5lcyhoYW5kbGVMaW5lUmVjZWl2ZWQoc2VuZCkpO1xuICAgIGNvbnN0IHsgZXhpdENvZGUsIGFjdGlvbnMgfSA9IHNwYXduKGV2ZW50LnB0eSwgKGRhdGEpID0+IHtcbiAgICAgIHJlY2VpdmVyKGRhdGEpO1xuICAgIH0pO1xuXG4gICAgLy8gQ29tbXVuaWNhdGlvbiBmcm9tIHRoZSBjYWxsZXIgdG8gdGhlIHB0eVxuICAgIG9uUmVjZWl2ZSgoZXZlbnQ6IERlcGxveUV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJTRU5EX0xJTkVcIikge1xuICAgICAgICBhY3Rpb25zLndyaXRlTGluZShldmVudC5pbnB1dCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBleGl0Q29kZS50aGVuKChleGl0Q29kZSkgPT4ge1xuICAgICAgY29uc3QgbGFzdEJ1ZmZlciA9IHJlY2VpdmVyLmdldEJ1ZmZlcigpO1xuICAgICAgaWYgKGxhc3RCdWZmZXIubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgYFRlcnJhZm9ybSBDTEkgZXhpdGVkIGJ1dCB0aGUgbGFzdCBvdXRwdXR0ZWQgbGluZSB3YXMgbm90IHRlcm1pbmF0ZWQgd2l0aCBhIG5ld2xpbmUgYW5kIGhlbmNlIGlzIHN0aWxsIGluIHRoZSBidWZmZXIgYW5kIHdhc24ndCBwcmludGVkOiBcIiR7bGFzdEJ1ZmZlcn1cImAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHNlbmQoeyB0eXBlOiBcIkVYSVRFRFwiLCBleGl0Q29kZSB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBsb2dnZXIudHJhY2UoXCJUZXJyYWZvcm0gQ0xJIHN0YXRlIG1hY2hpbmU6IGNsZWFuaW5nIHVwIHB0eVwiKTtcbiAgICAgIGFjdGlvbnMuc3RvcCgpO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbmRTdGFydERlcGxveVNlcnZpY2Uob3B0aW9uczoge1xuICByZWZyZXNoT25seT86IGJvb2xlYW47XG4gIHBhcmFsbGVsaXNtOiBudW1iZXI7XG4gIGV4dHJhT3B0aW9uczogc3RyaW5nW107XG4gIHRlcnJhZm9ybUJpbmFyeU5hbWU6IHN0cmluZztcbiAgYXV0b0FwcHJvdmU/OiBib29sZWFuO1xuICBub0NvbG9yPzogYm9vbGVhbjtcbiAgd29ya2Rpcjogc3RyaW5nO1xuICB2YXJzPzogc3RyaW5nW107XG4gIHZhckZpbGVzPzogc3RyaW5nW107XG59KSB7XG4gIGNvbnN0IHNlcnZpY2UgPSBpbnRlcnByZXQoZGVwbG95TWFjaGluZSk7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgXCJhcHBseVwiLFxuICAgIC4uLihvcHRpb25zLmF1dG9BcHByb3ZlID8gW1wiLWF1dG8tYXBwcm92ZVwiXSA6IFtdKSxcbiAgICAvLyBcIi1pbnB1dD1mYWxzZVwiLCB3ZSBjYW4ndCB1c2UgdGhpcyBhbnltb3JlIGJ1dCBUT0RPOiB3ZSBuZWVkIHRvIGRldGVjdCBURiBDTEkgYXNraW5nIGZvciBtaXNzaW5nIGlucHV0cyBhbmQgZWl0aGVyIGFsbG93IHBhc3NpbmcgdGhlbSBvciBzdG9wIHRoZXJlIGFuZCBmYWlsXG5cbiAgICAuLi5vcHRpb25zLmV4dHJhT3B0aW9ucyxcbiAgICAuLi4ob3B0aW9ucy5yZWZyZXNoT25seSA/IFtcIi1yZWZyZXNoLW9ubHlcIl0gOiBbXSksXG4gICAgLi4uKG9wdGlvbnMubm9Db2xvciA/IFtcIi1uby1jb2xvclwiXSA6IFtdKSxcbiAgICAuLi4ob3B0aW9ucy5wYXJhbGxlbGlzbSA+IC0xXG4gICAgICA/IFtgLXBhcmFsbGVsaXNtPSR7b3B0aW9ucy5wYXJhbGxlbGlzbX1gXVxuICAgICAgOiBbXSksXG4gIF07XG5cbiAgb3B0aW9ucy52YXJzPy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgYXJncy5wdXNoKGAtdmFyPSR7dn1gKTtcbiAgfSk7XG5cbiAgb3B0aW9ucy52YXJGaWxlcz8uZm9yRWFjaCgodikgPT4ge1xuICAgIGFyZ3MucHVzaChgLXZhci1maWxlPSR7dn1gKTtcbiAgfSk7XG5cbiAgbG9nZ2VyLmRlYnVnKFxuICAgIGBFeGVjdXRpbmcgJHtvcHRpb25zLnRlcnJhZm9ybUJpbmFyeU5hbWV9ICR7YXJncy5qb2luKFwiIFwiKX0gaW4gJHtcbiAgICAgIG9wdGlvbnMud29ya2RpclxuICAgIH1gLFxuICApO1xuXG4gIGNvbnN0IGNvbmZpZzogSW50ZXJhY3RpdmVTcGF3bkNvbmZpZyA9IHtcbiAgICBmaWxlOiBvcHRpb25zLnRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgYXJncyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBjd2Q6IG9wdGlvbnMud29ya2RpcixcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSwgLy8gVE9ETzogbWFrZSB0aGlzIGV4cGxpY2l0IGFuZCBtb3ZlIHRvIGNhbGxlciBvciB3aGF0ZXZlclxuICAgIH0sXG4gIH07XG5cbiAgc2VydmljZS5zZW5kKHsgdHlwZTogXCJTVEFSVFwiLCBwdHk6IGNvbmZpZyB9KTtcblxuICByZXR1cm4gc2VydmljZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFuZFN0YXJ0RGVzdHJveVNlcnZpY2Uob3B0aW9uczoge1xuICBwYXJhbGxlbGlzbTogbnVtYmVyO1xuICBleHRyYU9wdGlvbnM6IHN0cmluZ1tdO1xuICB0ZXJyYWZvcm1CaW5hcnlOYW1lOiBzdHJpbmc7XG4gIGF1dG9BcHByb3ZlPzogYm9vbGVhbjtcbiAgbm9Db2xvcj86IGJvb2xlYW47XG4gIHdvcmtkaXI6IHN0cmluZztcbiAgdmFycz86IHN0cmluZ1tdO1xuICB2YXJGaWxlcz86IHN0cmluZ1tdO1xufSkge1xuICBjb25zdCBzZXJ2aWNlID0gaW50ZXJwcmV0KGRlcGxveU1hY2hpbmUpO1xuXG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgXCJkZXN0cm95XCIsXG4gICAgLi4uKG9wdGlvbnMuYXV0b0FwcHJvdmUgPyBbXCItYXV0by1hcHByb3ZlXCJdIDogW10pLFxuICAgIC8vIFwiLWlucHV0PWZhbHNlXCIsIHdlIGNhbid0IHVzZSB0aGlzIGFueW1vcmUgYnV0IFRPRE86IHdlIG5lZWQgdG8gZGV0ZWN0IFRGIENMSSBhc2tpbmcgZm9yIG1pc3NpbmcgaW5wdXRzIGFuZCBlaXRoZXIgYWxsb3cgcGFzc2luZyB0aGVtIG9yIHN0b3AgdGhlcmUgYW5kIGZhaWxcblxuICAgIC4uLm9wdGlvbnMuZXh0cmFPcHRpb25zLFxuICAgIC4uLihvcHRpb25zLm5vQ29sb3IgPyBbXCItbm8tY29sb3JcIl0gOiBbXSksXG4gICAgLi4uKG9wdGlvbnMucGFyYWxsZWxpc20gPiAtMVxuICAgICAgPyBbYC1wYXJhbGxlbGlzbT0ke29wdGlvbnMucGFyYWxsZWxpc219YF1cbiAgICAgIDogW10pLFxuICBdO1xuXG4gIG9wdGlvbnMudmFycz8uZm9yRWFjaCgodikgPT4ge1xuICAgIGFyZ3MucHVzaChgLXZhcj0ke3Z9YCk7XG4gIH0pO1xuXG4gIG9wdGlvbnMudmFyRmlsZXM/LmZvckVhY2goKHYpID0+IHtcbiAgICBhcmdzLnB1c2goYC12YXItZmlsZT0ke3Z9YCk7XG4gIH0pO1xuXG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgRXhlY3V0aW5nICR7b3B0aW9ucy50ZXJyYWZvcm1CaW5hcnlOYW1lfSAke2FyZ3Muam9pbihcIiBcIil9IGluICR7XG4gICAgICBvcHRpb25zLndvcmtkaXJcbiAgICB9YCxcbiAgKTtcblxuICBjb25zdCBjb25maWc6IEludGVyYWN0aXZlU3Bhd25Db25maWcgPSB7XG4gICAgZmlsZTogb3B0aW9ucy50ZXJyYWZvcm1CaW5hcnlOYW1lLFxuICAgIGFyZ3MsXG4gICAgb3B0aW9uczoge1xuICAgICAgY3dkOiBvcHRpb25zLndvcmtkaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIC8vIFRPRE86IG1ha2UgdGhpcyBleHBsaWNpdCBhbmQgbW92ZSB0byBjYWxsZXIgb3Igd2hhdGV2ZXJcbiAgICB9LFxuICB9O1xuXG4gIHNlcnZpY2Uuc2VuZCh7IHR5cGU6IFwiU1RBUlRcIiwgcHR5OiBjb25maWcgfSk7XG5cbiAgcmV0dXJuIHNlcnZpY2U7XG59XG4iXX0=
|
|
345
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LW1hY2hpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21vZGVscy9kZXBsb3ktbWFjaGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7QUFFSCxtQ0FVZ0I7QUFDaEIsNENBQWdEO0FBQ2hELHNDQUE0QztBQUM1Qyw0REFBbUM7QUFDbkMsMkJBQXlCO0FBQ3pCLCtEQUcrQjtBQTRCL0IsU0FBZ0IsYUFBYSxDQUMzQixLQUFrQixFQUNsQixJQUFxQjtJQUVyQixPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO0FBQzdCLENBQUM7QUFMRCxzQ0FLQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0scUJBQXFCLEdBQUcsd0NBQXdDLENBQUM7QUFFdkU7OztHQUdHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsV0FBbUI7SUFDekQsT0FBTyxXQUFXO1NBQ2YsS0FBSyxDQUFDLElBQUksQ0FBQztTQUNYLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUpELDBEQUlDO0FBRUQsU0FBZ0IsNkJBQTZCLENBQUMsSUFBWTtJQUN4RCxNQUFNLFdBQVcsR0FBRyxJQUFBLG9CQUFTLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxNQUFNLEtBQUssR0FBRyxLQUFLO1NBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQzFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBeUIsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMs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LENBQUMsRUFBRSxFQUFFO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUMsQ0FBQyxDQUFDO0lBRUgsZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsYUFBYSxPQUFPLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FDeEQsT0FBTyxDQUFDLE9BQ1YsRUFBRSxDQUNILENBQUM7SUFFRixNQUFNLE1BQU0sR0FBMkI7UUFDckMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxtQkFBbUI7UUFDakMsSUFBSTtRQUNKLE9BQU8sRUFBRTtZQUNQLEdBQUcsRUFBRSxPQUFPLENBQUMsT0FBTztZQUNwQixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQWdDLEVBQUUsMERBQTBEO1NBQzFHO0tBQ0YsQ0FBQztJQUVGLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUU3QyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBdERELG9FQXNEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0IHtcbiAgc2V0dXAsXG4gIGNyZWF0ZUFjdG9yLFxuICBzZW5kVG8sXG4gIGZyb21DYWxsYmFjayxcbiAgYXNzaWduLFxuICBBY3RvclJlZkZyb20sXG4gIEV2ZW50T2JqZWN0LFxuICBJbnNwZWN0aW9uRXZlbnQsXG4gIFNuYXBzaG90RnJvbSxcbn0gZnJvbSBcInhzdGF0ZVwiO1xuaW1wb3J0IHsgRXJyb3JzLCBsb2dnZXIgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IG1pc3NpbmdWYXJpYWJsZSB9IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSBcInN0cmlwLWFuc2lcIjtcbmltcG9ydCB7IEVPTCB9IGZyb20gXCJvc1wiO1xuaW1wb3J0IHtcbiAgc3Bhd25JbnRlcmFjdGl2ZSxcbiAgSW50ZXJhY3RpdmVTcGF3bkNvbmZpZyxcbn0gZnJvbSBcIi4vaW50ZXJhY3RpdmUtcHJvY2Vzc1wiO1xuXG5pbnRlcmZhY2UgRGVwbG95Q29udGV4dCB7XG4gIGV4aXRDb2RlPzogbnVtYmVyO1xuICAvKipcbiAgICogVGVycmFmb3JtIHdpbGwgZXhpdCB3aXRoIDEgaWYgaXQgd2FzIGNhbmNlbGxlZCwgYnV0IHdlIGRvbid0IHdhbnQgdG8gZmFpbCBpbiB0aGF0IGNhc2VcbiAgICovXG4gIGNhbmNlbGxlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIERlcGxveUV2ZW50ID1cbiAgfCB7IHR5cGU6IFwiU1RBUlRcIjsgcHR5OiBJbnRlcmFjdGl2ZVNwYXduQ29uZmlnIH1cbiAgfCB7IHR5cGU6IFwiU1RPUFwiIH1cbiAgfCB7IHR5cGU6IFwiU0VORF9MSU5FXCI7IGlucHV0OiBzdHJpbmcgfVxuICB8IHsgdHlwZTogXCJPVVRQVVRfUkVDRUlWRURcIjsgb3V0cHV0OiBzdHJpbmcgfVxuICB8IHsgdHlwZTogXCJBUFBST1ZFRF9FWFRFUk5BTExZXCIgfSAvLyBlLmcuIHZpYSBURkMgVUkgb3IgQVBJXG4gIHwgeyB0eXBlOiBcIlJFSkVDVEVEX0VYVEVSTkFMTFlcIiB9XG4gIHwgeyB0eXBlOiBcIk9WRVJSSURERU5fRVhURVJOQUxMWVwiIH1cbiAgfCB7IHR5cGU6IFwiT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWVwiIH1cbiAgfCB7IHR5cGU6IFwiT1ZFUlJJREVcIiB9XG4gIHwgeyB0eXBlOiBcIlJFSkVDVF9PVkVSUklERVwiIH1cbiAgfCB7IHR5cGU6IFwiUkVRVUVTVF9BUFBST1ZBTFwiIH1cbiAgfCB7IHR5cGU6IFwiVkFSSUFCTEVfTUlTU0lOR1wiOyB2YXJpYWJsZU5hbWU6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcIlJFUVVFU1RfU0VOVElORUxfT1ZFUlJJREVcIiB9XG4gIHwgeyB0eXBlOiBcIkFQUFJPVkVcIiB9XG4gIHwgeyB0eXBlOiBcIlJFSkVDVFwiIH1cbiAgfCB7IHR5cGU6IFwiRVhJVEVEXCI7IGV4aXRDb2RlOiBudW1iZXIgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVwbG95RXZlbnQ8RGVwbG95RXZlbnRUeXBlIGV4dGVuZHMgRGVwbG95RXZlbnRbXCJ0eXBlXCJdPihcbiAgZXZlbnQ6IEV2ZW50T2JqZWN0LFxuICB0eXBlOiBEZXBsb3lFdmVudFR5cGUsXG4pOiBldmVudCBpcyBEZXBsb3lFdmVudCAmIHsgdHlwZTogRGVwbG95RXZlbnRUeXBlIH0ge1xuICByZXR1cm4gZXZlbnQudHlwZSA9PT0gdHlwZTtcbn1cblxuLyoqXG4gKiBUZXJyYWZvcm0ncyBpbnRlcmFjdGl2ZSBwcm9tcHQgZm9yIGEgbWlzc2luZyB2YXJpYWJsZSBsb29rcyBsaWtlOlxuICpcbiAqICAgdmFyLjxuYW1lPlxuICogICAgIEVudGVyIGEgdmFsdWU6XG4gKlxuICogVGhlIHZhcmlhYmxlIG5hbWUgYXBwZWFycyBvbiBpdHMgb3duIGxpbmUsIHByZWZpeGVkIHdpdGggXCJ2YXIuXCIgKG9wdGlvbmFsbHlcbiAqIGluZGVudGVkKS4gV2UgbWF0Y2ggdGhpcyBwcmVjaXNlbHkgc28gd2UgZG9uJ3QgbWlzdGFrZSB0ZXJyYWZvcm0gZXJyb3Igb3V0cHV0XG4gKiB0aGF0IG1lcmVseSByZWZlcmVuY2VzIGEgdmFyaWFibGUgKGUuZy4gXCI5MjogICBtaXJyb3IgPSB2YXIubWlycm9yXCIgZnJvbSBhblxuICogXCJVbnN1cHBvcnRlZCBhcmd1bWVudFwiIGVycm9yKSBmb3IgYW4gYWN0dWFsIHByb21wdC4gVGVycmFmb3JtIHZhcmlhYmxlIG5hbWVzXG4gKiBzdGFydCB3aXRoIGEgbGV0dGVyIG9yIHVuZGVyc2NvcmUgYW5kIG1heSBjb250YWluIGxldHRlcnMsIGRpZ2l0cyxcbiAqIHVuZGVyc2NvcmVzIGFuZCBkYXNoZXMuICgjMjY1KVxuICovXG5jb25zdCBWQVJJQUJMRV9QUk9NUFRfUkVHRVggPSAvXlxccyp2YXJcXC4oW0EtWmEtel9dW0EtWmEtejAtOV8tXSopXFxzKiQvO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgbGluZSBpbiB0aGUgZ2l2ZW4gKEFOU0ktc3RyaXBwZWQpIG91dHB1dCBpcyB0ZXJyYWZvcm0nc1xuICogaW50ZXJhY3RpdmUgcHJvbXB0IGZvciBhIG1pc3NpbmcgdmFyaWFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01pc3NpbmdWYXJpYWJsZVByb21wdChub0NvbG9yTGluZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBub0NvbG9yTGluZVxuICAgIC5zcGxpdChcIlxcblwiKVxuICAgIC5zb21lKChsaW5lKSA9PiBWQVJJQUJMRV9QUk9NUFRfUkVHRVgudGVzdChsaW5lKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VmFyaWFibGVOYW1lRnJvbVByb21wdChsaW5lOiBzdHJpbmcpIHtcbiAgY29uc3Qgbm9Db2xvckxpbmUgPSBzdHJpcEFuc2kobGluZSk7XG4gIGNvbnN0IGxpbmVzID0gbm9Db2xvckxpbmUuc3BsaXQoXCJcXG5cIik7XG4gIGNvbnN0IG1hdGNoID0gbGluZXNcbiAgICAubWFwKChsKSA9PiBsLm1hdGNoKFZBUklBQkxFX1BST01QVF9SRUdFWCkpXG4gICAgLmZpbmQoKG0pOiBtIGlzIFJlZ0V4cE1hdGNoQXJyYXkgPT4gbSAhPT0gbnVsbCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICBgQ291bGQgbm90IGZpbmQgdmFyaWFibGUgbmFtZSBpbiBwcm9tcHQ6ICR7bGluZX0uIFRoaXMgaXMgbW9zdCBsaWtlbHkgYSBidWcgaW4gY2RrdG4uIFBsZWFzZSByZXBvcnQgaXQgYXQgaHR0cDovL2Nka3RuLmlvL2lzc3Vlc2AsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hbMV07XG59XG5cbmludGVyZmFjZSBCdWZmZXJlZFJlY2VpdmVyRnVuY3Rpb24ge1xuICAob3V0cHV0OiBzdHJpbmcpOiB2b2lkO1xuICAvKipcbiAgICogdXNlZCB0byBnZXQgdGhlIGxhc3QgYnVmZmVyIHdoZW4gdGhlIFBUWSBleGl0cyB0byBsb2cgYSBkZWJ1ZyBtZXNzYWdlIGlmIHRoZXJlJ3Mgb3V0cHV0IGxlZnQgaW4gdGhlcmVcbiAgICogKG1pZ2h0IGhlbHAgZGVidWdnaW5nIG9uIFdpbmRvd3MgaWYgRU9MIGZyb20gTm9kZWpzIGRvZXNuJ3Qgd29yayBpbiBXU0wpXG4gICAqL1xuICBnZXRCdWZmZXI6ICgpID0+IHN0cmluZztcbn1cblxuLy8gdXNlZCB0byBvbmx5IHNlbmQgY29tcGxldGVkIGxpbmVzICg9IHdpdGggYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlbSkgdG8gb3VyIGxvZ2ljICgjMjgyNylcbmV4cG9ydCBmdW5jdGlvbiBidWZmZXJVbnRlcm1pbmF0ZWRMaW5lcyhcbiAgaGFuZGxlcjogKG91dHB1dDogc3RyaW5nKSA9PiB2b2lkLFxuKTogQnVmZmVyZWRSZWNlaXZlckZ1bmN0aW9uIHtcbiAgbGV0IGJ1ZmZlciA9IFwiXCI7XG4gIGZ1bmN0aW9uIGJ1ZmZlcmVkUmVjZWl2ZXJGdW5jdGlvbihvdXRwdXQ6IHN0cmluZykge1xuICAgIGJ1ZmZlciArPSBvdXRwdXQ7XG4gICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoL1tcXG5cXHJdKy8pO1xuXG4gICAgLy8gaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggXFxuIHRoaXMgd2lsbCBiZSBhbiBlbXB0eSBzdHJpbmdcbiAgICAvLyBlbHNlIGl0IHdpbGwgY29udGFpbiBhbiBcInVuZmluaXNoZWRcIiBsaW5lXG4gICAgLy8gdGhlIGZhbGxiYWNrIHRvIGFuIGVtcHR5IHN0cmluZyBpcyB0byBtYWtlIFRTIGhhcHB5IGFuZCBzaG91bGQgbmV2ZXIgaGFwcGVuXG4gICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgXCJcIjtcblxuICAgIGlmIChsaW5lcy5sZW5ndGggPiAwKSBoYW5kbGVyKGxpbmVzLmpvaW4oRU9MKSArIEVPTCk7XG4gIH1cbiAgYnVmZmVyZWRSZWNlaXZlckZ1bmN0aW9uLmdldEJ1ZmZlciA9ICgpID0+IGJ1ZmZlcjtcblxuICByZXR1cm4gYnVmZmVyZWRSZWNlaXZlckZ1bmN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlTGluZVJlY2VpdmVkKHNlbmQ6IChldmVudDogRGVwbG95RXZlbnQpID0+IHZvaWQpIHtcbiAgcmV0dXJuIChvdXRwdXQ6IHN0cmluZykgPT4ge1xuICAgIGxldCBoaWRlT3V0cHV0ID0gZmFsc2U7XG4gICAgY29uc3Qgbm9Db2xvckxpbmUgPSBzdHJpcEFuc2kob3V0cHV0KTtcblxuICAgIC8vIHBvc3NpYmxlIGV2ZW50cyBiYXNlZCBvbiBsaW5lXG4gICAgaWYgKG5vQ29sb3JMaW5lLmluY2x1ZGVzKFwiYXBwcm92ZWQgdXNpbmcgdGhlIFVJIG9yIEFQSVwiKSkge1xuICAgICAgc2VuZCh7IHR5cGU6IFwiQVBQUk9WRURfRVhURVJOQUxMWVwiIH0pO1xuICAgIH0gZWxzZSBpZiAobm9Db2xvckxpbmUuaW5jbHVkZXMoXCJkaXNjYXJkZWQgdXNpbmcgdGhlIFVJIG9yIEFQSVwiKSkge1xuICAgICAgc2VuZCh7IHR5cGU6IFwiUkVKRUNURURfRVhURVJOQUxMWVwiIH0pO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBub0NvbG9yTGluZS5pbmNsdWRlcyhcIkRvIHlvdSB3YW50IHRvIHBlcmZvcm0gdGhlc2UgYWN0aW9uc1wiKSB8fFxuICAgICAgbm9Db2xvckxpbmUuaW5jbHVkZXMoXCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVzdHJveSBhbGwgcmVzb3VyY2VzP1wiKSB8fFxuICAgICAgbm9Db2xvckxpbmUuaW5jbHVkZXMoXG4gICAgICAgIFwiRG8geW91IHJlYWxseSB3YW50IHRvIGRlc3Ryb3kgYWxsIHJlc291cmNlcyBpbiB3b3Jrc3BhY2VcIixcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGhpZGVPdXRwdXQgPSB0cnVlO1xuICAgICAgc2VuZCh7IHR5cGU6IFwiT1VUUFVUX1JFQ0VJVkVEXCIsIG91dHB1dCB9KTtcbiAgICAgIHNlbmQoeyB0eXBlOiBcIlJFUVVFU1RfQVBQUk9WQUxcIiB9KTtcbiAgICB9IGVsc2UgaWYgKGlzTWlzc2luZ1ZhcmlhYmxlUHJvbXB0KG5vQ29sb3JMaW5lKSkge1xuICAgICAgaGlkZU91dHB1dCA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHZhcmlhYmxlTmFtZSA9IGV4dHJhY3RWYXJpYWJsZU5hbWVGcm9tUHJvbXB0KG91dHB1dCk7XG4gICAgICBzZW5kKHtcbiAgICAgICAgdHlwZTogXCJPVVRQVVRfUkVDRUlWRURcIixcbiAgICAgICAgb3V0cHV0OiBtaXNzaW5nVmFyaWFibGUodmFyaWFibGVOYW1lKSxcbiAgICAgIH0pO1xuICAgICAgc2VuZCh7IHR5cGU6IFwiVkFSSUFCTEVfTUlTU0lOR1wiLCB2YXJpYWJsZU5hbWUgfSk7XG4gICAgfSBlbHNlIGlmIChub0NvbG9yTGluZS5pbmNsdWRlcyhcIkVudGVyIGEgdmFsdWU6XCIpKSB7XG4gICAgICAvLyBUaGlzIGNvbWVzIGFsb25nIHdpdGggYWJvdmUgYmxvY2ssIGJ1dCBpcyBhIHNlcGFyYXRlIGxpbmVcbiAgICAgIGhpZGVPdXRwdXQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBub0NvbG9yTGluZS5pbmNsdWRlcyhcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgc29mdCBmYWlsZWQgcG9saWN5IGNoZWNrP1wiLFxuICAgICAgKVxuICAgICkge1xuICAgICAgaGlkZU91dHB1dCA9IHRydWU7XG4gICAgICBzZW5kKHsgdHlwZTogXCJPVVRQVVRfUkVDRUlWRURcIiwgb3V0cHV0IH0pO1xuXG4gICAgICBzZW5kKHsgdHlwZTogXCJSRVFVRVNUX1NFTlRJTkVMX09WRVJSSURFXCIgfSk7XG4gICAgfSBlbHNlIGlmIChub0NvbG9yTGluZS5pbmNsdWRlcyhcIm92ZXJyaWRkZW4gdXNpbmcgdGhlIFVJIG9yIEFQSVwiKSkge1xuICAgICAgc2VuZCh7IHR5cGU6IFwiT1ZFUlJJRERFTl9FWFRFUk5BTExZXCIgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFoaWRlT3V0cHV0KSB7XG4gICAgICBzZW5kKHtcbiAgICAgICAgdHlwZTogXCJPVVRQVVRfUkVDRUlWRURcIixcbiAgICAgICAgb3V0cHV0LFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIElucHV0IHBhc3NlZCB0byB0aGUgaW52b2tlZCBwdHkgYWN0b3IsIGNhcnJ5aW5nIHRoZSBzcGF3biBjb25maWcgZnJvbSB0aGUgU1RBUlQgZXZlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHR5QWN0b3JJbnB1dCB7XG4gIHB0eTogSW50ZXJhY3RpdmVTcGF3bkNvbmZpZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGludm9rZWQgYWN0b3IgdGhhdCBydW5zIHRlcnJhZm9ybSBpbiBhIHB0eS4gSXQgcmVsYXlzIGNvbXBsZXRlZCBsaW5lcyBiYWNrIHRvIHRoZSBwYXJlbnQgbWFjaGluZSB2aWFcbiAqIGBzZW5kQmFja2AgYW5kIGZvcndhcmRzIFNFTkRfTElORSBldmVudHMgZnJvbSB0aGUgcGFyZW50IHRvIHRoZSBwdHkgdmlhIGByZWNlaXZlYC4gVGhlIGBzcGF3bmAgZnVuY3Rpb24gaXMgYVxuICogcGFyYW1ldGVyIHNvIHRlc3RzIGNhbiBpbmplY3QgYSBtb2NrIHB0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VUZXJyYWZvcm1QdHlTZXJ2aWNlKHNwYXduID0gc3Bhd25JbnRlcmFjdGl2ZSkge1xuICByZXR1cm4gZnJvbUNhbGxiYWNrPERlcGxveUV2ZW50LCBQdHlBY3RvcklucHV0PihcbiAgICAoeyBzZW5kQmFjaywgcmVjZWl2ZSwgaW5wdXQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBwdHkgfSA9IGlucHV0O1xuXG4gICAgICAvLyBDb21tdW5pY2F0aW9uIGZyb20gdGhlIHB0eSB0byB0aGUgY2FsbGVyXG4gICAgICBjb25zdCByZWNlaXZlciA9IGJ1ZmZlclVudGVybWluYXRlZExpbmVzKGhhbmRsZUxpbmVSZWNlaXZlZChzZW5kQmFjaykpO1xuICAgICAgY29uc3QgeyBleGl0Q29kZSwgYWN0aW9ucyB9ID0gc3Bhd24ocHR5LCAoZGF0YSkgPT4ge1xuICAgICAgICByZWNlaXZlcihkYXRhKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDb21tdW5pY2F0aW9uIGZyb20gdGhlIGNhbGxlciB0byB0aGUgcHR5XG4gICAgICByZWNlaXZlKChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJTRU5EX0xJTkVcIikge1xuICAgICAgICAgIGFjdGlvbnMud3JpdGVMaW5lKGV2ZW50LmlucHV0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGV4aXRDb2RlLnRoZW4oKGV4aXRDb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhc3RCdWZmZXIgPSByZWNlaXZlci5nZXRCdWZmZXIoKTtcbiAgICAgICAgaWYgKGxhc3RCdWZmZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBUZXJyYWZvcm0gQ0xJIGV4aXRlZCBidXQgdGhlIGxhc3Qgb3V0cHV0dGVkIGxpbmUgd2FzIG5vdCB0ZXJtaW5hdGVkIHdpdGggYSBuZXdsaW5lIGFuZCBoZW5jZSBpcyBzdGlsbCBpbiB0aGUgYnVmZmVyIGFuZCB3YXNuJ3QgcHJpbnRlZDogXCIke2xhc3RCdWZmZXJ9XCJgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBzZW5kQmFjayh7IHR5cGU6IFwiRVhJVEVEXCIsIGV4aXRDb2RlIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGxvZ2dlci50cmFjZShcIlRlcnJhZm9ybSBDTEkgc3RhdGUgbWFjaGluZTogY2xlYW5pbmcgdXAgcHR5XCIpO1xuICAgICAgICBhY3Rpb25zLnN0b3AoKTtcbiAgICAgIH07XG4gICAgfSxcbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IHRlcnJhZm9ybVB0eVNlcnZpY2UgPSBtYWtlVGVycmFmb3JtUHR5U2VydmljZSgpO1xuXG5leHBvcnQgY29uc3QgZGVwbG95TWFjaGluZSA9IHNldHVwKHtcbiAgdHlwZXM6IHtcbiAgICBjb250ZXh0OiB7fSBhcyBEZXBsb3lDb250ZXh0LFxuICAgIGV2ZW50czoge30gYXMgRGVwbG95RXZlbnQsXG4gICAgb3V0cHV0OiB7fSBhcyB7IGV4aXRDb2RlPzogbnVtYmVyIH0sXG4gIH0sXG4gIGFjdG9yczoge1xuICAgIHJ1blRlcnJhZm9ybUluUHR5OiB0ZXJyYWZvcm1QdHlTZXJ2aWNlLFxuICB9LFxufSkuY3JlYXRlTWFjaGluZSh7XG4gIGNvbnRleHQ6IHt9LFxuICBpbml0aWFsOiBcImlkbGVcIixcbiAgaWQ6IFwicm9vdFwiLFxuICBzdGF0ZXM6IHtcbiAgICBpZGxlOiB7XG4gICAgICBvbjoge1xuICAgICAgICBTVEFSVDogeyB0YXJnZXQ6IFwicnVubmluZ1wiIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgcnVubmluZzoge1xuICAgICAgaW52b2tlOiB7XG4gICAgICAgIGlkOiBcInB0eVwiLFxuICAgICAgICBzcmM6IFwicnVuVGVycmFmb3JtSW5QdHlcIixcbiAgICAgICAgaW5wdXQ6ICh7IGV2ZW50IH0pID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQudHlwZSAhPT0gXCJTVEFSVFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgICAgICAgIGBUZXJyYWZvcm0gQ0xJIGludm9jYXRpb24gc3RhdGUgbWFjaGluZTogVW5leHBlY3RlZCBldmVudCBjYXVzZWQgdHJhbnNpdGlvbiB0byB0aGUgcnVubmluZyBzdGF0ZTogJHtldmVudC50eXBlfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBwdHk6IGV2ZW50LnB0eSB9O1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIEVYSVRFRDoge1xuICAgICAgICAgIHRhcmdldDogXCJleGl0ZWRcIixcbiAgICAgICAgICBhY3Rpb25zOiBhc3NpZ24oKHsgZXZlbnQgfSkgPT4gKHsgZXhpdENvZGU6IGV2ZW50LmV4aXRDb2RlIH0pKSxcbiAgICAgICAgfSxcbiAgICAgICAgU1RPUDogXCIuc3RvcHBpbmdcIiwgLy8gd2FpdCBmb3IgdGVycmFmb3JtIHRvIGV4aXQsIGRvbid0IHN0b3AgaW1tZWRpYXRlbHkgKHNlZSB0aGUgXCJzdG9wcGluZ1wiIHN0YXRlKVxuICAgICAgfSxcbiAgICAgIGluaXRpYWw6IFwicHJvY2Vzc2luZ1wiLFxuICAgICAgc3RhdGVzOiB7XG4gICAgICAgIC8vIFRPRE86IHdoYXQgZWxzZSBtaWdodCBURiBDTEkgYmUgYXNraW5nPyBDYW4gd2UgZGV0ZWN0IGFueSBxdWVzdGlvbiBmcm9tIHRoZSBURiBDTEkgdG8gc2hvdyBhIGdvb2QgZXJyb3I/XG4gICAgICAgIHByb2Nlc3Npbmc6IHtcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgUkVRVUVTVF9BUFBST1ZBTDogXCJhd2FpdGluZ19hcHByb3ZhbFwiLFxuICAgICAgICAgICAgUkVRVUVTVF9TRU5USU5FTF9PVkVSUklERTogXCJhd2FpdGluZ19zZW50aW5lbF9vdmVycmlkZVwiLFxuICAgICAgICAgICAgVkFSSUFCTEVfTUlTU0lORzoge1xuICAgICAgICAgICAgICAvLyBTZW5kIHRvIHNlbGYgcmF0aGVyIHRoYW4gcmFpc2UoKSBzbyBjb25zdW1lcnMgb2JzZXJ2aW5nIHRoZSBhY3RvciB2aWEgaW5zcGVjdGlvbiBzdGlsbCBzZWUgdGhpcyBldmVudC5cbiAgICAgICAgICAgICAgYWN0aW9uczogc2VuZFRvKCh7IHNlbGYgfSkgPT4gc2VsZiwge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiRVhJVEVEXCIsXG4gICAgICAgICAgICAgICAgZXhpdENvZGU6IDEsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhd2FpdGluZ19hcHByb3ZhbDoge1xuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBBUFBST1ZFRF9FWFRFUk5BTExZOiBcInByb2Nlc3NpbmdcIixcbiAgICAgICAgICAgIFJFSkVDVEVEX0VYVEVSTkFMTFk6IHtcbiAgICAgICAgICAgICAgdGFyZ2V0OiBcIiNyb290LmV4aXRlZFwiLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBhc3NpZ24oeyBjYW5jZWxsZWQ6IHRydWUgfSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQVBQUk9WRToge1xuICAgICAgICAgICAgICB0YXJnZXQ6IFwicHJvY2Vzc2luZ1wiLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBzZW5kVG8oXCJwdHlcIiwgeyB0eXBlOiBcIlNFTkRfTElORVwiLCBpbnB1dDogXCJ5ZXNcIiB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBSRUpFQ1Q6IHtcbiAgICAgICAgICAgICAgdGFyZ2V0OiBcInByb2Nlc3NpbmdcIixcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIHNlbmRUbyhcInB0eVwiLCB7IHR5cGU6IFwiU0VORF9MSU5FXCIsIGlucHV0OiBcIm5vXCIgfSksXG4gICAgICAgICAgICAgICAgYXNzaWduKHsgY2FuY2VsbGVkOiB0cnVlIH0pLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhd2FpdGluZ19zZW50aW5lbF9vdmVycmlkZToge1xuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBPVkVSUklEREVOX0VYVEVSTkFMTFk6IFwicHJvY2Vzc2luZ1wiLFxuICAgICAgICAgICAgT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWToge1xuICAgICAgICAgICAgICB0YXJnZXQ6IFwiI3Jvb3QuZXhpdGVkXCIsXG4gICAgICAgICAgICAgIGFjdGlvbnM6IGFzc2lnbih7IGNhbmNlbGxlZDogdHJ1ZSB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBUaGUgZXh0ZXJuYWwgZGlzY2FyZCBtZXNzYWdlIHBvc3RlZCBieSB0aGUgVGVycmFmb3JtIFVJIGlzIHRoZSBzYW1lIGFzIGR1cmluZyBhcHBseSwgc28gd2UgY2FwdHVyZSBpdFxuICAgICAgICAgICAgLy8gYW5kIHJlLXNlbmQgYSBtb3JlIHNwZWNpZmljIGV2ZW50LiBTZW50IHRvIHNlbGYgcmF0aGVyIHRoYW4gcmFpc2UoKSBzbyBjb25zdW1lcnMgb2JzZXJ2aW5nIHRoZSBhY3RvclxuICAgICAgICAgICAgLy8gdmlhIGluc3BlY3Rpb24gc3RpbGwgc2VlIGl0LlxuICAgICAgICAgICAgUkVKRUNURURfRVhURVJOQUxMWToge1xuICAgICAgICAgICAgICBhY3Rpb25zOiBzZW5kVG8oKHsgc2VsZiB9KSA9PiBzZWxmLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJPVkVSUklERV9SRUpFQ1RFRF9FWFRFUk5BTExZXCIsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIE9WRVJSSURFOiB7XG4gICAgICAgICAgICAgIHRhcmdldDogXCJwcm9jZXNzaW5nXCIsXG4gICAgICAgICAgICAgIGFjdGlvbnM6IHNlbmRUbyhcInB0eVwiLCB7IHR5cGU6IFwiU0VORF9MSU5FXCIsIGlucHV0OiBcIm92ZXJyaWRlXCIgfSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgUkVKRUNUX09WRVJSSURFOiB7XG4gICAgICAgICAgICAgIHRhcmdldDogXCJwcm9jZXNzaW5nXCIsXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBzZW5kVG8oXCJwdHlcIiwgeyB0eXBlOiBcIlNFTkRfTElORVwiLCBpbnB1dDogXCJub1wiIH0pLFxuICAgICAgICAgICAgICAgIGFzc2lnbih7IGNhbmNlbGxlZDogdHJ1ZSB9KSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gT24gU1RPUCwgd2FpdCBmb3IgdGVycmFmb3JtJ3Mgb3duIEVYSVRFRCBiZWZvcmUgcmVhY2hpbmcgdGhlIGZpbmFsIFwic3RvcHBlZFwiIHN0YXRlLCBzbyB0aGUgcnVuIG9ubHlcbiAgICAgICAgLy8gcmVzb2x2ZXMgb25jZSBpdCBoYXMgZXhpdGVkIGFuZCByZWxlYXNlZCBpdHMgbG9jay4gRG9uJ3QgcmUtc2lnbmFsIGl0IOKAlCBpdCBhbHJlYWR5IGdvdCB0aGUgaW50ZXJydXB0IHZpYVxuICAgICAgICAvLyB0aGUgcHJvY2VzcyBncm91cCwgYW5kIGEgc2Vjb25kIHNpZ25hbCBhYm9ydHMgaXRzIGdyYWNlZnVsIHNodXRkb3duLlxuICAgICAgICBzdG9wcGluZzoge1xuICAgICAgICAgIGVudHJ5OiBhc3NpZ24oeyBjYW5jZWxsZWQ6IHRydWUgfSksXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIEVYSVRFRDoge1xuICAgICAgICAgICAgICB0YXJnZXQ6IFwiI3Jvb3Quc3RvcHBlZFwiLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBhc3NpZ24oKHsgZXZlbnQgfSkgPT4gKHsgZXhpdENvZGU6IGV2ZW50LmV4aXRDb2RlIH0pKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBleGl0ZWQ6IHsgdHlwZTogXCJmaW5hbFwiIH0sXG4gICAgc3RvcHBlZDogeyB0eXBlOiBcImZpbmFsXCIgfSxcbiAgfSxcbiAgLy8gVGhlIG1hY2hpbmUncyBvdXRwdXQgaXMgcHJvZHVjZWQgd2hlbiBpdCByZWFjaGVzIGEgdG9wLWxldmVsIGZpbmFsIHN0YXRlIChleGl0ZWQvc3RvcHBlZCksIGNhcnJ5aW5nIHRoZVxuICAvLyB0ZXJyYWZvcm0gZXhpdCBjb2RlIGNhcHR1cmVkIGludG8gY29udGV4dCBvbiB0aGUgRVhJVEVEIHRyYW5zaXRpb24uXG4gIG91dHB1dDogKHsgY29udGV4dCB9KSA9PiAoeyBleGl0Q29kZTogY29udGV4dC5leGl0Q29kZSB9KSxcbn0pO1xuXG4vKipcbiAqIEEgc25hcHNob3Qgb2YgdGhlIGRlcGxveSBtYWNoaW5lLCBjYXJyeWluZyB0aGUgY3VycmVudCBzdGF0ZSB2YWx1ZSBhbmQgY29udGV4dC5cbiAqL1xuZXhwb3J0IHR5cGUgRGVwbG95U25hcHNob3QgPSBTbmFwc2hvdEZyb208dHlwZW9mIGRlcGxveU1hY2hpbmU+O1xuXG4vKipcbiAqIEEgcnVubmluZyBhY3RvciBmb3IgdGhlIGRlcGxveSBtYWNoaW5lLCBhcyByZXR1cm5lZCBieSB0aGUgY3JlYXRlQW5kU3RhcnQqIGZhY3Rvcmllcy5cbiAqL1xuZXhwb3J0IHR5cGUgRGVwbG95QWN0b3IgPSBBY3RvclJlZkZyb208dHlwZW9mIGRlcGxveU1hY2hpbmU+O1xuXG4vKipcbiAqIENhbGxiYWNrIGludm9rZWQgZm9yIGV2ZXJ5IGluc3BlY3Rpb24gZXZlbnQgb24gdGhlIGRlcGxveSBhY3Rvci4gQ29uc3VtZXJzIHVzZSBpdCB0byBvYnNlcnZlIGJvdGggdGhlIGV2ZW50c1xuICogZmxvd2luZyB0aHJvdWdoIHRoZSBtYWNoaW5lIGFuZCBlYWNoIHJlc3VsdGluZyBzbmFwc2hvdC5cbiAqL1xuZXhwb3J0IHR5cGUgRGVwbG95SW5zcGVjdGlvbkhhbmRsZXIgPSAoXG4gIGluc3BlY3Rpb25FdmVudDogSW5zcGVjdGlvbkV2ZW50LFxuKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5kU3RhcnREZXBsb3lTZXJ2aWNlKFxuICBvcHRpb25zOiB7XG4gICAgcmVmcmVzaE9ubHk/OiBib29sZWFuO1xuICAgIHBhcmFsbGVsaXNtOiBudW1iZXI7XG4gICAgZXh0cmFPcHRpb25zOiBzdHJpbmdbXTtcbiAgICB0ZXJyYWZvcm1CaW5hcnlOYW1lOiBzdHJpbmc7XG4gICAgYXV0b0FwcHJvdmU/OiBib29sZWFuO1xuICAgIG5vQ29sb3I/OiBib29sZWFuO1xuICAgIHdvcmtkaXI6IHN0cmluZztcbiAgICB2YXJzPzogc3RyaW5nW107XG4gICAgdmFyRmlsZXM/OiBzdHJpbmdbXTtcbiAgfSxcbiAgaW5zcGVjdD86IERlcGxveUluc3BlY3Rpb25IYW5kbGVyLFxuKSB7XG4gIGNvbnN0IHNlcnZpY2UgPSBjcmVhdGVBY3RvcihkZXBsb3lNYWNoaW5lLCB7IGluc3BlY3QgfSk7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgXCJhcHBseVwiLFxuICAgIC4uLihvcHRpb25zLmF1dG9BcHByb3ZlID8gW1wiLWF1dG8tYXBwcm92ZVwiXSA6IFtdKSxcbiAgICAvLyBcIi1pbnB1dD1mYWxzZVwiLCB3ZSBjYW4ndCB1c2UgdGhpcyBhbnltb3JlIGJ1dCBUT0RPOiB3ZSBuZWVkIHRvIGRldGVjdCBURiBDTEkgYXNraW5nIGZvciBtaXNzaW5nIGlucHV0cyBhbmQgZWl0aGVyIGFsbG93IHBhc3NpbmcgdGhlbSBvciBzdG9wIHRoZXJlIGFuZCBmYWlsXG5cbiAgICAuLi5vcHRpb25zLmV4dHJhT3B0aW9ucyxcbiAgICAuLi4ob3B0aW9ucy5yZWZyZXNoT25seSA/IFtcIi1yZWZyZXNoLW9ubHlcIl0gOiBbXSksXG4gICAgLi4uKG9wdGlvbnMubm9Db2xvciA/IFtcIi1uby1jb2xvclwiXSA6IFtdKSxcbiAgICAuLi4ob3B0aW9ucy5wYXJhbGxlbGlzbSA+IC0xXG4gICAgICA/IFtgLXBhcmFsbGVsaXNtPSR7b3B0aW9ucy5wYXJhbGxlbGlzbX1gXVxuICAgICAgOiBbXSksXG4gIF07XG5cbiAgb3B0aW9ucy52YXJzPy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgYXJncy5wdXNoKGAtdmFyPSR7dn1gKTtcbiAgfSk7XG5cbiAgb3B0aW9ucy52YXJGaWxlcz8uZm9yRWFjaCgodikgPT4ge1xuICAgIGFyZ3MucHVzaChgLXZhci1maWxlPSR7dn1gKTtcbiAgfSk7XG5cbiAgbG9nZ2VyLmRlYnVnKFxuICAgIGBFeGVjdXRpbmcgJHtvcHRpb25zLnRlcnJhZm9ybUJpbmFyeU5hbWV9ICR7YXJncy5qb2luKFwiIFwiKX0gaW4gJHtcbiAgICAgIG9wdGlvbnMud29ya2RpclxuICAgIH1gLFxuICApO1xuXG4gIGNvbnN0IGNvbmZpZzogSW50ZXJhY3RpdmVTcGF3bkNvbmZpZyA9IHtcbiAgICBmaWxlOiBvcHRpb25zLnRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgYXJncyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBjd2Q6IG9wdGlvbnMud29ya2RpcixcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSwgLy8gVE9ETzogbWFrZSB0aGlzIGV4cGxpY2l0IGFuZCBtb3ZlIHRvIGNhbGxlciBvciB3aGF0ZXZlclxuICAgIH0sXG4gIH07XG5cbiAgc2VydmljZS5zdGFydCgpO1xuICBzZXJ2aWNlLnNlbmQoeyB0eXBlOiBcIlNUQVJUXCIsIHB0eTogY29uZmlnIH0pO1xuXG4gIHJldHVybiBzZXJ2aWNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5kU3RhcnREZXN0cm95U2VydmljZShcbiAgb3B0aW9uczoge1xuICAgIHBhcmFsbGVsaXNtOiBudW1iZXI7XG4gICAgZXh0cmFPcHRpb25zOiBzdHJpbmdbXTtcbiAgICB0ZXJyYWZvcm1CaW5hcnlOYW1lOiBzdHJpbmc7XG4gICAgYXV0b0FwcHJvdmU/OiBib29sZWFuO1xuICAgIG5vQ29sb3I/OiBib29sZWFuO1xuICAgIHdvcmtkaXI6IHN0cmluZztcbiAgICB2YXJzPzogc3RyaW5nW107XG4gICAgdmFyRmlsZXM/OiBzdHJpbmdbXTtcbiAgfSxcbiAgaW5zcGVjdD86IERlcGxveUluc3BlY3Rpb25IYW5kbGVyLFxuKSB7XG4gIGNvbnN0IHNlcnZpY2UgPSBjcmVhdGVBY3RvcihkZXBsb3lNYWNoaW5lLCB7IGluc3BlY3QgfSk7XG5cbiAgY29uc3QgYXJncyA9IFtcbiAgICBcImRlc3Ryb3lcIixcbiAgICAuLi4ob3B0aW9ucy5hdXRvQXBwcm92ZSA/IFtcIi1hdXRvLWFwcHJvdmVcIl0gOiBbXSksXG4gICAgLy8gXCItaW5wdXQ9ZmFsc2VcIiwgd2UgY2FuJ3QgdXNlIHRoaXMgYW55bW9yZSBidXQgVE9ETzogd2UgbmVlZCB0byBkZXRlY3QgVEYgQ0xJIGFza2luZyBmb3IgbWlzc2luZyBpbnB1dHMgYW5kIGVpdGhlciBhbGxvdyBwYXNzaW5nIHRoZW0gb3Igc3RvcCB0aGVyZSBhbmQgZmFpbFxuXG4gICAgLi4ub3B0aW9ucy5leHRyYU9wdGlvbnMsXG4gICAgLi4uKG9wdGlvbnMubm9Db2xvciA/IFtcIi1uby1jb2xvclwiXSA6IFtdKSxcbiAgICAuLi4ob3B0aW9ucy5wYXJhbGxlbGlzbSA+IC0xXG4gICAgICA/IFtgLXBhcmFsbGVsaXNtPSR7b3B0aW9ucy5wYXJhbGxlbGlzbX1gXVxuICAgICAgOiBbXSksXG4gIF07XG5cbiAgb3B0aW9ucy52YXJzPy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgYXJncy5wdXNoKGAtdmFyPSR7dn1gKTtcbiAgfSk7XG5cbiAgb3B0aW9ucy52YXJGaWxlcz8uZm9yRWFjaCgodikgPT4ge1xuICAgIGFyZ3MucHVzaChgLXZhci1maWxlPSR7dn1gKTtcbiAgfSk7XG5cbiAgbG9nZ2VyLmRlYnVnKFxuICAgIGBFeGVjdXRpbmcgJHtvcHRpb25zLnRlcnJhZm9ybUJpbmFyeU5hbWV9ICR7YXJncy5qb2luKFwiIFwiKX0gaW4gJHtcbiAgICAgIG9wdGlvbnMud29ya2RpclxuICAgIH1gLFxuICApO1xuXG4gIGNvbnN0IGNvbmZpZzogSW50ZXJhY3RpdmVTcGF3bkNvbmZpZyA9IHtcbiAgICBmaWxlOiBvcHRpb25zLnRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgYXJncyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBjd2Q6IG9wdGlvbnMud29ya2RpcixcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSwgLy8gVE9ETzogbWFrZSB0aGlzIGV4cGxpY2l0IGFuZCBtb3ZlIHRvIGNhbGxlciBvciB3aGF0ZXZlclxuICAgIH0sXG4gIH07XG5cbiAgc2VydmljZS5zdGFydCgpO1xuICBzZXJ2aWNlLnNlbmQoeyB0eXBlOiBcIlNUQVJUXCIsIHB0eTogY29uZmlnIH0pO1xuXG4gIHJldHVybiBzZXJ2aWNlO1xufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terraform-cli.d.ts","sourceRoot":"","sources":["../../../src/lib/models/terraform-cli.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,SAAS,EACT,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"terraform-cli.d.ts","sourceRoot":"","sources":["../../../src/lib/models/terraform-cli.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,SAAS,EACT,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAkBlD,qBAAa,gBACX,SAAQ,qBACR,YAAW,aAAa;aAGN,QAAQ,EAAE,MAAM;aAChB,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;gBAD5B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;CAI/C;AAED,uBAAe,oBAAoB;IACjC,OAAc,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,OAAc,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD;AACD,MAAM,MAAM,YAAY,GAAG,OAAO,oBAAoB,CAAC;AAkCvD,qBAAa,YAAa,YAAW,SAAS;IAY1C,OAAO,CAAC,QAAQ,CAAC,WAAW;aACZ,KAAK,EAAE,gBAAgB;IAZzC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGc;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGkB;gBAGxB,WAAW,EAAE,WAAW,EACzB,KAAK,EAAE,gBAAgB,EACvC,yBAAyB,YAAY,MAAM,YAAY,YAAY,EAAE,eACzD,MAAM,2BAAuB;IAe9B,IAAI,CAAC,IAAI,EAAE;QACtB,YAAY,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,YAAY,EAAE,OAAO,CAAC;QACtB,mBAAmB,EAAE,OAAO,CAAC;KAC9B,GAAG,OAAO,CAAC,IAAI,CAAC;IAkFjB,OAAO,KAAK,YAAY,GAQvB;IAED,OAAO,KAAK,UAAU,GAMrB;IAEY,IAAI,CAAC,IAAI,EAAE;QACtB,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8DJ,MAAM,CACjB,EACE,WAAmB,EACnB,WAAmB,EACnB,OAAe,EACf,WAAgB,EAChB,YAAiB,EACjB,IAAS,EACT,QAAa,GACd;;;;;;;;KAAA,EACD,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,GAC9C,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAoBrB,OAAO,CAClB,EACE,WAAmB,EACnB,WAAgB,EAChB,OAAe,EACf,YAAiB,EACjB,IAAS,EACT,QAAa,GACd;;;;;;;KAAA,EACD,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,GAC9C,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;YAmBpB,aAAa;IAkHd,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAqB1B,MAAM,IAAI,OAAO,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;KAAE,CAAC;IAwBrD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7B,KAAK;CAGnB;AAED,wBAAsB,iCAAiC,CACrD,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMxB;AAED,wBAAsB,mCAAmC,CAAC,UAAU,EAAE,MAAM,iBAK3E"}
|
|
@@ -33,7 +33,7 @@ const strip_ansi_1 = __importDefault(require("strip-ansi"));
|
|
|
33
33
|
const commons_1 = require("@cdktn/commons");
|
|
34
34
|
const terraform_1 = require("./terraform");
|
|
35
35
|
const deploy_machine_1 = require("./deploy-machine");
|
|
36
|
-
const
|
|
36
|
+
const xstate_1 = require("xstate");
|
|
37
37
|
const errors_1 = require("../errors");
|
|
38
38
|
const terraform_json_1 = require("../terraform-json");
|
|
39
39
|
const interactive_process_1 = require("./interactive-process");
|
|
@@ -196,7 +196,7 @@ class TerraformCli {
|
|
|
196
196
|
}
|
|
197
197
|
async deploy({ autoApprove = false, refreshOnly = false, noColor = false, parallelism = -1, extraOptions = [], vars = [], varFiles = [], }, callback) {
|
|
198
198
|
await this.setUserAgent();
|
|
199
|
-
|
|
199
|
+
return this.handleService("deploy", callback, (inspect) => (0, deploy_machine_1.createAndStartDeployService)({
|
|
200
200
|
terraformBinaryName: commons_1.terraformBinaryName,
|
|
201
201
|
workdir: this.workdir,
|
|
202
202
|
refreshOnly,
|
|
@@ -206,12 +206,11 @@ class TerraformCli {
|
|
|
206
206
|
extraOptions,
|
|
207
207
|
vars,
|
|
208
208
|
varFiles,
|
|
209
|
-
});
|
|
210
|
-
return this.handleService("deploy", service, callback);
|
|
209
|
+
}, inspect));
|
|
211
210
|
}
|
|
212
211
|
async destroy({ autoApprove = false, parallelism = -1, noColor = false, extraOptions = [], vars = [], varFiles = [], }, callback) {
|
|
213
212
|
await this.setUserAgent();
|
|
214
|
-
|
|
213
|
+
return this.handleService("destroy", callback, (inspect) => (0, deploy_machine_1.createAndStartDestroyService)({
|
|
215
214
|
terraformBinaryName: commons_1.terraformBinaryName,
|
|
216
215
|
workdir: this.workdir,
|
|
217
216
|
autoApprove,
|
|
@@ -220,16 +219,20 @@ class TerraformCli {
|
|
|
220
219
|
extraOptions,
|
|
221
220
|
vars,
|
|
222
221
|
varFiles,
|
|
223
|
-
});
|
|
224
|
-
return this.handleService("destroy", service, callback);
|
|
222
|
+
}, inspect));
|
|
225
223
|
}
|
|
226
|
-
async handleService(type,
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
//
|
|
232
|
-
|
|
224
|
+
async handleService(type, callback, createService) {
|
|
225
|
+
var _a;
|
|
226
|
+
// Events reach us through inspection, which fires for the whole actor tree. Filter to the root deploy actor
|
|
227
|
+
// (its sessionId equals the tree's rootId) so we don't react to the invoked pty child's own events. Comparing
|
|
228
|
+
// sessionId rather than the actor ref keeps this self-contained: inspection fires during startup, before the
|
|
229
|
+
// `service` binding below is initialized.
|
|
230
|
+
const inspect = (inspectionEvent) => {
|
|
231
|
+
if (inspectionEvent.type !== "@xstate.event" ||
|
|
232
|
+
inspectionEvent.actorRef.sessionId !== inspectionEvent.rootId) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
const event = inspectionEvent.event;
|
|
233
236
|
commons_1.logger.trace(`Terraform CLI state machine event: ${JSON.stringify(event)}`);
|
|
234
237
|
if ((0, deploy_machine_1.isDeployEvent)(event, "OUTPUT_RECEIVED"))
|
|
235
238
|
this.onStdout(type)(event.output);
|
|
@@ -247,49 +250,56 @@ class TerraformCli {
|
|
|
247
250
|
type: "external sentinel override reply",
|
|
248
251
|
overridden: false,
|
|
249
252
|
});
|
|
250
|
-
}
|
|
253
|
+
};
|
|
254
|
+
const service = createService(inspect);
|
|
255
|
+
// Transitions come from the actor's own subscription, which yields typed snapshots for the root actor only.
|
|
251
256
|
let previousState = "idle";
|
|
252
|
-
|
|
253
|
-
//
|
|
254
|
-
|
|
255
|
-
if (state.matches(previousState))
|
|
257
|
+
const handleSnapshot = (snapshot) => {
|
|
258
|
+
// Only send updates on actual state change; a snapshot is emitted even when only an event happened.
|
|
259
|
+
if (snapshot.matches(previousState))
|
|
256
260
|
return;
|
|
257
|
-
commons_1.logger.trace(`Terraform CLI state machine state transition: ${JSON.stringify(previousState)} => ${JSON.stringify(
|
|
258
|
-
if (
|
|
261
|
+
commons_1.logger.trace(`Terraform CLI state machine state transition: ${JSON.stringify(previousState)} => ${JSON.stringify(snapshot.value)}`);
|
|
262
|
+
if (snapshot.matches({ running: "awaiting_approval" })) {
|
|
259
263
|
callback({
|
|
260
264
|
type: "waiting for approval",
|
|
261
|
-
approve: () => service.send("APPROVE"),
|
|
262
|
-
reject: () => service.send("REJECT"),
|
|
265
|
+
approve: () => service.send({ type: "APPROVE" }),
|
|
266
|
+
reject: () => service.send({ type: "REJECT" }),
|
|
263
267
|
});
|
|
264
268
|
}
|
|
265
|
-
else if (
|
|
269
|
+
else if (snapshot.matches({ running: "awaiting_sentinel_override" })) {
|
|
266
270
|
callback({
|
|
267
271
|
type: "waiting for sentinel override",
|
|
268
|
-
override: () => service.send("OVERRIDE"),
|
|
269
|
-
reject: () => service.send("REJECT_OVERRIDE"),
|
|
272
|
+
override: () => service.send({ type: "OVERRIDE" }),
|
|
273
|
+
reject: () => service.send({ type: "REJECT_OVERRIDE" }),
|
|
270
274
|
});
|
|
271
275
|
}
|
|
272
|
-
else if (
|
|
276
|
+
else if (snapshot.matches({ running: "processing" })) {
|
|
273
277
|
callback({
|
|
274
278
|
type: "running",
|
|
275
|
-
cancelled: Boolean(
|
|
279
|
+
cancelled: Boolean(snapshot.context.cancelled),
|
|
276
280
|
});
|
|
277
281
|
}
|
|
278
|
-
previousState =
|
|
279
|
-
}
|
|
280
|
-
service.
|
|
281
|
-
|
|
282
|
+
previousState = snapshot.value;
|
|
283
|
+
};
|
|
284
|
+
service.subscribe(handleSnapshot);
|
|
285
|
+
handleSnapshot(service.getSnapshot());
|
|
286
|
+
// stop terraform apply if signaled as such from the outside (e.g. via ctrl+c)
|
|
287
|
+
this.abortSignal.addEventListener("abort", () => {
|
|
288
|
+
service.send({ type: "STOP" });
|
|
289
|
+
}, { once: true });
|
|
290
|
+
const snapshot = await (0, xstate_1.waitFor)(service, (snapshot) => snapshot.status === "done", {
|
|
282
291
|
timeout: Infinity,
|
|
283
292
|
});
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
293
|
+
// The final state produces the terraform exit code as the machine's output.
|
|
294
|
+
const exitCode = (_a = snapshot.output) === null || _a === void 0 ? void 0 : _a.exitCode;
|
|
295
|
+
commons_1.logger.trace(`Invoking Terraform CLI for ${type} done (state machine reached final state). Last exit code: ${JSON.stringify(exitCode)}. Context: ${JSON.stringify(snapshot.context)}`);
|
|
296
|
+
if (exitCode !== undefined &&
|
|
297
|
+
exitCode !== 0 &&
|
|
298
|
+
!snapshot.context.cancelled // don't fail if we cancelled the run
|
|
289
299
|
) {
|
|
290
|
-
throw `Invoking Terraform CLI failed with exit code ${
|
|
300
|
+
throw `Invoking Terraform CLI failed with exit code ${exitCode}`;
|
|
291
301
|
}
|
|
292
|
-
return { cancelled: Boolean(
|
|
302
|
+
return { cancelled: Boolean(snapshot.context.cancelled) };
|
|
293
303
|
}
|
|
294
304
|
async version() {
|
|
295
305
|
try {
|
|
@@ -352,4 +362,4 @@ async function tryRemoveGeneratedConfigurationFile(workingDir) {
|
|
|
352
362
|
}
|
|
353
363
|
}
|
|
354
364
|
exports.tryRemoveGeneratedConfigurationFile = tryRemoveGeneratedConfigurationFile;
|
|
355
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWNsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbW9kZWxzL3RlcnJhZm9ybS1jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDREQUFtQztBQUNuQyw0Q0FNd0I7QUFDeEIsMkNBTXFCO0FBRXJCLHFEQUswQjtBQUMxQixnREFBNkM7QUFDN0Msc0NBQTRDO0FBQzVDLHNEQUF3RDtBQUN4RCwrREFBeUQ7QUFDekQsZ0RBQXdCO0FBQ3hCLDZDQUErQjtBQUUvQixNQUFNLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO0FBRTFELE1BQWEsZ0JBQ1gsU0FBUSxpQ0FBcUI7SUFHN0IsWUFDa0IsUUFBZ0IsRUFDaEIsSUFBNEI7UUFFNUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsZ0JBQWdCLEVBQUUsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGNBQWMsQ0FBQyxDQUFDO1FBSDlDLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBd0I7SUFHOUMsQ0FBQztDQUNGO0FBVkQsNENBVUM7QUFFRCxNQUFlLG9CQUFvQjtDQUdsQztBQUdELDRGQUE0RjtBQUM1RixnR0FBZ0c7QUFDaEcsTUFBTSxzQkFBdUIsU0FBUSxvQkFBb0I7SUFDdkQscURBQXFEO0lBQ3JELElBQUk7SUFDSiwwQ0FBMEM7SUFDMUMsSUFBSTtJQUNKLDJDQUEyQztJQUMzQywrQkFBK0I7SUFDL0IsSUFBSTtJQUNKLGdGQUFnRjtJQUNoRixnRkFBZ0Y7SUFDaEYsa0JBQWtCO0lBQ1gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFhO1FBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQVMsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUU5QixPQUFPLENB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QWlDLENBQ3JELFVBQWtCO0lBRWxCLE1BQU0sbUJBQW1CLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUM1RSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFSRCw4RUFRQztBQUVNLEtBQUssVUFBVSxtQ0FBbUMsQ0FBQyxVQUFrQjtJQUMxRSxNQUFNLG1CQUFtQixHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDNUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztRQUN2QyxFQUFFLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDckMsQ0FBQztBQUNILENBQUM7QUFMRCxrRkFLQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgc3RyaXBBbnNpIGZyb20gXCJzdHJpcC1hbnNpXCI7XG5pbXBvcnQge1xuICBFcnJvcnMsXG4gIGV4ZWMsXG4gIGxvZ2dlcixcbiAgcmVhZENES1RGVmVyc2lvbixcbiAgdGVycmFmb3JtQmluYXJ5TmFtZSxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQge1xuICBUZXJyYWZvcm0sXG4gIFRlcnJhZm9ybVBsYW4sXG4gIFRlcnJhZm9ybU91dHB1dCxcbiAgQWJzdHJhY3RUZXJyYWZvcm1QbGFuLFxuICBUZXJyYWZvcm1EZXBsb3lTdGF0ZSxcbn0gZnJvbSBcIi4vdGVycmFmb3JtXCI7XG5pbXBvcnQgeyBTeW50aGVzaXplZFN0YWNrIH0gZnJvbSBcIi4uL3N5bnRoLXN0YWNrXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbmRTdGFydERlcGxveVNlcnZpY2UsXG4gIGNyZWF0ZUFuZFN0YXJ0RGVzdHJveVNlcnZpY2UsXG4gIERlcGxveVN0YXRlLFxuICBpc0RlcGxveUV2ZW50LFxufSBmcm9tIFwiLi9kZXBsb3ktbWFjaGluZVwiO1xuaW1wb3J0IHsgd2FpdEZvciB9IGZyb20gXCJ4c3RhdGUvbGliL3dhaXRGb3JcIjtcbmltcG9ydCB7IG1pc3NpbmdWYXJpYWJsZSB9IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCB7IHRlcnJhZm9ybUpzb25TY2hlbWEgfSBmcm9tIFwiLi4vdGVycmFmb3JtLWpzb25cIjtcbmltcG9ydCB7IHNwYXduSW50ZXJhY3RpdmUgfSBmcm9tIFwiLi9pbnRlcmFjdGl2ZS1wcm9jZXNzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5cbmNvbnN0IEdFTkVSQVRFX0NPTkZJR19PVVRfRklMRSA9IFwiZ2VuZXJhdGVkX3Jlc291cmNlcy50ZlwiO1xuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtQ2xpUGxhblxuICBleHRlbmRzIEFic3RyYWN0VGVycmFmb3JtUGxhblxuICBpbXBsZW1lbnRzIFRlcnJhZm9ybVBsYW5cbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHBsYW5GaWxlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHBsYW46IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gICkge1xuICAgIHN1cGVyKHBsYW5GaWxlLCBwbGFuPy5yZXNvdXJjZV9jaGFuZ2VzLCBwbGFuPy5vdXRwdXRfY2hhbmdlcyk7XG4gIH1cbn1cblxuYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RPdXRwdXRGaWx0ZXIge1xuICBwdWJsaWMgc3RhdGljIGNvbmRpdGlvbjogKGxpbmU6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgcHVibGljIHN0YXRpYyB0cmFuc2Zvcm06IChsaW5lOiBzdHJpbmcpID0+IHN0cmluZztcbn1cbmV4cG9ydCB0eXBlIE91dHB1dEZpbHRlciA9IHR5cGVvZiBBYnN0cmFjdE91dHB1dEZpbHRlcjtcblxuLy8gVGhlIHBsYW4gbWlnaHQgZXJyb3IgaWYgdGhlcmUgaXMgYSB2YXJpYWJsZSBtaXNzaW5nLCBidXQgdGhlIGVycm9yIG1lc3NhZ2UgaGludHMgdGhlIHVzZXJcbi8vIGluIGEgd3JvbmcgZGlyZWN0aW9uLiBXZSB0aGVyZWZvcmUgY2F0Y2ggdGhlIGVycm9yIGFuZCByZXRocm93IGl0IHdpdGggYSBtb3JlIGhlbHBmdWwgbWVzc2FnZVxuY2xhc3MgVmFyaWFibGVSZXF1aXJlZEZpbHRlciBleHRlbmRzIEFic3RyYWN0T3V0cHV0RmlsdGVyIHtcbiAgLy8gRXhhbXBsZSBmb3IgXCJObyB2YWx1ZSBmb3IgcmVxdWlyZWQgdmFyaWFibGVcIiBlcnJvclxuICAvLyDilbdcbiAgLy8g4pSCIEVycm9yOiBObyB2YWx1ZSBmb3IgcmVxdWlyZWQgdmFyaWFibGVcbiAgLy8g4pSCXG4gIC8vIOKUgiAgIG9uIGNkay50Zi5qc29uIGxpbmUgMzEsIGluIHZhcmlhYmxlOlxuICAvLyDilIIgICAzMTogICAgIFwid2l0aC1kYXNoZXNcIjoge1xuICAvLyDilIJcbiAgLy8g4pSCIFRoZSByb290IG1vZHVsZSBpbnB1dCB2YXJpYWJsZSBcIndpdGgtZGFzaGVzXCIgaXMgbm90IHNldCwgYW5kIGhhcyBubyBkZWZhdWx0XG4gIC8vIOKUgiB2YWx1ZS4gVXNlIGEgLXZhciBvciAtdmFyLWZpbGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHRvIHByb3ZpZGUgYSB2YWx1ZSBmb3JcbiAgLy8g4pSCIHRoaXMgdmFyaWFibGVcbiAgcHVibGljIHN0YXRpYyBjb25kaXRpb24oaW5wdXQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmUgPSBzdHJpcEFuc2koaW5wdXQpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGxpbmUuaW5jbHVkZXMoXCJFcnJvcjogTm8gdmFsdWUgZm9yIHJlcXVpcmVkIHZhcmlhYmxlXCIpICYmXG4gICAgICBsaW5lLmluY2x1ZGVzKFwiVGhlIHJvb3QgbW9kdWxlIGlucHV0IHZhcmlhYmxlXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHRyYW5zZm9ybShsaW5lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdGFydE1hcmtlciA9ICdUaGUgcm9vdCBtb2R1bGUgaW5wdXQgdmFyaWFibGUgXCInO1xuICAgIGNvbnN0IHZhcmlhYmxlTmFtZSA9IGxpbmUuc3Vic3RyaW5nKFxuICAgICAgbGluZS5pbmRleE9mKHN0YXJ0TWFya2VyKSArIHN0YXJ0TWFya2VyLmxlbmd0aCxcbiAgICAgIGxpbmUuaW5kZXhPZignXCIgaXMgbm90IHNldCcpLFxuICAgICk7XG5cbiAgICByZXR1cm4gbWlzc2luZ1ZhcmlhYmxlKHZhcmlhYmxlTmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlcnJhZm9ybUNsaSBpbXBsZW1lbnRzIFRlcnJhZm9ybSB7XG4gIHB1YmxpYyByZWFkb25seSB3b3JrZGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25TdGRvdXQ6IChcbiAgICBzdGF0ZU5hbWU6IHN0cmluZyxcbiAgICBmaWx0ZXI/OiBPdXRwdXRGaWx0ZXJbXSxcbiAgKSA9PiAoc3Rkb3V0OiBCdWZmZXIgfCBzdHJpbmcpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25TdGRlcnI6IChcbiAgICBzdGF0ZU5hbWU6IHN0cmluZyxcbiAgICBmaWx0ZXI/OiBPdXRwdXRGaWx0ZXJbXSxcbiAgKSA9PiAoc3RkZXJyOiBzdHJpbmcgfCBVaW50OEFycmF5KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsLFxuICAgIHB1YmxpYyByZWFkb25seSBzdGFjazogU3ludGhlc2l6ZWRTdGFjayxcbiAgICBjcmVhdGVUZXJyYWZvcm1Mb2dIYW5kbGVyID0gKF9waGFzZTogc3RyaW5nLCBfZmlsdGVyPzogT3V0cHV0RmlsdGVyW10pID0+XG4gICAgICAoX3N0ZG91dDogc3RyaW5nLCBfaXNFcnIgPSBmYWxzZSkgPT4ge30sXG4gICkge1xuICAgIHRoaXMud29ya2RpciA9IHN0YWNrLndvcmtpbmdEaXJlY3Rvcnk7XG4gICAgdGhpcy5vblN0ZG91dCA9XG4gICAgICAocGhhc2U6IHN0cmluZywgZmlsdGVyPzogT3V0cHV0RmlsdGVyW10pID0+IChzdGRvdXQ6IEJ1ZmZlciB8IHN0cmluZykgPT5cbiAgICAgICAgY3JlYXRlVGVycmFmb3JtTG9nSGFuZGxlcihcbiAgICAgICAgICBwaGFzZSxcbiAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICkoQnVmZmVyLmlzQnVmZmVyKHN0ZG91dCkgPyBzdGRvdXQudG9TdHJpbmcoKSA6IHN0ZG91dCk7XG4gICAgdGhpcy5vblN0ZGVyciA9XG4gICAgICAocGhhc2U6IHN0cmluZywgZmlsdGVyPzogT3V0cHV0RmlsdGVyW10pID0+XG4gICAgICAoc3RkZXJyOiBzdHJpbmcgfCBVaW50OEFycmF5KSA9PlxuICAgICAgICBjcmVhdGVUZXJyYWZvcm1Mb2dIYW5kbGVyKHBoYXNlLCBmaWx0ZXIpKHN0ZGVyci50b1N0cmluZygpLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbml0KG9wdHM6IHtcbiAgICBuZWVkc1VwZ3JhZGU6IGJvb2xlYW47XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gICAgbWlncmF0ZVN0YXRlOiBib29sZWFuO1xuICAgIG5lZWRzTG9ja2ZpbGVVcGRhdGU6IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNldFVzZXJBZ2VudCgpO1xuXG4gICAgY29uc3QgYXJncyA9IFtcImluaXRcIl07XG4gICAgaWYgKG9wdHMubmVlZHNVcGdyYWRlKSB7XG4gICAgICBhcmdzLnB1c2goXCItdXBncmFkZVwiKTtcbiAgICB9XG4gICAgaWYgKG9wdHMubm9Db2xvcikge1xuICAgICAgYXJncy5wdXNoKFwiLW5vLWNvbG9yXCIpO1xuICAgIH1cbiAgICBpZiAob3B0cy5taWdyYXRlU3RhdGUpIHtcbiAgICAgIGFyZ3MucHVzaChcIi1taWdyYXRlLXN0YXRlXCIpO1xuICAgIH1cblxuICAgIGxldCBpbml0Q2FuTm90Q29udGludWUgPSAoX2VycjogYW55KSA9PiB7fTtcbiAgICBjb25zdCByZWplY3RzSWZJbml0Q2FuTm90Q29udGludWUgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaW5pdENhbk5vdENvbnRpbnVlID0gcmVqZWN0O1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc3Rkb3V0ID0gdGhpcy5vblN0ZG91dChcImluaXRcIik7XG4gICAgY29uc3QgeyBhY3Rpb25zLCBleGl0Q29kZSB9ID0gc3Bhd25JbnRlcmFjdGl2ZShcbiAgICAgIHtcbiAgICAgICAgZmlsZTogdGVycmFmb3JtQmluYXJ5TmFtZSxcbiAgICAgICAgYXJncyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGN3ZDogdGhpcy53b3JrZGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYgYXMgYW55LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgIHN0ZG91dChkYXRhKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEuaW5jbHVkZXMoXCJTaG91bGQgVGVycmFmb3JtIG1pZ3JhdGUgeW91ciBleGlzdGluZyBzdGF0ZT9cIikgfHxcbiAgICAgICAgICBkYXRhLmluY2x1ZGVzKFwiRG8geW91IHdhbnQgdG8gY29weSBleGlzdGluZyBzdGF0ZSB0byB0aGUgbmV3IGJhY2tlbmRcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gVE9ETzogVGhpcyBvbmx5IGhhcHBlbnMgd2hlbiB0ZXJyYWZvcm0gaXMgcGFzc2VkIHRoZSAtbWlncmF0ZS1zdGF0ZSBhbnl3YXksIHNvIHRoaXMgY2hlY2sgaXMgcmVkdW5kYW50XG4gICAgICAgICAgaWYgKG9wdHMubWlncmF0ZVN0YXRlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLndyaXRlTGluZShcInllc1wiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWN0aW9ucy5zdG9wKCk7XG4gICAgICAgICAgICBpbml0Q2FuTm90Q29udGludWUoXG4gICAgICAgICAgICAgIFwiUGxlYXNlIHBhc3MgdGhlIC0tbWlncmF0ZS1zdGF0ZSBmbGFnIHRvIG1pZ3JhdGUgeW91ciBzdGF0ZVwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLmFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB7XG4gICAgICBhY3Rpb25zLnN0b3AoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gZXhpdENvZGUudGhlbigoY29kZSkgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0ZXJyYWZvcm0gaW5pdCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHtjb2RlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGF3YWl0IFByb21pc2UucmFjZShbcHJvZ3Jlc3MsIHJlamVjdHNJZkluaXRDYW5Ob3RDb250aW51ZV0pO1xuXG4gICAgLy8gVE9ETzogdGhpcyBtaWdodCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBiZWNhdXNlIHdlIGRvbid0IGtub3cgaWYgd2UncmVcbiAgICAvLyBydW5uaW5nIGEgcmVtb3RlIHBsYW4gb3IgYSBsb2NhbCBvbmUgKHNvIHdlIHJ1biBpdCBhbHdheXMgZm9yIGFsbCBwbGF0Zm9ybXMpXG4gICAgLy8gd2hpbGUgd2UnZCBvbmx5IG5lZWQgaXQgZm9yIHJlbW90ZSBwbGFuc1xuICAgIGlmIChvcHRzLm5lZWRzTG9ja2ZpbGVVcGRhdGUpIHtcbiAgICAgIGF3YWl0IGV4ZWMoXG4gICAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICAgIFtcbiAgICAgICAgICBcInByb3ZpZGVyc1wiLFxuICAgICAgICAgIFwibG9ja1wiLFxuICAgICAgICAgIFwiLXBsYXRmb3JtPWxpbnV4X2FtZDY0XCIsXG4gICAgICAgICAgLi4uKG9wdHMubm9Db2xvciA/IFtcIi1uby1jb2xvclwiXSA6IFtdKSxcbiAgICAgICAgXSxcbiAgICAgICAge1xuICAgICAgICAgIGN3ZDogdGhpcy53b3JrZGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgc2lnbmFsOiB0aGlzLmFib3J0U2lnbmFsLFxuICAgICAgICAgIG5vQ29sb3I6IG9wdHMubm9Db2xvcixcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5vblN0ZG91dChcImluaXRcIiksXG4gICAgICAgIHRoaXMub25TdGRlcnIoXCJpbml0XCIpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBpc0Nsb3VkU3RhY2soKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFyc2VkU3RhY2sgPSB0ZXJyYWZvcm1Kc29uU2NoZW1hLnBhcnNlKFxuICAgICAgSlNPTi5wYXJzZSh0aGlzLnN0YWNrLmNvbnRlbnQpLFxuICAgICk7XG5cbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHBhcnNlZFN0YWNrLnRlcnJhZm9ybT8uYmFja2VuZD8ucmVtb3RlIHx8IHBhcnNlZFN0YWNrLnRlcnJhZm9ybT8uY2xvdWQsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhc0ltcG9ydHMoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFyc2VkU3RhY2sgPSB0ZXJyYWZvcm1Kc29uU2NoZW1hLnBhcnNlKFxuICAgICAgSlNPTi5wYXJzZSh0aGlzLnN0YWNrLmNvbnRlbnQpLFxuICAgICk7XG5cbiAgICByZXR1cm4gQm9vbGVhbihwYXJzZWRTdGFjay5pbXBvcnQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYW4ob3B0czoge1xuICAgIGRlc3Ryb3k6IGJvb2xlYW47XG4gICAgcmVmcmVzaE9ubHk/OiBib29sZWFuO1xuICAgIHBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAgIHZhcnM/OiBzdHJpbmdbXTtcbiAgICB2YXJGaWxlcz86IHN0cmluZ1tdO1xuICAgIG5vQ29sb3I/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qge1xuICAgICAgZGVzdHJveSA9IGZhbHNlLFxuICAgICAgcmVmcmVzaE9ubHkgPSBmYWxzZSxcbiAgICAgIHBhcmFsbGVsaXNtID0gLTEsXG4gICAgICB2YXJzID0gW10sXG4gICAgICB2YXJGaWxlcyA9IFtdLFxuICAgICAgbm9Db2xvciA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXCJwbGFuXCIsIFwiLWlucHV0PWZhbHNlXCJdO1xuXG4gICAgY29uc3QgZ2VuZXJhdGVkQ29uZmlnRmlsZSA9IHBhdGguam9pbihcbiAgICAgIHRoaXMud29ya2RpcixcbiAgICAgIEdFTkVSQVRFX0NPTkZJR19PVVRfRklMRSxcbiAgICApO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGdlbmVyYXRlZENvbmZpZ0ZpbGUpKSB7XG4gICAgICBmcy5yZW1vdmUoZ2VuZXJhdGVkQ29uZmlnRmlsZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0ltcG9ydHMpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgLWdlbmVyYXRlLWNvbmZpZy1vdXQ9JHtHRU5FUkFURV9DT05GSUdfT1VUX0ZJTEV9YCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0Nsb3VkU3RhY2spIHtcbiAgICAgIGNvbnN0IHBsYW5GaWxlID0gXCJwbGFuXCI7XG4gICAgICBvcHRpb25zLnB1c2goXCItb3V0XCIsIHBsYW5GaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoZGVzdHJveSkge1xuICAgICAgb3B0aW9ucy5wdXNoKFwiLWRlc3Ryb3lcIik7XG4gICAgfVxuICAgIGlmIChyZWZyZXNoT25seSkge1xuICAgICAgb3B0aW9ucy5wdXNoKFwiLXJlZnJlc2gtb25seVwiKTtcbiAgICB9XG4gICAgaWYgKHBhcmFsbGVsaXNtID4gLTEpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgLXBhcmFsbGVsaXNtPSR7cGFyYWxsZWxpc219YCk7XG4gICAgfVxuICAgIGlmIChub0NvbG9yKSB7XG4gICAgICBvcHRpb25zLnB1c2goXCItbm8tY29sb3JcIik7XG4gICAgfVxuXG4gICAgdmFycy5mb3JFYWNoKCh2KSA9PiBvcHRpb25zLnB1c2goYC12YXI9JHt2fWApKTtcbiAgICB2YXJGaWxlcy5mb3JFYWNoKCh2KSA9PiBvcHRpb25zLnB1c2goYC12YXItZmlsZT0ke3Z9YCkpO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEV4ZWN1dGluZyAke3RlcnJhZm9ybUJpbmFyeU5hbWV9ICR7b3B0aW9ucy5qb2luKFwiIFwiKX0gaW4gJHt0aGlzLndvcmtkaXJ9YCxcbiAgICApO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRVc2VyQWdlbnQoKTtcblxuICAgIGF3YWl0IGV4ZWMoXG4gICAgICB0ZXJyYWZvcm1CaW5hcnlOYW1lLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtkaXIsXG4gICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIHNpZ25hbDogdGhpcy5hYm9ydFNpZ25hbCxcbiAgICAgICAgbm9Db2xvcixcbiAgICAgIH0sXG4gICAgICB0aGlzLm9uU3Rkb3V0KFwicGxhblwiLCBbVmFyaWFibGVSZXF1aXJlZEZpbHRlcl0pLFxuICAgICAgdGhpcy5vblN0ZGVycihcInBsYW5cIiwgW1ZhcmlhYmxlUmVxdWlyZWRGaWx0ZXJdKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlcGxveShcbiAgICB7XG4gICAgICBhdXRvQXBwcm92ZSA9IGZhbHNlLFxuICAgICAgcmVmcmVzaE9ubHkgPSBmYWxzZSxcbiAgICAgIG5vQ29sb3IgPSBmYWxzZSxcbiAgICAgIHBhcmFsbGVsaXNtID0gLTEsXG4gICAgICBleHRyYU9wdGlvbnMgPSBbXSxcbiAgICAgIHZhcnMgPSBbXSxcbiAgICAgIHZhckZpbGVzID0gW10sXG4gICAgfSxcbiAgICBjYWxsYmFjazogKHN0YXRlOiBUZXJyYWZvcm1EZXBsb3lTdGF0ZSkgPT4gdm9pZCxcbiAgKTogUHJvbWlzZTx7IGNhbmNlbGxlZDogYm9vbGVhbiB9PiB7XG4gICAgYXdhaXQgdGhpcy5zZXRVc2VyQWdlbnQoKTtcbiAgICBjb25zdCBzZXJ2aWNlID0gY3JlYXRlQW5kU3RhcnREZXBsb3lTZXJ2aWNlKHtcbiAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICB3b3JrZGlyOiB0aGlzLndvcmtkaXIsXG4gICAgICByZWZyZXNoT25seSxcbiAgICAgIG5vQ29sb3IsXG4gICAgICBhdXRvQXBwcm92ZSxcbiAgICAgIHBhcmFsbGVsaXNtLFxuICAgICAgZXh0cmFPcHRpb25zLFxuICAgICAgdmFycyxcbiAgICAgIHZhckZpbGVzLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVNlcnZpY2UoXCJkZXBsb3lcIiwgc2VydmljZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlc3Ryb3koXG4gICAge1xuICAgICAgYXV0b0FwcHJvdmUgPSBmYWxzZSxcbiAgICAgIHBhcmFsbGVsaXNtID0gLTEsXG4gICAgICBub0NvbG9yID0gZmFsc2UsXG4gICAgICBleHRyYU9wdGlvbnMgPSBbXSxcbiAgICAgIHZhcnMgPSBbXSxcbiAgICAgIHZhckZpbGVzID0gW10sXG4gICAgfSxcbiAgICBjYWxsYmFjazogKHN0YXRlOiBUZXJyYWZvcm1EZXBsb3lTdGF0ZSkgPT4gdm9pZCxcbiAgKTogUHJvbWlzZTx7IGNhbmNlbGxlZDogYm9vbGVhbiB9PiB7XG4gICAgYXdhaXQgdGhpcy5zZXRVc2VyQWdlbnQoKTtcbiAgICBjb25zdCBzZXJ2aWNlID0gY3JlYXRlQW5kU3RhcnREZXN0cm95U2VydmljZSh7XG4gICAgICB0ZXJyYWZvcm1CaW5hcnlOYW1lLFxuICAgICAgd29ya2RpcjogdGhpcy53b3JrZGlyLFxuICAgICAgYXV0b0FwcHJvdmUsXG4gICAgICBwYXJhbGxlbGlzbSxcbiAgICAgIG5vQ29sb3IsXG4gICAgICBleHRyYU9wdGlvbnMsXG4gICAgICB2YXJzLFxuICAgICAgdmFyRmlsZXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlU2VydmljZShcImRlc3Ryb3lcIiwgc2VydmljZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTZXJ2aWNlKFxuICAgIHR5cGU6IFwiZGVwbG95XCIgfCBcImRlc3Ryb3lcIixcbiAgICBzZXJ2aWNlOlxuICAgICAgfCBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBbmRTdGFydERlcGxveVNlcnZpY2U+XG4gICAgICB8IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUFuZFN0YXJ0RGVzdHJveVNlcnZpY2U+LFxuICAgIGNhbGxiYWNrOiAoc3RhdGU6IFRlcnJhZm9ybURlcGxveVN0YXRlKSA9PiB2b2lkLFxuICApOiBQcm9taXNlPHsgY2FuY2VsbGVkOiBib29sZWFuIH0+IHtcbiAgICAvLyBzdG9wIHRlcnJhZm9ybSBhcHBseSBpZiBzaWduYWxlZCBhcyBzdWNoIGZyb20gdGhlIG91dHNpZGUgKGUuZy4gdmlhIGN0cmwrYylcbiAgICB0aGlzLmFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImFib3J0XCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHNlcnZpY2Uuc2VuZChcIlNUT1BcIik7XG4gICAgICB9LFxuICAgICAgeyBvbmNlOiB0cnVlIH0sXG4gICAgKTtcblxuICAgIC8vIHJlbGF5IGxvZ3MgdG8gc3Rkb3V0XG4gICAgc2VydmljZS5vbkV2ZW50KChldmVudCkgPT4ge1xuICAgICAgbG9nZ2VyLnRyYWNlKFxuICAgICAgICBgVGVycmFmb3JtIENMSSBzdGF0ZSBtYWNoaW5lIGV2ZW50OiAke0pTT04uc3RyaW5naWZ5KGV2ZW50KX1gLFxuICAgICAgKTtcbiAgICAgIGlmIChpc0RlcGxveUV2ZW50KGV2ZW50LCBcIk9VVFBVVF9SRUNFSVZFRFwiKSlcbiAgICAgICAgdGhpcy5vblN0ZG91dCh0eXBlKShldmVudC5vdXRwdXQpO1xuICAgICAgZWxzZSBpZiAoaXNEZXBsb3lFdmVudChldmVudCwgXCJBUFBST1ZFRF9FWFRFUk5BTExZXCIpKVxuICAgICAgICBjYWxsYmFjayh7IHR5cGU6IFwiZXh0ZXJuYWwgYXBwcm92YWwgcmVwbHlcIiwgYXBwcm92ZWQ6IHRydWUgfSk7XG4gICAgICBlbHNlIGlmIChpc0RlcGxveUV2ZW50KGV2ZW50LCBcIlJFSkVDVEVEX0VYVEVSTkFMTFlcIikpXG4gICAgICAgIGNhbGxiYWNrKHsgdHlwZTogXCJleHRlcm5hbCBhcHByb3ZhbCByZXBseVwiLCBhcHByb3ZlZDogZmFsc2UgfSk7XG4gICAgICBlbHNlIGlmIChpc0RlcGxveUV2ZW50KGV2ZW50LCBcIk9WRVJSSURERU5fRVhURVJOQUxMWVwiKSlcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwiZXh0ZXJuYWwgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIixcbiAgICAgICAgICBvdmVycmlkZGVuOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIGVsc2UgaWYgKGlzRGVwbG95RXZlbnQoZXZlbnQsIFwiT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWVwiKSlcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwiZXh0ZXJuYWwgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIixcbiAgICAgICAgICBvdmVycmlkZGVuOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJldmlvdXNTdGF0ZTogRGVwbG95U3RhdGVbXCJ2YWx1ZVwiXSA9IFwiaWRsZVwiO1xuXG4gICAgc2VydmljZS5vblRyYW5zaXRpb24oKHN0YXRlKSA9PiB7XG4gICAgICAvLyBvbmx5IHNlbmQgdXBkYXRlcyBvbiBhY3R1YWwgc3RhdGUgY2hhbmdlXG4gICAgICAvLyBvblRyYW5zaXRpb24gaXMgY2FsbGVkIGV2ZW4gaWYgdGhlIHN0YXRlIGRpZG4ndCBjaGFuZ2UgYnV0IG9ubHkgYW4gZXZlbnQgaGFwcGVuZWRcbiAgICAgIGlmIChzdGF0ZS5tYXRjaGVzKHByZXZpb3VzU3RhdGUgYXMgRGVwbG95U3RhdGVbXCJ2YWx1ZVwiXSkpIHJldHVybjtcblxuICAgICAgbG9nZ2VyLnRyYWNlKFxuICAgICAgICBgVGVycmFmb3JtIENMSSBzdGF0ZSBtYWNoaW5lIHN0YXRlIHRyYW5zaXRpb246ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJldmlvdXNTdGF0ZSxcbiAgICAgICAgKX0gPT4gJHtKU09OLnN0cmluZ2lmeShzdGF0ZS52YWx1ZSl9YCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChzdGF0ZS5tYXRjaGVzKHsgcnVubmluZzogXCJhd2FpdGluZ19hcHByb3ZhbFwiIH0pKSB7XG4gICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICB0eXBlOiBcIndhaXRpbmcgZm9yIGFwcHJvdmFsXCIsXG4gICAgICAgICAgYXBwcm92ZTogKCkgPT4gc2VydmljZS5zZW5kKFwiQVBQUk9WRVwiKSxcbiAgICAgICAgICByZWplY3Q6ICgpID0+IHNlcnZpY2Uuc2VuZChcIlJFSkVDVFwiKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLm1hdGNoZXMoeyBydW5uaW5nOiBcImF3YWl0aW5nX3NlbnRpbmVsX292ZXJyaWRlXCIgfSkpIHtcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIixcbiAgICAgICAgICBvdmVycmlkZTogKCkgPT4gc2VydmljZS5zZW5kKFwiT1ZFUlJJREVcIiksXG4gICAgICAgICAgcmVqZWN0OiAoKSA9PiBzZXJ2aWNlLnNlbmQoXCJSRUpFQ1RfT1ZFUlJJREVcIiksXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5tYXRjaGVzKHsgcnVubmluZzogXCJwcm9jZXNzaW5nXCIgfSkpIHtcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwicnVubmluZ1wiLFxuICAgICAgICAgIGNhbmNlbGxlZDogQm9vbGVhbihzdGF0ZS5jb250ZXh0LmNhbmNlbGxlZCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcHJldmlvdXNTdGF0ZSA9IHN0YXRlLnZhbHVlIGFzIERlcGxveVN0YXRlW1widmFsdWVcIl07XG4gICAgfSk7XG4gICAgc2VydmljZS5zdGFydCgpO1xuICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgd2FpdEZvcihzZXJ2aWNlLCAoc3RhdGUpID0+ICEhc3RhdGUuZG9uZSwge1xuICAgICAgdGltZW91dDogSW5maW5pdHksXG4gICAgfSk7XG5cbiAgICBsb2dnZXIudHJhY2UoXG4gICAgICBgSW52b2tpbmcgVGVycmFmb3JtIENMSSBmb3IgJHt0eXBlfSBkb25lIChzdGF0ZSBtYWNoaW5lIHJlYWNoZWQgZmluYWwgc3RhdGUpLiBMYXN0IGV2ZW50OiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBzdGF0ZS5ldmVudCxcbiAgICAgICl9LiBDb250ZXh0OiAke0pTT04uc3RyaW5naWZ5KHN0YXRlLmNvbnRleHQpfWAsXG4gICAgKTtcblxuICAgIC8vIGV4YW1wbGUgZXZlbnRzOiB7IHR5cGU6ICdFWElURUQnLCBleGl0Q29kZTogMCB9LCB7IHR5cGU6ICdFWFRFUk5BTF9SRUpFQ1QnIH1cbiAgICBpZiAoXG4gICAgICBzdGF0ZS5ldmVudC50eXBlID09PSBcIkVYSVRFRFwiICYmXG4gICAgICBzdGF0ZS5ldmVudC5leGl0Q29kZSAhPT0gMCAmJlxuICAgICAgIXN0YXRlLmNvbnRleHQuY2FuY2VsbGVkIC8vIGRvbid0IGZhaWwgaWYgd2UgY2FuY2VsbGVkIHRoZSBydW5cbiAgICApIHtcbiAgICAgIHRocm93IGBJbnZva2luZyBUZXJyYWZvcm0gQ0xJIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAke3N0YXRlLmV2ZW50LmV4aXRDb2RlfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY2FuY2VsbGVkOiBCb29sZWFuKHN0YXRlLmNvbnRleHQuY2FuY2VsbGVkKSB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4ZWMoXG4gICAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICAgIFtcIi12XCJdLFxuICAgICAgICB7XG4gICAgICAgICAgY3dkOiB0aGlzLndvcmtkaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBzaWduYWw6IHRoaXMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgbm9Db2xvcjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5vblN0ZG91dChcInZlcnNpb25cIiksXG4gICAgICAgIHRoaXMub25TdGRlcnIoXCJ2ZXJzaW9uXCIpLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUZXJyYWZvcm0gQ0xJIG5vdCBwcmVzZW50IC0gUGxlYXNlIGluc3RhbGwgYSBjdXJyZW50IHZlcnNpb24gaHR0cHM6Ly9sZWFybi5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9nZXR0aW5nLXN0YXJ0ZWQvaW5zdGFsbC5odG1sXCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvdXRwdXQoKTogUHJvbWlzZTx7IFtrZXk6IHN0cmluZ106IFRlcnJhZm9ybU91dHB1dCB9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZXhlYyhcbiAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICBbXCJvdXRwdXRcIiwgXCItanNvblwiXSxcbiAgICAgIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtkaXIsXG4gICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIHNpZ25hbDogdGhpcy5hYm9ydFNpZ25hbCxcbiAgICAgICAgbm9Db2xvcjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGxvZyB0aGUgb3V0cHV0IGhlcmUgc2luY2Ugd2UgdXNlIGl0IGxhdGVyIG9uXG4gICAgICAoKSA9PiB7fSxcbiAgICAgIHRoaXMub25TdGRlcnIoXCJvdXRwdXRcIiksXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShvdXRwdXQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IEVycm9ycy5FeHRlcm5hbChcbiAgICAgICAgYEZhaWxlZCB0byBwYXJzZSB0ZXJyYWZvcm0gb3V0cHV0OiAke2V9LiBUaGUgb3V0cHV0IHdhcyAnJHtvdXRwdXR9J2AsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRVc2VyQWdlbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUmVhZCB0aGUgY2RrdGYgdmVyc2lvbiBmcm9tIHRoZSAnY2RrLnRmLmpzb24nIGZpbGVcbiAgICAvLyBhbmQgc2V0IHRoZSB1c2VyIGFnZW50LlxuICAgIGNvbnN0IHZlcnNpb24gPSBhd2FpdCByZWFkQ0RLVEZWZXJzaW9uKHRoaXMud29ya2Rpcik7XG4gICAgaWYgKHZlcnNpb24gIT0gXCJcIikge1xuICAgICAgcHJvY2Vzcy5lbnYuVEZfQVBQRU5EX1VTRVJfQUdFTlQgPVxuICAgICAgICBcImNka3RuL1wiICtcbiAgICAgICAgdmVyc2lvbiArXG4gICAgICAgIFwiICgraHR0cHM6Ly9naXRodWIuY29tL29wZW4tY29uc3RydWN0cy9jZGstdGVycmFpbilcIjtcbiAgICB9XG4gIH1cblxuICAvLyBXZSBkb24ndCBuZWVkIHRvIGNsZWFuIGFueXRoaW5nIHVwIGZvciBhIHJ1bm5pbmcgZXhlY3V0aW9uIGluIHRoZSBDTEkgc2luY2UgdGhlcmUgaXMgbm8gbGVmdC1vdmVyIHN0YXRlIGluIGNvbnRyYXN0IHRvIGFuIG9wZW4gVGVycmFmb3JtIENsb3VkIHJ1blxuICBwdWJsaWMgYXN5bmMgYWJvcnQoKSB7XG4gICAgcmV0dXJuO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cnlSZWFkR2VuZXJhdGVkQ29uZmlndXJhdGlvbkZpbGUoXG4gIHdvcmtpbmdEaXI6IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICBjb25zdCBnZW5lcmF0ZWRDb25maWdQYXRoID0gcGF0aC5qb2luKHdvcmtpbmdEaXIsIEdFTkVSQVRFX0NPTkZJR19PVVRfRklMRSk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhnZW5lcmF0ZWRDb25maWdQYXRoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoZ2VuZXJhdGVkQ29uZmlnUGF0aCwgXCJ1dGYtOFwiKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyeVJlbW92ZUdlbmVyYXRlZENvbmZpZ3VyYXRpb25GaWxlKHdvcmtpbmdEaXI6IHN0cmluZykge1xuICBjb25zdCBnZW5lcmF0ZWRDb25maWdQYXRoID0gcGF0aC5qb2luKHdvcmtpbmdEaXIsIEdFTkVSQVRFX0NPTkZJR19PVVRfRklMRSk7XG4gIGlmIChmcy5leGlzdHNTeW5jKGdlbmVyYXRlZENvbmZpZ1BhdGgpKSB7XG4gICAgZnMudW5saW5rU3luYyhnZW5lcmF0ZWRDb25maWdQYXRoKTtcbiAgfVxufVxuIl19
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWNsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbW9kZWxzL3RlcnJhZm9ybS1jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDREQUFtQztBQUNuQyw0Q0FNd0I7QUFDeEIsMkNBTXFCO0FBRXJCLHFEQU8wQjtBQUMxQixtQ0FBaUM7QUFDakMsc0NBQTRDO0FBQzVDLHNEQUF3RDtBQUN4RCwrREFBeUQ7QUFDekQsZ0RBQXdCO0FBQ3hCLDZDQUErQjtBQUUvQixNQUFNLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO0FBRTFELE1BQWEsZ0JBQ1gsU0FBUSxpQ0FBcUI7SUFHN0IsWUFDa0IsUUFBZ0IsRUFDaEIsSUFBNEI7UUFFNUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsZ0JBQWdCLEVBQUUsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGNBQWMsQ0FBQyxDQUFDO1FBSDlDLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBd0I7SUFHOUMsQ0FBQztDQUNGO0FBVkQsNENBVUM7QUFFRCxNQUFlLG9CQUFvQjtDQUdsQztBQUdELDRGQUE0RjtBQUM1RixnR0FBZ0c7QUFDaEcsTUFBTSxzQkFBdUIsU0FBUSxvQkFBb0I7SUFDdkQscURBQXFEO0lBQ3JELElBQUk7SUFDSiwwQ0FBMEM7SUFDMUMsSUFBSTtJQUNKLDJDQUEyQztJQUMzQywrQkFBK0I7SUFDL0IsSUFBSTtJQUNKLGdGQUFnRjtJQUNoRixnRkFBZ0Y7SUFDaEYsa0JBQWtCO0lBQ1gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFhO1FBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQVMsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUU5QixPQUFPLENB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IEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHN0cmlwQW5zaSBmcm9tIFwic3RyaXAtYW5zaVwiO1xuaW1wb3J0IHtcbiAgRXJyb3JzLFxuICBleGVjLFxuICBsb2dnZXIsXG4gIHJlYWRDREtURlZlcnNpb24sXG4gIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHtcbiAgVGVycmFmb3JtLFxuICBUZXJyYWZvcm1QbGFuLFxuICBUZXJyYWZvcm1PdXRwdXQsXG4gIEFic3RyYWN0VGVycmFmb3JtUGxhbixcbiAgVGVycmFmb3JtRGVwbG95U3RhdGUsXG59IGZyb20gXCIuL3RlcnJhZm9ybVwiO1xuaW1wb3J0IHsgU3ludGhlc2l6ZWRTdGFjayB9IGZyb20gXCIuLi9zeW50aC1zdGFja1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlQW5kU3RhcnREZXBsb3lTZXJ2aWNlLFxuICBjcmVhdGVBbmRTdGFydERlc3Ryb3lTZXJ2aWNlLFxuICBEZXBsb3lBY3RvcixcbiAgRGVwbG95SW5zcGVjdGlvbkhhbmRsZXIsXG4gIERlcGxveVNuYXBzaG90LFxuICBpc0RlcGxveUV2ZW50LFxufSBmcm9tIFwiLi9kZXBsb3ktbWFjaGluZVwiO1xuaW1wb3J0IHsgd2FpdEZvciB9IGZyb20gXCJ4c3RhdGVcIjtcbmltcG9ydCB7IG1pc3NpbmdWYXJpYWJsZSB9IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCB7IHRlcnJhZm9ybUpzb25TY2hlbWEgfSBmcm9tIFwiLi4vdGVycmFmb3JtLWpzb25cIjtcbmltcG9ydCB7IHNwYXduSW50ZXJhY3RpdmUgfSBmcm9tIFwiLi9pbnRlcmFjdGl2ZS1wcm9jZXNzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5cbmNvbnN0IEdFTkVSQVRFX0NPTkZJR19PVVRfRklMRSA9IFwiZ2VuZXJhdGVkX3Jlc291cmNlcy50ZlwiO1xuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtQ2xpUGxhblxuICBleHRlbmRzIEFic3RyYWN0VGVycmFmb3JtUGxhblxuICBpbXBsZW1lbnRzIFRlcnJhZm9ybVBsYW5cbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHBsYW5GaWxlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHBsYW46IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gICkge1xuICAgIHN1cGVyKHBsYW5GaWxlLCBwbGFuPy5yZXNvdXJjZV9jaGFuZ2VzLCBwbGFuPy5vdXRwdXRfY2hhbmdlcyk7XG4gIH1cbn1cblxuYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RPdXRwdXRGaWx0ZXIge1xuICBwdWJsaWMgc3RhdGljIGNvbmRpdGlvbjogKGxpbmU6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgcHVibGljIHN0YXRpYyB0cmFuc2Zvcm06IChsaW5lOiBzdHJpbmcpID0+IHN0cmluZztcbn1cbmV4cG9ydCB0eXBlIE91dHB1dEZpbHRlciA9IHR5cGVvZiBBYnN0cmFjdE91dHB1dEZpbHRlcjtcblxuLy8gVGhlIHBsYW4gbWlnaHQgZXJyb3IgaWYgdGhlcmUgaXMgYSB2YXJpYWJsZSBtaXNzaW5nLCBidXQgdGhlIGVycm9yIG1lc3NhZ2UgaGludHMgdGhlIHVzZXJcbi8vIGluIGEgd3JvbmcgZGlyZWN0aW9uLiBXZSB0aGVyZWZvcmUgY2F0Y2ggdGhlIGVycm9yIGFuZCByZXRocm93IGl0IHdpdGggYSBtb3JlIGhlbHBmdWwgbWVzc2FnZVxuY2xhc3MgVmFyaWFibGVSZXF1aXJlZEZpbHRlciBleHRlbmRzIEFic3RyYWN0T3V0cHV0RmlsdGVyIHtcbiAgLy8gRXhhbXBsZSBmb3IgXCJObyB2YWx1ZSBmb3IgcmVxdWlyZWQgdmFyaWFibGVcIiBlcnJvclxuICAvLyDilbdcbiAgLy8g4pSCIEVycm9yOiBObyB2YWx1ZSBmb3IgcmVxdWlyZWQgdmFyaWFibGVcbiAgLy8g4pSCXG4gIC8vIOKUgiAgIG9uIGNkay50Zi5qc29uIGxpbmUgMzEsIGluIHZhcmlhYmxlOlxuICAvLyDilIIgICAzMTogICAgIFwid2l0aC1kYXNoZXNcIjoge1xuICAvLyDilIJcbiAgLy8g4pSCIFRoZSByb290IG1vZHVsZSBpbnB1dCB2YXJpYWJsZSBcIndpdGgtZGFzaGVzXCIgaXMgbm90IHNldCwgYW5kIGhhcyBubyBkZWZhdWx0XG4gIC8vIOKUgiB2YWx1ZS4gVXNlIGEgLXZhciBvciAtdmFyLWZpbGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHRvIHByb3ZpZGUgYSB2YWx1ZSBmb3JcbiAgLy8g4pSCIHRoaXMgdmFyaWFibGVcbiAgcHVibGljIHN0YXRpYyBjb25kaXRpb24oaW5wdXQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmUgPSBzdHJpcEFuc2koaW5wdXQpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGxpbmUuaW5jbHVkZXMoXCJFcnJvcjogTm8gdmFsdWUgZm9yIHJlcXVpcmVkIHZhcmlhYmxlXCIpICYmXG4gICAgICBsaW5lLmluY2x1ZGVzKFwiVGhlIHJvb3QgbW9kdWxlIGlucHV0IHZhcmlhYmxlXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHRyYW5zZm9ybShsaW5lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdGFydE1hcmtlciA9ICdUaGUgcm9vdCBtb2R1bGUgaW5wdXQgdmFyaWFibGUgXCInO1xuICAgIGNvbnN0IHZhcmlhYmxlTmFtZSA9IGxpbmUuc3Vic3RyaW5nKFxuICAgICAgbGluZS5pbmRleE9mKHN0YXJ0TWFya2VyKSArIHN0YXJ0TWFya2VyLmxlbmd0aCxcbiAgICAgIGxpbmUuaW5kZXhPZignXCIgaXMgbm90IHNldCcpLFxuICAgICk7XG5cbiAgICByZXR1cm4gbWlzc2luZ1ZhcmlhYmxlKHZhcmlhYmxlTmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlcnJhZm9ybUNsaSBpbXBsZW1lbnRzIFRlcnJhZm9ybSB7XG4gIHB1YmxpYyByZWFkb25seSB3b3JrZGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25TdGRvdXQ6IChcbiAgICBzdGF0ZU5hbWU6IHN0cmluZyxcbiAgICBmaWx0ZXI/OiBPdXRwdXRGaWx0ZXJbXSxcbiAgKSA9PiAoc3Rkb3V0OiBCdWZmZXIgfCBzdHJpbmcpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25TdGRlcnI6IChcbiAgICBzdGF0ZU5hbWU6IHN0cmluZyxcbiAgICBmaWx0ZXI/OiBPdXRwdXRGaWx0ZXJbXSxcbiAgKSA9PiAoc3RkZXJyOiBzdHJpbmcgfCBVaW50OEFycmF5KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsLFxuICAgIHB1YmxpYyByZWFkb25seSBzdGFjazogU3ludGhlc2l6ZWRTdGFjayxcbiAgICBjcmVhdGVUZXJyYWZvcm1Mb2dIYW5kbGVyID0gKF9waGFzZTogc3RyaW5nLCBfZmlsdGVyPzogT3V0cHV0RmlsdGVyW10pID0+XG4gICAgICAoX3N0ZG91dDogc3RyaW5nLCBfaXNFcnIgPSBmYWxzZSkgPT4ge30sXG4gICkge1xuICAgIHRoaXMud29ya2RpciA9IHN0YWNrLndvcmtpbmdEaXJlY3Rvcnk7XG4gICAgdGhpcy5vblN0ZG91dCA9XG4gICAgICAocGhhc2U6IHN0cmluZywgZmlsdGVyPzogT3V0cHV0RmlsdGVyW10pID0+IChzdGRvdXQ6IEJ1ZmZlciB8IHN0cmluZykgPT5cbiAgICAgICAgY3JlYXRlVGVycmFmb3JtTG9nSGFuZGxlcihcbiAgICAgICAgICBwaGFzZSxcbiAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICkoQnVmZmVyLmlzQnVmZmVyKHN0ZG91dCkgPyBzdGRvdXQudG9TdHJpbmcoKSA6IHN0ZG91dCk7XG4gICAgdGhpcy5vblN0ZGVyciA9XG4gICAgICAocGhhc2U6IHN0cmluZywgZmlsdGVyPzogT3V0cHV0RmlsdGVyW10pID0+XG4gICAgICAoc3RkZXJyOiBzdHJpbmcgfCBVaW50OEFycmF5KSA9PlxuICAgICAgICBjcmVhdGVUZXJyYWZvcm1Mb2dIYW5kbGVyKHBoYXNlLCBmaWx0ZXIpKHN0ZGVyci50b1N0cmluZygpLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbml0KG9wdHM6IHtcbiAgICBuZWVkc1VwZ3JhZGU6IGJvb2xlYW47XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gICAgbWlncmF0ZVN0YXRlOiBib29sZWFuO1xuICAgIG5lZWRzTG9ja2ZpbGVVcGRhdGU6IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNldFVzZXJBZ2VudCgpO1xuXG4gICAgY29uc3QgYXJncyA9IFtcImluaXRcIl07XG4gICAgaWYgKG9wdHMubmVlZHNVcGdyYWRlKSB7XG4gICAgICBhcmdzLnB1c2goXCItdXBncmFkZVwiKTtcbiAgICB9XG4gICAgaWYgKG9wdHMubm9Db2xvcikge1xuICAgICAgYXJncy5wdXNoKFwiLW5vLWNvbG9yXCIpO1xuICAgIH1cbiAgICBpZiAob3B0cy5taWdyYXRlU3RhdGUpIHtcbiAgICAgIGFyZ3MucHVzaChcIi1taWdyYXRlLXN0YXRlXCIpO1xuICAgIH1cblxuICAgIGxldCBpbml0Q2FuTm90Q29udGludWUgPSAoX2VycjogYW55KSA9PiB7fTtcbiAgICBjb25zdCByZWplY3RzSWZJbml0Q2FuTm90Q29udGludWUgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaW5pdENhbk5vdENvbnRpbnVlID0gcmVqZWN0O1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc3Rkb3V0ID0gdGhpcy5vblN0ZG91dChcImluaXRcIik7XG4gICAgY29uc3QgeyBhY3Rpb25zLCBleGl0Q29kZSB9ID0gc3Bhd25JbnRlcmFjdGl2ZShcbiAgICAgIHtcbiAgICAgICAgZmlsZTogdGVycmFmb3JtQmluYXJ5TmFtZSxcbiAgICAgICAgYXJncyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGN3ZDogdGhpcy53b3JrZGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYgYXMgYW55LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgIHN0ZG91dChkYXRhKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEuaW5jbHVkZXMoXCJTaG91bGQgVGVycmFmb3JtIG1pZ3JhdGUgeW91ciBleGlzdGluZyBzdGF0ZT9cIikgfHxcbiAgICAgICAgICBkYXRhLmluY2x1ZGVzKFwiRG8geW91IHdhbnQgdG8gY29weSBleGlzdGluZyBzdGF0ZSB0byB0aGUgbmV3IGJhY2tlbmRcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gVE9ETzogVGhpcyBvbmx5IGhhcHBlbnMgd2hlbiB0ZXJyYWZvcm0gaXMgcGFzc2VkIHRoZSAtbWlncmF0ZS1zdGF0ZSBhbnl3YXksIHNvIHRoaXMgY2hlY2sgaXMgcmVkdW5kYW50XG4gICAgICAgICAgaWYgKG9wdHMubWlncmF0ZVN0YXRlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLndyaXRlTGluZShcInllc1wiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWN0aW9ucy5zdG9wKCk7XG4gICAgICAgICAgICBpbml0Q2FuTm90Q29udGludWUoXG4gICAgICAgICAgICAgIFwiUGxlYXNlIHBhc3MgdGhlIC0tbWlncmF0ZS1zdGF0ZSBmbGFnIHRvIG1pZ3JhdGUgeW91ciBzdGF0ZVwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLmFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB7XG4gICAgICBhY3Rpb25zLnN0b3AoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gZXhpdENvZGUudGhlbigoY29kZSkgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0ZXJyYWZvcm0gaW5pdCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHtjb2RlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGF3YWl0IFByb21pc2UucmFjZShbcHJvZ3Jlc3MsIHJlamVjdHNJZkluaXRDYW5Ob3RDb250aW51ZV0pO1xuXG4gICAgLy8gVE9ETzogdGhpcyBtaWdodCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBiZWNhdXNlIHdlIGRvbid0IGtub3cgaWYgd2UncmVcbiAgICAvLyBydW5uaW5nIGEgcmVtb3RlIHBsYW4gb3IgYSBsb2NhbCBvbmUgKHNvIHdlIHJ1biBpdCBhbHdheXMgZm9yIGFsbCBwbGF0Zm9ybXMpXG4gICAgLy8gd2hpbGUgd2UnZCBvbmx5IG5lZWQgaXQgZm9yIHJlbW90ZSBwbGFuc1xuICAgIGlmIChvcHRzLm5lZWRzTG9ja2ZpbGVVcGRhdGUpIHtcbiAgICAgIGF3YWl0IGV4ZWMoXG4gICAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICAgIFtcbiAgICAgICAgICBcInByb3ZpZGVyc1wiLFxuICAgICAgICAgIFwibG9ja1wiLFxuICAgICAgICAgIFwiLXBsYXRmb3JtPWxpbnV4X2FtZDY0XCIsXG4gICAgICAgICAgLi4uKG9wdHMubm9Db2xvciA/IFtcIi1uby1jb2xvclwiXSA6IFtdKSxcbiAgICAgICAgXSxcbiAgICAgICAge1xuICAgICAgICAgIGN3ZDogdGhpcy53b3JrZGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgc2lnbmFsOiB0aGlzLmFib3J0U2lnbmFsLFxuICAgICAgICAgIG5vQ29sb3I6IG9wdHMubm9Db2xvcixcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5vblN0ZG91dChcImluaXRcIiksXG4gICAgICAgIHRoaXMub25TdGRlcnIoXCJpbml0XCIpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBpc0Nsb3VkU3RhY2soKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFyc2VkU3RhY2sgPSB0ZXJyYWZvcm1Kc29uU2NoZW1hLnBhcnNlKFxuICAgICAgSlNPTi5wYXJzZSh0aGlzLnN0YWNrLmNvbnRlbnQpLFxuICAgICk7XG5cbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHBhcnNlZFN0YWNrLnRlcnJhZm9ybT8uYmFja2VuZD8ucmVtb3RlIHx8IHBhcnNlZFN0YWNrLnRlcnJhZm9ybT8uY2xvdWQsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhc0ltcG9ydHMoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFyc2VkU3RhY2sgPSB0ZXJyYWZvcm1Kc29uU2NoZW1hLnBhcnNlKFxuICAgICAgSlNPTi5wYXJzZSh0aGlzLnN0YWNrLmNvbnRlbnQpLFxuICAgICk7XG5cbiAgICByZXR1cm4gQm9vbGVhbihwYXJzZWRTdGFjay5pbXBvcnQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYW4ob3B0czoge1xuICAgIGRlc3Ryb3k6IGJvb2xlYW47XG4gICAgcmVmcmVzaE9ubHk/OiBib29sZWFuO1xuICAgIHBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAgIHZhcnM/OiBzdHJpbmdbXTtcbiAgICB2YXJGaWxlcz86IHN0cmluZ1tdO1xuICAgIG5vQ29sb3I/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qge1xuICAgICAgZGVzdHJveSA9IGZhbHNlLFxuICAgICAgcmVmcmVzaE9ubHkgPSBmYWxzZSxcbiAgICAgIHBhcmFsbGVsaXNtID0gLTEsXG4gICAgICB2YXJzID0gW10sXG4gICAgICB2YXJGaWxlcyA9IFtdLFxuICAgICAgbm9Db2xvciA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXCJwbGFuXCIsIFwiLWlucHV0PWZhbHNlXCJdO1xuXG4gICAgY29uc3QgZ2VuZXJhdGVkQ29uZmlnRmlsZSA9IHBhdGguam9pbihcbiAgICAgIHRoaXMud29ya2RpcixcbiAgICAgIEdFTkVSQVRFX0NPTkZJR19PVVRfRklMRSxcbiAgICApO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGdlbmVyYXRlZENvbmZpZ0ZpbGUpKSB7XG4gICAgICBmcy5yZW1vdmUoZ2VuZXJhdGVkQ29uZmlnRmlsZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0ltcG9ydHMpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgLWdlbmVyYXRlLWNvbmZpZy1vdXQ9JHtHRU5FUkFURV9DT05GSUdfT1VUX0ZJTEV9YCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0Nsb3VkU3RhY2spIHtcbiAgICAgIGNvbnN0IHBsYW5GaWxlID0gXCJwbGFuXCI7XG4gICAgICBvcHRpb25zLnB1c2goXCItb3V0XCIsIHBsYW5GaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoZGVzdHJveSkge1xuICAgICAgb3B0aW9ucy5wdXNoKFwiLWRlc3Ryb3lcIik7XG4gICAgfVxuICAgIGlmIChyZWZyZXNoT25seSkge1xuICAgICAgb3B0aW9ucy5wdXNoKFwiLXJlZnJlc2gtb25seVwiKTtcbiAgICB9XG4gICAgaWYgKHBhcmFsbGVsaXNtID4gLTEpIHtcbiAgICAgIG9wdGlvbnMucHVzaChgLXBhcmFsbGVsaXNtPSR7cGFyYWxsZWxpc219YCk7XG4gICAgfVxuICAgIGlmIChub0NvbG9yKSB7XG4gICAgICBvcHRpb25zLnB1c2goXCItbm8tY29sb3JcIik7XG4gICAgfVxuXG4gICAgdmFycy5mb3JFYWNoKCh2KSA9PiBvcHRpb25zLnB1c2goYC12YXI9JHt2fWApKTtcbiAgICB2YXJGaWxlcy5mb3JFYWNoKCh2KSA9PiBvcHRpb25zLnB1c2goYC12YXItZmlsZT0ke3Z9YCkpO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEV4ZWN1dGluZyAke3RlcnJhZm9ybUJpbmFyeU5hbWV9ICR7b3B0aW9ucy5qb2luKFwiIFwiKX0gaW4gJHt0aGlzLndvcmtkaXJ9YCxcbiAgICApO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRVc2VyQWdlbnQoKTtcblxuICAgIGF3YWl0IGV4ZWMoXG4gICAgICB0ZXJyYWZvcm1CaW5hcnlOYW1lLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtkaXIsXG4gICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIHNpZ25hbDogdGhpcy5hYm9ydFNpZ25hbCxcbiAgICAgICAgbm9Db2xvcixcbiAgICAgIH0sXG4gICAgICB0aGlzLm9uU3Rkb3V0KFwicGxhblwiLCBbVmFyaWFibGVSZXF1aXJlZEZpbHRlcl0pLFxuICAgICAgdGhpcy5vblN0ZGVycihcInBsYW5cIiwgW1ZhcmlhYmxlUmVxdWlyZWRGaWx0ZXJdKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlcGxveShcbiAgICB7XG4gICAgICBhdXRvQXBwcm92ZSA9IGZhbHNlLFxuICAgICAgcmVmcmVzaE9ubHkgPSBmYWxzZSxcbiAgICAgIG5vQ29sb3IgPSBmYWxzZSxcbiAgICAgIHBhcmFsbGVsaXNtID0gLTEsXG4gICAgICBleHRyYU9wdGlvbnMgPSBbXSxcbiAgICAgIHZhcnMgPSBbXSxcbiAgICAgIHZhckZpbGVzID0gW10sXG4gICAgfSxcbiAgICBjYWxsYmFjazogKHN0YXRlOiBUZXJyYWZvcm1EZXBsb3lTdGF0ZSkgPT4gdm9pZCxcbiAgKTogUHJvbWlzZTx7IGNhbmNlbGxlZDogYm9vbGVhbiB9PiB7XG4gICAgYXdhaXQgdGhpcy5zZXRVc2VyQWdlbnQoKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVTZXJ2aWNlKFwiZGVwbG95XCIsIGNhbGxiYWNrLCAoaW5zcGVjdCkgPT5cbiAgICAgIGNyZWF0ZUFuZFN0YXJ0RGVwbG95U2VydmljZShcbiAgICAgICAge1xuICAgICAgICAgIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gICAgICAgICAgd29ya2RpcjogdGhpcy53b3JrZGlyLFxuICAgICAgICAgIHJlZnJlc2hPbmx5LFxuICAgICAgICAgIG5vQ29sb3IsXG4gICAgICAgICAgYXV0b0FwcHJvdmUsXG4gICAgICAgICAgcGFyYWxsZWxpc20sXG4gICAgICAgICAgZXh0cmFPcHRpb25zLFxuICAgICAgICAgIHZhcnMsXG4gICAgICAgICAgdmFyRmlsZXMsXG4gICAgICAgIH0sXG4gICAgICAgIGluc3BlY3QsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVzdHJveShcbiAgICB7XG4gICAgICBhdXRvQXBwcm92ZSA9IGZhbHNlLFxuICAgICAgcGFyYWxsZWxpc20gPSAtMSxcbiAgICAgIG5vQ29sb3IgPSBmYWxzZSxcbiAgICAgIGV4dHJhT3B0aW9ucyA9IFtdLFxuICAgICAgdmFycyA9IFtdLFxuICAgICAgdmFyRmlsZXMgPSBbXSxcbiAgICB9LFxuICAgIGNhbGxiYWNrOiAoc3RhdGU6IFRlcnJhZm9ybURlcGxveVN0YXRlKSA9PiB2b2lkLFxuICApOiBQcm9taXNlPHsgY2FuY2VsbGVkOiBib29sZWFuIH0+IHtcbiAgICBhd2FpdCB0aGlzLnNldFVzZXJBZ2VudCgpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVNlcnZpY2UoXCJkZXN0cm95XCIsIGNhbGxiYWNrLCAoaW5zcGVjdCkgPT5cbiAgICAgIGNyZWF0ZUFuZFN0YXJ0RGVzdHJveVNlcnZpY2UoXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXJyYWZvcm1CaW5hcnlOYW1lLFxuICAgICAgICAgIHdvcmtkaXI6IHRoaXMud29ya2RpcixcbiAgICAgICAgICBhdXRvQXBwcm92ZSxcbiAgICAgICAgICBwYXJhbGxlbGlzbSxcbiAgICAgICAgICBub0NvbG9yLFxuICAgICAgICAgIGV4dHJhT3B0aW9ucyxcbiAgICAgICAgICB2YXJzLFxuICAgICAgICAgIHZhckZpbGVzLFxuICAgICAgICB9LFxuICAgICAgICBpbnNwZWN0LFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTZXJ2aWNlKFxuICAgIHR5cGU6IFwiZGVwbG95XCIgfCBcImRlc3Ryb3lcIixcbiAgICBjYWxsYmFjazogKHN0YXRlOiBUZXJyYWZvcm1EZXBsb3lTdGF0ZSkgPT4gdm9pZCxcbiAgICBjcmVhdGVTZXJ2aWNlOiAoaW5zcGVjdDogRGVwbG95SW5zcGVjdGlvbkhhbmRsZXIpID0+IERlcGxveUFjdG9yLFxuICApOiBQcm9taXNlPHsgY2FuY2VsbGVkOiBib29sZWFuIH0+IHtcbiAgICAvLyBFdmVudHMgcmVhY2ggdXMgdGhyb3VnaCBpbnNwZWN0aW9uLCB3aGljaCBmaXJlcyBmb3IgdGhlIHdob2xlIGFjdG9yIHRyZWUuIEZpbHRlciB0byB0aGUgcm9vdCBkZXBsb3kgYWN0b3JcbiAgICAvLyAoaXRzIHNlc3Npb25JZCBlcXVhbHMgdGhlIHRyZWUncyByb290SWQpIHNvIHdlIGRvbid0IHJlYWN0IHRvIHRoZSBpbnZva2VkIHB0eSBjaGlsZCdzIG93biBldmVudHMuIENvbXBhcmluZ1xuICAgIC8vIHNlc3Npb25JZCByYXRoZXIgdGhhbiB0aGUgYWN0b3IgcmVmIGtlZXBzIHRoaXMgc2VsZi1jb250YWluZWQ6IGluc3BlY3Rpb24gZmlyZXMgZHVyaW5nIHN0YXJ0dXAsIGJlZm9yZSB0aGVcbiAgICAvLyBgc2VydmljZWAgYmluZGluZyBiZWxvdyBpcyBpbml0aWFsaXplZC5cbiAgICBjb25zdCBpbnNwZWN0OiBEZXBsb3lJbnNwZWN0aW9uSGFuZGxlciA9IChpbnNwZWN0aW9uRXZlbnQpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgaW5zcGVjdGlvbkV2ZW50LnR5cGUgIT09IFwiQHhzdGF0ZS5ldmVudFwiIHx8XG4gICAgICAgIGluc3BlY3Rpb25FdmVudC5hY3RvclJlZi5zZXNzaW9uSWQgIT09IGluc3BlY3Rpb25FdmVudC5yb290SWRcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV2ZW50ID0gaW5zcGVjdGlvbkV2ZW50LmV2ZW50O1xuICAgICAgbG9nZ2VyLnRyYWNlKFxuICAgICAgICBgVGVycmFmb3JtIENMSSBzdGF0ZSBtYWNoaW5lIGV2ZW50OiAke0pTT04uc3RyaW5naWZ5KGV2ZW50KX1gLFxuICAgICAgKTtcbiAgICAgIGlmIChpc0RlcGxveUV2ZW50KGV2ZW50LCBcIk9VVFBVVF9SRUNFSVZFRFwiKSlcbiAgICAgICAgdGhpcy5vblN0ZG91dCh0eXBlKShldmVudC5vdXRwdXQpO1xuICAgICAgZWxzZSBpZiAoaXNEZXBsb3lFdmVudChldmVudCwgXCJBUFBST1ZFRF9FWFRFUk5BTExZXCIpKVxuICAgICAgICBjYWxsYmFjayh7IHR5cGU6IFwiZXh0ZXJuYWwgYXBwcm92YWwgcmVwbHlcIiwgYXBwcm92ZWQ6IHRydWUgfSk7XG4gICAgICBlbHNlIGlmIChpc0RlcGxveUV2ZW50KGV2ZW50LCBcIlJFSkVDVEVEX0VYVEVSTkFMTFlcIikpXG4gICAgICAgIGNhbGxiYWNrKHsgdHlwZTogXCJleHRlcm5hbCBhcHByb3ZhbCByZXBseVwiLCBhcHByb3ZlZDogZmFsc2UgfSk7XG4gICAgICBlbHNlIGlmIChpc0RlcGxveUV2ZW50KGV2ZW50LCBcIk9WRVJSSURERU5fRVhURVJOQUxMWVwiKSlcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwiZXh0ZXJuYWwgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIixcbiAgICAgICAgICBvdmVycmlkZGVuOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIGVsc2UgaWYgKGlzRGVwbG95RXZlbnQoZXZlbnQsIFwiT1ZFUlJJREVfUkVKRUNURURfRVhURVJOQUxMWVwiKSlcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwiZXh0ZXJuYWwgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIixcbiAgICAgICAgICBvdmVycmlkZGVuOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBjcmVhdGVTZXJ2aWNlKGluc3BlY3QpO1xuXG4gICAgLy8gVHJhbnNpdGlvbnMgY29tZSBmcm9tIHRoZSBhY3RvcidzIG93biBzdWJzY3JpcHRpb24sIHdoaWNoIHlpZWxkcyB0eXBlZCBzbmFwc2hvdHMgZm9yIHRoZSByb290IGFjdG9yIG9ubHkuXG4gICAgbGV0IHByZXZpb3VzU3RhdGU6IERlcGxveVNuYXBzaG90W1widmFsdWVcIl0gPSBcImlkbGVcIjtcbiAgICBjb25zdCBoYW5kbGVTbmFwc2hvdCA9IChzbmFwc2hvdDogRGVwbG95U25hcHNob3QpID0+IHtcbiAgICAgIC8vIE9ubHkgc2VuZCB1cGRhdGVzIG9uIGFjdHVhbCBzdGF0ZSBjaGFuZ2U7IGEgc25hcHNob3QgaXMgZW1pdHRlZCBldmVuIHdoZW4gb25seSBhbiBldmVudCBoYXBwZW5lZC5cbiAgICAgIGlmIChzbmFwc2hvdC5tYXRjaGVzKHByZXZpb3VzU3RhdGUpKSByZXR1cm47XG5cbiAgICAgIGxvZ2dlci50cmFjZShcbiAgICAgICAgYFRlcnJhZm9ybSBDTEkgc3RhdGUgbWFjaGluZSBzdGF0ZSB0cmFuc2l0aW9uOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHByZXZpb3VzU3RhdGUsXG4gICAgICAgICl9ID0+ICR7SlNPTi5zdHJpbmdpZnkoc25hcHNob3QudmFsdWUpfWAsXG4gICAgICApO1xuXG4gICAgICBpZiAoc25hcHNob3QubWF0Y2hlcyh7IHJ1bm5pbmc6IFwiYXdhaXRpbmdfYXBwcm92YWxcIiB9KSkge1xuICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgdHlwZTogXCJ3YWl0aW5nIGZvciBhcHByb3ZhbFwiLFxuICAgICAgICAgIGFwcHJvdmU6ICgpID0+IHNlcnZpY2Uuc2VuZCh7IHR5cGU6IFwiQVBQUk9WRVwiIH0pLFxuICAgICAgICAgIHJlamVjdDogKCkgPT4gc2VydmljZS5zZW5kKHsgdHlwZTogXCJSRUpFQ1RcIiB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHNuYXBzaG90Lm1hdGNoZXMoeyBydW5uaW5nOiBcImF3YWl0aW5nX3NlbnRpbmVsX292ZXJyaWRlXCIgfSkpIHtcbiAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIixcbiAgICAgICAgICBvdmVycmlkZTogKCkgPT4gc2VydmljZS5zZW5kKHsgdHlwZTogXCJPVkVSUklERVwiIH0pLFxuICAgICAgICAgIHJlamVjdDogKCkgPT4gc2VydmljZS5zZW5kKHsgdHlwZTogXCJSRUpFQ1RfT1ZFUlJJREVcIiB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHNuYXBzaG90Lm1hdGNoZXMoeyBydW5uaW5nOiBcInByb2Nlc3NpbmdcIiB9KSkge1xuICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgdHlwZTogXCJydW5uaW5nXCIsXG4gICAgICAgICAgY2FuY2VsbGVkOiBCb29sZWFuKHNuYXBzaG90LmNvbnRleHQuY2FuY2VsbGVkKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBwcmV2aW91c1N0YXRlID0gc25hcHNob3QudmFsdWU7XG4gICAgfTtcblxuICAgIHNlcnZpY2Uuc3Vic2NyaWJlKGhhbmRsZVNuYXBzaG90KTtcbiAgICBoYW5kbGVTbmFwc2hvdChzZXJ2aWNlLmdldFNuYXBzaG90KCkpO1xuXG4gICAgLy8gc3RvcCB0ZXJyYWZvcm0gYXBwbHkgaWYgc2lnbmFsZWQgYXMgc3VjaCBmcm9tIHRoZSBvdXRzaWRlIChlLmcuIHZpYSBjdHJsK2MpXG4gICAgdGhpcy5hYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJhYm9ydFwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBzZXJ2aWNlLnNlbmQoeyB0eXBlOiBcIlNUT1BcIiB9KTtcbiAgICAgIH0sXG4gICAgICB7IG9uY2U6IHRydWUgfSxcbiAgICApO1xuXG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB3YWl0Rm9yKFxuICAgICAgc2VydmljZSxcbiAgICAgIChzbmFwc2hvdCkgPT4gc25hcHNob3Quc3RhdHVzID09PSBcImRvbmVcIixcbiAgICAgIHtcbiAgICAgICAgdGltZW91dDogSW5maW5pdHksXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBUaGUgZmluYWwgc3RhdGUgcHJvZHVjZXMgdGhlIHRlcnJhZm9ybSBleGl0IGNvZGUgYXMgdGhlIG1hY2hpbmUncyBvdXRwdXQuXG4gICAgY29uc3QgZXhpdENvZGUgPSBzbmFwc2hvdC5vdXRwdXQ/LmV4aXRDb2RlO1xuXG4gICAgbG9nZ2VyLnRyYWNlKFxuICAgICAgYEludm9raW5nIFRlcnJhZm9ybSBDTEkgZm9yICR7dHlwZX0gZG9uZSAoc3RhdGUgbWFjaGluZSByZWFjaGVkIGZpbmFsIHN0YXRlKS4gTGFzdCBleGl0IGNvZGU6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGV4aXRDb2RlLFxuICAgICAgKX0uIENvbnRleHQ6ICR7SlNPTi5zdHJpbmdpZnkoc25hcHNob3QuY29udGV4dCl9YCxcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgZXhpdENvZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgZXhpdENvZGUgIT09IDAgJiZcbiAgICAgICFzbmFwc2hvdC5jb250ZXh0LmNhbmNlbGxlZCAvLyBkb24ndCBmYWlsIGlmIHdlIGNhbmNlbGxlZCB0aGUgcnVuXG4gICAgKSB7XG4gICAgICB0aHJvdyBgSW52b2tpbmcgVGVycmFmb3JtIENMSSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHtleGl0Q29kZX1gO1xuICAgIH1cblxuICAgIHJldHVybiB7IGNhbmNlbGxlZDogQm9vbGVhbihzbmFwc2hvdC5jb250ZXh0LmNhbmNlbGxlZCkgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB2ZXJzaW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBleGVjKFxuICAgICAgICB0ZXJyYWZvcm1CaW5hcnlOYW1lLFxuICAgICAgICBbXCItdlwiXSxcbiAgICAgICAge1xuICAgICAgICAgIGN3ZDogdGhpcy53b3JrZGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgc2lnbmFsOiB0aGlzLmFib3J0U2lnbmFsLFxuICAgICAgICAgIG5vQ29sb3I6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMub25TdGRvdXQoXCJ2ZXJzaW9uXCIpLFxuICAgICAgICB0aGlzLm9uU3RkZXJyKFwidmVyc2lvblwiKSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGVycmFmb3JtIENMSSBub3QgcHJlc2VudCAtIFBsZWFzZSBpbnN0YWxsIGEgY3VycmVudCB2ZXJzaW9uIGh0dHBzOi8vbGVhcm4uaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vZ2V0dGluZy1zdGFydGVkL2luc3RhbGwuaHRtbFwiLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb3V0cHV0KCk6IFByb21pc2U8eyBba2V5OiBzdHJpbmddOiBUZXJyYWZvcm1PdXRwdXQgfT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGV4ZWMoXG4gICAgICB0ZXJyYWZvcm1CaW5hcnlOYW1lLFxuICAgICAgW1wib3V0cHV0XCIsIFwiLWpzb25cIl0sXG4gICAgICB7XG4gICAgICAgIGN3ZDogdGhpcy53b3JrZGlyLFxuICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICBzaWduYWw6IHRoaXMuYWJvcnRTaWduYWwsXG4gICAgICAgIG5vQ29sb3I6IHRydWUsXG4gICAgICB9LFxuICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBsb2cgdGhlIG91dHB1dCBoZXJlIHNpbmNlIHdlIHVzZSBpdCBsYXRlciBvblxuICAgICAgKCkgPT4ge30sXG4gICAgICB0aGlzLm9uU3RkZXJyKFwib3V0cHV0XCIpLFxuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2Uob3V0cHV0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuRXh0ZXJuYWwoXG4gICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgdGVycmFmb3JtIG91dHB1dDogJHtlfS4gVGhlIG91dHB1dCB3YXMgJyR7b3V0cHV0fSdgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0VXNlckFnZW50KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFJlYWQgdGhlIGNka3RmIHZlcnNpb24gZnJvbSB0aGUgJ2Nkay50Zi5qc29uJyBmaWxlXG4gICAgLy8gYW5kIHNldCB0aGUgdXNlciBhZ2VudC5cbiAgICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgcmVhZENES1RGVmVyc2lvbih0aGlzLndvcmtkaXIpO1xuICAgIGlmICh2ZXJzaW9uICE9IFwiXCIpIHtcbiAgICAgIHByb2Nlc3MuZW52LlRGX0FQUEVORF9VU0VSX0FHRU5UID1cbiAgICAgICAgXCJjZGt0bi9cIiArXG4gICAgICAgIHZlcnNpb24gK1xuICAgICAgICBcIiAoK2h0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLWNvbnN0cnVjdHMvY2RrLXRlcnJhaW4pXCI7XG4gICAgfVxuICB9XG5cbiAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjbGVhbiBhbnl0aGluZyB1cCBmb3IgYSBydW5uaW5nIGV4ZWN1dGlvbiBpbiB0aGUgQ0xJIHNpbmNlIHRoZXJlIGlzIG5vIGxlZnQtb3ZlciBzdGF0ZSBpbiBjb250cmFzdCB0byBhbiBvcGVuIFRlcnJhZm9ybSBDbG91ZCBydW5cbiAgcHVibGljIGFzeW5jIGFib3J0KCkge1xuICAgIHJldHVybjtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJ5UmVhZEdlbmVyYXRlZENvbmZpZ3VyYXRpb25GaWxlKFxuICB3b3JraW5nRGlyOiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgY29uc3QgZ2VuZXJhdGVkQ29uZmlnUGF0aCA9IHBhdGguam9pbih3b3JraW5nRGlyLCBHRU5FUkFURV9DT05GSUdfT1VUX0ZJTEUpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoZ2VuZXJhdGVkQ29uZmlnUGF0aCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKGdlbmVyYXRlZENvbmZpZ1BhdGgsIFwidXRmLThcIik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cnlSZW1vdmVHZW5lcmF0ZWRDb25maWd1cmF0aW9uRmlsZSh3b3JraW5nRGlyOiBzdHJpbmcpIHtcbiAgY29uc3QgZ2VuZXJhdGVkQ29uZmlnUGF0aCA9IHBhdGguam9pbih3b3JraW5nRGlyLCBHRU5FUkFURV9DT05GSUdfT1VUX0ZJTEUpO1xuICBpZiAoZnMuZXhpc3RzU3luYyhnZW5lcmF0ZWRDb25maWdQYXRoKSkge1xuICAgIGZzLnVubGlua1N5bmMoZ2VuZXJhdGVkQ29uZmlnUGF0aCk7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cdktn/cli-core",
|
|
3
|
-
"version": "0.25.0-pre.
|
|
3
|
+
"version": "0.25.0-pre.3",
|
|
4
4
|
"description": "CDK Terrain CLI Core, meant for internal use only",
|
|
5
5
|
"main": "build/lib/index.js",
|
|
6
6
|
"types": "build/lib/index.d.ts",
|
|
@@ -45,13 +45,13 @@
|
|
|
45
45
|
"strip-ansi": "6.0.1",
|
|
46
46
|
"undici": "8.7.0",
|
|
47
47
|
"xml-js": "1.6.11",
|
|
48
|
-
"xstate": "
|
|
48
|
+
"xstate": "5.32.4",
|
|
49
49
|
"zod": "4.4.3",
|
|
50
|
-
"@cdktn/commons": "0.25.0-pre.
|
|
51
|
-
"@cdktn/hcl-tools": "0.25.0-pre.
|
|
52
|
-
"@cdktn/hcl2cdk": "0.25.0-pre.
|
|
53
|
-
"@cdktn/provider-schema": "0.25.0-pre.
|
|
54
|
-
"cdktn": "0.25.0-pre.
|
|
50
|
+
"@cdktn/commons": "0.25.0-pre.3",
|
|
51
|
+
"@cdktn/hcl-tools": "0.25.0-pre.3",
|
|
52
|
+
"@cdktn/hcl2cdk": "0.25.0-pre.3",
|
|
53
|
+
"@cdktn/provider-schema": "0.25.0-pre.3",
|
|
54
|
+
"cdktn": "0.25.0-pre.3"
|
|
55
55
|
},
|
|
56
56
|
"lint-staged": {
|
|
57
57
|
"src/**/*.{ts,tsx}": "tsc-files ambient.d.ts --noEmit"
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"prettier": "2.8.8",
|
|
66
66
|
"tsc-files": "1.1.4",
|
|
67
67
|
"typescript": "^5.0.4",
|
|
68
|
-
"@cdktn/provider-generator": "0.25.0-pre.
|
|
68
|
+
"@cdktn/provider-generator": "0.25.0-pre.3"
|
|
69
69
|
},
|
|
70
70
|
"engines": {
|
|
71
71
|
"node": ">=22.19.0"
|
|
@@ -75,8 +75,8 @@
|
|
|
75
75
|
"watch": "tsc -w",
|
|
76
76
|
"watch-preserve-output": "tsc -w --preserveWatchOutput",
|
|
77
77
|
"test:update": "jest -u --maxWorkers=50%",
|
|
78
|
-
"package": "
|
|
78
|
+
"package": "bash package.sh",
|
|
79
79
|
"dist-clean": "rm -rf dist",
|
|
80
|
-
"package:js": "
|
|
80
|
+
"package:js": "bash package.sh"
|
|
81
81
|
}
|
|
82
82
|
}
|