aws-cdk 2.32.1 → 2.33.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 +9 -5
- package/build-info.json +2 -2
- package/lib/api/cloudformation-deployments.d.ts +1 -1
- package/lib/api/cloudformation-deployments.js +3 -3
- package/lib/api/nested-stack-helpers.d.ts +13 -13
- package/lib/api/nested-stack-helpers.js +7 -7
- package/lib/api/util/cloudformation.d.ts +3 -2
- package/lib/api/util/cloudformation.js +9 -5
- package/lib/bridge.js +25 -15
- package/lib/cdk-toolkit.d.ts +7 -0
- package/lib/cdk-toolkit.js +2 -2
- package/lib/cli.js +4 -2
- package/lib/index.js +13346 -5260
- package/lib/init-templates/app/typescript/package.json +1 -1
- package/lib/init-templates/sample-app/typescript/package.json +1 -1
- package/lib/notices.js +9 -15
- package/lib/setup-sandbox.js +6 -3
- package/package.json +14 -13
- package/test/util/cloudformation.test.js +31 -4
package/lib/notices.js
CHANGED
|
@@ -63,8 +63,15 @@ class WebsiteNoticeDataSource {
|
|
|
63
63
|
fetch() {
|
|
64
64
|
const timeout = 3000;
|
|
65
65
|
return new Promise((resolve, reject) => {
|
|
66
|
+
let req;
|
|
67
|
+
let timer = setTimeout(() => {
|
|
68
|
+
if (req) {
|
|
69
|
+
req.destroy(new Error('Request timed out'));
|
|
70
|
+
}
|
|
71
|
+
}, timeout);
|
|
72
|
+
timer.unref();
|
|
66
73
|
try {
|
|
67
|
-
|
|
74
|
+
req = https.get('https://cli.cdk.dev-tools.aws.dev/notices.json', res => {
|
|
68
75
|
if (res.statusCode === 200) {
|
|
69
76
|
res.setEncoding('utf8');
|
|
70
77
|
let rawData = '';
|
|
@@ -93,19 +100,6 @@ class WebsiteNoticeDataSource {
|
|
|
93
100
|
}
|
|
94
101
|
});
|
|
95
102
|
req.on('error', reject);
|
|
96
|
-
req.on('timeout', () => {
|
|
97
|
-
// The 'timeout' event doesn't stop anything by itself, it just
|
|
98
|
-
// notifies that it has been long time since we saw bytes.
|
|
99
|
-
// In our case, we want to give up.
|
|
100
|
-
req.destroy(new Error('Request timed out'));
|
|
101
|
-
});
|
|
102
|
-
// It's not like I don't *trust* the 'timeout' event... but I don't trust it.
|
|
103
|
-
// Add a backup timer that will destroy the request after all.
|
|
104
|
-
// (This is at least necessary to make the tests pass, but that's probably because of 'nock'.
|
|
105
|
-
// It's not clear whether users will hit this).
|
|
106
|
-
setTimeout(() => {
|
|
107
|
-
req.destroy(new Error('Request timed out. You should never see this message; if you do, please let us know at https://github.com/aws/aws-cdk/issues'));
|
|
108
|
-
}, timeout + 200);
|
|
109
103
|
}
|
|
110
104
|
catch (e) {
|
|
111
105
|
reject(new Error(`HTTPS 'get' call threw an error: ${e.message}`));
|
|
@@ -300,4 +294,4 @@ function some(node, predicate) {
|
|
|
300
294
|
return false;
|
|
301
295
|
}
|
|
302
296
|
}
|
|
303
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm5vdGljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsaUNBQWlDO0FBQ2pDLHVDQUFnRDtBQUNoRCxpQ0FBaUM7QUFDakMsb0RBQWlEO0FBQ2pELHVDQUEwQztBQUUxQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUFXLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztBQXVCMUQsS0FBSyxVQUFVLGNBQWM7SUFDbEMsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsT0FBTyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDNUIsQ0FBQztBQUhELHdDQUdDO0FBRU0sS0FBSyxVQUFVLGNBQWMsQ0FBQyxLQUEwQjs7SUFDN0QsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLE9BQUMsS0FBSyxDQUFDLFdBQVcsbUNBQUksS0FBSyxDQUFDLENBQUM7SUFDbkUsZUFBSyxDQUFDLE1BQU0sZUFBZSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUpELHdDQUlDO0FBRU0sS0FBSyxVQUFVLGVBQWUsQ0FBQyxVQUE0QixFQUFFLEtBQTBCO0lBQzVGLE1BQU0sSUFBSSxHQUFHLE1BQU0sVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUU7UUFDMUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1FBQ3BCLHdCQUF3QixFQUFFLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQztLQUNsRSxDQUFDLENBQUM7SUFFSCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzlCLE1BQU0sa0JBQWtC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SSxJQUFJLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztTQUFFO1FBRTVDLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFO2dCQUN4QyxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgZGVidWcsIHByaW50LCB0cmFjZSB9IGZyb20gJy4vbG9nZ2luZyc7XG5pbXBvcnQgeyBmbGF0TWFwIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IGNka0NhY2hlRGlyIH0gZnJvbSAnLi91dGlsL2RpcmVjdG9yaWVzJztcbmltcG9ydCB7IHZlcnNpb25OdW1iZXIgfSBmcm9tICcuL3ZlcnNpb24nO1xuXG5jb25zdCBDQUNIRV9GSUxFX1BBVEggPSBwYXRoLmpvaW4oY2RrQ2FjaGVEaXIoKSwgJ25vdGljZXMuanNvbicpO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpc3BsYXlOb3RpY2VzUHJvcHMge1xuICAvKipcbiAgICogVGhlIGNsb3VkIGFzc2VtYmx5IGRpcmVjdG9yeS4gVXN1YWxseSAnY2RrLm91dCcuXG4gICAqL1xuICByZWFkb25seSBvdXRkaXI6IHN0cmluZztcblxuICAvKipcbiAgICogSXNzdWUgbnVtYmVycyBvZiBub3RpY2VzIHRoYXQgaGF2ZSBiZWVuIGFja25vd2xlZGdlZCBieSBhIHVzZXJcbiAgICogb2YgdGhlIGN1cnJlbnQgQ0RLIHJlcG9zaXRvcnkuIFRoZXNlIG5vdGljZXMgd2lsbCBiZSBza2lwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNrbm93bGVkZ2VkSXNzdWVOdW1iZXJzOiBudW1iZXJbXTtcblxuICAvKipcbiAgICogV2hldGhlciBjYWNoZWQgbm90aWNlcyBzaG91bGQgYmUgaWdub3JlZC4gU2V0dGluZyB0aGlzIHByb3BlcnR5XG4gICAqIHRvIHRydWUgd2lsbCBmb3JjZSB0aGUgQ0xJIHRvIGRvd25sb2FkIGZyZXNoIGRhdGFcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUNhY2hlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hOb3RpY2VzKCkge1xuICBjb25zdCBkYXRhU291cmNlID0gZGF0YVNvdXJjZVJlZmVyZW5jZShmYWxzZSk7XG4gIHJldHVybiBkYXRhU291cmNlLmZldGNoKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkaXNwbGF5Tm90aWNlcyhwcm9wczogRGlzcGxheU5vdGljZXNQcm9wcykge1xuICBjb25zdCBkYXRhU291cmNlID0gZGF0YVNvdXJjZVJlZmVyZW5jZShwcm9wcy5pZ25vcmVDYWNoZSA/PyBmYWxzZSk7XG4gIHByaW50KGF3YWl0IGdlbmVyYXRlTWVzc2FnZShkYXRhU291cmNlLCBwcm9wcykpO1xuICByZXR1cm4gMDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlTWVzc2FnZShkYXRhU291cmNlOiBOb3RpY2VEYXRhU291cmNlLCBwcm9wczogRGlzcGxheU5vdGljZXNQcm9wcykge1xuICBjb25zdCBkYXRhID0gYXdhaXQgZGF0YVNvdXJjZS5mZXRjaCgpO1xuICBjb25zdCBmaWx0ZXJlZE5vdGljZXMgPSBmaWx0ZXJOb3RpY2VzKGRhdGEsIHtcbiAgICBvdXRkaXI6IHByb3BzLm91dGRpcixcbiAgICBhY2tub3dsZWRnZWRJc3N1ZU51bWJlcnM6IG5ldyBTZXQocHJvcHMuYWNrbm93bGVkZ2VkSXNzdWVOdW1iZXJzKSxcbiAgfSk7XG5cbiAgaWYgKGZpbHRlcmVkTm90aWNlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgaW5kaXZpZHVhbE1lc3NhZ2VzID0gZm9ybWF0Tm90aWNlcyhmaWx0ZXJlZE5vdGljZXMpO1xuICAgIHJldHVybiBmaW5hbE1lc3NhZ2UoaW5kaXZpZHVhbE1lc3NhZ2VzLCBmaWx0ZXJlZE5vdGljZXNbMF0uaXNzdWVOdW1iZXIpO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZGF0YVNvdXJjZVJlZmVyZW5jZShpZ25vcmVDYWNoZTogYm9vbGVhbik6IE5vdGljZURhdGFTb3VyY2Uge1xuICByZXR1cm4gbmV3IENhY2hlZERhdGFTb3VyY2UoQ0FDSEVfRklMRV9QQVRILCBuZXcgV2Vic2l0ZU5vdGljZURhdGFTb3VyY2UoKSwgaWdub3JlQ2FjaGUpO1xufVxuXG5mdW5jdGlvbiBmaW5hbE1lc3NhZ2UoaW5kaXZpZHVhbE1lc3NhZ2VzOiBzdHJpbmdbXSwgZXhhbXBsZU51bWJlcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICAnXFxuTk9USUNFUycsXG4gICAgLi4uaW5kaXZpZHVhbE1lc3NhZ2VzLFxuICAgIGBJZiB5b3UgZG9u4oCZdCB3YW50IHRvIHNlZSBhIG5vdGljZSBhbnltb3JlLCB1c2UgXCJjZGsgYWNrbm93bGVkZ2UgPGlkPlwiLiBGb3IgZXhhbXBsZSwgXCJjZGsgYWNrbm93bGVkZ2UgJHtleGFtcGxlTnVtYmVyfVwiLmAsXG4gIF0uam9pbignXFxuXFxuJyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyTm90aWNlT3B0aW9ucyB7XG4gIG91dGRpcj86IHN0cmluZyxcbiAgY2xpVmVyc2lvbj86IHN0cmluZyxcbiAgZnJhbWV3b3JrVmVyc2lvbj86IHN0cmluZyxcbiAgYWNrbm93bGVkZ2VkSXNzdWVOdW1iZXJzPzogU2V0PG51bWJlcj4sXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJOb3RpY2VzKGRhdGE6IE5vdGljZVtdLCBvcHRpb25zOiBGaWx0ZXJOb3RpY2VPcHRpb25zKTogTm90aWNlW10ge1xuICBjb25zdCBmaWx0ZXIgPSBuZXcgTm90aWNlRmlsdGVyKHtcbiAgICBjbGlWZXJzaW9uOiBvcHRpb25zLmNsaVZlcnNpb24gPz8gdmVyc2lvbk51bWJlcigpLFxuICAgIGFja25vd2xlZGdlZElzc3VlTnVtYmVyczogb3B0aW9ucy5hY2tub3dsZWRnZWRJc3N1ZU51bWJlcnMgPz8gbmV3IFNldCgpLFxuICAgIHRyZWU6IGxvYWRUcmVlKG9wdGlvbnMub3V0ZGlyID8/ICdjZGsub3V0JykudHJlZSxcbiAgfSk7XG4gIHJldHVybiBkYXRhLmZpbHRlcihub3RpY2UgPT4gZmlsdGVyLmFwcGx5KG5vdGljZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Tm90aWNlcyhkYXRhOiBOb3RpY2VbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGRhdGEubWFwKGZvcm1hdE5vdGljZSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50IHtcbiAgbmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgaXNzdWVOdW1iZXI6IG51bWJlcjtcbiAgb3ZlcnZpZXc6IHN0cmluZztcbiAgY29tcG9uZW50czogQ29tcG9uZW50W107XG4gIHNjaGVtYVZlcnNpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpY2VEYXRhU291cmNlIHtcbiAgZmV0Y2goKTogUHJvbWlzZTxOb3RpY2VbXT4sXG59XG5cbmV4cG9ydCBjbGFzcyBXZWJzaXRlTm90aWNlRGF0YVNvdXJjZSBpbXBsZW1lbnRzIE5vdGljZURhdGFTb3VyY2Uge1xuICBmZXRjaCgpOiBQcm9taXNlPE5vdGljZVtdPiB7XG4gICAgY29uc3QgdGltZW91dCA9IDMwMDA7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcSA9IGh0dHBzLmdldCgnaHR0cHM6Ly9jbGkuY2RrLmRldi10b29scy5hd3MuZGV2L25vdGljZXMuanNvbicsXG4gICAgICAgICAgeyB0aW1lb3V0IH0sXG4gICAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgIHJlcy5zZXRFbmNvZGluZygndXRmOCcpO1xuICAgICAgICAgICAgICBsZXQgcmF3RGF0YSA9ICcnO1xuICAgICAgICAgICAgICByZXMub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgICByYXdEYXRhICs9IGNodW5rO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHJhd0RhdGEpLm5vdGljZXMgYXMgTm90aWNlW107XG4gICAgICAgICAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiJ25vdGljZXMnIGtleSBpcyBtaXNzaW5nXCIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVidWcoJ05vdGljZXMgcmVmcmVzaGVkJyk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEgPz8gW10pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSBub3RpY2VzOiAke2UubWVzc2FnZX1gKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmVzLm9uKCdlcnJvcicsIGUgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBub3RpY2VzOiAke2UubWVzc2FnZX1gKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIG5vdGljZXMuIFN0YXR1cyBjb2RlOiAke3Jlcy5zdGF0dXNDb2RlfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgcmVxLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHJlcS5vbigndGltZW91dCcsICgpID0+IHtcbiAgICAgICAgICAvLyBUaGUgJ3RpbWVvdXQnIGV2ZW50IGRvZXNuJ3Qgc3RvcCBhbnl0aGluZyBieSBpdHNlbGYsIGl0IGp1c3RcbiAgICAgICAgICAvLyBub3RpZmllcyB0aGF0IGl0IGhhcyBiZWVuIGxvbmcgdGltZSBzaW5jZSB3ZSBzYXcgYnl0ZXMuXG4gICAgICAgICAgLy8gSW4gb3VyIGNhc2UsIHdlIHdhbnQgdG8gZ2l2ZSB1cC5cbiAgICAgICAgICByZXEuZGVzdHJveShuZXcgRXJyb3IoJ1JlcXVlc3QgdGltZWQgb3V0JykpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJdCdzIG5vdCBsaWtlIEkgZG9uJ3QgKnRydXN0KiB0aGUgJ3RpbWVvdXQnIGV2ZW50Li4uIGJ1dCBJIGRvbid0IHRydXN0IGl0LlxuICAgICAgICAvLyBBZGQgYSBiYWNrdXAgdGltZXIgdGhhdCB3aWxsIGRlc3Ryb3kgdGhlIHJlcXVlc3QgYWZ0ZXIgYWxsLlxuICAgICAgICAvLyAoVGhpcyBpcyBhdCBsZWFzdCBuZWNlc3NhcnkgdG8gbWFrZSB0aGUgdGVzdHMgcGFzcywgYnV0IHRoYXQncyBwcm9iYWJseSBiZWNhdXNlIG9mICdub2NrJy5cbiAgICAgICAgLy8gSXQncyBub3QgY2xlYXIgd2hldGhlciB1c2VycyB3aWxsIGhpdCB0aGlzKS5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVxLmRlc3Ryb3kobmV3IEVycm9yKCdSZXF1ZXN0IHRpbWVkIG91dC4gWW91IHNob3VsZCBuZXZlciBzZWUgdGhpcyBtZXNzYWdlOyBpZiB5b3UgZG8sIHBsZWFzZSBsZXQgdXMga25vdyBhdCBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzJykpO1xuICAgICAgICB9LCB0aW1lb3V0ICsgMjAwKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgSFRUUFMgJ2dldCcgY2FsbCB0aHJldyBhbiBlcnJvcjogJHtlLm1lc3NhZ2V9YCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmludGVyZmFjZSBDYWNoZWROb3RpY2VzIHtcbiAgZXhwaXJhdGlvbjogbnVtYmVyLFxuICBub3RpY2VzOiBOb3RpY2VbXSxcbn1cblxuY29uc3QgVElNRV9UT19MSVZFX1NVQ0NFU1MgPSA2MCAqIDYwICogMTAwMDsgLy8gMSBob3VyXG5jb25zdCBUSU1FX1RPX0xJVkVfRVJST1IgPSAxICogNjAgKiAxMDAwOyAvLyAxIG1pbnV0ZVxuXG5leHBvcnQgY2xhc3MgQ2FjaGVkRGF0YVNvdXJjZSBpbXBsZW1lbnRzIE5vdGljZURhdGFTb3VyY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRhU291cmNlOiBOb3RpY2VEYXRhU291cmNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2tpcENhY2hlPzogYm9vbGVhbikge1xuICB9XG5cbiAgYXN5bmMgZmV0Y2goKTogUHJvbWlzZTxOb3RpY2VbXT4ge1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSBhd2FpdCB0aGlzLmxvYWQoKTtcbiAgICBjb25zdCBkYXRhID0gY2FjaGVkRGF0YS5ub3RpY2VzO1xuICAgIGNvbnN0IGV4cGlyYXRpb24gPSBjYWNoZWREYXRhLmV4cGlyYXRpb24gPz8gMDtcblxuICAgIGlmIChEYXRlLm5vdygpID4gZXhwaXJhdGlvbiB8fCB0aGlzLnNraXBDYWNoZSkge1xuICAgICAgY29uc3QgZnJlc2hEYXRhID0gYXdhaXQgdGhpcy5mZXRjaElubmVyKCk7XG4gICAgICBhd2FpdCB0aGlzLnNhdmUoZnJlc2hEYXRhKTtcbiAgICAgIHJldHVybiBmcmVzaERhdGEubm90aWNlcztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoYFJlYWRpbmcgY2FjaGVkIG5vdGljZXMgZnJvbSAke3RoaXMuZmlsZU5hbWV9YCk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoSW5uZXIoKTogUHJvbWlzZTxDYWNoZWROb3RpY2VzPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cGlyYXRpb246IERhdGUubm93KCkgKyBUSU1FX1RPX0xJVkVfU1VDQ0VTUyxcbiAgICAgICAgbm90aWNlczogYXdhaXQgdGhpcy5kYXRhU291cmNlLmZldGNoKCksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGRlYnVnKGBDb3VsZCBub3QgcmVmcmVzaCBub3RpY2VzOiAke2V9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBleHBpcmF0aW9uOiBEYXRlLm5vdygpICsgVElNRV9UT19MSVZFX0VSUk9SLFxuICAgICAgICBub3RpY2VzOiBbXSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkKCk6IFByb21pc2U8Q2FjaGVkTm90aWNlcz4ge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHtcbiAgICAgIGV4cGlyYXRpb246IDAsXG4gICAgICBub3RpY2VzOiBbXSxcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmcy5leGlzdHNTeW5jKHRoaXMuZmlsZU5hbWUpXG4gICAgICAgID8gYXdhaXQgZnMucmVhZEpTT04odGhpcy5maWxlTmFtZSkgYXMgQ2FjaGVkTm90aWNlc1xuICAgICAgICA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBkZWJ1ZyhgRmFpbGVkIHRvIGxvYWQgbm90aWNlcyBmcm9tIGNhY2hlOiAke2V9YCk7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZShjYWNoZWQ6IENhY2hlZE5vdGljZXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMud3JpdGVKU09OKHRoaXMuZmlsZU5hbWUsIGNhY2hlZCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZGVidWcoYEZhaWxlZCB0byBzdG9yZSBub3RpY2VzIGluIHRoZSBjYWNoZTogJHtlfWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGljZUZpbHRlclByb3BzIHtcbiAgY2xpVmVyc2lvbjogc3RyaW5nLFxuICBhY2tub3dsZWRnZWRJc3N1ZU51bWJlcnM6IFNldDxudW1iZXI+LFxuICB0cmVlOiBDb25zdHJ1Y3RUcmVlTm9kZSxcbn1cblxuZXhwb3J0IGNsYXNzIE5vdGljZUZpbHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWNrbm93bGVkZ2VkSXNzdWVOdW1iZXJzOiBTZXQ8bnVtYmVyPjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBOb3RpY2VGaWx0ZXJQcm9wcykge1xuICAgIHRoaXMuYWNrbm93bGVkZ2VkSXNzdWVOdW1iZXJzID0gcHJvcHMuYWNrbm93bGVkZ2VkSXNzdWVOdW1iZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZmYgd2Ugc2hvdWxkIHNob3cgdGhpcyBub3RpY2UuXG4gICAqL1xuICBhcHBseShub3RpY2U6IE5vdGljZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFja25vd2xlZGdlZElzc3VlTnVtYmVycy5oYXMobm90aWNlLmlzc3VlTnVtYmVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwcGx5VmVyc2lvbihub3RpY2UsICdjbGknLCB0aGlzLnByb3BzLmNsaVZlcnNpb24pIHx8XG4gICAgICBtYXRjaChyZXNvbHZlQWxpYXNlcyhub3RpY2UuY29tcG9uZW50cyksIHRoaXMucHJvcHMudHJlZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmZiB3ZSBzaG91bGQgc2hvdyB0aGUgbm90aWNlLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVZlcnNpb24obm90aWNlOiBOb3RpY2UsIG5hbWU6IHN0cmluZywgY29tcGFyZVRvVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKGNvbXBhcmVUb1ZlcnNpb24gPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgIGNvbnN0IGFmZmVjdGVkQ29tcG9uZW50ID0gbm90aWNlLmNvbXBvbmVudHMuZmluZChjb21wb25lbnQgPT4gY29tcG9uZW50Lm5hbWUgPT09IG5hbWUpO1xuICAgIGNvbnN0IGFmZmVjdGVkUmFuZ2UgPSBhZmZlY3RlZENvbXBvbmVudD8udmVyc2lvbjtcbiAgICByZXR1cm4gYWZmZWN0ZWRSYW5nZSAhPSBudWxsICYmIHNlbXZlci5zYXRpc2ZpZXMoY29tcGFyZVRvVmVyc2lvbiwgYWZmZWN0ZWRSYW5nZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTb21lIGNvbXBvbmVudCBuYW1lcyBhcmUgYWxpYXNlcyB0byBhY3R1YWwgY29tcG9uZW50IG5hbWVzLiBGb3IgZXhhbXBsZSBcImZyYW1ld29ya1wiXG4gKiBpcyBhbiBhbGlhcyBmb3IgZWl0aGVyIHRoZSBjb3JlIGxpYnJhcnkgKHYxKSBvciB0aGUgd2hvbGUgQ0RLIGxpYnJhcnkgKHYyKS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGFsbCBhbGlhc2VzIHRvIHRoZWlyIGFjdHVhbCBjb3VudGVycGFydCBuYW1lcywgdG8gYmUgdXNlZCB0b1xuICogbWF0Y2ggYWdhaW5zdCB0aGUgY29uc3RydWN0IHRyZWUuXG4gKlxuICogQHBhcmFtIGNvbXBvbmVudHMgYSBsaXN0IG9mIGNvbXBvbmVudHMuIENvbXBvbmVudHMgd2hvc2UgbmFtZSBpcyBhbiBhbGlhcyB3aWxsIGJlXG4gKiB0cmFuc2Zvcm1lZCBhbmQgYWxsIG90aGVycyB3aWxsIGJlIGxlZnQgaW50YWN0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlQWxpYXNlcyhjb21wb25lbnRzOiBDb21wb25lbnRbXSk6IENvbXBvbmVudFtdIHtcbiAgcmV0dXJuIGZsYXRNYXAoY29tcG9uZW50cywgY29tcG9uZW50ID0+IHtcbiAgICBpZiAoY29tcG9uZW50Lm5hbWUgPT09ICdmcmFtZXdvcmsnKSB7XG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgbmFtZTogJ0Bhd3MtY2RrL2NvcmUuJyxcbiAgICAgICAgdmVyc2lvbjogY29tcG9uZW50LnZlcnNpb24sXG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdhd3MtY2RrLWxpYi4nLFxuICAgICAgICB2ZXJzaW9uOiBjb21wb25lbnQudmVyc2lvbixcbiAgICAgIH1dO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW2NvbXBvbmVudF07XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Tm90aWNlKG5vdGljZTogTm90aWNlKTogc3RyaW5nIHtcbiAgY29uc3QgY29tcG9uZW50c1ZhbHVlID0gbm90aWNlLmNvbXBvbmVudHMubWFwKGMgPT4gYCR7Yy5uYW1lfTogJHtjLnZlcnNpb259YCkuam9pbignLCAnKTtcbiAgcmV0dXJuIFtcbiAgICBgJHtub3RpY2UuaXNzdWVOdW1iZXJ9XFx0JHtub3RpY2UudGl0bGV9YCxcbiAgICBmb3JtYXRPdmVydmlldyhub3RpY2Uub3ZlcnZpZXcpLFxuICAgIGBcXHRBZmZlY3RlZCB2ZXJzaW9uczogJHtjb21wb25lbnRzVmFsdWV9YCxcbiAgICBgXFx0TW9yZSBpbmZvcm1hdGlvbiBhdDogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8ke25vdGljZS5pc3N1ZU51bWJlcn1gLFxuICBdLmpvaW4oJ1xcblxcbicpICsgJ1xcbic7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE92ZXJ2aWV3KHRleHQ6IHN0cmluZykge1xuICBjb25zdCB3cmFwID0gKHM6IHN0cmluZykgPT4gcy5yZXBsYWNlKC8oPyFbXlxcbl17MSw2MH0kKShbXlxcbl17MSw2MH0pXFxzL2csICckMVxcbicpO1xuXG4gIGNvbnN0IGhlYWRpbmcgPSAnT3ZlcnZpZXc6ICc7XG4gIGNvbnN0IHNlcGFyYXRvciA9IGBcXG5cXHQkeycgJy5yZXBlYXQoaGVhZGluZy5sZW5ndGgpfWA7XG4gIGNvbnN0IGNvbnRlbnQgPSB3cmFwKHRleHQpXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5qb2luKHNlcGFyYXRvcik7XG5cbiAgcmV0dXJuICdcXHQnICsgaGVhZGluZyArIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogV2hldGhlciBhbnkgY29tcG9uZW50IGluIHRoZSB0cmVlIG1hdGNoZXMgYW55IGNvbXBvbmVudCBpbiB0aGUgcXVlcnkuXG4gKiBBIG1hdGNoIGhhcHBlbnMgd2hlbjpcbiAqXG4gKiAxLiBUaGUgdmVyc2lvbiBvZiB0aGUgbm9kZSBtYXRjaGVzIHRoZSB2ZXJzaW9uIGluIHRoZSBxdWVyeSwgaW50ZXJwcmV0ZWRcbiAqIGFzIGEgc2VtdmVyIHJhbmdlLlxuICpcbiAqIDIuIFRoZSBuYW1lIGluIHRoZSBxdWVyeSBpcyBhIHByZWZpeCBvZiB0aGUgbm9kZSBuYW1lIHdoZW4gdGhlIHF1ZXJ5IGVuZHMgaW4gJy4nLFxuICogb3IgdGhlIHR3byBuYW1lcyBhcmUgZXhhY3RseSB0aGUgc2FtZSwgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBtYXRjaChxdWVyeTogQ29tcG9uZW50W10sIHRyZWU6IENvbnN0cnVjdFRyZWVOb2RlKTogYm9vbGVhbiB7XG4gIHJldHVybiBzb21lKHRyZWUsIG5vZGUgPT4ge1xuICAgIHJldHVybiBxdWVyeS5zb21lKGNvbXBvbmVudCA9PlxuICAgICAgY29tcGFyZU5hbWVzKGNvbXBvbmVudC5uYW1lLCBub2RlLmNvbnN0cnVjdEluZm8/LmZxbikgJiZcbiAgICAgIGNvbXBhcmVWZXJzaW9ucyhjb21wb25lbnQudmVyc2lvbiwgbm9kZS5jb25zdHJ1Y3RJbmZvPy52ZXJzaW9uKSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVOYW1lcyhwYXR0ZXJuOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgaWYgKHRhcmdldCA9PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHJldHVybiBwYXR0ZXJuLmVuZHNXaXRoKCcuJykgPyB0YXJnZXQuc3RhcnRzV2l0aChwYXR0ZXJuKSA6IHBhdHRlcm4gPT09IHRhcmdldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyhwYXR0ZXJuOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNlbXZlci5zYXRpc2ZpZXModGFyZ2V0ID8/ICcnLCBwYXR0ZXJuKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsb2FkVHJlZShvdXRkaXI6IHN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBmcy5yZWFkSlNPTlN5bmMocGF0aC5qb2luKG91dGRpciwgJ3RyZWUuanNvbicpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyYWNlKGBGYWlsZWQgdG8gZ2V0IHRyZWUuanNvbiBmaWxlOiAke2V9LiBQcm9jZWVkaW5nIHdpdGggZW1wdHkgdHJlZS5gKTtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuLyoqXG4gKiBTb3VyY2UgaW5mb3JtYXRpb24gb24gYSBjb25zdHJ1Y3QgKGNsYXNzIGZxbiBhbmQgdmVyc2lvbilcbiAqL1xuaW50ZXJmYWNlIENvbnN0cnVjdEluZm8ge1xuICByZWFkb25seSBmcW46IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbm9kZSBpbiB0aGUgY29uc3RydWN0IHRyZWUuXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIENvbnN0cnVjdFRyZWVOb2RlIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuICByZWFkb25seSBjaGlsZHJlbj86IHsgW2tleTogc3RyaW5nXTogQ29uc3RydWN0VHJlZU5vZGUgfTtcbiAgcmVhZG9ubHkgYXR0cmlidXRlcz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbiAgLyoqXG4gICAqIEluZm9ybWF0aW9uIG9uIHRoZSBjb25zdHJ1Y3QgY2xhc3MgdGhhdCBsZWQgdG8gdGhpcyBub2RlLCBpZiBhdmFpbGFibGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnN0cnVjdEluZm8/OiBDb25zdHJ1Y3RJbmZvO1xufVxuXG5mdW5jdGlvbiBzb21lKG5vZGU6IENvbnN0cnVjdFRyZWVOb2RlLCBwcmVkaWNhdGU6IChuOiBDb25zdHJ1Y3RUcmVlTm9kZSkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xuICByZXR1cm4gbm9kZSAhPSBudWxsICYmIChwcmVkaWNhdGUobm9kZSkgfHwgZmluZEluQ2hpbGRyZW4oKSk7XG5cbiAgZnVuY3Rpb24gZmluZEluQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4gPT0gbnVsbCkgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgIGZvciAoY29uc3QgbmFtZSBpbiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoc29tZShub2RlLmNoaWxkcmVuW25hbWVdLCBwcmVkaWNhdGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
|
297
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm5vdGljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsaUNBQWlDO0FBQ2pDLHVDQUFnRDtBQUNoRCxpQ0FBaUM7QUFDakMsb0RBQWlEO0FBQ2pELHVDQUEwQztBQUUxQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUFXLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztBQXVCMUQsS0FBSyxVQUFVLGNBQWM7SUFDbEMsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsT0FBTyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDNUIsQ0FBQztBQUhELHdDQUdDO0FBRU0sS0FBSyxVQUFVLGNBQWMsQ0FBQyxLQUEwQjs7SUFDN0QsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLE9BQUMsS0FBSyxDQUFDLFdBQVcsbUNBQUksS0FBSyxDQUFDLENBQUM7SUFDbkUsZUFBSyxDQUFDLE1BQU0sZUFBZSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUpELHdDQUlDO0FBRU0sS0FBSyxVQUFVLGVBQWUsQ0FBQyxVQUE0QixFQUFFLEtBQTBCO0lBQzVGLE1BQU0sSUFBSSxHQUFHLE1BQU0sVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUU7UUFDMUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1FBQ3BCLHdCQUF3QixFQUFFLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQztLQUNsRSxDQUFDLENBQUM7SUFFSCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzlCLE1BQU0sa0JBQWtC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QUM7YUFDYjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaWVudFJlcXVlc3QgfSBmcm9tICdodHRwJztcbmltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ2h0dHBzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IGRlYnVnLCBwcmludCwgdHJhY2UgfSBmcm9tICcuL2xvZ2dpbmcnO1xuaW1wb3J0IHsgZmxhdE1hcCB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBjZGtDYWNoZURpciB9IGZyb20gJy4vdXRpbC9kaXJlY3Rvcmllcyc7XG5pbXBvcnQgeyB2ZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi92ZXJzaW9uJztcblxuY29uc3QgQ0FDSEVfRklMRV9QQVRIID0gcGF0aC5qb2luKGNka0NhY2hlRGlyKCksICdub3RpY2VzLmpzb24nKTtcblxuZXhwb3J0IGludGVyZmFjZSBEaXNwbGF5Tm90aWNlc1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjbG91ZCBhc3NlbWJseSBkaXJlY3RvcnkuIFVzdWFsbHkgJ2Nkay5vdXQnLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0ZGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElzc3VlIG51bWJlcnMgb2Ygbm90aWNlcyB0aGF0IGhhdmUgYmVlbiBhY2tub3dsZWRnZWQgYnkgYSB1c2VyXG4gICAqIG9mIHRoZSBjdXJyZW50IENESyByZXBvc2l0b3J5LiBUaGVzZSBub3RpY2VzIHdpbGwgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFja25vd2xlZGdlZElzc3VlTnVtYmVyczogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY2FjaGVkIG5vdGljZXMgc2hvdWxkIGJlIGlnbm9yZWQuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eVxuICAgKiB0byB0cnVlIHdpbGwgZm9yY2UgdGhlIENMSSB0byBkb3dubG9hZCBmcmVzaCBkYXRhXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVDYWNoZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoTm90aWNlcygpIHtcbiAgY29uc3QgZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2VSZWZlcmVuY2UoZmFsc2UpO1xuICByZXR1cm4gZGF0YVNvdXJjZS5mZXRjaCgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGlzcGxheU5vdGljZXMocHJvcHM6IERpc3BsYXlOb3RpY2VzUHJvcHMpIHtcbiAgY29uc3QgZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2VSZWZlcmVuY2UocHJvcHMuaWdub3JlQ2FjaGUgPz8gZmFsc2UpO1xuICBwcmludChhd2FpdCBnZW5lcmF0ZU1lc3NhZ2UoZGF0YVNvdXJjZSwgcHJvcHMpKTtcbiAgcmV0dXJuIDA7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU1lc3NhZ2UoZGF0YVNvdXJjZTogTm90aWNlRGF0YVNvdXJjZSwgcHJvcHM6IERpc3BsYXlOb3RpY2VzUHJvcHMpIHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcbiAgY29uc3QgZmlsdGVyZWROb3RpY2VzID0gZmlsdGVyTm90aWNlcyhkYXRhLCB7XG4gICAgb3V0ZGlyOiBwcm9wcy5vdXRkaXIsXG4gICAgYWNrbm93bGVkZ2VkSXNzdWVOdW1iZXJzOiBuZXcgU2V0KHByb3BzLmFja25vd2xlZGdlZElzc3VlTnVtYmVycyksXG4gIH0pO1xuXG4gIGlmIChmaWx0ZXJlZE5vdGljZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGluZGl2aWR1YWxNZXNzYWdlcyA9IGZvcm1hdE5vdGljZXMoZmlsdGVyZWROb3RpY2VzKTtcbiAgICByZXR1cm4gZmluYWxNZXNzYWdlKGluZGl2aWR1YWxNZXNzYWdlcywgZmlsdGVyZWROb3RpY2VzWzBdLmlzc3VlTnVtYmVyKTtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGRhdGFTb3VyY2VSZWZlcmVuY2UoaWdub3JlQ2FjaGU6IGJvb2xlYW4pOiBOb3RpY2VEYXRhU291cmNlIHtcbiAgcmV0dXJuIG5ldyBDYWNoZWREYXRhU291cmNlKENBQ0hFX0ZJTEVfUEFUSCwgbmV3IFdlYnNpdGVOb3RpY2VEYXRhU291cmNlKCksIGlnbm9yZUNhY2hlKTtcbn1cblxuZnVuY3Rpb24gZmluYWxNZXNzYWdlKGluZGl2aWR1YWxNZXNzYWdlczogc3RyaW5nW10sIGV4YW1wbGVOdW1iZXI6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBbXG4gICAgJ1xcbk5PVElDRVMnLFxuICAgIC4uLmluZGl2aWR1YWxNZXNzYWdlcyxcbiAgICBgSWYgeW91IGRvbuKAmXQgd2FudCB0byBzZWUgYSBub3RpY2UgYW55bW9yZSwgdXNlIFwiY2RrIGFja25vd2xlZGdlIDxpZD5cIi4gRm9yIGV4YW1wbGUsIFwiY2RrIGFja25vd2xlZGdlICR7ZXhhbXBsZU51bWJlcn1cIi5gLFxuICBdLmpvaW4oJ1xcblxcbicpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlck5vdGljZU9wdGlvbnMge1xuICBvdXRkaXI/OiBzdHJpbmcsXG4gIGNsaVZlcnNpb24/OiBzdHJpbmcsXG4gIGZyYW1ld29ya1ZlcnNpb24/OiBzdHJpbmcsXG4gIGFja25vd2xlZGdlZElzc3VlTnVtYmVycz86IFNldDxudW1iZXI+LFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyTm90aWNlcyhkYXRhOiBOb3RpY2VbXSwgb3B0aW9uczogRmlsdGVyTm90aWNlT3B0aW9ucyk6IE5vdGljZVtdIHtcbiAgY29uc3QgZmlsdGVyID0gbmV3IE5vdGljZUZpbHRlcih7XG4gICAgY2xpVmVyc2lvbjogb3B0aW9ucy5jbGlWZXJzaW9uID8/IHZlcnNpb25OdW1iZXIoKSxcbiAgICBhY2tub3dsZWRnZWRJc3N1ZU51bWJlcnM6IG9wdGlvbnMuYWNrbm93bGVkZ2VkSXNzdWVOdW1iZXJzID8/IG5ldyBTZXQoKSxcbiAgICB0cmVlOiBsb2FkVHJlZShvcHRpb25zLm91dGRpciA/PyAnY2RrLm91dCcpLnRyZWUsXG4gIH0pO1xuICByZXR1cm4gZGF0YS5maWx0ZXIobm90aWNlID0+IGZpbHRlci5hcHBseShub3RpY2UpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE5vdGljZXMoZGF0YTogTm90aWNlW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBkYXRhLm1hcChmb3JtYXROb3RpY2UpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGljZSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGlzc3VlTnVtYmVyOiBudW1iZXI7XG4gIG92ZXJ2aWV3OiBzdHJpbmc7XG4gIGNvbXBvbmVudHM6IENvbXBvbmVudFtdO1xuICBzY2hlbWFWZXJzaW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlRGF0YVNvdXJjZSB7XG4gIGZldGNoKCk6IFByb21pc2U8Tm90aWNlW10+LFxufVxuXG5leHBvcnQgY2xhc3MgV2Vic2l0ZU5vdGljZURhdGFTb3VyY2UgaW1wbGVtZW50cyBOb3RpY2VEYXRhU291cmNlIHtcbiAgZmV0Y2goKTogUHJvbWlzZTxOb3RpY2VbXT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSAzMDAwO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgcmVxOiBDbGllbnRSZXF1ZXN0IHwgdW5kZWZpbmVkO1xuXG4gICAgICBsZXQgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHJlcSkge1xuICAgICAgICAgIHJlcS5kZXN0cm95KG5ldyBFcnJvcignUmVxdWVzdCB0aW1lZCBvdXQnKSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHRpbWVvdXQpO1xuXG4gICAgICB0aW1lci51bnJlZigpO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXEgPSBodHRwcy5nZXQoJ2h0dHBzOi8vY2xpLmNkay5kZXYtdG9vbHMuYXdzLmRldi9ub3RpY2VzLmpzb24nLFxuICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgICByZXMuc2V0RW5jb2RpbmcoJ3V0ZjgnKTtcbiAgICAgICAgICAgICAgbGV0IHJhd0RhdGEgPSAnJztcbiAgICAgICAgICAgICAgcmVzLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgcmF3RGF0YSArPSBjaHVuaztcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShyYXdEYXRhKS5ub3RpY2VzIGFzIE5vdGljZVtdO1xuICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIidub3RpY2VzJyBrZXkgaXMgbWlzc2luZ1wiKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGRlYnVnKCdOb3RpY2VzIHJlZnJlc2hlZCcpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhID8/IFtdKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2Ugbm90aWNlczogJHtlLm1lc3NhZ2V9YCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJlcy5vbignZXJyb3InLCBlID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggbm90aWNlczogJHtlLm1lc3NhZ2V9YCkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBub3RpY2VzLiBTdGF0dXMgY29kZTogJHtyZXMuc3RhdHVzQ29kZX1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIHJlcS5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBIVFRQUyAnZ2V0JyBjYWxsIHRocmV3IGFuIGVycm9yOiAke2UubWVzc2FnZX1gKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIENhY2hlZE5vdGljZXMge1xuICBleHBpcmF0aW9uOiBudW1iZXIsXG4gIG5vdGljZXM6IE5vdGljZVtdLFxufVxuXG5jb25zdCBUSU1FX1RPX0xJVkVfU1VDQ0VTUyA9IDYwICogNjAgKiAxMDAwOyAvLyAxIGhvdXJcbmNvbnN0IFRJTUVfVE9fTElWRV9FUlJPUiA9IDEgKiA2MCAqIDEwMDA7IC8vIDEgbWludXRlXG5cbmV4cG9ydCBjbGFzcyBDYWNoZWREYXRhU291cmNlIGltcGxlbWVudHMgTm90aWNlRGF0YVNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGFTb3VyY2U6IE5vdGljZURhdGFTb3VyY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBza2lwQ2FjaGU/OiBib29sZWFuKSB7XG4gIH1cblxuICBhc3luYyBmZXRjaCgpOiBQcm9taXNlPE5vdGljZVtdPiB7XG4gICAgY29uc3QgY2FjaGVkRGF0YSA9IGF3YWl0IHRoaXMubG9hZCgpO1xuICAgIGNvbnN0IGRhdGEgPSBjYWNoZWREYXRhLm5vdGljZXM7XG4gICAgY29uc3QgZXhwaXJhdGlvbiA9IGNhY2hlZERhdGEuZXhwaXJhdGlvbiA/PyAwO1xuXG4gICAgaWYgKERhdGUubm93KCkgPiBleHBpcmF0aW9uIHx8IHRoaXMuc2tpcENhY2hlKSB7XG4gICAgICBjb25zdCBmcmVzaERhdGEgPSBhd2FpdCB0aGlzLmZldGNoSW5uZXIoKTtcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZShmcmVzaERhdGEpO1xuICAgICAgcmV0dXJuIGZyZXNoRGF0YS5ub3RpY2VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1ZyhgUmVhZGluZyBjYWNoZWQgbm90aWNlcyBmcm9tICR7dGhpcy5maWxlTmFtZX1gKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hJbm5lcigpOiBQcm9taXNlPENhY2hlZE5vdGljZXM+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhwaXJhdGlvbjogRGF0ZS5ub3coKSArIFRJTUVfVE9fTElWRV9TVUNDRVNTLFxuICAgICAgICBub3RpY2VzOiBhd2FpdCB0aGlzLmRhdGFTb3VyY2UuZmV0Y2goKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZGVidWcoYENvdWxkIG5vdCByZWZyZXNoIG5vdGljZXM6ICR7ZX1gKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cGlyYXRpb246IERhdGUubm93KCkgKyBUSU1FX1RPX0xJVkVfRVJST1IsXG4gICAgICAgIG5vdGljZXM6IFtdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWQoKTogUHJvbWlzZTxDYWNoZWROb3RpY2VzPiB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0ge1xuICAgICAgZXhwaXJhdGlvbjogMCxcbiAgICAgIG5vdGljZXM6IFtdLFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZzLmV4aXN0c1N5bmModGhpcy5maWxlTmFtZSlcbiAgICAgICAgPyBhd2FpdCBmcy5yZWFkSlNPTih0aGlzLmZpbGVOYW1lKSBhcyBDYWNoZWROb3RpY2VzXG4gICAgICAgIDogZGVmYXVsdFZhbHVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGRlYnVnKGBGYWlsZWQgdG8gbG9hZCBub3RpY2VzIGZyb20gY2FjaGU6ICR7ZX1gKTtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzYXZlKGNhY2hlZDogQ2FjaGVkTm90aWNlcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy53cml0ZUpTT04odGhpcy5maWxlTmFtZSwgY2FjaGVkKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBkZWJ1ZyhgRmFpbGVkIHRvIHN0b3JlIG5vdGljZXMgaW4gdGhlIGNhY2hlOiAke2V9YCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlRmlsdGVyUHJvcHMge1xuICBjbGlWZXJzaW9uOiBzdHJpbmcsXG4gIGFja25vd2xlZGdlZElzc3VlTnVtYmVyczogU2V0PG51bWJlcj4sXG4gIHRyZWU6IENvbnN0cnVjdFRyZWVOb2RlLFxufVxuXG5leHBvcnQgY2xhc3MgTm90aWNlRmlsdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhY2tub3dsZWRnZWRJc3N1ZU51bWJlcnM6IFNldDxudW1iZXI+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IE5vdGljZUZpbHRlclByb3BzKSB7XG4gICAgdGhpcy5hY2tub3dsZWRnZWRJc3N1ZU51bWJlcnMgPSBwcm9wcy5hY2tub3dsZWRnZWRJc3N1ZU51bWJlcnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmZiB3ZSBzaG91bGQgc2hvdyB0aGlzIG5vdGljZS5cbiAgICovXG4gIGFwcGx5KG5vdGljZTogTm90aWNlKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYWNrbm93bGVkZ2VkSXNzdWVOdW1iZXJzLmhhcyhub3RpY2UuaXNzdWVOdW1iZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBwbHlWZXJzaW9uKG5vdGljZSwgJ2NsaScsIHRoaXMucHJvcHMuY2xpVmVyc2lvbikgfHxcbiAgICAgIG1hdGNoKHJlc29sdmVBbGlhc2VzKG5vdGljZS5jb21wb25lbnRzKSwgdGhpcy5wcm9wcy50cmVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWZmIHdlIHNob3VsZCBzaG93IHRoZSBub3RpY2UuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5VmVyc2lvbihub3RpY2U6IE5vdGljZSwgbmFtZTogc3RyaW5nLCBjb21wYXJlVG9WZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoY29tcGFyZVRvVmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgY29uc3QgYWZmZWN0ZWRDb21wb25lbnQgPSBub3RpY2UuY29tcG9uZW50cy5maW5kKGNvbXBvbmVudCA9PiBjb21wb25lbnQubmFtZSA9PT0gbmFtZSk7XG4gICAgY29uc3QgYWZmZWN0ZWRSYW5nZSA9IGFmZmVjdGVkQ29tcG9uZW50Py52ZXJzaW9uO1xuICAgIHJldHVybiBhZmZlY3RlZFJhbmdlICE9IG51bGwgJiYgc2VtdmVyLnNhdGlzZmllcyhjb21wYXJlVG9WZXJzaW9uLCBhZmZlY3RlZFJhbmdlKTtcbiAgfVxufVxuXG4vKipcbiAqIFNvbWUgY29tcG9uZW50IG5hbWVzIGFyZSBhbGlhc2VzIHRvIGFjdHVhbCBjb21wb25lbnQgbmFtZXMuIEZvciBleGFtcGxlIFwiZnJhbWV3b3JrXCJcbiAqIGlzIGFuIGFsaWFzIGZvciBlaXRoZXIgdGhlIGNvcmUgbGlicmFyeSAodjEpIG9yIHRoZSB3aG9sZSBDREsgbGlicmFyeSAodjIpLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gY29udmVydHMgYWxsIGFsaWFzZXMgdG8gdGhlaXIgYWN0dWFsIGNvdW50ZXJwYXJ0IG5hbWVzLCB0byBiZSB1c2VkIHRvXG4gKiBtYXRjaCBhZ2FpbnN0IHRoZSBjb25zdHJ1Y3QgdHJlZS5cbiAqXG4gKiBAcGFyYW0gY29tcG9uZW50cyBhIGxpc3Qgb2YgY29tcG9uZW50cy4gQ29tcG9uZW50cyB3aG9zZSBuYW1lIGlzIGFuIGFsaWFzIHdpbGwgYmVcbiAqIHRyYW5zZm9ybWVkIGFuZCBhbGwgb3RoZXJzIHdpbGwgYmUgbGVmdCBpbnRhY3QuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBbGlhc2VzKGNvbXBvbmVudHM6IENvbXBvbmVudFtdKTogQ29tcG9uZW50W10ge1xuICByZXR1cm4gZmxhdE1hcChjb21wb25lbnRzLCBjb21wb25lbnQgPT4ge1xuICAgIGlmIChjb21wb25lbnQubmFtZSA9PT0gJ2ZyYW1ld29yaycpIHtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICBuYW1lOiAnQGF3cy1jZGsvY29yZS4nLFxuICAgICAgICB2ZXJzaW9uOiBjb21wb25lbnQudmVyc2lvbixcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ2F3cy1jZGstbGliLicsXG4gICAgICAgIHZlcnNpb246IGNvbXBvbmVudC52ZXJzaW9uLFxuICAgICAgfV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbY29tcG9uZW50XTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmb3JtYXROb3RpY2Uobm90aWNlOiBOb3RpY2UpOiBzdHJpbmcge1xuICBjb25zdCBjb21wb25lbnRzVmFsdWUgPSBub3RpY2UuY29tcG9uZW50cy5tYXAoYyA9PiBgJHtjLm5hbWV9OiAke2MudmVyc2lvbn1gKS5qb2luKCcsICcpO1xuICByZXR1cm4gW1xuICAgIGAke25vdGljZS5pc3N1ZU51bWJlcn1cXHQke25vdGljZS50aXRsZX1gLFxuICAgIGZvcm1hdE92ZXJ2aWV3KG5vdGljZS5vdmVydmlldyksXG4gICAgYFxcdEFmZmVjdGVkIHZlcnNpb25zOiAke2NvbXBvbmVudHNWYWx1ZX1gLFxuICAgIGBcXHRNb3JlIGluZm9ybWF0aW9uIGF0OiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLyR7bm90aWNlLmlzc3VlTnVtYmVyfWAsXG4gIF0uam9pbignXFxuXFxuJykgKyAnXFxuJztcbn1cblxuZnVuY3Rpb24gZm9ybWF0T3ZlcnZpZXcodGV4dDogc3RyaW5nKSB7XG4gIGNvbnN0IHdyYXAgPSAoczogc3RyaW5nKSA9PiBzLnJlcGxhY2UoLyg/IVteXFxuXXsxLDYwfSQpKFteXFxuXXsxLDYwfSlcXHMvZywgJyQxXFxuJyk7XG5cbiAgY29uc3QgaGVhZGluZyA9ICdPdmVydmlldzogJztcbiAgY29uc3Qgc2VwYXJhdG9yID0gYFxcblxcdCR7JyAnLnJlcGVhdChoZWFkaW5nLmxlbmd0aCl9YDtcbiAgY29uc3QgY29udGVudCA9IHdyYXAodGV4dClcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLmpvaW4oc2VwYXJhdG9yKTtcblxuICByZXR1cm4gJ1xcdCcgKyBoZWFkaW5nICsgY29udGVudDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGFueSBjb21wb25lbnQgaW4gdGhlIHRyZWUgbWF0Y2hlcyBhbnkgY29tcG9uZW50IGluIHRoZSBxdWVyeS5cbiAqIEEgbWF0Y2ggaGFwcGVucyB3aGVuOlxuICpcbiAqIDEuIFRoZSB2ZXJzaW9uIG9mIHRoZSBub2RlIG1hdGNoZXMgdGhlIHZlcnNpb24gaW4gdGhlIHF1ZXJ5LCBpbnRlcnByZXRlZFxuICogYXMgYSBzZW12ZXIgcmFuZ2UuXG4gKlxuICogMi4gVGhlIG5hbWUgaW4gdGhlIHF1ZXJ5IGlzIGEgcHJlZml4IG9mIHRoZSBub2RlIG5hbWUgd2hlbiB0aGUgcXVlcnkgZW5kcyBpbiAnLicsXG4gKiBvciB0aGUgdHdvIG5hbWVzIGFyZSBleGFjdGx5IHRoZSBzYW1lLCBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoKHF1ZXJ5OiBDb21wb25lbnRbXSwgdHJlZTogQ29uc3RydWN0VHJlZU5vZGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNvbWUodHJlZSwgbm9kZSA9PiB7XG4gICAgcmV0dXJuIHF1ZXJ5LnNvbWUoY29tcG9uZW50ID0+XG4gICAgICBjb21wYXJlTmFtZXMoY29tcG9uZW50Lm5hbWUsIG5vZGUuY29uc3RydWN0SW5mbz8uZnFuKSAmJlxuICAgICAgY29tcGFyZVZlcnNpb25zKGNvbXBvbmVudC52ZXJzaW9uLCBub2RlLmNvbnN0cnVjdEluZm8/LnZlcnNpb24pKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gY29tcGFyZU5hbWVzKHBhdHRlcm46IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgcmV0dXJuIHBhdHRlcm4uZW5kc1dpdGgoJy4nKSA/IHRhcmdldC5zdGFydHNXaXRoKHBhdHRlcm4pIDogcGF0dGVybiA9PT0gdGFyZ2V0O1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcGFyZVZlcnNpb25zKHBhdHRlcm46IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc2VtdmVyLnNhdGlzZmllcyh0YXJnZXQgPz8gJycsIHBhdHRlcm4pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRUcmVlKG91dGRpcjogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZzLnJlYWRKU09OU3luYyhwYXRoLmpvaW4ob3V0ZGlyLCAndHJlZS5qc29uJykpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJhY2UoYEZhaWxlZCB0byBnZXQgdHJlZS5qc29uIGZpbGU6ICR7ZX0uIFByb2NlZWRpbmcgd2l0aCBlbXB0eSB0cmVlLmApO1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIFNvdXJjZSBpbmZvcm1hdGlvbiBvbiBhIGNvbnN0cnVjdCAoY2xhc3MgZnFuIGFuZCB2ZXJzaW9uKVxuICovXG5pbnRlcmZhY2UgQ29uc3RydWN0SW5mbyB7XG4gIHJlYWRvbmx5IGZxbjogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBub2RlIGluIHRoZSBjb25zdHJ1Y3QgdHJlZS5cbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgQ29uc3RydWN0VHJlZU5vZGUge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNoaWxkcmVuPzogeyBba2V5OiBzdHJpbmddOiBDb25zdHJ1Y3RUcmVlTm9kZSB9O1xuICByZWFkb25seSBhdHRyaWJ1dGVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAvKipcbiAgICogSW5mb3JtYXRpb24gb24gdGhlIGNvbnN0cnVjdCBjbGFzcyB0aGF0IGxlZCB0byB0aGlzIG5vZGUsIGlmIGF2YWlsYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RydWN0SW5mbz86IENvbnN0cnVjdEluZm87XG59XG5cbmZ1bmN0aW9uIHNvbWUobm9kZTogQ29uc3RydWN0VHJlZU5vZGUsIHByZWRpY2F0ZTogKG46IENvbnN0cnVjdFRyZWVOb2RlKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiBub2RlICE9IG51bGwgJiYgKHByZWRpY2F0ZShub2RlKSB8fCBmaW5kSW5DaGlsZHJlbigpKTtcblxuICBmdW5jdGlvbiBmaW5kSW5DaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICBpZiAobm9kZS5jaGlsZHJlbiA9PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lIGluIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChzb21lKG5vZGUuY2hpbGRyZW5bbmFtZV0sIHByZWRpY2F0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
|
package/lib/setup-sandbox.js
CHANGED
|
@@ -51,7 +51,10 @@ const {
|
|
|
51
51
|
AsyncGeneratorFunction
|
|
52
52
|
} = data;
|
|
53
53
|
|
|
54
|
-
const
|
|
54
|
+
const {
|
|
55
|
+
get: localWeakMapGet,
|
|
56
|
+
set: localWeakMapSet
|
|
57
|
+
} = LocalWeakMap.prototype;
|
|
55
58
|
|
|
56
59
|
function localUnexpected() {
|
|
57
60
|
return new VMError('Should not happen');
|
|
@@ -282,8 +285,8 @@ if (typeof OriginalCallSite === 'function') {
|
|
|
282
285
|
}
|
|
283
286
|
return value(error, sst);
|
|
284
287
|
};
|
|
285
|
-
wrappedPrepareStackTrace
|
|
286
|
-
wrappedPrepareStackTrace
|
|
288
|
+
localReflectApply(localWeakMapSet, wrappedPrepareStackTrace, [value, newWrapped]);
|
|
289
|
+
localReflectApply(localWeakMapSet, wrappedPrepareStackTrace, [newWrapped, newWrapped]);
|
|
287
290
|
currentPrepareStackTrace = newWrapped;
|
|
288
291
|
}
|
|
289
292
|
})) throw localUnexpected();
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aws-cdk",
|
|
3
3
|
"description": "CDK Toolkit, the command line tool for CDK apps",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.33.0",
|
|
5
5
|
"bin": {
|
|
6
6
|
"cdk": "bin/cdk"
|
|
7
7
|
},
|
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
"integ-init": "test/integ/run-against-dist test/integ/init/test-all.sh",
|
|
24
24
|
"gen": "./generate.sh",
|
|
25
25
|
"build+extract": "yarn build",
|
|
26
|
-
"build+test+extract": "yarn build+test"
|
|
26
|
+
"build+test+extract": "yarn build+test",
|
|
27
|
+
"attributions:update": "yarn node-bundle validate --entrypoint lib/index.ts --dont-attribute \"^@aws-cdk/|^cdk-assets|^cdk-cli-wrapper$\" --fix"
|
|
27
28
|
},
|
|
28
29
|
"cdk-package": {
|
|
29
30
|
"bundle": {
|
|
@@ -58,7 +59,7 @@
|
|
|
58
59
|
},
|
|
59
60
|
"license": "Apache-2.0",
|
|
60
61
|
"devDependencies": {
|
|
61
|
-
"@aws-cdk/core": "2.
|
|
62
|
+
"@aws-cdk/core": "2.33.0",
|
|
62
63
|
"@octokit/rest": "^18.12.0",
|
|
63
64
|
"@types/archiver": "^5.3.1",
|
|
64
65
|
"@types/fs-extra": "^8.1.2",
|
|
@@ -68,35 +69,35 @@
|
|
|
68
69
|
"@types/mockery": "^1.4.30",
|
|
69
70
|
"@types/node": "^10.17.60",
|
|
70
71
|
"@types/promptly": "^3.0.2",
|
|
71
|
-
"@types/semver": "^7.3.
|
|
72
|
+
"@types/semver": "^7.3.10",
|
|
72
73
|
"@types/sinon": "^9.0.11",
|
|
73
74
|
"@types/table": "^6.0.0",
|
|
74
75
|
"@types/uuid": "^8.3.4",
|
|
75
76
|
"@types/wrap-ansi": "^3.0.0",
|
|
76
77
|
"@types/yargs": "^15.0.14",
|
|
77
78
|
"aws-sdk-mock": "5.6.0",
|
|
78
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
79
|
+
"@aws-cdk/cdk-build-tools": "2.33.0",
|
|
79
80
|
"jest": "^27.5.1",
|
|
80
81
|
"madge": "^5.0.1",
|
|
81
82
|
"constructs": "^10.0.0",
|
|
82
83
|
"make-runnable": "^1.3.10",
|
|
83
84
|
"mockery": "^2.1.0",
|
|
84
|
-
"nock": "^13.2.
|
|
85
|
-
"@aws-cdk/pkglint": "2.
|
|
85
|
+
"nock": "^13.2.8",
|
|
86
|
+
"@aws-cdk/pkglint": "2.33.0",
|
|
86
87
|
"sinon": "^9.2.4",
|
|
87
88
|
"ts-jest": "^27.1.5",
|
|
88
89
|
"ts-mock-imports": "^1.3.8",
|
|
89
90
|
"xml-js": "^1.6.11",
|
|
90
91
|
"axios": "^0.27.2",
|
|
91
|
-
"@aws-cdk/cloud-assembly-schema": "2.
|
|
92
|
-
"@aws-cdk/cloudformation-diff": "2.
|
|
93
|
-
"@aws-cdk/cx-api": "2.
|
|
94
|
-
"@aws-cdk/region-info": "2.
|
|
95
|
-
"@jsii/check-node": "1.
|
|
92
|
+
"@aws-cdk/cloud-assembly-schema": "2.33.0",
|
|
93
|
+
"@aws-cdk/cloudformation-diff": "2.33.0",
|
|
94
|
+
"@aws-cdk/cx-api": "2.33.0",
|
|
95
|
+
"@aws-cdk/region-info": "2.33.0",
|
|
96
|
+
"@jsii/check-node": "1.62.0",
|
|
96
97
|
"archiver": "^5.3.1",
|
|
97
98
|
"aws-sdk": "^2.1093.0",
|
|
98
99
|
"camelcase": "^6.3.0",
|
|
99
|
-
"cdk-assets": "2.
|
|
100
|
+
"cdk-assets": "2.33.0",
|
|
100
101
|
"chokidar": "^3.5.3",
|
|
101
102
|
"chalk": "^4",
|
|
102
103
|
"decamelize": "^5.0.1",
|
|
@@ -9,24 +9,51 @@ const OVERRIDE = 'TheOverride';
|
|
|
9
9
|
const USE_OVERRIDE = { ParameterKey: PARAM, ParameterValue: OVERRIDE };
|
|
10
10
|
const USE_PREVIOUS = { ParameterKey: PARAM, UsePreviousValue: true };
|
|
11
11
|
let sdkProvider;
|
|
12
|
+
let describeStackMock;
|
|
13
|
+
let getTemplateMock;
|
|
12
14
|
let cfnMocks;
|
|
13
15
|
let cfn;
|
|
14
16
|
beforeEach(async () => {
|
|
15
17
|
sdkProvider = new mock_sdk_1.MockSdkProvider();
|
|
18
|
+
describeStackMock = jest.fn();
|
|
19
|
+
getTemplateMock = jest.fn();
|
|
16
20
|
cfnMocks = {
|
|
17
|
-
describeStacks:
|
|
18
|
-
|
|
19
|
-
.mockImplementation(() => ({ Stacks: [] })),
|
|
21
|
+
describeStacks: describeStackMock,
|
|
22
|
+
getTemplate: getTemplateMock,
|
|
20
23
|
};
|
|
21
24
|
sdkProvider.stubCloudFormation(cfnMocks);
|
|
22
25
|
cfn = (await sdkProvider.forEnvironment()).sdk.cloudFormation();
|
|
23
26
|
});
|
|
24
27
|
test('A non-existent stack pretends to have an empty template', async () => {
|
|
28
|
+
// GIVEN
|
|
29
|
+
describeStackMock.mockImplementation(() => ({ Stacks: [] })); // No stacks exist
|
|
25
30
|
// WHEN
|
|
26
31
|
const stack = await cloudformation_1.CloudFormationStack.lookup(cfn, 'Dummy');
|
|
27
32
|
// THEN
|
|
28
33
|
expect(await stack.template()).toEqual({});
|
|
29
34
|
});
|
|
35
|
+
test("Retrieving a processed template passes 'Processed' to CloudFormation", async () => {
|
|
36
|
+
// GIVEN
|
|
37
|
+
describeStackMock.mockImplementation(() => ({
|
|
38
|
+
Stacks: [
|
|
39
|
+
{
|
|
40
|
+
StackName: 'Dummy',
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
}));
|
|
44
|
+
getTemplateMock.mockImplementation(() => ({
|
|
45
|
+
TemplateBody: '{}',
|
|
46
|
+
}));
|
|
47
|
+
// WHEN
|
|
48
|
+
const retrieveProcessedTemplate = true;
|
|
49
|
+
const cloudFormationStack = await cloudformation_1.CloudFormationStack.lookup(cfn, 'Dummy', retrieveProcessedTemplate);
|
|
50
|
+
await cloudFormationStack.template();
|
|
51
|
+
// THEN
|
|
52
|
+
expect(getTemplateMock).toHaveBeenCalledWith({
|
|
53
|
+
StackName: 'Dummy',
|
|
54
|
+
TemplateStage: 'Processed',
|
|
55
|
+
});
|
|
56
|
+
});
|
|
30
57
|
test.each([
|
|
31
58
|
[false, false],
|
|
32
59
|
[false, true],
|
|
@@ -141,4 +168,4 @@ function makeParams(defaultValue, hasPrevValue, override) {
|
|
|
141
168
|
const stackParams = params.updateExisting({ [PARAM]: override ? OVERRIDE : undefined }, prevParams);
|
|
142
169
|
return { apiParameters: stackParams.apiParameters, changed: stackParams.hasChanges(prevParams) };
|
|
143
170
|
}
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24udGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsb3VkZm9ybWF0aW9uLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0Q0FBeUQ7QUFDekQsc0VBQTRGO0FBQzVGLHlDQUFnRjtBQUVoRixNQUFNLEtBQUssR0FBRyxjQUFjLENBQUM7QUFDN0IsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDO0FBQzdCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQztBQUUvQixNQUFNLFlBQVksR0FBRyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQ3ZFLE1BQU0sWUFBWSxHQUFHLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUVyRSxJQUFJLFdBQTRCLENBQUM7QUFDakMsSUFBSSxRQUErRCxDQUFDO0FBQ3BFLElBQUksR0FBdUIsQ0FBQztBQUM1QixVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDcEIsV0FBVyxHQUFHLElBQUksMEJBQWUsRUFBRSxDQUFDO0lBRXBDLFFBQVEsR0FBRztRQUNULGNBQWMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ3ZCLGtCQUFrQjthQUNqQixrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDOUMsQ0FBQztJQUNGLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFlLENBQUMsQ0FBQztJQUNoRCxHQUFHLEdBQUcsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNsRSxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyx5REFBeUQsRUFBRSxLQUFLLElBQUksRUFBRTtJQUN6RSxPQUFPO0lBQ1AsTUFBTSxLQUFLLEdBQUcsTUFB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QVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxVQUFVLENBQUMsWUFBcUIsRUFBRSxZQUFxQixFQUFFLFFBQWlCO0lBQ2pGLE1BQU0sTUFBTSxHQUFHLG1DQUFrQixDQUFDLFlBQVksQ0FBQztRQUM3QyxVQUFVLEVBQUU7WUFDVixDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNQLElBQUksRUFBRSxRQUFRO2dCQUNkLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUzthQUM1QztTQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxVQUFVLEdBQTJCLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbEYsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRXBHLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO0FBQ25HLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTU01QQVJBTV9OT19JTlZBTElEQVRFIH0gZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uU3RhY2ssIFRlbXBsYXRlUGFyYW1ldGVycyB9IGZyb20gJy4uLy4uL2xpYi9hcGkvdXRpbC9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBNb2NrZWRPYmplY3QsIE1vY2tTZGtQcm92aWRlciwgU3luY0hhbmRsZXJTdWJzZXRPZiB9IGZyb20gJy4vbW9jay1zZGsnO1xuXG5jb25zdCBQQVJBTSA9ICdUaGVQYXJhbWV0ZXInO1xuY29uc3QgREVGQVVMVCA9ICdUaGVEZWZhdWx0JztcbmNvbnN0IE9WRVJSSURFID0gJ1RoZU92ZXJyaWRlJztcblxuY29uc3QgVVNFX09WRVJSSURFID0geyBQYXJhbWV0ZXJLZXk6IFBBUkFNLCBQYXJhbWV0ZXJWYWx1ZTogT1ZFUlJJREUgfTtcbmNvbnN0IFVTRV9QUkVWSU9VUyA9IHsgUGFyYW1ldGVyS2V5OiBQQVJBTSwgVXNlUHJldmlvdXNWYWx1ZTogdHJ1ZSB9O1xuXG5sZXQgc2RrUHJvdmlkZXI6IE1vY2tTZGtQcm92aWRlcjtcbmxldCBjZm5Nb2NrczogTW9ja2VkT2JqZWN0PFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLkNsb3VkRm9ybWF0aW9uPj47XG5sZXQgY2ZuOiBBV1MuQ2xvdWRGb3JtYXRpb247XG5iZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgc2RrUHJvdmlkZXIgPSBuZXcgTW9ja1Nka1Byb3ZpZGVyKCk7XG5cbiAgY2ZuTW9ja3MgPSB7XG4gICAgZGVzY3JpYmVTdGFja3M6IGplc3QuZm4oKVxuICAgICAgLy8gTm8gc3RhY2tzIGV4aXN0XG4gICAgICAubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7IFN0YWNrczogW10gfSkpLFxuICB9O1xuICBzZGtQcm92aWRlci5zdHViQ2xvdWRGb3JtYXRpb24oY2ZuTW9ja3MgYXMgYW55KTtcbiAgY2ZuID0gKGF3YWl0IHNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50KCkpLnNkay5jbG91ZEZvcm1hdGlvbigpO1xufSk7XG5cbnRlc3QoJ0Egbm9uLWV4aXN0ZW50IHN0YWNrIHByZXRlbmRzIHRvIGhhdmUgYW4gZW1wdHkgdGVtcGxhdGUnLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgY29uc3Qgc3RhY2sgPSBhd2FpdCBDbG91ZEZvcm1hdGlvblN0YWNrLmxvb2t1cChjZm4sICdEdW1teScpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGF3YWl0IHN0YWNrLnRlbXBsYXRlKCkpLnRvRXF1YWwoe30pO1xufSk7XG5cbnRlc3QuZWFjaChbXG4gIFtmYWxzZSwgZmFsc2VdLFxuICBbZmFsc2UsIHRydWVdLFxuICBbdHJ1ZSwgZmFsc2VdLFxuICBbdHJ1ZSwgdHJ1ZV0sXG5dKSgnZ2l2ZW4gb3ZlcnJpZGUsIGFsd2F5cyB1c2UgdGhlIG92ZXJyaWRlIChwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdDogJXAsIHBhcmFtZXRlciBwcmV2aW91c2x5IHN1cHBsaWVkOiAlcCknLFxuICAoaGF2ZURlZmF1bHQsIGhhdmVQcmV2aW91cykgPT4ge1xuICAgIGV4cGVjdChtYWtlUGFyYW1zKGhhdmVEZWZhdWx0LCBoYXZlUHJldmlvdXMsIHRydWUpKS50b0VxdWFsKHtcbiAgICAgIGFwaVBhcmFtZXRlcnM6IFtVU0VfT1ZFUlJJREVdLFxuICAgICAgY2hhbmdlZDogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbnRlc3QoJ25vIGRlZmF1bHQsIG5vIHByZXYsIG5vIG92ZXJyaWRlID0+IGVycm9yJywgKCkgPT4ge1xuICBleHBlY3QoKCkgPT4gbWFrZVBhcmFtcyhmYWxzZSwgZmFsc2UsIGZhbHNlKSkudG9UaHJvdygvbWlzc2luZyBhIHZhbHVlOiBUaGVQYXJhbWV0ZXIvKTtcbn0pO1xuXG50ZXN0KCdubyBkZWZhdWx0LCB5ZXMgcHJldiwgbm8gb3ZlcnJpZGUgPT4gdXNlIHByZXZpb3VzJywgKCkgPT4ge1xuICBleHBlY3QobWFrZVBhcmFtcyhmYWxzZSwgdHJ1ZSwgZmFsc2UpKS50b0VxdWFsKHtcbiAgICBhcGlQYXJhbWV0ZXJzOiBbVVNFX1BSRVZJT1VTXSxcbiAgICBjaGFuZ2VkOiBmYWxzZSxcbiAgfSk7XG59KTtcblxudGVzdCgnZGVmYXVsdCwgbm8gcHJldiwgbm8gb3ZlcnJpZGUgPT4gZW1wdHkgcGFyYW0gc2V0IChhbmQgb2J2aW91c2x5IGNoYW5nZXMgdG8gYmUgYXBwbGllZCknLCAoKSA9PiB7XG4gIGV4cGVjdChtYWtlUGFyYW1zKHRydWUsIGZhbHNlLCBmYWxzZSkpLnRvRXF1YWwoe1xuICAgIGFwaVBhcmFtZXRlcnM6IFtdLFxuICAgIGNoYW5nZWQ6IHRydWUsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ2RlZmF1bHQsIHByZXYsIG5vIG92ZXJyaWRlID0+IHVzZSBwcmV2aW91cycsICgpID0+IHtcbiAgZXhwZWN0KG1ha2VQYXJhbXModHJ1ZSwgdHJ1ZSwgZmFsc2UpKS50b0VxdWFsKHtcbiAgICBhcGlQYXJhbWV0ZXJzOiBbVVNFX1BSRVZJT1VTXSxcbiAgICBjaGFuZ2VkOiBmYWxzZSxcbiAgfSk7XG59KTtcblxudGVzdCgnaWYgYSBwYXJhbWV0ZXIgaXMgcmV0cmlldmVkIGZyb20gU1NNLCB0aGUgcGFyYW1ldGVycyBhbHdheXMgY291bnQgYXMgY2hhbmdlZCcsICgpID0+IHtcbiAgY29uc3QgcGFyYW1zID0gVGVtcGxhdGVQYXJhbWV0ZXJzLmZyb21UZW1wbGF0ZSh7XG4gICAgUGFyYW1ldGVyczoge1xuICAgICAgRm9vOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNTTTo6UGFyYW1ldGVyOjpOYW1lJyxcbiAgICAgICAgRGVmYXVsdDogJy9Tb21lL0tleScsXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBvbGRWYWx1ZXMgPSB7IEZvbzogJy9Tb21lL0tleScgfTtcblxuICAvLyBJZiB3ZSBkb24ndCBwYXNzIGEgbmV3IHZhbHVlXG4gIGV4cGVjdChwYXJhbXMudXBkYXRlRXhpc3Rpbmcoe30sIG9sZFZhbHVlcykuaGFzQ2hhbmdlcyhvbGRWYWx1ZXMpKS50b0VxdWFsKCdzc20nKTtcblxuICAvLyBJZiB3ZSBkbyBwYXNzIGEgbmV3IHZhbHVlIGJ1dCBpdCdzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lXG4gIGV4cGVjdChwYXJhbXMudXBkYXRlRXhpc3RpbmcoeyBGb286ICcvU29tZS9LZXknIH0sIG9sZFZhbHVlcykuaGFzQ2hhbmdlcyhvbGRWYWx1ZXMpKS50b0VxdWFsKCdzc20nKTtcbn0pO1xuXG50ZXN0KCdpZiBhIHBhcmFtZXRlciBpcyByZXRyaWV2ZWQgZnJvbSBTU00sIHRoZSBwYXJhbWV0ZXJzIGRvZXNudCBjb3VudCBhcyBjaGFuZ2VkIGlmIGl0IGhhcyB0aGUgbWFnaWMgbWFya2VyJywgKCkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBUZW1wbGF0ZVBhcmFtZXRlcnMuZnJvbVRlbXBsYXRlKHtcbiAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICBGb286IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U1NNOjpQYXJhbWV0ZXI6Ok5hbWUnLFxuICAgICAgICBEZWZhdWx0OiAnL1NvbWUvS2V5JyxcbiAgICAgICAgRGVzY3JpcHRpb246IGBibGFibGEgJHtTU01QQVJBTV9OT19JTlZBTElEQVRFfWAsXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBvbGRWYWx1ZXMgPSB7IEZvbzogJy9Tb21lL0tleScgfTtcblxuICAvLyBJZiB3ZSBkb24ndCBwYXNzIGEgbmV3IHZhbHVlXG4gIGV4cGVjdChwYXJhbXMudXBkYXRlRXhpc3Rpbmcoe30sIG9sZFZhbHVlcykuaGFzQ2hhbmdlcyhvbGRWYWx1ZXMpKS50b0VxdWFsKGZhbHNlKTtcblxuICAvLyBJZiB3ZSBkbyBwYXNzIGEgbmV3IHZhbHVlIGJ1dCBpdCdzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lXG4gIGV4cGVjdChwYXJhbXMudXBkYXRlRXhpc3RpbmcoeyBGb286ICcvU29tZS9LZXknIH0sIG9sZFZhbHVlcykuaGFzQ2hhbmdlcyhvbGRWYWx1ZXMpKS50b0VxdWFsKGZhbHNlKTtcblxuICAvLyBJZiB3ZSBkbyBwYXNzIGEgbmV3IHZhbHVlIGFuZCBpdCdzIGRpZmZlcmVudFxuICBleHBlY3QocGFyYW1zLnVwZGF0ZUV4aXN0aW5nKHsgRm9vOiAnL09USEVSL0tleScgfSwgb2xkVmFsdWVzKS5oYXNDaGFuZ2VzKG9sZFZhbHVlcykpLnRvRXF1YWwodHJ1ZSk7XG59KTtcblxudGVzdCgnZW1wdHkgc3RyaW5nIGlzIGEgdmFsaWQgdXBkYXRlIHZhbHVlJywgKCkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBUZW1wbGF0ZVBhcmFtZXRlcnMuZnJvbVRlbXBsYXRlKHtcbiAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICBGb286IHsgVHlwZTogJ1N0cmluZycsIERlZmF1bHQ6ICdGb28nIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgZXhwZWN0KHBhcmFtcy51cGRhdGVFeGlzdGluZyh7IEZvbzogJycgfSwgeyBGb286ICdUaGlzSXNPbGQnIH0pLmFwaVBhcmFtZXRlcnMpLnRvRXF1YWwoW1xuICAgIHsgUGFyYW1ldGVyS2V5OiAnRm9vJywgUGFyYW1ldGVyVmFsdWU6ICcnIH0sXG4gIF0pO1xufSk7XG5cbnRlc3QoJ3Vua25vd24gcGFyYW1ldGVyIGluIG92ZXJyaWRlcywgcGFzcyBpdCBhbnl3YXknLCAoKSA9PiB7XG4gIC8vIE5vdCBzdXJlIGlmIHdlIHJlYWxseSB3YW50IHRoaXMuIEl0IHNlZW1zIGxpa2UgaXQgd291bGQgYmUgbmljZVxuICAvLyB0byBub3QgcGFzcyBwYXJhbWV0ZXJzIHRoYXQgYXJlbid0IGV4cGVjdGVkLCBnaXZlbiB0aGF0IENGTiB3aWxsXG4gIC8vIGp1c3QgZXJyb3Igb3V0LiBCdXQgbWF5YmUgd2Ugd2FudCB0byBiZSB3YXJuZWQgb2YgdHlwb3MuLi5cbiAgY29uc3QgcGFyYW1zID0gVGVtcGxhdGVQYXJhbWV0ZXJzLmZyb21UZW1wbGF0ZSh7XG4gICAgUGFyYW1ldGVyczoge1xuICAgICAgRm9vOiB7IFR5cGU6ICdTdHJpbmcnLCBEZWZhdWx0OiAnRm9vJyB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIGV4cGVjdChwYXJhbXMudXBkYXRlRXhpc3RpbmcoeyBCYXI6ICdCYXInIH0sIHt9KS5hcGlQYXJhbWV0ZXJzKS50b0VxdWFsKFtcbiAgICB7IFBhcmFtZXRlcktleTogJ0JhcicsIFBhcmFtZXRlclZhbHVlOiAnQmFyJyB9LFxuICBdKTtcbn0pO1xuXG50ZXN0KCdpZiBhbiB1bnN1cHBsaWVkIHBhcmFtZXRlciByZXZlcnRzIHRvIGl0cyBkZWZhdWx0LCBpdCBjYW4gc3RpbGwgYmUgZGlydHknLCAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IHRlbXBsYXRlUGFyYW1zID0gVGVtcGxhdGVQYXJhbWV0ZXJzLmZyb21UZW1wbGF0ZSh7XG4gICAgUGFyYW1ldGVyczoge1xuICAgICAgRm9vOiB7IFR5cGU6ICdTdHJpbmcnLCBEZWZhdWx0OiAnRm9vJyB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3Qgc3RhY2tQYXJhbXMgPSB0ZW1wbGF0ZVBhcmFtcy5zdXBwbHlBbGwoe30pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KHN0YWNrUGFyYW1zLmhhc0NoYW5nZXMoeyBGb286ICdOb25TdGFuZGFyZCcgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gIGV4cGVjdChzdGFja1BhcmFtcy5oYXNDaGFuZ2VzKHsgRm9vOiAnRm9vJyB9KSkudG9FcXVhbChmYWxzZSk7XG59KTtcblxuZnVuY3Rpb24gbWFrZVBhcmFtcyhkZWZhdWx0VmFsdWU6IGJvb2xlYW4sIGhhc1ByZXZWYWx1ZTogYm9vbGVhbiwgb3ZlcnJpZGU6IGJvb2xlYW4pIHtcbiAgY29uc3QgcGFyYW1zID0gVGVtcGxhdGVQYXJhbWV0ZXJzLmZyb21UZW1wbGF0ZSh7XG4gICAgUGFyYW1ldGVyczoge1xuICAgICAgW1BBUkFNXToge1xuICAgICAgICBUeXBlOiAnU3RyaW5nJyxcbiAgICAgICAgRGVmYXVsdDogZGVmYXVsdFZhbHVlID8gREVGQVVMVCA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IHByZXZQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSBoYXNQcmV2VmFsdWUgPyB7IFtQQVJBTV06ICdGb28nIH0gOiB7fTtcbiAgY29uc3Qgc3RhY2tQYXJhbXMgPSBwYXJhbXMudXBkYXRlRXhpc3RpbmcoeyBbUEFSQU1dOiBvdmVycmlkZSA/IE9WRVJSSURFIDogdW5kZWZpbmVkIH0sIHByZXZQYXJhbXMpO1xuXG4gIHJldHVybiB7IGFwaVBhcmFtZXRlcnM6IHN0YWNrUGFyYW1zLmFwaVBhcmFtZXRlcnMsIGNoYW5nZWQ6IHN0YWNrUGFyYW1zLmhhc0NoYW5nZXMocHJldlBhcmFtcykgfTtcbn1cbiJdfQ==
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24udGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsb3VkZm9ybWF0aW9uLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0Q0FBeUQ7QUFDekQsc0VBQTRGO0FBQzVGLHlDQUFnRjtBQUVoRixNQUFNLEtBQUssR0FBRyxjQUFjLENBQUM7QUFDN0IsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDO0FBQzdCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQztBQUUvQixNQUFNLFlBQVksR0FBRyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQ3ZFLE1BQU0sWUFBWSxHQUFHLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUVyRSxJQUFJLFdBQTRCLENBQUM7QUFDakMsSUFBSSxpQkFBNEIsQ0FBQztBQUNqQyxJQUFJLGVBQTBCLENBQUM7QUFDL0IsSUFBSSxRQUErRCxDQUFDO0FBQ3BFLElBQUksR0FBdUIsQ0FBQztBQUM1QixVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDcEIsV0FBVyxHQUFHLElBQUksMEJBQWUsRUFBRSxDQUFDO0lBRXBDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUM5QixlQUFlLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzVCLFFBQVEsR0FBRztRQUNULGNBQWMsRUFBRSxpQkFBaUI7UUFDakMsV0FBVyxFQUFFLGVBQWU7S0FDN0IsQ0FBQztJQUNGLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFlLENBQUMsQ0FBQztJQUNoRCxHQUFHLEdBQUcsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNsRSxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyx5REFBeUQsRUFB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QUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFTLFVBQVUsQ0FBQyxZQUFxQixFQUFFLFlBQXFCLEVBQUUsUUFBaUI7SUFDakYsTUFBTSxNQUFNLEdBQUcsbUNBQWtCLENBQUMsWUFBWSxDQUFDO1FBQzdDLFVBQVUsRUFBRTtZQUNWLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTO2FBQzVDO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLFVBQVUsR0FBMkIsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNsRixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFcEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7QUFDbkcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNTTVBBUkFNX05PX0lOVkFMSURBVEUgfSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25TdGFjaywgVGVtcGxhdGVQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vLi4vbGliL2FwaS91dGlsL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IE1vY2tlZE9iamVjdCwgTW9ja1Nka1Byb3ZpZGVyLCBTeW5jSGFuZGxlclN1YnNldE9mIH0gZnJvbSAnLi9tb2NrLXNkayc7XG5cbmNvbnN0IFBBUkFNID0gJ1RoZVBhcmFtZXRlcic7XG5jb25zdCBERUZBVUxUID0gJ1RoZURlZmF1bHQnO1xuY29uc3QgT1ZFUlJJREUgPSAnVGhlT3ZlcnJpZGUnO1xuXG5jb25zdCBVU0VfT1ZFUlJJREUgPSB7IFBhcmFtZXRlcktleTogUEFSQU0sIFBhcmFtZXRlclZhbHVlOiBPVkVSUklERSB9O1xuY29uc3QgVVNFX1BSRVZJT1VTID0geyBQYXJhbWV0ZXJLZXk6IFBBUkFNLCBVc2VQcmV2aW91c1ZhbHVlOiB0cnVlIH07XG5cbmxldCBzZGtQcm92aWRlcjogTW9ja1Nka1Byb3ZpZGVyO1xubGV0IGRlc2NyaWJlU3RhY2tNb2NrOiBqZXN0Lk1vY2s7XG5sZXQgZ2V0VGVtcGxhdGVNb2NrOiBqZXN0Lk1vY2s7XG5sZXQgY2ZuTW9ja3M6IE1vY2tlZE9iamVjdDxTeW5jSGFuZGxlclN1YnNldE9mPEFXUy5DbG91ZEZvcm1hdGlvbj4+O1xubGV0IGNmbjogQVdTLkNsb3VkRm9ybWF0aW9uO1xuYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gIHNka1Byb3ZpZGVyID0gbmV3IE1vY2tTZGtQcm92aWRlcigpO1xuXG4gIGRlc2NyaWJlU3RhY2tNb2NrID0gamVzdC5mbigpO1xuICBnZXRUZW1wbGF0ZU1vY2sgPSBqZXN0LmZuKCk7XG4gIGNmbk1vY2tzID0ge1xuICAgIGRlc2NyaWJlU3RhY2tzOiBkZXNjcmliZVN0YWNrTW9jayxcbiAgICBnZXRUZW1wbGF0ZTogZ2V0VGVtcGxhdGVNb2NrLFxuICB9O1xuICBzZGtQcm92aWRlci5zdHViQ2xvdWRGb3JtYXRpb24oY2ZuTW9ja3MgYXMgYW55KTtcbiAgY2ZuID0gKGF3YWl0IHNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50KCkpLnNkay5jbG91ZEZvcm1hdGlvbigpO1xufSk7XG5cbnRlc3QoJ0Egbm9uLWV4aXN0ZW50IHN0YWNrIHByZXRlbmRzIHRvIGhhdmUgYW4gZW1wdHkgdGVtcGxhdGUnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGRlc2NyaWJlU3RhY2tNb2NrLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoeyBTdGFja3M6IFtdIH0pKTsgLy8gTm8gc3RhY2tzIGV4aXN0XG5cbiAgLy8gV0hFTlxuICBjb25zdCBzdGFjayA9IGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGNmbiwgJ0R1bW15Jyk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoYXdhaXQgc3RhY2sudGVtcGxhdGUoKSkudG9FcXVhbCh7fSk7XG59KTtcblxudGVzdChcIlJldHJpZXZpbmcgYSBwcm9jZXNzZWQgdGVtcGxhdGUgcGFzc2VzICdQcm9jZXNzZWQnIHRvIENsb3VkRm9ybWF0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgZGVzY3JpYmVTdGFja01vY2subW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgU3RhY2tzOiBbXG4gICAgICB7XG4gICAgICAgIFN0YWNrTmFtZTogJ0R1bW15JyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSkpO1xuICBnZXRUZW1wbGF0ZU1vY2subW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgVGVtcGxhdGVCb2R5OiAne30nLFxuICB9KSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCByZXRyaWV2ZVByb2Nlc3NlZFRlbXBsYXRlID0gdHJ1ZTtcbiAgY29uc3QgY2xvdWRGb3JtYXRpb25TdGFjayA9IGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGNmbiwgJ0R1bW15JywgcmV0cmlldmVQcm9jZXNzZWRUZW1wbGF0ZSk7XG4gIGF3YWl0IGNsb3VkRm9ybWF0aW9uU3RhY2sudGVtcGxhdGUoKTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChnZXRUZW1wbGF0ZU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICBTdGFja05hbWU6ICdEdW1teScsXG4gICAgVGVtcGxhdGVTdGFnZTogJ1Byb2Nlc3NlZCcsXG4gIH0pO1xufSk7XG5cbnRlc3QuZWFjaChbXG4gIFtmYWxzZSwgZmFsc2VdLFxuICBbZmFsc2UsIHRydWVdLFxuICBbdHJ1ZSwgZmFsc2VdLFxuICBbdHJ1ZSwgdHJ1ZV0sXG5dKSgnZ2l2ZW4gb3ZlcnJpZGUsIGFsd2F5cyB1c2UgdGhlIG92ZXJyaWRlIChwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdDogJXAsIHBhcmFtZXRlciBwcmV2aW91c2x5IHN1cHBsaWVkOiAlcCknLFxuICAoaGF2ZURlZmF1bHQsIGhhdmVQcmV2aW91cykgPT4ge1xuICAgIGV4cGVjdChtYWtlUGFyYW1zKGhhdmVEZWZhdWx0LCBoYXZlUHJldmlvdXMsIHRydWUpKS50b0VxdWFsKHtcbiAgICAgIGFwaVBhcmFtZXRlcnM6IFtVU0VfT1ZFUlJJREVdLFxuICAgICAgY2hhbmdlZDogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbnRlc3QoJ25vIGRlZmF1bHQsIG5vIHByZXYsIG5vIG92ZXJyaWRlID0+IGVycm9yJywgKCkgPT4ge1xuICBleHBlY3QoKCkgPT4gbWFrZVBhcmFtcyhmYWxzZSwgZmFsc2UsIGZhbHNlKSkudG9UaHJvdygvbWlzc2luZyBhIHZhbHVlOiBUaGVQYXJhbWV0ZXIvKTtcbn0pO1xuXG50ZXN0KCdubyBkZWZhdWx0LCB5ZXMgcHJldiwgbm8gb3ZlcnJpZGUgPT4gdXNlIHByZXZpb3VzJywgKCkgPT4ge1xuICBleHBlY3QobWFrZVBhcmFtcyhmYWxzZSwgdHJ1ZSwgZmFsc2UpKS50b0VxdWFsKHtcbiAgICBhcGlQYXJhbWV0ZXJzOiBbVVNFX1BSRVZJT1VTXSxcbiAgICBjaGFuZ2VkOiBmYWxzZSxcbiAgfSk7XG59KTtcblxudGVzdCgnZGVmYXVsdCwgbm8gcHJldiwgbm8gb3ZlcnJpZGUgPT4gZW1wdHkgcGFyYW0gc2V0IChhbmQgb2J2aW91c2x5IGNoYW5nZXMgdG8gYmUgYXBwbGllZCknLCAoKSA9PiB7XG4gIGV4cGVjdChtYWtlUGFyYW1zKHRydWUsIGZhbHNlLCBmYWxzZSkpLnRvRXF1YWwoe1xuICAgIGFwaVBhcmFtZXRlcnM6IFtdLFxuICAgIGNoYW5nZWQ6IHRydWUsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ2RlZmF1bHQsIHByZXYsIG5vIG92ZXJyaWRlID0+IHVzZSBwcmV2aW91cycsICgpID0+IHtcbiAgZXhwZWN0KG1ha2VQYXJhbXModHJ1ZSwgdHJ1ZSwgZmFsc2UpKS50b0VxdWFsKHtcbiAgICBhcGlQYXJhbWV0ZXJzOiBbVVNFX1BSRVZJT1VTXSxcbiAgICBjaGFuZ2VkOiBmYWxzZSxcbiAgfSk7XG59KTtcblxudGVzdCgnaWYgYSBwYXJhbWV0ZXIgaXMgcmV0cmlldmVkIGZyb20gU1NNLCB0aGUgcGFyYW1ldGVycyBhbHdheXMgY291bnQgYXMgY2hhbmdlZCcsICgpID0+IHtcbiAgY29uc3QgcGFyYW1zID0gVGVtcGxhdGVQYXJhbWV0ZXJzLmZyb21UZW1wbGF0ZSh7XG4gICAgUGFyYW1ldGVyczoge1xuICAgICAgRm9vOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNTTTo6UGFyYW1ldGVyOjpOYW1lJyxcbiAgICAgICAgRGVmYXVsdDogJy9Tb21lL0tleScsXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBvbGRWYWx1ZXMgPSB7IEZvbzogJy9Tb21lL0tleScgfTtcblxuICAvLyBJZiB3ZSBkb24ndCBwYXNzIGEgbmV3IHZhbHVlXG4gIGV4cGVjdChwYXJhbXMudXBkYXRlRXhpc3Rpbmcoe30sIG9sZFZhbHVlcykuaGFzQ2hhbmdlcyhvbGRWYWx1ZXMpKS50b0VxdWFsKCdzc20nKTtcblxuICAvLyBJZiB3ZSBkbyBwYXNzIGEgbmV3IHZhbHVlIGJ1dCBpdCdzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lXG4gIGV4cGVjdChwYXJhbXMudXBkYXRlRXhpc3RpbmcoeyBGb286ICcvU29tZS9LZXknIH0sIG9sZFZhbHVlcykuaGFzQ2hhbmdlcyhvbGRWYWx1ZXMpKS50b0VxdWFsKCdzc20nKTtcbn0pO1xuXG50ZXN0KCdpZiBhIHBhcmFtZXRlciBpcyByZXRyaWV2ZWQgZnJvbSBTU00sIHRoZSBwYXJhbWV0ZXJzIGRvZXNudCBjb3VudCBhcyBjaGFuZ2VkIGlmIGl0IGhhcyB0aGUgbWFnaWMgbWFya2VyJywgKCkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBUZW1wbGF0ZVBhcmFtZXRlcnMuZnJvbVRlbXBsYXRlKHtcbiAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICBGb286IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U1NNOjpQYXJhbWV0ZXI6Ok5hbWUnLFxuICAgICAgICBEZWZhdWx0OiAnL1NvbWUvS2V5JyxcbiAgICAgICAgRGVzY3JpcHRpb246IGBibGFibGEgJHtTU01QQVJBTV9OT19JTlZBTElEQVRFfWAsXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBvbGRWYWx1ZXMgPSB7IEZvbzogJy9Tb21lL0tleScgfTtcblxuICAvLyBJZiB3ZSBkb24ndCBwYXNzIGEgbmV3IHZhbHVlXG4gIGV4cGVjdChwYXJhbXMudXBkYXRlRXhpc3Rpbmcoe30sIG9sZFZhbHVlcykuaGFzQ2hhbmdlcyhvbGRWYWx1ZXMpKS50b0VxdWFsKGZhbHNlKTtcblxuICAvLyBJZiB3ZSBkbyBwYXNzIGEgbmV3IHZhbHVlIGJ1dCBpdCdzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lXG4gIGV4cGVjdChwYXJhbXMudXBkYXRlRXhpc3RpbmcoeyBGb286ICcvU29tZS9LZXknIH0sIG9sZFZhbHVlcykuaGFzQ2hhbmdlcyhvbGRWYWx1ZXMpKS50b0VxdWFsKGZhbHNlKTtcblxuICAvLyBJZiB3ZSBkbyBwYXNzIGEgbmV3IHZhbHVlIGFuZCBpdCdzIGRpZmZlcmVudFxuICBleHBlY3QocGFyYW1zLnVwZGF0ZUV4aXN0aW5nKHsgRm9vOiAnL09USEVSL0tleScgfSwgb2xkVmFsdWVzKS5oYXNDaGFuZ2VzKG9sZFZhbHVlcykpLnRvRXF1YWwodHJ1ZSk7XG59KTtcblxudGVzdCgnZW1wdHkgc3RyaW5nIGlzIGEgdmFsaWQgdXBkYXRlIHZhbHVlJywgKCkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBUZW1wbGF0ZVBhcmFtZXRlcnMuZnJvbVRlbXBsYXRlKHtcbiAgICBQYXJhbWV0ZXJzOiB7XG4gICAgICBGb286IHsgVHlwZTogJ1N0cmluZycsIERlZmF1bHQ6ICdGb28nIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgZXhwZWN0KHBhcmFtcy51cGRhdGVFeGlzdGluZyh7IEZvbzogJycgfSwgeyBGb286ICdUaGlzSXNPbGQnIH0pLmFwaVBhcmFtZXRlcnMpLnRvRXF1YWwoW1xuICAgIHsgUGFyYW1ldGVyS2V5OiAnRm9vJywgUGFyYW1ldGVyVmFsdWU6ICcnIH0sXG4gIF0pO1xufSk7XG5cbnRlc3QoJ3Vua25vd24gcGFyYW1ldGVyIGluIG92ZXJyaWRlcywgcGFzcyBpdCBhbnl3YXknLCAoKSA9PiB7XG4gIC8vIE5vdCBzdXJlIGlmIHdlIHJlYWxseSB3YW50IHRoaXMuIEl0IHNlZW1zIGxpa2UgaXQgd291bGQgYmUgbmljZVxuICAvLyB0byBub3QgcGFzcyBwYXJhbWV0ZXJzIHRoYXQgYXJlbid0IGV4cGVjdGVkLCBnaXZlbiB0aGF0IENGTiB3aWxsXG4gIC8vIGp1c3QgZXJyb3Igb3V0LiBCdXQgbWF5YmUgd2Ugd2FudCB0byBiZSB3YXJuZWQgb2YgdHlwb3MuLi5cbiAgY29uc3QgcGFyYW1zID0gVGVtcGxhdGVQYXJhbWV0ZXJzLmZyb21UZW1wbGF0ZSh7XG4gICAgUGFyYW1ldGVyczoge1xuICAgICAgRm9vOiB7IFR5cGU6ICdTdHJpbmcnLCBEZWZhdWx0OiAnRm9vJyB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIGV4cGVjdChwYXJhbXMudXBkYXRlRXhpc3RpbmcoeyBCYXI6ICdCYXInIH0sIHt9KS5hcGlQYXJhbWV0ZXJzKS50b0VxdWFsKFtcbiAgICB7IFBhcmFtZXRlcktleTogJ0JhcicsIFBhcmFtZXRlclZhbHVlOiAnQmFyJyB9LFxuICBdKTtcbn0pO1xuXG50ZXN0KCdpZiBhbiB1bnN1cHBsaWVkIHBhcmFtZXRlciByZXZlcnRzIHRvIGl0cyBkZWZhdWx0LCBpdCBjYW4gc3RpbGwgYmUgZGlydHknLCAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IHRlbXBsYXRlUGFyYW1zID0gVGVtcGxhdGVQYXJhbWV0ZXJzLmZyb21UZW1wbGF0ZSh7XG4gICAgUGFyYW1ldGVyczoge1xuICAgICAgRm9vOiB7IFR5cGU6ICdTdHJpbmcnLCBEZWZhdWx0OiAnRm9vJyB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3Qgc3RhY2tQYXJhbXMgPSB0ZW1wbGF0ZVBhcmFtcy5zdXBwbHlBbGwoe30pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KHN0YWNrUGFyYW1zLmhhc0NoYW5nZXMoeyBGb286ICdOb25TdGFuZGFyZCcgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gIGV4cGVjdChzdGFja1BhcmFtcy5oYXNDaGFuZ2VzKHsgRm9vOiAnRm9vJyB9KSkudG9FcXVhbChmYWxzZSk7XG59KTtcblxuZnVuY3Rpb24gbWFrZVBhcmFtcyhkZWZhdWx0VmFsdWU6IGJvb2xlYW4sIGhhc1ByZXZWYWx1ZTogYm9vbGVhbiwgb3ZlcnJpZGU6IGJvb2xlYW4pIHtcbiAgY29uc3QgcGFyYW1zID0gVGVtcGxhdGVQYXJhbWV0ZXJzLmZyb21UZW1wbGF0ZSh7XG4gICAgUGFyYW1ldGVyczoge1xuICAgICAgW1BBUkFNXToge1xuICAgICAgICBUeXBlOiAnU3RyaW5nJyxcbiAgICAgICAgRGVmYXVsdDogZGVmYXVsdFZhbHVlID8gREVGQVVMVCA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IHByZXZQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSBoYXNQcmV2VmFsdWUgPyB7IFtQQVJBTV06ICdGb28nIH0gOiB7fTtcbiAgY29uc3Qgc3RhY2tQYXJhbXMgPSBwYXJhbXMudXBkYXRlRXhpc3RpbmcoeyBbUEFSQU1dOiBvdmVycmlkZSA/IE9WRVJSSURFIDogdW5kZWZpbmVkIH0sIHByZXZQYXJhbXMpO1xuXG4gIHJldHVybiB7IGFwaVBhcmFtZXRlcnM6IHN0YWNrUGFyYW1zLmFwaVBhcmFtZXRlcnMsIGNoYW5nZWQ6IHN0YWNrUGFyYW1zLmhhc0NoYW5nZXMocHJldlBhcmFtcykgfTtcbn1cbiJdfQ==
|