aws-cdk 2.20.0 → 2.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD_PARTY_LICENSES +8 -28
- package/build-info.json +2 -2
- package/does-not-exist.json +1 -1
- package/lib/api/aws-auth/account-cache.d.ts +1 -1
- package/lib/api/aws-auth/account-cache.js +2 -2
- package/lib/api/deploy-stack.js +18 -6
- package/lib/api/util/cloudformation/stack-activity-monitor.d.ts +5 -0
- package/lib/api/util/cloudformation/stack-activity-monitor.js +19 -3
- package/lib/api/util/cloudformation.d.ts +6 -3
- package/lib/api/util/cloudformation.js +27 -8
- package/lib/api/util/display.d.ts +2 -1
- package/lib/api/util/display.js +14 -19
- package/lib/cli.js +2 -3
- package/lib/index.js +8351 -5344
- package/lib/init-templates/v1/app/csharp/README.md +1 -1
- package/lib/init-templates/v1/app/fsharp/README.md +1 -1
- package/lib/init-templates/v1/app/go/README.md +1 -1
- package/lib/init-templates/v1/app/java/README.md +1 -1
- package/lib/init-templates/v1/app/javascript/README.md +1 -1
- package/lib/init-templates/v1/app/python/README.template.md +1 -1
- package/lib/init-templates/v1/app/typescript/README.md +1 -1
- package/lib/init-templates/v2/app/csharp/README.md +1 -1
- package/lib/init-templates/v2/app/fsharp/README.md +1 -1
- package/lib/init-templates/v2/app/go/README.md +1 -1
- package/lib/init-templates/v2/app/java/README.md +1 -1
- package/lib/init-templates/v2/app/javascript/README.md +1 -1
- package/lib/init-templates/v2/app/python/README.template.md +1 -1
- package/lib/init-templates/v2/app/typescript/README.md +1 -1
- package/lib/notices.d.ts +1 -0
- package/lib/notices.js +43 -21
- package/package.json +11 -11
- package/test/api/util/display.test.js +21 -1
- package/test/notices.test.js +35 -21
package/test/notices.test.js
CHANGED
|
@@ -159,45 +159,45 @@ describe('cli notices', () => {
|
|
|
159
159
|
});
|
|
160
160
|
expect(result).toEqual([BASIC_NOTICE, MULTIPLE_AFFECTED_VERSIONS_NOTICE]);
|
|
161
161
|
});
|
|
162
|
-
test('returns
|
|
163
|
-
const result =
|
|
162
|
+
test('returns appropriate error when the server returns an unexpected status code', async () => {
|
|
163
|
+
const result = mockCall(500, {
|
|
164
164
|
notices: [BASIC_NOTICE, MULTIPLE_AFFECTED_VERSIONS_NOTICE],
|
|
165
165
|
});
|
|
166
|
-
expect(result).
|
|
166
|
+
await expect(result).rejects.toThrow(/500/);
|
|
167
167
|
});
|
|
168
|
-
test('returns
|
|
169
|
-
const result =
|
|
168
|
+
test('returns appropriate error when the server returns an unexpected structure', async () => {
|
|
169
|
+
const result = mockCall(200, {
|
|
170
170
|
foo: [BASIC_NOTICE, MULTIPLE_AFFECTED_VERSIONS_NOTICE],
|
|
171
171
|
});
|
|
172
|
-
expect(result).
|
|
172
|
+
await expect(result).rejects.toThrow(/key is missing/);
|
|
173
173
|
});
|
|
174
|
-
test('returns
|
|
175
|
-
const result =
|
|
176
|
-
expect(result).
|
|
174
|
+
test('returns appropriate error when the server returns invalid json', async () => {
|
|
175
|
+
const result = mockCall(200, '-09aiskjkj838');
|
|
176
|
+
await expect(result).rejects.toThrow(/Failed to parse/);
|
|
177
177
|
});
|
|
178
|
-
test('returns
|
|
178
|
+
test('returns appropriate error when HTTPS call throws', async () => {
|
|
179
179
|
const mockGet = jest.spyOn(https, 'get')
|
|
180
180
|
.mockImplementation(() => { throw new Error('No connection'); });
|
|
181
|
-
const result =
|
|
182
|
-
expect(result).
|
|
181
|
+
const result = dataSource.fetch();
|
|
182
|
+
await expect(result).rejects.toThrow(/No connection/);
|
|
183
183
|
mockGet.mockRestore();
|
|
184
184
|
});
|
|
185
|
-
test('returns
|
|
185
|
+
test('returns appropriate error when the request has an error', async () => {
|
|
186
186
|
nock('https://cli.cdk.dev-tools.aws.dev')
|
|
187
187
|
.get('/notices.json')
|
|
188
188
|
.replyWithError('DNS resolution failed');
|
|
189
|
-
const result =
|
|
190
|
-
expect(result).
|
|
189
|
+
const result = dataSource.fetch();
|
|
190
|
+
await expect(result).rejects.toThrow(/DNS resolution failed/);
|
|
191
191
|
});
|
|
192
|
-
test('returns
|
|
192
|
+
test('returns appropriate error when the connection stays idle for too long', async () => {
|
|
193
193
|
nock('https://cli.cdk.dev-tools.aws.dev')
|
|
194
194
|
.get('/notices.json')
|
|
195
195
|
.delayConnection(3500)
|
|
196
196
|
.reply(200, {
|
|
197
197
|
notices: [BASIC_NOTICE],
|
|
198
198
|
});
|
|
199
|
-
const result =
|
|
200
|
-
expect(result).
|
|
199
|
+
const result = dataSource.fetch();
|
|
200
|
+
await expect(result).rejects.toThrow(/timed out/);
|
|
201
201
|
});
|
|
202
202
|
test('returns empty array when the request takes too long to finish', async () => {
|
|
203
203
|
nock('https://cli.cdk.dev-tools.aws.dev')
|
|
@@ -206,8 +206,8 @@ describe('cli notices', () => {
|
|
|
206
206
|
.reply(200, {
|
|
207
207
|
notices: [BASIC_NOTICE],
|
|
208
208
|
});
|
|
209
|
-
const result =
|
|
210
|
-
expect(result).
|
|
209
|
+
const result = dataSource.fetch();
|
|
210
|
+
await expect(result).rejects.toThrow(/timed out/);
|
|
211
211
|
});
|
|
212
212
|
function mockCall(statusCode, body) {
|
|
213
213
|
nock('https://cli.cdk.dev-tools.aws.dev')
|
|
@@ -248,6 +248,9 @@ describe('cli notices', () => {
|
|
|
248
248
|
});
|
|
249
249
|
test('retrieves data from the delegate when the file cannot be read', async () => {
|
|
250
250
|
const debugSpy = jest.spyOn(logging, 'debug');
|
|
251
|
+
if (fs.existsSync('does-not-exist.json')) {
|
|
252
|
+
fs.unlinkSync('does-not-exist.json');
|
|
253
|
+
}
|
|
251
254
|
const dataSource = dataSourceWithDelegateReturning(freshData, 'does-not-exist.json');
|
|
252
255
|
const notices = await dataSource.fetch();
|
|
253
256
|
expect(notices).toEqual(freshData);
|
|
@@ -263,6 +266,17 @@ describe('cli notices', () => {
|
|
|
263
266
|
const notices = await dataSource.fetch();
|
|
264
267
|
expect(notices).toEqual(freshData);
|
|
265
268
|
});
|
|
269
|
+
test('error in delegate gets turned into empty result by cached source', async () => {
|
|
270
|
+
// GIVEN
|
|
271
|
+
const delegate = {
|
|
272
|
+
fetch: jest.fn().mockRejectedValue(new Error('fetching failed')),
|
|
273
|
+
};
|
|
274
|
+
const dataSource = new notices_1.CachedDataSource(fileName, delegate, true);
|
|
275
|
+
// WHEN
|
|
276
|
+
const notices = await dataSource.fetch();
|
|
277
|
+
// THEN
|
|
278
|
+
expect(notices).toEqual([]);
|
|
279
|
+
});
|
|
266
280
|
function dataSourceWithDelegateReturning(notices, file = fileName, ignoreCache = false) {
|
|
267
281
|
const delegate = {
|
|
268
282
|
fetch: jest.fn(),
|
|
@@ -312,4 +326,4 @@ If you don’t want to see a notice anymore, use "cdk acknowledge <id>". For exa
|
|
|
312
326
|
}
|
|
313
327
|
});
|
|
314
328
|
});
|
|
315
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWNlcy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm90aWNlcy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsK0JBQStCO0FBQy9CLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUM3QiwwQ0FBMEM7QUFDMUMsNENBT3dCO0FBQ3hCLDBDQUEwQztBQUUxQyxNQUFNLFlBQVksR0FBRztJQUNuQixLQUFLLEVBQUUsZ0VBQWdFO0lBQ3ZFLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFFBQVEsRUFBRSw2S0FBNks7SUFDdkwsVUFBVSxFQUFFLENBQUM7WUFDWCxJQUFJLEVBQUUsS0FBSztZQUNYLE9BQU8sRUFBRSxXQUFXO1NBQ3JCLENBQUM7SUFDRixhQUFhLEVBQUUsR0FBRztDQUNuQixDQUFDO0FBRUYsTUFBTSxpQ0FBaUMsR0FBRztJQUN4QyxLQUFLLEVBQUUscURBQXFEO0lBQzVELFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFFBQVEsRUFBRSx3SkFBd0o7SUFDbEssVUFBVSxFQUFFLENBQUM7WUFDWCxJQUFJLEVBQUUsS0FBSztZQUNYLE9BQU8sRUFBRSxvQkFBb0I7U0FDOUIsQ0FBQztJQUNGLGFBQWEsRUFBRSxHQUFHO0NBQ25CLENBQUM7QUFFRixNQUFNLCtCQUErQixHQUFHO0lBQ3RDLEtBQUssRUFBRSw2QkFBNkI7SUFDcEMsV0FBVyxFQUFFLElBQUk7SUFDakIsUUFBUSxFQUFFLHNCQUFzQjtJQUNoQyxVQUFVLEVBQUUsQ0FBQztZQUNYLElBQUksRUFBRSxXQUFXO1lBQ2pCLE9BQU8sRUFBRSxVQUFVO1NBQ3BCLENBQUM7SUFDRixhQUFhLEVBQUUsR0FBRztDQUNuQixDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRztJQUM5QixLQUFLLEVBQUUsNkJBQTZCO0lBQ3BDLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLFFBQVEsRUFBRSxzQkFBc0I7SUFDaEMsVUFBVSxFQUFFLENBQUM7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QUFVLEVBQUU7Z0JBQy9DLHdCQUF3QixFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUNqQyxNQUFNLEVBQUUsTUFBTTthQUNmLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs2R0FlZ0YsQ0FBQyxDQUFDO1FBQzNHLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxnQkFBZ0I7WUFDdkIsT0FBTztnQkFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTthQUNqQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgbm9jayBmcm9tICdub2NrJztcbmltcG9ydCAqIGFzIGxvZ2dpbmcgZnJvbSAnLi4vbGliL2xvZ2dpbmcnO1xuaW1wb3J0IHtcbiAgQ2FjaGVkRGF0YVNvdXJjZSxcbiAgZmlsdGVyTm90aWNlcyxcbiAgZm9ybWF0Tm90aWNlcyxcbiAgZ2VuZXJhdGVNZXNzYWdlLFxuICBOb3RpY2UsXG4gIFdlYnNpdGVOb3RpY2VEYXRhU291cmNlLFxufSBmcm9tICcuLi9saWIvbm90aWNlcyc7XG5pbXBvcnQgKiBhcyB2ZXJzaW9uIGZyb20gJy4uL2xpYi92ZXJzaW9uJztcblxuY29uc3QgQkFTSUNfTk9USUNFID0ge1xuICB0aXRsZTogJ1RvZ2dsaW5nIG9mZiBhdXRvX2RlbGV0ZV9vYmplY3RzIGZvciBCdWNrZXQgZW1wdGllcyB0aGUgYnVja2V0JyxcbiAgaXNzdWVOdW1iZXI6IDE2NjAzLFxuICBvdmVydmlldzogJ0lmIGEgc3RhY2sgaXMgZGVwbG95ZWQgd2l0aCBhbiBTMyBidWNrZXQgd2l0aCBhdXRvX2RlbGV0ZV9vYmplY3RzPVRydWUsIGFuZCB0aGVuIHJlLWRlcGxveWVkIHdpdGggYXV0b19kZWxldGVfb2JqZWN0cz1GYWxzZSwgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBidWNrZXQgd2lsbCBiZSBkZWxldGVkLicsXG4gIGNvbXBvbmVudHM6IFt7XG4gICAgbmFtZTogJ2NsaScsXG4gICAgdmVyc2lvbjogJzw9MS4xMjYuMCcsXG4gIH1dLFxuICBzY2hlbWFWZXJzaW9uOiAnMScsXG59O1xuXG5jb25zdCBNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0UgPSB7XG4gIHRpdGxlOiAnRXJyb3Igd2hlbiBidWlsZGluZyBFS1MgY2x1c3RlciB3aXRoIG1vbm9jZGsgaW1wb3J0JyxcbiAgaXNzdWVOdW1iZXI6IDE3MDYxLFxuICBvdmVydmlldzogJ1doZW4gdXNpbmcgbW9ub2Nkay9hd3MtZWtzIHRvIGJ1aWxkIGEgc3RhY2sgY29udGFpbmluZyBhbiBFS1MgY2x1c3RlciwgZXJyb3IgaXMgdGhyb3duIGFib3V0IG1pc3NpbmcgbGFtYmRhLWxheWVyLW5vZGUtcHJveHktYWdlbnQvbGF5ZXIvcGFja2FnZS5qc29uLicsXG4gIGNvbXBvbmVudHM6IFt7XG4gICAgbmFtZTogJ2NsaScsXG4gICAgdmVyc2lvbjogJzwxLjEzMC4wID49MS4xMjYuMCcsXG4gIH1dLFxuICBzY2hlbWFWZXJzaW9uOiAnMScsXG59O1xuXG5jb25zdCBGUkFNRVdPUktfMl8xXzBfQUZGRUNURURfTk9USUNFID0ge1xuICB0aXRsZTogJ1JlZ3Jlc3Npb24gb24gbW9kdWxlIGZvb2JhcicsXG4gIGlzc3VlTnVtYmVyOiAxMjM0LFxuICBvdmVydmlldzogJ1NvbWUgYnVnIGRlc2NyaXB0aW9uJyxcbiAgY29tcG9uZW50czogW3tcbiAgICBuYW1lOiAnZnJhbWV3b3JrJyxcbiAgICB2ZXJzaW9uOiAnPD0gMi4xLjAnLFxuICB9XSxcbiAgc2NoZW1hVmVyc2lvbjogJzEnLFxufTtcblxuY29uc3QgTk9USUNFX0ZPUl9BUElHQVRFV0FZVjIgPSB7XG4gIHRpdGxlOiAnUmVncmVzc2lvbiBvbiBtb2R1bGUgZm9vYmFyJyxcbiAgaXNzdWVOdW1iZXI6IDEyMzQsXG4gIG92ZXJ2aWV3OiAnU29tZSBidWcgZGVzY3JpcHRpb24nLFxuICBjb21wb25lbnRzOiBbe1xuICAgIG5hbWU6ICdAYXdzLWNkay9hd3MtYXBpZ2F0ZXdheXYyLWFscGhhLicsXG4gICAgdmVyc2lvbjogJzw9IDIuMTMuMC1hbHBoYS4wJyxcbiAgfV0sXG4gIHNjaGVtYVZlcnNpb246ICcxJyxcbn07XG5cbmNvbnN0IE5PVElDRV9GT1JfQVBJR0FURVdBWSA9IHtcbiAgdGl0bGU6ICdSZWdyZXNzaW9uIG9uIG1vZHVsZSBmb29iYXInLFxuICBpc3N1ZU51bWJlcjogMTIzNCxcbiAgb3ZlcnZpZXc6ICdTb21lIGJ1ZyBkZXNjcmlwdGlvbicsXG4gIGNvbXBvbmVudHM6IFt7XG4gICAgbmFtZTogJ0Bhd3MtY2RrL2F3cy1hcGlnYXRld2F5JyxcbiAgICB2ZXJzaW9uOiAnPD0gMi4xMy4wLWFscGhhLjAnLFxuICB9XSxcbiAgc2NoZW1hVmVyc2lvbjogJzEnLFxufTtcblxuY29uc3QgTk9USUNFX0ZPUl9BUElHQVRFV0FZVjJfQ0ZOX1NUQUdFID0ge1xuICB0aXRsZTogJ1JlZ3Jlc3Npb24gb24gbW9kdWxlIGZvb2JhcicsXG4gIGlzc3VlTnVtYmVyOiAxMjM0LFxuICBvdmVydmlldzogJ1NvbWUgYnVnIGRlc2NyaXB0aW9uJyxcbiAgY29tcG9uZW50czogW3tcbiAgICBuYW1lOiAnYXdzLWNkay1saWIuYXdzX2FwaWdhdGV3YXl2Mi5DZm5TdGFnZScsXG4gICAgdmVyc2lvbjogJzw9IDIuMTMuMC1hbHBoYS4wJyxcbiAgfV0sXG4gIHNjaGVtYVZlcnNpb246ICcxJyxcbn07XG5cbmRlc2NyaWJlKCdjbGkgbm90aWNlcycsICgpID0+IHtcbiAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICBqZXN0XG4gICAgICAuc3B5T24odmVyc2lvbiwgJ3ZlcnNpb25OdW1iZXInKVxuICAgICAgLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAnMS4wLjAnKTtcbiAgfSk7XG5cbiAgYWZ0ZXJBbGwoKCkgPT4ge1xuICAgIGplc3QucmVzdG9yZUFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKGZvcm1hdE5vdGljZXMsICgpID0+IHtcbiAgICB0ZXN0KCdjb3JyZWN0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdE5vdGljZXMoW0JBU0lDX05PVElDRV0pWzBdO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChgMTY2MDNcdFRvZ2dsaW5nIG9mZiBhdXRvX2RlbGV0ZV9vYmplY3RzIGZvciBCdWNrZXQgZW1wdGllcyB0aGUgYnVja2V0XG5cblx0T3ZlcnZpZXc6IElmIGEgc3RhY2sgaXMgZGVwbG95ZWQgd2l0aCBhbiBTMyBidWNrZXQgd2l0aFxuXHQgICAgICAgICAgYXV0b19kZWxldGVfb2JqZWN0cz1UcnVlLCBhbmQgdGhlbiByZS1kZXBsb3llZCB3aXRoXG5cdCAgICAgICAgICBhdXRvX2RlbGV0ZV9vYmplY3RzPUZhbHNlLCBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGJ1Y2tldFxuXHQgICAgICAgICAgd2lsbCBiZSBkZWxldGVkLlxuXG5cdEFmZmVjdGVkIHZlcnNpb25zOiBjbGk6IDw9MS4xMjYuMFxuXG5cdE1vcmUgaW5mb3JtYXRpb24gYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTY2MDNcbmApO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnbXVsdGlwbGUgYWZmZWN0IHZlcnNpb25zJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0Tm90aWNlcyhbTVVMVElQTEVfQUZGRUNURURfVkVSU0lPTlNfTk9USUNFXSlbMF07XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGAxNzA2MVx0RXJyb3Igd2hlbiBidWlsZGluZyBFS1MgY2x1c3RlciB3aXRoIG1vbm9jZGsgaW1wb3J0XG5cblx0T3ZlcnZpZXc6IFdoZW4gdXNpbmcgbW9ub2Nkay9hd3MtZWtzIHRvIGJ1aWxkIGEgc3RhY2sgY29udGFpbmluZyBhblxuXHQgICAgICAgICAgRUtTIGNsdXN0ZXIsIGVycm9yIGlzIHRocm93biBhYm91dCBtaXNzaW5nXG5cdCAgICAgICAgICBsYW1iZGEtbGF5ZXItbm9kZS1wcm94eS1hZ2VudC9sYXllci9wYWNrYWdlLmpzb24uXG5cblx0QWZmZWN0ZWQgdmVyc2lvbnM6IGNsaTogPDEuMTMwLjAgPj0xLjEyNi4wXG5cblx0TW9yZSBpbmZvcm1hdGlvbiBhdDogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNzA2MVxuYCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKGZpbHRlck5vdGljZXMsICgpID0+IHtcbiAgICB0ZXN0KCdjb3JyZWN0bHkgZmlsdGVyIG5vdGljZXMgb24gY2xpJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm90aWNlcyA9IFtCQVNJQ19OT1RJQ0UsIE1VTFRJUExFX0FGRkVDVEVEX1ZFUlNJT05TX05PVElDRV07XG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhub3RpY2VzLCB7XG4gICAgICAgIGNsaVZlcnNpb246ICcxLjAuMCcsXG4gICAgICB9KSkudG9FcXVhbChbQkFTSUNfTk9USUNFXSk7XG5cbiAgICAgIGV4cGVjdChmaWx0ZXJOb3RpY2VzKG5vdGljZXMsIHtcbiAgICAgICAgY2xpVmVyc2lvbjogJzEuMTI5LjAnLFxuICAgICAgfSkpLnRvRXF1YWwoW01VTFRJUExFX0FGRkVDVEVEX1ZFUlNJT05TX05PVElDRV0pO1xuXG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhub3RpY2VzLCB7XG4gICAgICAgIGNsaVZlcnNpb246ICcxLjEyNi4wJyxcbiAgICAgIH0pKS50b0VxdWFsKG5vdGljZXMpO1xuXG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhub3RpY2VzLCB7XG4gICAgICAgIGNsaVZlcnNpb246ICcxLjEzMC4wJyxcbiAgICAgIH0pKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NvcnJlY3RseSBmaWx0ZXIgbm90aWNlcyBvbiBmcmFtZXdvcmsnLCAoKSA9PiB7XG4gICAgICBjb25zdCBub3RpY2VzID0gW0ZSQU1FV09SS18yXzFfMF9BRkZFQ1RFRF9OT1RJQ0VdO1xuXG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhub3RpY2VzLCB7XG4gICAgICAgIG91dGRpcjogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Nsb3VkLWFzc2VtYmx5LXRyZWVzL2J1aWx0LXdpdGgtMl8xMl8wJyksXG4gICAgICB9KSkudG9FcXVhbChbXSk7XG5cbiAgICAgIGV4cGVjdChmaWx0ZXJOb3RpY2VzKG5vdGljZXMsIHtcbiAgICAgICAgb3V0ZGlyOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnY2xvdWQtYXNzZW1ibHktdHJlZXMvYnVpbHQtd2l0aC0xXzE0NF8wJyksXG4gICAgICB9KSkudG9FcXVhbChbRlJBTUVXT1JLXzJfMV8wX0FGRkVDVEVEX05PVElDRV0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY29ycmVjdGx5IGZpbHRlciBub3RpY2VzIG9uIGFyYml0cmFyeSBtb2R1bGVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm90aWNlcyA9IFtOT1RJQ0VfRk9SX0FQSUdBVEVXQVlWMl07XG5cbiAgICAgIC8vIG1vZHVsZS1sZXZlbCBtYXRjaFxuICAgICAgZXhwZWN0KGZpbHRlck5vdGljZXMobm90aWNlcywge1xuICAgICAgICBvdXRkaXI6IHBhdGguam9pbihfX2Rpcm5hbWUsICdjbG91ZC1hc3NlbWJseS10cmVlcy9leHBlcmltZW50YWwtbW9kdWxlJyksXG4gICAgICB9KSkudG9FcXVhbChbTk9USUNFX0ZPUl9BUElHQVRFV0FZVjJdKTtcblxuICAgICAgLy8gbm8gYXBpZ2F0ZXdheXYyIGluIHRoZSB0cmVlXG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhub3RpY2VzLCB7XG4gICAgICAgIG91dGRpcjogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Nsb3VkLWFzc2VtYmx5LXRyZWVzL2J1aWx0LXdpdGgtMl8xMl8wJyksXG4gICAgICB9KSkudG9FcXVhbChbXSk7XG5cbiAgICAgIC8vIG1vZHVsZSBuYW1lIG1pc21hdGNoOiBhcGlnYXRld2F5ICE9IGFwaWdhdGV3YXl2MlxuICAgICAgZXhwZWN0KGZpbHRlck5vdGljZXMoW05PVElDRV9GT1JfQVBJR0FURVdBWV0sIHtcbiAgICAgICAgb3V0ZGlyOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnY2xvdWQtYXNzZW1ibHktdHJlZXMvZXhwZXJpbWVudGFsLW1vZHVsZScpLFxuICAgICAgfSkpLnRvRXF1YWwoW10pO1xuXG4gICAgICAvLyBjb25zdHJ1Y3QtbGV2ZWwgbWF0Y2hcbiAgICAgIGV4cGVjdChmaWx0ZXJOb3RpY2VzKFtOT1RJQ0VfRk9SX0FQSUdBVEVXQVlWMl9DRk5fU1RBR0VdLCB7XG4gICAgICAgIG91dGRpcjogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Nsb3VkLWFzc2VtYmx5LXRyZWVzL2V4cGVyaW1lbnRhbC1tb2R1bGUnKSxcbiAgICAgIH0pKS50b0VxdWFsKFtOT1RJQ0VfRk9SX0FQSUdBVEVXQVlWMl9DRk5fU1RBR0VdKTtcbiAgICB9KTtcblxuICB9KTtcblxuICBkZXNjcmliZShXZWJzaXRlTm90aWNlRGF0YVNvdXJjZSwgKCkgPT4ge1xuICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBuZXcgV2Vic2l0ZU5vdGljZURhdGFTb3VyY2UoKTtcblxuICAgIHRlc3QoJ3JldHVybnMgZGF0YSB3aGVuIGRvd25sb2FkIHN1Y2NlZWRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9ja0NhbGwoMjAwLCB7XG4gICAgICAgIG5vdGljZXM6IFtCQVNJQ19OT1RJQ0UsIE1VTFRJUExFX0FGRkVDVEVEX1ZFUlNJT05TX05PVElDRV0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbQkFTSUNfTk9USUNFLCBNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0VdKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHVybnMgZW1wdHkgYXJyYXkgd2hlbiB0aGUgc2VydmVyIHJldHVybnMgYW4gdW5leHBlY3RlZCBzdGF0dXMgY29kZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tDYWxsKDUwMCwge1xuICAgICAgICBub3RpY2VzOiBbQkFTSUNfTk9USUNFLCBNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0VdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBlbXB0eSBhcnJheSB3aGVuIHRoZSBzZXJ2ZXIgcmV0dXJucyBhbiB1bmV4cGVjdGVkIHN0cnVjdHVyZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tDYWxsKDIwMCwge1xuICAgICAgICBmb286IFtCQVNJQ19OT1RJQ0UsIE1VTFRJUExFX0FGRkVDVEVEX1ZFUlNJT05TX05PVElDRV0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXR1cm5zIGVtcHR5IGFycmF5IHdoZW4gdGhlIHNlcnZlciByZXR1cm5zIGludmFsaWQganNvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tDYWxsKDIwMCwgJy0wOWFpc2tqa2o4MzgnKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXR1cm5zIGVtcHR5IGFycmF5IHdoZW4gSFRUUFMgY2FsbCB0aHJvd3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtb2NrR2V0ID0gamVzdC5zcHlPbihodHRwcywgJ2dldCcpXG4gICAgICAgIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbm5lY3Rpb24nKTsgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbXSk7XG5cbiAgICAgIG1vY2tHZXQubW9ja1Jlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHVybnMgZW1wdHkgYXJyYXkgd2hlbiB0aGUgcmVxdWVzdCBoYXMgYW4gZXJyb3InLCBhc3luYyAoKSA9PiB7XG4gICAgICBub2NrKCdodHRwczovL2NsaS5jZGsuZGV2LXRvb2xzLmF3cy5kZXYnKVxuICAgICAgICAuZ2V0KCcvbm90aWNlcy5qc29uJylcbiAgICAgICAgLnJlcGx5V2l0aEVycm9yKCdETlMgcmVzb2x1dGlvbiBmYWlsZWQnKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YVNvdXJjZS5mZXRjaCgpO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHVybnMgZW1wdHkgYXJyYXkgd2hlbiB0aGUgY29ubmVjdGlvbiBzdGF5cyBpZGxlIGZvciAgdG9vIGxvbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICBub2NrKCdodHRwczovL2NsaS5jZGsuZGV2LXRvb2xzLmF3cy5kZXYnKVxuICAgICAgICAuZ2V0KCcvbm90aWNlcy5qc29uJylcbiAgICAgICAgLmRlbGF5Q29ubmVjdGlvbigzNTAwKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgbm90aWNlczogW0JBU0lDX05PVElDRV0sXG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkYXRhU291cmNlLmZldGNoKCk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBlbXB0eSBhcnJheSB3aGVuIHRoZSByZXF1ZXN0IHRha2VzIHRvbyBsb25nIHRvIGZpbmlzaCcsIGFzeW5jICgpID0+IHtcbiAgICAgIG5vY2soJ2h0dHBzOi8vY2xpLmNkay5kZXYtdG9vbHMuYXdzLmRldicpXG4gICAgICAgIC5nZXQoJy9ub3RpY2VzLmpzb24nKVxuICAgICAgICAuZGVsYXlCb2R5KDM1MDApXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBub3RpY2VzOiBbQkFTSUNfTk9USUNFXSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtb2NrQ2FsbChzdGF0dXNDb2RlOiBudW1iZXIsIGJvZHk6IGFueSk6IFByb21pc2U8Tm90aWNlW10+IHtcbiAgICAgIG5vY2soJ2h0dHBzOi8vY2xpLmNkay5kZXYtdG9vbHMuYXdzLmRldicpXG4gICAgICAgIC5nZXQoJy9ub3RpY2VzLmpzb24nKVxuICAgICAgICAucmVwbHkoc3RhdHVzQ29kZSwgYm9keSk7XG5cbiAgICAgIHJldHVybiBkYXRhU291cmNlLmZldGNoKCk7XG4gICAgfVxuICB9KTtcblxuICBkZXNjcmliZShDYWNoZWREYXRhU291cmNlLCAoKSA9PiB7XG4gICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjYWNoZS5qc29uJyk7XG4gICAgY29uc3QgY2FjaGVkRGF0YSA9IFtCQVNJQ19OT1RJQ0VdO1xuICAgIGNvbnN0IGZyZXNoRGF0YSA9IFtNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0VdO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVOYW1lLCAnJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXRyaWV2ZXMgZGF0YSBmcm9tIHRoZSBkZWxlZ2F0ZSBjYWNoZSB3aGVuIHRoZSBmaWxlIGlzIGVtcHR5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2VXaXRoRGVsZWdhdGVSZXR1cm5pbmcoZnJlc2hEYXRhKTtcblxuICAgICAgY29uc3Qgbm90aWNlcyA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KG5vdGljZXMpLnRvRXF1YWwoZnJlc2hEYXRhKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJpZXZlcyBkYXRhIGZyb20gdGhlIGZpbGUgd2hlbiB0aGUgZGF0YSBpcyBzdGlsbCB2YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGZzLndyaXRlSnNvblN5bmMoZmlsZU5hbWUsIHtcbiAgICAgICAgbm90aWNlczogY2FjaGVkRGF0YSxcbiAgICAgICAgZXhwaXJhdGlvbjogRGF0ZS5ub3coKSArIDEwMDAwLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhU291cmNlID0gZGF0YVNvdXJjZVdpdGhEZWxlZ2F0ZVJldHVybmluZyhmcmVzaERhdGEpO1xuXG4gICAgICBjb25zdCBub3RpY2VzID0gYXdhaXQgZGF0YVNvdXJjZS5mZXRjaCgpO1xuXG4gICAgICBleHBlY3Qobm90aWNlcykudG9FcXVhbChjYWNoZWREYXRhKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJpZXZlcyBkYXRhIGZyb20gdGhlIGRlbGVnYXRlIHdoZW4gdGhlIGRhdGEgaXMgZXhwaXJlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGZzLndyaXRlSnNvblN5bmMoZmlsZU5hbWUsIHtcbiAgICAgICAgbm90aWNlczogY2FjaGVkRGF0YSxcbiAgICAgICAgZXhwaXJhdGlvbjogMCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2VXaXRoRGVsZWdhdGVSZXR1cm5pbmcoZnJlc2hEYXRhKTtcblxuICAgICAgY29uc3Qgbm90aWNlcyA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KG5vdGljZXMpLnRvRXF1YWwoZnJlc2hEYXRhKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJpZXZlcyBkYXRhIGZyb20gdGhlIGRlbGVnYXRlIHdoZW4gdGhlIGZpbGUgY2Fubm90IGJlIHJlYWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBkZWJ1Z1NweSA9IGplc3Quc3B5T24obG9nZ2luZywgJ2RlYnVnJyk7XG5cbiAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBkYXRhU291cmNlV2l0aERlbGVnYXRlUmV0dXJuaW5nKGZyZXNoRGF0YSwgJ2RvZXMtbm90LWV4aXN0Lmpzb24nKTtcblxuICAgICAgY29uc3Qgbm90aWNlcyA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KG5vdGljZXMpLnRvRXF1YWwoZnJlc2hEYXRhKTtcbiAgICAgIGV4cGVjdChkZWJ1Z1NweSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgICAgZGVidWdTcHkubW9ja1Jlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJpZXZlZCBkYXRhIGZyb20gdGhlIGRlbGVnYXRlIHdoZW4gaXQgaXMgY29uZmlndXJlZCB0byBpZ25vcmUgdGhlIGNhY2hlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZnMud3JpdGVKc29uU3luYyhmaWxlTmFtZSwge1xuICAgICAgICBub3RpY2VzOiBjYWNoZWREYXRhLFxuICAgICAgICBleHBpcmF0aW9uOiBEYXRlLm5vdygpICsgMTAwMDAsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBkYXRhU291cmNlV2l0aERlbGVnYXRlUmV0dXJuaW5nKGZyZXNoRGF0YSwgZmlsZU5hbWUsIHRydWUpO1xuXG4gICAgICBjb25zdCBub3RpY2VzID0gYXdhaXQgZGF0YVNvdXJjZS5mZXRjaCgpO1xuXG4gICAgICBleHBlY3Qobm90aWNlcykudG9FcXVhbChmcmVzaERhdGEpO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gZGF0YVNvdXJjZVdpdGhEZWxlZ2F0ZVJldHVybmluZyhub3RpY2VzOiBOb3RpY2VbXSwgZmlsZTogc3RyaW5nID0gZmlsZU5hbWUsIGlnbm9yZUNhY2hlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGRlbGVnYXRlID0ge1xuICAgICAgICBmZXRjaDogamVzdC5mbigpLFxuICAgICAgfTtcblxuICAgICAgZGVsZWdhdGUuZmV0Y2gubW9ja1Jlc29sdmVkVmFsdWUobm90aWNlcyk7XG4gICAgICByZXR1cm4gbmV3IENhY2hlZERhdGFTb3VyY2UoZmlsZSwgZGVsZWdhdGUsIGlnbm9yZUNhY2hlKTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKGdlbmVyYXRlTWVzc2FnZSwgKCkgPT4ge1xuICAgIHRlc3QoJ2RvZXMgbm90IHNob3cgYW55dGhpbmcgd2hlbiB0aGVyZSBhcmUgbm8gbm90aWNlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBjcmVhdGVEYXRhU291cmNlKCk7XG4gICAgICBkYXRhU291cmNlLmZldGNoLm1vY2tSZXNvbHZlZFZhbHVlKFtdKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2VuZXJhdGVNZXNzYWdlKGRhdGFTb3VyY2UsIHtcbiAgICAgICAgYWNrbm93bGVkZ2VkSXNzdWVOdW1iZXJzOiBbXSxcbiAgICAgICAgb3V0ZGlyOiAnL3RtcCcsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzaG93cyBub3RpY2VzIHRoYXQgcGFzcyB0aGUgZmlsdGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGNyZWF0ZURhdGFTb3VyY2UoKTtcbiAgICAgIGRhdGFTb3VyY2UuZmV0Y2gubW9ja1Jlc29sdmVkVmFsdWUoW0JBU0lDX05PVElDRSwgTVVMVElQTEVfQUZGRUNURURfVkVSU0lPTlNfTk9USUNFXSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdlbmVyYXRlTWVzc2FnZShkYXRhU291cmNlLCB7XG4gICAgICAgIGFja25vd2xlZGdlZElzc3VlTnVtYmVyczogWzE3MDYxXSxcbiAgICAgICAgb3V0ZGlyOiAnL3RtcCcsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChgXG5OT1RJQ0VTXG5cbjE2NjAzXHRUb2dnbGluZyBvZmYgYXV0b19kZWxldGVfb2JqZWN0cyBmb3IgQnVja2V0IGVtcHRpZXMgdGhlIGJ1Y2tldFxuXG5cdE92ZXJ2aWV3OiBJZiBhIHN0YWNrIGlzIGRlcGxveWVkIHdpdGggYW4gUzMgYnVja2V0IHdpdGhcblx0ICAgICAgICAgIGF1dG9fZGVsZXRlX29iamVjdHM9VHJ1ZSwgYW5kIHRoZW4gcmUtZGVwbG95ZWQgd2l0aFxuXHQgICAgICAgICAgYXV0b19kZWxldGVfb2JqZWN0cz1GYWxzZSwgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBidWNrZXRcblx0ICAgICAgICAgIHdpbGwgYmUgZGVsZXRlZC5cblxuXHRBZmZlY3RlZCB2ZXJzaW9uczogY2xpOiA8PTEuMTI2LjBcblxuXHRNb3JlIGluZm9ybWF0aW9uIGF0OiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE2NjAzXG5cblxuSWYgeW91IGRvbuKAmXQgd2FudCB0byBzZWUgYSBub3RpY2UgYW55bW9yZSwgdXNlIFwiY2RrIGFja25vd2xlZGdlIDxpZD5cIi4gRm9yIGV4YW1wbGUsIFwiY2RrIGFja25vd2xlZGdlIDE2NjAzXCIuYCk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRhU291cmNlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmV0Y2g6IGplc3QuZm4oKSxcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn0pO1xuIl19
|
|
329
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWNlcy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm90aWNlcy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsK0JBQStCO0FBQy9CLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUM3QiwwQ0FBMEM7QUFDMUMsNENBT3dCO0FBQ3hCLDBDQUEwQztBQUUxQyxNQUFNLFlBQVksR0FBRztJQUNuQixLQUFLLEVBQUUsZ0VBQWdFO0lBQ3ZFLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFFBQVEsRUFBRSw2S0FBNks7SUFDdkwsVUFBVSxFQUFFLENBQUM7WUFDWCxJQUFJLEVBQUUsS0FBSztZQUNYLE9BQU8sRUFBRSxXQUFXO1NBQ3JCLENBQUM7SUFDRixhQUFhLEVBQUUsR0FBRztDQUNuQixDQUFDO0FBRUYsTUFBTSxpQ0FBaUMsR0FBRztJQUN4QyxLQUFLLEVBQUUscURBQXFEO0lBQzVELFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFFBQVEsRUFBRSx3SkFBd0o7SUFDbEssVUFBVSxFQUFFLENBQUM7WUFDWCxJQUFJLEVBQUUsS0FBSztZQUNYLE9BQU8sRUFBRSxvQkFBb0I7U0FDOUIsQ0FBQztJQUNGLGFBQWEsRUFBRSxHQUFHO0NBQ25CLENBQUM7QUFFRixNQUFNLCtCQUErQixHQUFHO0lBQ3RDLEtBQUssRUFBRSw2QkFBNkI7SUFDcEMsV0FBVyxFQUFFLElBQUk7SUFDakIsUUFBUSxFQUFFLHNCQUFzQjtJQUNoQyxVQUFVLEVBQUUsQ0FBQztZQUNYLElBQUksRUFBRSxXQUFXO1lBQ2pCLE9BQU8sRUFBRSxVQUFVO1NBQ3BCLENBQUM7SUFDRixhQUFhLEVBQUUsR0FBRztDQUNuQixDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRztJQUM5QixLQUFLLEVBQUUsNkJBQTZCO0lBQ3BDLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLFFBQVEsRUFBRSxzQkFBc0I7SUFDaEMsVUFBVSxFQUFFLENBQUM7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bSAnaHR0cHMnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIG5vY2sgZnJvbSAnbm9jayc7XG5pbXBvcnQgKiBhcyBsb2dnaW5nIGZyb20gJy4uL2xpYi9sb2dnaW5nJztcbmltcG9ydCB7XG4gIENhY2hlZERhdGFTb3VyY2UsXG4gIGZpbHRlck5vdGljZXMsXG4gIGZvcm1hdE5vdGljZXMsXG4gIGdlbmVyYXRlTWVzc2FnZSxcbiAgTm90aWNlLFxuICBXZWJzaXRlTm90aWNlRGF0YVNvdXJjZSxcbn0gZnJvbSAnLi4vbGliL25vdGljZXMnO1xuaW1wb3J0ICogYXMgdmVyc2lvbiBmcm9tICcuLi9saWIvdmVyc2lvbic7XG5cbmNvbnN0IEJBU0lDX05PVElDRSA9IHtcbiAgdGl0bGU6ICdUb2dnbGluZyBvZmYgYXV0b19kZWxldGVfb2JqZWN0cyBmb3IgQnVja2V0IGVtcHRpZXMgdGhlIGJ1Y2tldCcsXG4gIGlzc3VlTnVtYmVyOiAxNjYwMyxcbiAgb3ZlcnZpZXc6ICdJZiBhIHN0YWNrIGlzIGRlcGxveWVkIHdpdGggYW4gUzMgYnVja2V0IHdpdGggYXV0b19kZWxldGVfb2JqZWN0cz1UcnVlLCBhbmQgdGhlbiByZS1kZXBsb3llZCB3aXRoIGF1dG9fZGVsZXRlX29iamVjdHM9RmFsc2UsIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgYnVja2V0IHdpbGwgYmUgZGVsZXRlZC4nLFxuICBjb21wb25lbnRzOiBbe1xuICAgIG5hbWU6ICdjbGknLFxuICAgIHZlcnNpb246ICc8PTEuMTI2LjAnLFxuICB9XSxcbiAgc2NoZW1hVmVyc2lvbjogJzEnLFxufTtcblxuY29uc3QgTVVMVElQTEVfQUZGRUNURURfVkVSU0lPTlNfTk9USUNFID0ge1xuICB0aXRsZTogJ0Vycm9yIHdoZW4gYnVpbGRpbmcgRUtTIGNsdXN0ZXIgd2l0aCBtb25vY2RrIGltcG9ydCcsXG4gIGlzc3VlTnVtYmVyOiAxNzA2MSxcbiAgb3ZlcnZpZXc6ICdXaGVuIHVzaW5nIG1vbm9jZGsvYXdzLWVrcyB0byBidWlsZCBhIHN0YWNrIGNvbnRhaW5pbmcgYW4gRUtTIGNsdXN0ZXIsIGVycm9yIGlzIHRocm93biBhYm91dCBtaXNzaW5nIGxhbWJkYS1sYXllci1ub2RlLXByb3h5LWFnZW50L2xheWVyL3BhY2thZ2UuanNvbi4nLFxuICBjb21wb25lbnRzOiBbe1xuICAgIG5hbWU6ICdjbGknLFxuICAgIHZlcnNpb246ICc8MS4xMzAuMCA+PTEuMTI2LjAnLFxuICB9XSxcbiAgc2NoZW1hVmVyc2lvbjogJzEnLFxufTtcblxuY29uc3QgRlJBTUVXT1JLXzJfMV8wX0FGRkVDVEVEX05PVElDRSA9IHtcbiAgdGl0bGU6ICdSZWdyZXNzaW9uIG9uIG1vZHVsZSBmb29iYXInLFxuICBpc3N1ZU51bWJlcjogMTIzNCxcbiAgb3ZlcnZpZXc6ICdTb21lIGJ1ZyBkZXNjcmlwdGlvbicsXG4gIGNvbXBvbmVudHM6IFt7XG4gICAgbmFtZTogJ2ZyYW1ld29yaycsXG4gICAgdmVyc2lvbjogJzw9IDIuMS4wJyxcbiAgfV0sXG4gIHNjaGVtYVZlcnNpb246ICcxJyxcbn07XG5cbmNvbnN0IE5PVElDRV9GT1JfQVBJR0FURVdBWVYyID0ge1xuICB0aXRsZTogJ1JlZ3Jlc3Npb24gb24gbW9kdWxlIGZvb2JhcicsXG4gIGlzc3VlTnVtYmVyOiAxMjM0LFxuICBvdmVydmlldzogJ1NvbWUgYnVnIGRlc2NyaXB0aW9uJyxcbiAgY29tcG9uZW50czogW3tcbiAgICBuYW1lOiAnQGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi1hbHBoYS4nLFxuICAgIHZlcnNpb246ICc8PSAyLjEzLjAtYWxwaGEuMCcsXG4gIH1dLFxuICBzY2hlbWFWZXJzaW9uOiAnMScsXG59O1xuXG5jb25zdCBOT1RJQ0VfRk9SX0FQSUdBVEVXQVkgPSB7XG4gIHRpdGxlOiAnUmVncmVzc2lvbiBvbiBtb2R1bGUgZm9vYmFyJyxcbiAgaXNzdWVOdW1iZXI6IDEyMzQsXG4gIG92ZXJ2aWV3OiAnU29tZSBidWcgZGVzY3JpcHRpb24nLFxuICBjb21wb25lbnRzOiBbe1xuICAgIG5hbWU6ICdAYXdzLWNkay9hd3MtYXBpZ2F0ZXdheScsXG4gICAgdmVyc2lvbjogJzw9IDIuMTMuMC1hbHBoYS4wJyxcbiAgfV0sXG4gIHNjaGVtYVZlcnNpb246ICcxJyxcbn07XG5cbmNvbnN0IE5PVElDRV9GT1JfQVBJR0FURVdBWVYyX0NGTl9TVEFHRSA9IHtcbiAgdGl0bGU6ICdSZWdyZXNzaW9uIG9uIG1vZHVsZSBmb29iYXInLFxuICBpc3N1ZU51bWJlcjogMTIzNCxcbiAgb3ZlcnZpZXc6ICdTb21lIGJ1ZyBkZXNjcmlwdGlvbicsXG4gIGNvbXBvbmVudHM6IFt7XG4gICAgbmFtZTogJ2F3cy1jZGstbGliLmF3c19hcGlnYXRld2F5djIuQ2ZuU3RhZ2UnLFxuICAgIHZlcnNpb246ICc8PSAyLjEzLjAtYWxwaGEuMCcsXG4gIH1dLFxuICBzY2hlbWFWZXJzaW9uOiAnMScsXG59O1xuXG5kZXNjcmliZSgnY2xpIG5vdGljZXMnLCAoKSA9PiB7XG4gIGJlZm9yZUFsbCgoKSA9PiB7XG4gICAgamVzdFxuICAgICAgLnNweU9uKHZlcnNpb24sICd2ZXJzaW9uTnVtYmVyJylcbiAgICAgIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gJzEuMC4wJyk7XG4gIH0pO1xuXG4gIGFmdGVyQWxsKCgpID0+IHtcbiAgICBqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xuICB9KTtcblxuICBkZXNjcmliZShmb3JtYXROb3RpY2VzLCAoKSA9PiB7XG4gICAgdGVzdCgnY29ycmVjdCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXROb3RpY2VzKFtCQVNJQ19OT1RJQ0VdKVswXTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoYDE2NjAzXHRUb2dnbGluZyBvZmYgYXV0b19kZWxldGVfb2JqZWN0cyBmb3IgQnVja2V0IGVtcHRpZXMgdGhlIGJ1Y2tldFxuXG5cdE92ZXJ2aWV3OiBJZiBhIHN0YWNrIGlzIGRlcGxveWVkIHdpdGggYW4gUzMgYnVja2V0IHdpdGhcblx0ICAgICAgICAgIGF1dG9fZGVsZXRlX29iamVjdHM9VHJ1ZSwgYW5kIHRoZW4gcmUtZGVwbG95ZWQgd2l0aFxuXHQgICAgICAgICAgYXV0b19kZWxldGVfb2JqZWN0cz1GYWxzZSwgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBidWNrZXRcblx0ICAgICAgICAgIHdpbGwgYmUgZGVsZXRlZC5cblxuXHRBZmZlY3RlZCB2ZXJzaW9uczogY2xpOiA8PTEuMTI2LjBcblxuXHRNb3JlIGluZm9ybWF0aW9uIGF0OiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE2NjAzXG5gKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ211bHRpcGxlIGFmZmVjdCB2ZXJzaW9ucycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdE5vdGljZXMoW01VTFRJUExFX0FGRkVDVEVEX1ZFUlNJT05TX05PVElDRV0pWzBdO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChgMTcwNjFcdEVycm9yIHdoZW4gYnVpbGRpbmcgRUtTIGNsdXN0ZXIgd2l0aCBtb25vY2RrIGltcG9ydFxuXG5cdE92ZXJ2aWV3OiBXaGVuIHVzaW5nIG1vbm9jZGsvYXdzLWVrcyB0byBidWlsZCBhIHN0YWNrIGNvbnRhaW5pbmcgYW5cblx0ICAgICAgICAgIEVLUyBjbHVzdGVyLCBlcnJvciBpcyB0aHJvd24gYWJvdXQgbWlzc2luZ1xuXHQgICAgICAgICAgbGFtYmRhLWxheWVyLW5vZGUtcHJveHktYWdlbnQvbGF5ZXIvcGFja2FnZS5qc29uLlxuXG5cdEFmZmVjdGVkIHZlcnNpb25zOiBjbGk6IDwxLjEzMC4wID49MS4xMjYuMFxuXG5cdE1vcmUgaW5mb3JtYXRpb24gYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTcwNjFcbmApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShmaWx0ZXJOb3RpY2VzLCAoKSA9PiB7XG4gICAgdGVzdCgnY29ycmVjdGx5IGZpbHRlciBub3RpY2VzIG9uIGNsaScsICgpID0+IHtcbiAgICAgIGNvbnN0IG5vdGljZXMgPSBbQkFTSUNfTk9USUNFLCBNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0VdO1xuICAgICAgZXhwZWN0KGZpbHRlck5vdGljZXMobm90aWNlcywge1xuICAgICAgICBjbGlWZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgfSkpLnRvRXF1YWwoW0JBU0lDX05PVElDRV0pO1xuXG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhub3RpY2VzLCB7XG4gICAgICAgIGNsaVZlcnNpb246ICcxLjEyOS4wJyxcbiAgICAgIH0pKS50b0VxdWFsKFtNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0VdKTtcblxuICAgICAgZXhwZWN0KGZpbHRlck5vdGljZXMobm90aWNlcywge1xuICAgICAgICBjbGlWZXJzaW9uOiAnMS4xMjYuMCcsXG4gICAgICB9KSkudG9FcXVhbChub3RpY2VzKTtcblxuICAgICAgZXhwZWN0KGZpbHRlck5vdGljZXMobm90aWNlcywge1xuICAgICAgICBjbGlWZXJzaW9uOiAnMS4xMzAuMCcsXG4gICAgICB9KSkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjb3JyZWN0bHkgZmlsdGVyIG5vdGljZXMgb24gZnJhbWV3b3JrJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm90aWNlcyA9IFtGUkFNRVdPUktfMl8xXzBfQUZGRUNURURfTk9USUNFXTtcblxuICAgICAgZXhwZWN0KGZpbHRlck5vdGljZXMobm90aWNlcywge1xuICAgICAgICBvdXRkaXI6IHBhdGguam9pbihfX2Rpcm5hbWUsICdjbG91ZC1hc3NlbWJseS10cmVlcy9idWlsdC13aXRoLTJfMTJfMCcpLFxuICAgICAgfSkpLnRvRXF1YWwoW10pO1xuXG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhub3RpY2VzLCB7XG4gICAgICAgIG91dGRpcjogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Nsb3VkLWFzc2VtYmx5LXRyZWVzL2J1aWx0LXdpdGgtMV8xNDRfMCcpLFxuICAgICAgfSkpLnRvRXF1YWwoW0ZSQU1FV09SS18yXzFfMF9BRkZFQ1RFRF9OT1RJQ0VdKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NvcnJlY3RseSBmaWx0ZXIgbm90aWNlcyBvbiBhcmJpdHJhcnkgbW9kdWxlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG5vdGljZXMgPSBbTk9USUNFX0ZPUl9BUElHQVRFV0FZVjJdO1xuXG4gICAgICAvLyBtb2R1bGUtbGV2ZWwgbWF0Y2hcbiAgICAgIGV4cGVjdChmaWx0ZXJOb3RpY2VzKG5vdGljZXMsIHtcbiAgICAgICAgb3V0ZGlyOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnY2xvdWQtYXNzZW1ibHktdHJlZXMvZXhwZXJpbWVudGFsLW1vZHVsZScpLFxuICAgICAgfSkpLnRvRXF1YWwoW05PVElDRV9GT1JfQVBJR0FURVdBWVYyXSk7XG5cbiAgICAgIC8vIG5vIGFwaWdhdGV3YXl2MiBpbiB0aGUgdHJlZVxuICAgICAgZXhwZWN0KGZpbHRlck5vdGljZXMobm90aWNlcywge1xuICAgICAgICBvdXRkaXI6IHBhdGguam9pbihfX2Rpcm5hbWUsICdjbG91ZC1hc3NlbWJseS10cmVlcy9idWlsdC13aXRoLTJfMTJfMCcpLFxuICAgICAgfSkpLnRvRXF1YWwoW10pO1xuXG4gICAgICAvLyBtb2R1bGUgbmFtZSBtaXNtYXRjaDogYXBpZ2F0ZXdheSAhPSBhcGlnYXRld2F5djJcbiAgICAgIGV4cGVjdChmaWx0ZXJOb3RpY2VzKFtOT1RJQ0VfRk9SX0FQSUdBVEVXQVldLCB7XG4gICAgICAgIG91dGRpcjogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Nsb3VkLWFzc2VtYmx5LXRyZWVzL2V4cGVyaW1lbnRhbC1tb2R1bGUnKSxcbiAgICAgIH0pKS50b0VxdWFsKFtdKTtcblxuICAgICAgLy8gY29uc3RydWN0LWxldmVsIG1hdGNoXG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhbTk9USUNFX0ZPUl9BUElHQVRFV0FZVjJfQ0ZOX1NUQUdFXSwge1xuICAgICAgICBvdXRkaXI6IHBhdGguam9pbihfX2Rpcm5hbWUsICdjbG91ZC1hc3NlbWJseS10cmVlcy9leHBlcmltZW50YWwtbW9kdWxlJyksXG4gICAgICB9KSkudG9FcXVhbChbTk9USUNFX0ZPUl9BUElHQVRFV0FZVjJfQ0ZOX1NUQUdFXSk7XG4gICAgfSk7XG5cbiAgfSk7XG5cbiAgZGVzY3JpYmUoV2Vic2l0ZU5vdGljZURhdGFTb3VyY2UsICgpID0+IHtcbiAgICBjb25zdCBkYXRhU291cmNlID0gbmV3IFdlYnNpdGVOb3RpY2VEYXRhU291cmNlKCk7XG5cbiAgICB0ZXN0KCdyZXR1cm5zIGRhdGEgd2hlbiBkb3dubG9hZCBzdWNjZWVkcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tDYWxsKDIwMCwge1xuICAgICAgICBub3RpY2VzOiBbQkFTSUNfTk9USUNFLCBNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0VdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW0JBU0lDX05PVElDRSwgTVVMVElQTEVfQUZGRUNURURfVkVSU0lPTlNfTk9USUNFXSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXR1cm5zIGFwcHJvcHJpYXRlIGVycm9yIHdoZW4gdGhlIHNlcnZlciByZXR1cm5zIGFuIHVuZXhwZWN0ZWQgc3RhdHVzIGNvZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBtb2NrQ2FsbCg1MDAsIHtcbiAgICAgICAgbm90aWNlczogW0JBU0lDX05PVElDRSwgTVVMVElQTEVfQUZGRUNURURfVkVSU0lPTlNfTk9USUNFXSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBleHBlY3QocmVzdWx0KS5yZWplY3RzLnRvVGhyb3coLzUwMC8pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBhcHByb3ByaWF0ZSBlcnJvciB3aGVuIHRoZSBzZXJ2ZXIgcmV0dXJucyBhbiB1bmV4cGVjdGVkIHN0cnVjdHVyZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG1vY2tDYWxsKDIwMCwge1xuICAgICAgICBmb286IFtCQVNJQ19OT1RJQ0UsIE1VTFRJUExFX0FGRkVDVEVEX1ZFUlNJT05TX05PVElDRV0sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgZXhwZWN0KHJlc3VsdCkucmVqZWN0cy50b1Rocm93KC9rZXkgaXMgbWlzc2luZy8pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBhcHByb3ByaWF0ZSBlcnJvciB3aGVuIHRoZSBzZXJ2ZXIgcmV0dXJucyBpbnZhbGlkIGpzb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBtb2NrQ2FsbCgyMDAsICctMDlhaXNramtqODM4Jyk7XG5cbiAgICAgIGF3YWl0IGV4cGVjdChyZXN1bHQpLnJlamVjdHMudG9UaHJvdygvRmFpbGVkIHRvIHBhcnNlLyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXR1cm5zIGFwcHJvcHJpYXRlIGVycm9yIHdoZW4gSFRUUFMgY2FsbCB0aHJvd3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtb2NrR2V0ID0gamVzdC5zcHlPbihodHRwcywgJ2dldCcpXG4gICAgICAgIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbm5lY3Rpb24nKTsgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgYXdhaXQgZXhwZWN0KHJlc3VsdCkucmVqZWN0cy50b1Rocm93KC9ObyBjb25uZWN0aW9uLyk7XG5cbiAgICAgIG1vY2tHZXQubW9ja1Jlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHVybnMgYXBwcm9wcmlhdGUgZXJyb3Igd2hlbiB0aGUgcmVxdWVzdCBoYXMgYW4gZXJyb3InLCBhc3luYyAoKSA9PiB7XG4gICAgICBub2NrKCdodHRwczovL2NsaS5jZGsuZGV2LXRvb2xzLmF3cy5kZXYnKVxuICAgICAgICAuZ2V0KCcvbm90aWNlcy5qc29uJylcbiAgICAgICAgLnJlcGx5V2l0aEVycm9yKCdETlMgcmVzb2x1dGlvbiBmYWlsZWQnKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YVNvdXJjZS5mZXRjaCgpO1xuXG4gICAgICBhd2FpdCBleHBlY3QocmVzdWx0KS5yZWplY3RzLnRvVGhyb3coL0ROUyByZXNvbHV0aW9uIGZhaWxlZC8pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBhcHByb3ByaWF0ZSBlcnJvciB3aGVuIHRoZSBjb25uZWN0aW9uIHN0YXlzIGlkbGUgZm9yIHRvbyBsb25nJywgYXN5bmMgKCkgPT4ge1xuICAgICAgbm9jaygnaHR0cHM6Ly9jbGkuY2RrLmRldi10b29scy5hd3MuZGV2JylcbiAgICAgICAgLmdldCgnL25vdGljZXMuanNvbicpXG4gICAgICAgIC5kZWxheUNvbm5lY3Rpb24oMzUwMClcbiAgICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICAgIG5vdGljZXM6IFtCQVNJQ19OT1RJQ0VdLFxuICAgICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YVNvdXJjZS5mZXRjaCgpO1xuXG4gICAgICBhd2FpdCBleHBlY3QocmVzdWx0KS5yZWplY3RzLnRvVGhyb3coL3RpbWVkIG91dC8pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBlbXB0eSBhcnJheSB3aGVuIHRoZSByZXF1ZXN0IHRha2VzIHRvbyBsb25nIHRvIGZpbmlzaCcsIGFzeW5jICgpID0+IHtcbiAgICAgIG5vY2soJ2h0dHBzOi8vY2xpLmNkay5kZXYtdG9vbHMuYXdzLmRldicpXG4gICAgICAgIC5nZXQoJy9ub3RpY2VzLmpzb24nKVxuICAgICAgICAuZGVsYXlCb2R5KDM1MDApXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBub3RpY2VzOiBbQkFTSUNfTk9USUNFXSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgYXdhaXQgZXhwZWN0KHJlc3VsdCkucmVqZWN0cy50b1Rocm93KC90aW1lZCBvdXQvKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1vY2tDYWxsKHN0YXR1c0NvZGU6IG51bWJlciwgYm9keTogYW55KTogUHJvbWlzZTxOb3RpY2VbXT4ge1xuICAgICAgbm9jaygnaHR0cHM6Ly9jbGkuY2RrLmRldi10b29scy5hd3MuZGV2JylcbiAgICAgICAgLmdldCgnL25vdGljZXMuanNvbicpXG4gICAgICAgIC5yZXBseShzdGF0dXNDb2RlLCBib2R5KTtcblxuICAgICAgcmV0dXJuIGRhdGFTb3VyY2UuZmV0Y2goKTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKENhY2hlZERhdGFTb3VyY2UsICgpID0+IHtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2NhY2hlLmpzb24nKTtcbiAgICBjb25zdCBjYWNoZWREYXRhID0gW0JBU0lDX05PVElDRV07XG4gICAgY29uc3QgZnJlc2hEYXRhID0gW01VTFRJUExFX0FGRkVDVEVEX1ZFUlNJT05TX05PVElDRV07XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZU5hbWUsICcnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJpZXZlcyBkYXRhIGZyb20gdGhlIGRlbGVnYXRlIGNhY2hlIHdoZW4gdGhlIGZpbGUgaXMgZW1wdHknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhU291cmNlID0gZGF0YVNvdXJjZVdpdGhEZWxlZ2F0ZVJldHVybmluZyhmcmVzaERhdGEpO1xuXG4gICAgICBjb25zdCBub3RpY2VzID0gYXdhaXQgZGF0YVNvdXJjZS5mZXRjaCgpO1xuXG4gICAgICBleHBlY3Qobm90aWNlcykudG9FcXVhbChmcmVzaERhdGEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0cmlldmVzIGRhdGEgZnJvbSB0aGUgZmlsZSB3aGVuIHRoZSBkYXRhIGlzIHN0aWxsIHZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZnMud3JpdGVKc29uU3luYyhmaWxlTmFtZSwge1xuICAgICAgICBub3RpY2VzOiBjYWNoZWREYXRhLFxuICAgICAgICBleHBpcmF0aW9uOiBEYXRlLm5vdygpICsgMTAwMDAsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBkYXRhU291cmNlV2l0aERlbGVnYXRlUmV0dXJuaW5nKGZyZXNoRGF0YSk7XG5cbiAgICAgIGNvbnN0IG5vdGljZXMgPSBhd2FpdCBkYXRhU291cmNlLmZldGNoKCk7XG5cbiAgICAgIGV4cGVjdChub3RpY2VzKS50b0VxdWFsKGNhY2hlZERhdGEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0cmlldmVzIGRhdGEgZnJvbSB0aGUgZGVsZWdhdGUgd2hlbiB0aGUgZGF0YSBpcyBleHBpcmVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZnMud3JpdGVKc29uU3luYyhmaWxlTmFtZSwge1xuICAgICAgICBub3RpY2VzOiBjYWNoZWREYXRhLFxuICAgICAgICBleHBpcmF0aW9uOiAwLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhU291cmNlID0gZGF0YVNvdXJjZVdpdGhEZWxlZ2F0ZVJldHVybmluZyhmcmVzaERhdGEpO1xuXG4gICAgICBjb25zdCBub3RpY2VzID0gYXdhaXQgZGF0YVNvdXJjZS5mZXRjaCgpO1xuXG4gICAgICBleHBlY3Qobm90aWNlcykudG9FcXVhbChmcmVzaERhdGEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0cmlldmVzIGRhdGEgZnJvbSB0aGUgZGVsZWdhdGUgd2hlbiB0aGUgZmlsZSBjYW5ub3QgYmUgcmVhZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRlYnVnU3B5ID0gamVzdC5zcHlPbihsb2dnaW5nLCAnZGVidWcnKTtcblxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoJ2RvZXMtbm90LWV4aXN0Lmpzb24nKSkge1xuICAgICAgICBmcy51bmxpbmtTeW5jKCdkb2VzLW5vdC1leGlzdC5qc29uJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBkYXRhU291cmNlV2l0aERlbGVnYXRlUmV0dXJuaW5nKGZyZXNoRGF0YSwgJ2RvZXMtbm90LWV4aXN0Lmpzb24nKTtcblxuICAgICAgY29uc3Qgbm90aWNlcyA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KG5vdGljZXMpLnRvRXF1YWwoZnJlc2hEYXRhKTtcbiAgICAgIGV4cGVjdChkZWJ1Z1NweSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgICAgZGVidWdTcHkubW9ja1Jlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJpZXZlZCBkYXRhIGZyb20gdGhlIGRlbGVnYXRlIHdoZW4gaXQgaXMgY29uZmlndXJlZCB0byBpZ25vcmUgdGhlIGNhY2hlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZnMud3JpdGVKc29uU3luYyhmaWxlTmFtZSwge1xuICAgICAgICBub3RpY2VzOiBjYWNoZWREYXRhLFxuICAgICAgICBleHBpcmF0aW9uOiBEYXRlLm5vdygpICsgMTAwMDAsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBkYXRhU291cmNlV2l0aERlbGVnYXRlUmV0dXJuaW5nKGZyZXNoRGF0YSwgZmlsZU5hbWUsIHRydWUpO1xuXG4gICAgICBjb25zdCBub3RpY2VzID0gYXdhaXQgZGF0YVNvdXJjZS5mZXRjaCgpO1xuXG4gICAgICBleHBlY3Qobm90aWNlcykudG9FcXVhbChmcmVzaERhdGEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZXJyb3IgaW4gZGVsZWdhdGUgZ2V0cyB0dXJuZWQgaW50byBlbXB0eSByZXN1bHQgYnkgY2FjaGVkIHNvdXJjZScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBkZWxlZ2F0ZSA9IHtcbiAgICAgICAgZmV0Y2g6IGplc3QuZm4oKS5tb2NrUmVqZWN0ZWRWYWx1ZShuZXcgRXJyb3IoJ2ZldGNoaW5nIGZhaWxlZCcpKSxcbiAgICAgIH07XG4gICAgICBjb25zdCBkYXRhU291cmNlID0gbmV3IENhY2hlZERhdGFTb3VyY2UoZmlsZU5hbWUsIGRlbGVnYXRlLCB0cnVlKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3Qgbm90aWNlcyA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KG5vdGljZXMpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gZGF0YVNvdXJjZVdpdGhEZWxlZ2F0ZVJldHVybmluZyhub3RpY2VzOiBOb3RpY2VbXSwgZmlsZTogc3RyaW5nID0gZmlsZU5hbWUsIGlnbm9yZUNhY2hlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGRlbGVnYXRlID0ge1xuICAgICAgICBmZXRjaDogamVzdC5mbigpLFxuICAgICAgfTtcblxuICAgICAgZGVsZWdhdGUuZmV0Y2gubW9ja1Jlc29sdmVkVmFsdWUobm90aWNlcyk7XG4gICAgICByZXR1cm4gbmV3IENhY2hlZERhdGFTb3VyY2UoZmlsZSwgZGVsZWdhdGUsIGlnbm9yZUNhY2hlKTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKGdlbmVyYXRlTWVzc2FnZSwgKCkgPT4ge1xuICAgIHRlc3QoJ2RvZXMgbm90IHNob3cgYW55dGhpbmcgd2hlbiB0aGVyZSBhcmUgbm8gbm90aWNlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBjcmVhdGVEYXRhU291cmNlKCk7XG4gICAgICBkYXRhU291cmNlLmZldGNoLm1vY2tSZXNvbHZlZFZhbHVlKFtdKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2VuZXJhdGVNZXNzYWdlKGRhdGFTb3VyY2UsIHtcbiAgICAgICAgYWNrbm93bGVkZ2VkSXNzdWVOdW1iZXJzOiBbXSxcbiAgICAgICAgb3V0ZGlyOiAnL3RtcCcsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzaG93cyBub3RpY2VzIHRoYXQgcGFzcyB0aGUgZmlsdGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGNyZWF0ZURhdGFTb3VyY2UoKTtcbiAgICAgIGRhdGFTb3VyY2UuZmV0Y2gubW9ja1Jlc29sdmVkVmFsdWUoW0JBU0lDX05PVElDRSwgTVVMVElQTEVfQUZGRUNURURfVkVSU0lPTlNfTk9USUNFXSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdlbmVyYXRlTWVzc2FnZShkYXRhU291cmNlLCB7XG4gICAgICAgIGFja25vd2xlZGdlZElzc3VlTnVtYmVyczogWzE3MDYxXSxcbiAgICAgICAgb3V0ZGlyOiAnL3RtcCcsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChgXG5OT1RJQ0VTXG5cbjE2NjAzXHRUb2dnbGluZyBvZmYgYXV0b19kZWxldGVfb2JqZWN0cyBmb3IgQnVja2V0IGVtcHRpZXMgdGhlIGJ1Y2tldFxuXG5cdE92ZXJ2aWV3OiBJZiBhIHN0YWNrIGlzIGRlcGxveWVkIHdpdGggYW4gUzMgYnVja2V0IHdpdGhcblx0ICAgICAgICAgIGF1dG9fZGVsZXRlX29iamVjdHM9VHJ1ZSwgYW5kIHRoZW4gcmUtZGVwbG95ZWQgd2l0aFxuXHQgICAgICAgICAgYXV0b19kZWxldGVfb2JqZWN0cz1GYWxzZSwgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBidWNrZXRcblx0ICAgICAgICAgIHdpbGwgYmUgZGVsZXRlZC5cblxuXHRBZmZlY3RlZCB2ZXJzaW9uczogY2xpOiA8PTEuMTI2LjBcblxuXHRNb3JlIGluZm9ybWF0aW9uIGF0OiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE2NjAzXG5cblxuSWYgeW91IGRvbuKAmXQgd2FudCB0byBzZWUgYSBub3RpY2UgYW55bW9yZSwgdXNlIFwiY2RrIGFja25vd2xlZGdlIDxpZD5cIi4gRm9yIGV4YW1wbGUsIFwiY2RrIGFja25vd2xlZGdlIDE2NjAzXCIuYCk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRhU291cmNlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmV0Y2g6IGplc3QuZm4oKSxcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn0pO1xuIl19
|