@aws-cdk/toolkit-lib 1.22.0 → 1.23.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/build-info.json +2 -2
- package/lib/api/garbage-collection/stack-refresh.d.ts +1 -0
- package/lib/api/garbage-collection/stack-refresh.js +9 -1
- package/lib/api/notices/filter.d.ts +1 -1
- package/lib/api/notices/filter.js +5 -5
- package/lib/api/notices/types.d.ts +20 -0
- package/lib/api/notices/types.js +1 -1
- package/lib/api/refactoring/context.js +15 -8
- package/lib/toolkit/toolkit.js +5 -8
- package/package.json +2 -2
package/build-info.json
CHANGED
|
@@ -102,6 +102,7 @@ class BackgroundStackRefresh {
|
|
|
102
102
|
timeout;
|
|
103
103
|
lastRefreshTime;
|
|
104
104
|
queuedPromises = [];
|
|
105
|
+
stopped = false;
|
|
105
106
|
constructor(props) {
|
|
106
107
|
this.props = props;
|
|
107
108
|
this.lastRefreshTime = Date.now();
|
|
@@ -120,6 +121,12 @@ class BackgroundStackRefresh {
|
|
|
120
121
|
qualifier: this.props.qualifier,
|
|
121
122
|
});
|
|
122
123
|
this.justRefreshedStacks();
|
|
124
|
+
// If stop() was called while the awaited refreshStacks() above was in flight, do not
|
|
125
|
+
// reinstall a timer — clearTimeout() in stop() could not cancel the already-executing
|
|
126
|
+
// refresh() call, and scheduling a new one here would pin the event loop forever.
|
|
127
|
+
if (this.stopped) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
123
130
|
// If the last invocation of refreshStacks takes <5 minutes, the next invocation starts 5 minutes after the last one started.
|
|
124
131
|
// If the last invocation of refreshStacks takes >5 minutes, the next invocation starts immediately.
|
|
125
132
|
this.timeout = setTimeout(() => this.refresh(), Math.max(startTime + 300_000 - Date.now(), 0));
|
|
@@ -149,8 +156,9 @@ class BackgroundStackRefresh {
|
|
|
149
156
|
]);
|
|
150
157
|
}
|
|
151
158
|
stop() {
|
|
159
|
+
this.stopped = true;
|
|
152
160
|
clearTimeout(this.timeout);
|
|
153
161
|
}
|
|
154
162
|
}
|
|
155
163
|
exports.BackgroundStackRefresh = BackgroundStackRefresh;
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stcmVmcmVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0YWNrLXJlZnJlc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMEdBLHNDQVNDO0FBbEhELCtEQUEyRDtBQUkzRCxNQUFhLGdCQUFnQjtJQUNWLE1BQU0sR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUxQyxhQUFhLENBQUMsYUFBcUI7UUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFhO1FBQzNCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMxQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFmRCw0Q0FlQztBQUVELEtBQUssVUFBVSxlQUFlLENBQUMsRUFBdUQ7SUFDcEYsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLElBQUksU0FBNkIsQ0FBQztJQUNsQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVCLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxHQUEwQixFQUFFLFFBQWtCLEVBQUUsU0FBa0I7SUFDdEcsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sZUFBZSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRTtRQUN4QyxNQUFNLE1BQU0s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SUFDakcsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLEVBQVU7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUVoQyxrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsNkVBQTZFO1FBQzdFLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztZQUNsQixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pELElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLDRCQUFZLENBQUMscUJBQXFCLEVBQUUsMEVBQTBFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzlLLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxJQUFJO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUE5REQsd0RBOERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXJhbWV0ZXJEZWNsYXJhdGlvbiB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRGb3JtYXRpb25DbGllbnQgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcblxuZXhwb3J0IGNsYXNzIEFjdGl2ZUFzc2V0Q2FjaGUge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cbiAgcHVibGljIHJlbWVtYmVyU3RhY2soc3RhY2tUZW1wbGF0ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zdGFja3MuYWRkKHN0YWNrVGVtcGxhdGUpO1xuICB9XG5cbiAgcHVibGljIGNvbnRhaW5zKGFzc2V0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIHRoaXMuc3RhY2tzKSB7XG4gICAgICBpZiAoc3RhY2suaW5jbHVkZXMoYXNzZXQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVTZGtDYWxsKGNiOiAobmV4dFRva2VuPzogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4pIHtcbiAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgd2hpbGUgKCFmaW5pc2hlZCkge1xuICAgIG5leHRUb2tlbiA9IGF3YWl0IGNiKG5leHRUb2tlbik7XG4gICAgaWYgKG5leHRUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRmV0Y2hlcyBhbGwgcmVsZXZhbnQgc3RhY2sgdGVtcGxhdGVzIGZyb20gQ2xvdWRGb3JtYXRpb24uIEl0IGlnbm9yZXMgdGhlIGZvbGxvd2luZyBzdGFja3M6XG4gKiAtIHN0YWNrcyBpbiBERUxFVEVfQ09NUExFVEUgb3IgREVMRVRFX0lOX1BST0dSRVNTIHN0YWdlXG4gKiAtIHN0YWNrcyB0aGF0IGFyZSB1c2luZyBhIGRpZmZlcmVudCBib290c3RyYXAgcXVhbGlmaWVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQWxsU3RhY2tUZW1wbGF0ZXMoY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsIGlvSGVscGVyOiBJb0hlbHBlciwgcXVhbGlmaWVyPzogc3RyaW5nKSB7XG4gIGNvbnN0IHN0YWNrTmFtZXM6IHN0cmluZ1tdID0gW107XG4gIGF3YWl0IHBhZ2luYXRlU2RrQ2FsbChhc3luYyAobmV4dFRva2VuKSA9PiB7XG4gICAgY29uc3Qgc3RhY2tzID0gYXdhaXQgY2ZuLmxpc3RTdGFja3MoeyBOZXh0VG9rZW46IG5leHRUb2tlbiB9KTtcblxuICAgIC8vIFdlIGlnbm9yZSBzdGFja3Mgd2l0aCB0aGVzZSBzdGF0dXNlcyBiZWNhdXNlIHRoZWlyIGFzc2V0cyBhcmUgbm8gbG9uZ2VyIGxpdmVcbiAgICBjb25zdCBpZ25vcmVkU3RhdHVlcyA9IFsnQ1JFQVRFX0ZBSUxFRCcsICdERUxFVEVfQ09NUExFVEUnLCAnREVMRVRFX0lOX1BST0dSRVNTJywgJ0RFTEVURV9GQUlMRUQnLCAnUkVWSUVXX0lOX1BST0dSRVNTJ107XG4gICAgc3RhY2tOYW1lcy5wdXNoKFxuICAgICAgLi4uKHN0YWNrcy5TdGFja1N1bW1hcmllcyA/PyBbXSlcbiAgICAgICAgLmZpbHRlcigoczogYW55KSA9PiAhaWdub3JlZFN0YXR1ZXMuaW5jbHVkZXMocy5TdGFja1N0YXR1cykpXG4gICAgICAgIC5tYXAoKHM6IGFueSkgPT4gcy5TdGFja0lkID8/IHMuU3RhY2tOYW1lKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHN0YWNrcy5OZXh0VG9rZW47XG4gIH0pO1xuXG4gIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGBQYXJzaW5nIHRocm91Z2ggJHtzdGFja05hbWVzLmxlbmd0aH0gc3RhY2tzYCk7XG5cbiAgY29uc3QgdGVtcGxhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHN0YWNrIG9mIHN0YWNrTmFtZXMpIHtcbiAgICBsZXQgc3VtbWFyeTtcbiAgICBzdW1tYXJ5ID0gYXdhaXQgY2ZuLmdldFRlbXBsYXRlU3VtbWFyeSh7XG4gICAgICBTdGFja05hbWU6IHN0YWNrLFxuICAgIH0pO1xuXG4gICAgaWYgKGJvb3RzdHJhcEZpbHRlcihzdW1tYXJ5LlBhcmFtZXRlcnMsIHF1YWxpZmllcikpIHtcbiAgICAgIC8vIFRoaXMgc3RhY2sgaXMgZGVmaW5pdGVseSBib290c3RyYXBwZWQgdG8gYSBkaWZmZXJlbnQgcXVhbGlmaWVyIHNvIHdlIGNhbiBzYWZlbHkgaWdub3JlIGl0XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCBjZm4uZ2V0VGVtcGxhdGUoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrLFxuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlcy5wdXNoKCh0ZW1wbGF0ZS5UZW1wbGF0ZUJvZHkgPz8gJycpICsgSlNPTi5zdHJpbmdpZnkoc3VtbWFyeT8uUGFyYW1ldGVycykpO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKCdEb25lIHBhcnNpbmcgdGhyb3VnaCBzdGFja3MnKTtcblxuICByZXR1cm4gdGVtcGxhdGVzO1xufVxuXG4vKipcbiAqIEZpbHRlciBvdXQgc3RhY2tzIHRoYXQgd2UgS05PVyBhcmUgdXNpbmcgYSBkaWZmZXJlbnQgYm9vdHN0cmFwIHF1YWxpZmllclxuICogVGhpcyBpcyBtb3N0bHkgbmVjZXNzYXJ5IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdHMgdGhhdCBjYW4gcnVuIHRoZSBzYW1lIGFwcCAod2l0aCB0aGUgc2FtZSBhc3NldHMpXG4gKiB1bmRlciBkaWZmZXJlbnQgcXVhbGlmaWVycy5cbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgYSBzdGFjayB1bmRlciBhIGRpZmZlcmVudCBib290c3RyYXAgY291bGQgY29pbmNpZGVudGFsbHkgcmVmZXJlbmNlIHRoZSBzYW1lIGhhc2hcbiAqIGFuZCBjYXVzZSBhIGZhbHNlIG5lZ2F0aXZlIChjYXVzZSBhbiBhc3NldCB0byBiZSBwcmVzZXJ2ZWQgd2hlbiBpdHMgaXNvbGF0ZWQpXG4gKiBUaGlzIGlzIGludGVudGlvbmFsbHkgZG9uZSBpbiBhIHdheSB3aGVyZSB3ZSBPTkxZIGZpbHRlciBvdXQgc3RhY2tzIHRoYXQgYXJlIG1lYW50IGZvciBhIGRpZmZlcmVudCBxdWFsaWZpZXJcbiAqIGJlY2F1c2Ugd2UgYXJlIG9rYXkgd2l0aCBmYWxzZSBwb3NpdGl2ZXMuXG4gKi9cbmZ1bmN0aW9uIGJvb3RzdHJhcEZpbHRlcihwYXJhbWV0ZXJzPzogUGFyYW1ldGVyRGVjbGFyYXRpb25bXSwgcXVhbGlmaWVyPzogc3RyaW5nKSB7XG4gIGNvbnN0IGJvb3RzdHJhcFZlcnNpb24gPSBwYXJhbWV0ZXJzPy5maW5kKChwKSA9PiBwLlBhcmFtZXRlcktleSA9PT0gJ0Jvb3RzdHJhcFZlcnNpb24nKTtcbiAgY29uc3Qgc3BsaXRCb290c3RyYXBWZXJzaW9uID0gYm9vdHN0cmFwVmVyc2lvbj8uRGVmYXVsdFZhbHVlPy5zcGxpdCgnLycpO1xuICAvLyBXZSBmaW5kIHRoZSBxdWFsaWZpZXIgaW4gYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBib290c3RyYXAgdmVyc2lvbiBwYXJhbWV0ZXJcbiAgcmV0dXJuIChxdWFsaWZpZXIgJiZcbiAgICAgICAgICBzcGxpdEJvb3RzdHJhcFZlcnNpb24gJiZcbiAgICAgICAgICBzcGxpdEJvb3RzdHJhcFZlcnNpb24ubGVuZ3RoID09IDQgJiZcbiAgICAgICAgICBzcGxpdEJvb3RzdHJhcFZlcnNpb25bMl0gIT0gcXVhbGlmaWVyKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoU3RhY2tzUHJvcHMge1xuICByZWFkb25seSBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcbiAgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuICByZWFkb25seSBhY3RpdmVBc3NldHM6IEFjdGl2ZUFzc2V0Q2FjaGU7XG4gIHJlYWRvbmx5IHF1YWxpZmllcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hTdGFja3MocHJvcHM6IFJlZnJlc2hTdGFja3NQcm9wcykge1xuICB0cnkge1xuICAgIGNvbnN0IHN0YWNrcyA9IGF3YWl0IGZldGNoQWxsU3RhY2tUZW1wbGF0ZXMocHJvcHMuY2ZuLCBwcm9wcy5pb0hlbHBlciwgcHJvcHMucXVhbGlmaWVyKTtcbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIHN0YWNrcykge1xuICAgICAgcHJvcHMuYWN0aXZlQXNzZXRzLnJlbWVtYmVyU3RhY2soc3RhY2spO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignU3RhY2tSZWZyZXNoRmFpbGVkJywgYEVycm9yIHJlZnJlc2hpbmcgc3RhY2tzOiAke2Vycn1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEJhY2tncm91bmQgU3RhY2sgUmVmcmVzaCBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFja2dyb3VuZFN0YWNrUmVmcmVzaFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBDRk4gU0RLIGhhbmRsZXJcbiAgICovXG4gIHJlYWRvbmx5IGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50O1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHNlbmQgbWVzc2FnZXMuXG4gICAqL1xuICByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgLyoqXG4gICAqIEFjdGl2ZSBBc3NldCBzdG9yYWdlXG4gICAqL1xuICByZWFkb25seSBhY3RpdmVBc3NldHM6IEFjdGl2ZUFzc2V0Q2FjaGU7XG5cbiAgLyoqXG4gICAqIFN0YWNrIGJvb3RzdHJhcCBxdWFsaWZpZXJcbiAgICovXG4gIHJlYWRvbmx5IHF1YWxpZmllcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDbGFzcyB0aGF0IGNvbnRyb2xzIHNjaGVkdWxpbmcgb2YgdGhlIGJhY2tncm91bmQgc3RhY2sgcmVmcmVzaFxuICovXG5leHBvcnQgY2xhc3MgQmFja2dyb3VuZFN0YWNrUmVmcmVzaCB7XG4gIHByaXZhdGUgdGltZW91dD86IE5vZGVKUy5UaW1lb3V0O1xuICBwcml2YXRlIGxhc3RSZWZyZXNoVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHF1ZXVlZFByb21pc2VzOiBBcnJheTwodmFsdWU6IHVua25vd24pID0+IHZvaWQ+ID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogQmFja2dyb3VuZFN0YWNrUmVmcmVzaFByb3BzKSB7XG4gICAgdGhpcy5sYXN0UmVmcmVzaFRpbWUgPSBEYXRlLm5vdygpO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0KCkge1xuICAgIC8vIFNpbmNlIHN0YXJ0IGlzIGdvaW5nIHRvIGJlIGNhbGxlZCByaWdodCBhZnRlciB0aGUgZmlyc3QgaW52b2NhdGlvbiBvZiByZWZyZXNoU3RhY2tzLFxuICAgIC8vIGxldHMgd2FpdCBzb21lIHRpbWUgYmVmb3JlIGJlZ2lubmluZyB0aGUgYmFja2dyb3VuZCByZWZyZXNoLlxuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWZyZXNoKCksIDMwMF8wMDApOyAvLyA1IG1pbnV0ZXNcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaCgpIHtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgYXdhaXQgcmVmcmVzaFN0YWNrcyh7XG4gICAgICBjZm46IHRoaXMucHJvcHMuY2ZuLFxuICAgICAgaW9IZWxwZXI6IHRoaXMucHJvcHMuaW9IZWxwZXIsXG4gICAgICBhY3RpdmVBc3NldHM6IHRoaXMucHJvcHMuYWN0aXZlQXNzZXRzLFxuICAgICAgcXVhbGlmaWVyOiB0aGlzLnByb3BzLnF1YWxpZmllcixcbiAgICB9KTtcbiAgICB0aGlzLmp1c3RSZWZyZXNoZWRTdGFja3MoKTtcblxuICAgIC8vIElmIHRoZSBsYXN0IGludm9jYXRpb24gb2YgcmVmcmVzaFN0YWNrcyB0YWtlcyA8NSBtaW51dGVzLCB0aGUgbmV4dCBpbnZvY2F0aW9uIHN0YXJ0cyA1IG1pbnV0ZXMgYWZ0ZXIgdGhlIGxhc3Qgb25lIHN0YXJ0ZWQuXG4gICAgLy8gSWYgdGhlIGxhc3QgaW52b2NhdGlvbiBvZiByZWZyZXNoU3RhY2tzIHRha2VzID41IG1pbnV0ZXMsIHRoZSBuZXh0IGludm9jYXRpb24gc3RhcnRzIGltbWVkaWF0ZWx5LlxuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWZyZXNoKCksIE1hdGgubWF4KHN0YXJ0VGltZSArIDMwMF8wMDAgLSBEYXRlLm5vdygpLCAwKSk7XG4gIH1cblxuICBwcml2YXRlIGp1c3RSZWZyZXNoZWRTdGFja3MoKSB7XG4gICAgdGhpcy5sYXN0UmVmcmVzaFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLnF1ZXVlZFByb21pc2VzLnNwbGljZSgwLCB0aGlzLnF1ZXVlZFByb21pc2VzLmxlbmd0aCkpIHtcbiAgICAgIHAodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBsYXN0IHN1Y2Nlc3NmdWwgYmFja2dyb3VuZCByZWZyZXNoIGhhcHBlbmVkIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgZnJhbWUuXG4gICAqIElmIHRoZSBsYXN0IHJlZnJlc2ggaXMgb2xkZXIgdGhhbiB0aGUgc3BlY2lmaWVkIHRpbWUgZnJhbWUsIGl0IHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXNcbiAgICogd2hlbiB0aGUgbmV4dCBiYWNrZ3JvdW5kIHJlZnJlc2ggY29tcGxldGVzIG9yIHJlamVjdHMgaWYgdGhlIHJlZnJlc2ggdGFrZXMgdG9vIGxvbmcuXG4gICAqL1xuICBwdWJsaWMgbm9PbGRlclRoYW4obXM6IG51bWJlcikge1xuICAgIGNvbnN0IGhvcml6b24gPSBEYXRlLm5vdygpIC0gbXM7XG5cbiAgICAvLyBUaGUgbGFzdCByZWZyZXNoIGhhcHBlbmVkIHdpdGhpbiB0aGUgdGltZSBmcmFtZVxuICAgIGlmICh0aGlzLmxhc3RSZWZyZXNoVGltZSA+PSBob3Jpem9uKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGxhc3QgcmVmcmVzaCBoYXBwZW5lZCBlYXJsaWVyIHRoYW4gdGhlIHRpbWUgZnJhbWVcbiAgICAvLyBXZSB3aWxsIHdhaXQgZm9yIHRoZSBsYXRlc3QgcmVmcmVzaCB0byBsYW5kIG9yIHJlamVjdCBpZiBpdCB0YWtlcyB0b28gbG9uZ1xuICAgIHJldHVybiBQcm9taXNlLnJhY2UoW1xuICAgICAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB0aGlzLnF1ZXVlZFByb21pc2VzLnB1c2gocmVzb2x2ZSkpLFxuICAgICAgbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IFRvb2xraXRFcnJvcignU3RhY2tSZWZyZXNoVGltZW91dCcsICdyZWZyZXNoU3RhY2tzIHRvb2sgdG9vIGxvbmc7IHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBsaWtlbHkgdGhyZXcgYW4gZXJyb3InKSksIG1zKSksXG4gICAgXSk7XG4gIH1cblxuICBwdWJsaWMgc3RvcCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgfVxufVxuIl19
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stcmVmcmVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0YWNrLXJlZnJlc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMEdBLHNDQVNDO0FBbEhELCtEQUEyRDtBQUkzRCxNQUFhLGdCQUFnQjtJQUNWLE1BQU0sR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUxQyxhQUFhLENBQUMsYUFBcUI7UUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFhO1FBQzNCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMxQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFmRCw0Q0FlQztBQUVELEtBQUssVUFBVSxlQUFlLENBQUMsRUFBdUQ7SUFDcEYsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLElBQUksU0FBNkIsQ0FBQztJQUNsQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVCLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxHQUEwQixFQUFFLFFBQWtCLEVBQUUsU0FBa0I7SUFDdEcsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sZUFBZSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRTtRQUN4QyxNQUFNLE1BQU0s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LEdBQUcsSUFBSSxDQUFDO1FBQ3BCLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBdkVELHdEQXVFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFyYW1ldGVyRGVjbGFyYXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB0eXBlIHsgSUNsb3VkRm9ybWF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5cbmV4cG9ydCBjbGFzcyBBY3RpdmVBc3NldENhY2hlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFja3M6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG4gIHB1YmxpYyByZW1lbWJlclN0YWNrKHN0YWNrVGVtcGxhdGU6IHN0cmluZykge1xuICAgIHRoaXMuc3RhY2tzLmFkZChzdGFja1RlbXBsYXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBjb250YWlucyhhc3NldDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBzdGFjayBvZiB0aGlzLnN0YWNrcykge1xuICAgICAgaWYgKHN0YWNrLmluY2x1ZGVzKGFzc2V0KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlU2RrQ2FsbChjYjogKG5leHRUb2tlbj86IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+KSB7XG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlO1xuICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHdoaWxlICghZmluaXNoZWQpIHtcbiAgICBuZXh0VG9rZW4gPSBhd2FpdCBjYihuZXh0VG9rZW4pO1xuICAgIGlmIChuZXh0VG9rZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZldGNoZXMgYWxsIHJlbGV2YW50IHN0YWNrIHRlbXBsYXRlcyBmcm9tIENsb3VkRm9ybWF0aW9uLiBJdCBpZ25vcmVzIHRoZSBmb2xsb3dpbmcgc3RhY2tzOlxuICogLSBzdGFja3MgaW4gREVMRVRFX0NPTVBMRVRFIG9yIERFTEVURV9JTl9QUk9HUkVTUyBzdGFnZVxuICogLSBzdGFja3MgdGhhdCBhcmUgdXNpbmcgYSBkaWZmZXJlbnQgYm9vdHN0cmFwIHF1YWxpZmllclxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaEFsbFN0YWNrVGVtcGxhdGVzKGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LCBpb0hlbHBlcjogSW9IZWxwZXIsIHF1YWxpZmllcj86IHN0cmluZykge1xuICBjb25zdCBzdGFja05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBhd2FpdCBwYWdpbmF0ZVNka0NhbGwoYXN5bmMgKG5leHRUb2tlbikgPT4ge1xuICAgIGNvbnN0IHN0YWNrcyA9IGF3YWl0IGNmbi5saXN0U3RhY2tzKHsgTmV4dFRva2VuOiBuZXh0VG9rZW4gfSk7XG5cbiAgICAvLyBXZSBpZ25vcmUgc3RhY2tzIHdpdGggdGhlc2Ugc3RhdHVzZXMgYmVjYXVzZSB0aGVpciBhc3NldHMgYXJlIG5vIGxvbmdlciBsaXZlXG4gICAgY29uc3QgaWdub3JlZFN0YXR1ZXMgPSBbJ0NSRUFURV9GQUlMRUQnLCAnREVMRVRFX0NPTVBMRVRFJywgJ0RFTEVURV9JTl9QUk9HUkVTUycsICdERUxFVEVfRkFJTEVEJywgJ1JFVklFV19JTl9QUk9HUkVTUyddO1xuICAgIHN0YWNrTmFtZXMucHVzaChcbiAgICAgIC4uLihzdGFja3MuU3RhY2tTdW1tYXJpZXMgPz8gW10pXG4gICAgICAgIC5maWx0ZXIoKHM6IGFueSkgPT4gIWlnbm9yZWRTdGF0dWVzLmluY2x1ZGVzKHMuU3RhY2tTdGF0dXMpKVxuICAgICAgICAubWFwKChzOiBhbnkpID0+IHMuU3RhY2tJZCA/PyBzLlN0YWNrTmFtZSksXG4gICAgKTtcblxuICAgIHJldHVybiBzdGFja3MuTmV4dFRva2VuO1xuICB9KTtcblxuICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgUGFyc2luZyB0aHJvdWdoICR7c3RhY2tOYW1lcy5sZW5ndGh9IHN0YWNrc2ApO1xuXG4gIGNvbnN0IHRlbXBsYXRlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja05hbWVzKSB7XG4gICAgbGV0IHN1bW1hcnk7XG4gICAgc3VtbWFyeSA9IGF3YWl0IGNmbi5nZXRUZW1wbGF0ZVN1bW1hcnkoe1xuICAgICAgU3RhY2tOYW1lOiBzdGFjayxcbiAgICB9KTtcblxuICAgIGlmIChib290c3RyYXBGaWx0ZXIoc3VtbWFyeS5QYXJhbWV0ZXJzLCBxdWFsaWZpZXIpKSB7XG4gICAgICAvLyBUaGlzIHN0YWNrIGlzIGRlZmluaXRlbHkgYm9vdHN0cmFwcGVkIHRvIGEgZGlmZmVyZW50IHF1YWxpZmllciBzbyB3ZSBjYW4gc2FmZWx5IGlnbm9yZSBpdFxuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gYXdhaXQgY2ZuLmdldFRlbXBsYXRlKHtcbiAgICAgICAgU3RhY2tOYW1lOiBzdGFjayxcbiAgICAgIH0pO1xuXG4gICAgICB0ZW1wbGF0ZXMucHVzaCgodGVtcGxhdGUuVGVtcGxhdGVCb2R5ID8/ICcnKSArIEpTT04uc3RyaW5naWZ5KHN1bW1hcnk/LlBhcmFtZXRlcnMpKTtcbiAgICB9XG4gIH1cblxuICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZygnRG9uZSBwYXJzaW5nIHRocm91Z2ggc3RhY2tzJyk7XG5cbiAgcmV0dXJuIHRlbXBsYXRlcztcbn1cblxuLyoqXG4gKiBGaWx0ZXIgb3V0IHN0YWNrcyB0aGF0IHdlIEtOT1cgYXJlIHVzaW5nIGEgZGlmZmVyZW50IGJvb3RzdHJhcCBxdWFsaWZpZXJcbiAqIFRoaXMgaXMgbW9zdGx5IG5lY2Vzc2FyeSBmb3IgdGhlIGludGVncmF0aW9uIHRlc3RzIHRoYXQgY2FuIHJ1biB0aGUgc2FtZSBhcHAgKHdpdGggdGhlIHNhbWUgYXNzZXRzKVxuICogdW5kZXIgZGlmZmVyZW50IHF1YWxpZmllcnMuXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGEgc3RhY2sgdW5kZXIgYSBkaWZmZXJlbnQgYm9vdHN0cmFwIGNvdWxkIGNvaW5jaWRlbnRhbGx5IHJlZmVyZW5jZSB0aGUgc2FtZSBoYXNoXG4gKiBhbmQgY2F1c2UgYSBmYWxzZSBuZWdhdGl2ZSAoY2F1c2UgYW4gYXNzZXQgdG8gYmUgcHJlc2VydmVkIHdoZW4gaXRzIGlzb2xhdGVkKVxuICogVGhpcyBpcyBpbnRlbnRpb25hbGx5IGRvbmUgaW4gYSB3YXkgd2hlcmUgd2UgT05MWSBmaWx0ZXIgb3V0IHN0YWNrcyB0aGF0IGFyZSBtZWFudCBmb3IgYSBkaWZmZXJlbnQgcXVhbGlmaWVyXG4gKiBiZWNhdXNlIHdlIGFyZSBva2F5IHdpdGggZmFsc2UgcG9zaXRpdmVzLlxuICovXG5mdW5jdGlvbiBib290c3RyYXBGaWx0ZXIocGFyYW1ldGVycz86IFBhcmFtZXRlckRlY2xhcmF0aW9uW10sIHF1YWxpZmllcj86IHN0cmluZykge1xuICBjb25zdCBib290c3RyYXBWZXJzaW9uID0gcGFyYW1ldGVycz8uZmluZCgocCkgPT4gcC5QYXJhbWV0ZXJLZXkgPT09ICdCb290c3RyYXBWZXJzaW9uJyk7XG4gIGNvbnN0IHNwbGl0Qm9vdHN0cmFwVmVyc2lvbiA9IGJvb3RzdHJhcFZlcnNpb24/LkRlZmF1bHRWYWx1ZT8uc3BsaXQoJy8nKTtcbiAgLy8gV2UgZmluZCB0aGUgcXVhbGlmaWVyIGluIGEgc3BlY2lmaWMgcGFydCBvZiB0aGUgYm9vdHN0cmFwIHZlcnNpb24gcGFyYW1ldGVyXG4gIHJldHVybiAocXVhbGlmaWVyICYmXG4gICAgICAgICAgc3BsaXRCb290c3RyYXBWZXJzaW9uICYmXG4gICAgICAgICAgc3BsaXRCb290c3RyYXBWZXJzaW9uLmxlbmd0aCA9PSA0ICYmXG4gICAgICAgICAgc3BsaXRCb290c3RyYXBWZXJzaW9uWzJdICE9IHF1YWxpZmllcik7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFN0YWNrc1Byb3BzIHtcbiAgcmVhZG9ubHkgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQ7XG4gIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcjtcbiAgcmVhZG9ubHkgYWN0aXZlQXNzZXRzOiBBY3RpdmVBc3NldENhY2hlO1xuICByZWFkb25seSBxdWFsaWZpZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoU3RhY2tzKHByb3BzOiBSZWZyZXNoU3RhY2tzUHJvcHMpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGFja3MgPSBhd2FpdCBmZXRjaEFsbFN0YWNrVGVtcGxhdGVzKHByb3BzLmNmbiwgcHJvcHMuaW9IZWxwZXIsIHByb3BzLnF1YWxpZmllcik7XG4gICAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja3MpIHtcbiAgICAgIHByb3BzLmFjdGl2ZUFzc2V0cy5yZW1lbWJlclN0YWNrKHN0YWNrKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1N0YWNrUmVmcmVzaEZhaWxlZCcsIGBFcnJvciByZWZyZXNoaW5nIHN0YWNrczogJHtlcnJ9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBCYWNrZ3JvdW5kIFN0YWNrIFJlZnJlc2ggcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tncm91bmRTdGFja1JlZnJlc2hQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQ0ZOIFNESyBoYW5kbGVyXG4gICAqL1xuICByZWFkb25seSBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcblxuICAvKipcbiAgICogVXNlZCB0byBzZW5kIG1lc3NhZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuXG4gIC8qKlxuICAgKiBBY3RpdmUgQXNzZXQgc3RvcmFnZVxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aXZlQXNzZXRzOiBBY3RpdmVBc3NldENhY2hlO1xuXG4gIC8qKlxuICAgKiBTdGFjayBib290c3RyYXAgcXVhbGlmaWVyXG4gICAqL1xuICByZWFkb25seSBxdWFsaWZpZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2xhc3MgdGhhdCBjb250cm9scyBzY2hlZHVsaW5nIG9mIHRoZSBiYWNrZ3JvdW5kIHN0YWNrIHJlZnJlc2hcbiAqL1xuZXhwb3J0IGNsYXNzIEJhY2tncm91bmRTdGFja1JlZnJlc2gge1xuICBwcml2YXRlIHRpbWVvdXQ/OiBOb2RlSlMuVGltZW91dDtcbiAgcHJpdmF0ZSBsYXN0UmVmcmVzaFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBxdWV1ZWRQcm9taXNlczogQXJyYXk8KHZhbHVlOiB1bmtub3duKSA9PiB2b2lkPiA9IFtdO1xuICBwcml2YXRlIHN0b3BwZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBCYWNrZ3JvdW5kU3RhY2tSZWZyZXNoUHJvcHMpIHtcbiAgICB0aGlzLmxhc3RSZWZyZXNoVGltZSA9IERhdGUubm93KCk7XG4gIH1cblxuICBwdWJsaWMgc3RhcnQoKSB7XG4gICAgLy8gU2luY2Ugc3RhcnQgaXMgZ29pbmcgdG8gYmUgY2FsbGVkIHJpZ2h0IGFmdGVyIHRoZSBmaXJzdCBpbnZvY2F0aW9uIG9mIHJlZnJlc2hTdGFja3MsXG4gICAgLy8gbGV0cyB3YWl0IHNvbWUgdGltZSBiZWZvcmUgYmVnaW5uaW5nIHRoZSBiYWNrZ3JvdW5kIHJlZnJlc2guXG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlZnJlc2goKSwgMzAwXzAwMCk7IC8vIDUgbWludXRlc1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoKCkge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICBhd2FpdCByZWZyZXNoU3RhY2tzKHtcbiAgICAgIGNmbjogdGhpcy5wcm9wcy5jZm4sXG4gICAgICBpb0hlbHBlcjogdGhpcy5wcm9wcy5pb0hlbHBlcixcbiAgICAgIGFjdGl2ZUFzc2V0czogdGhpcy5wcm9wcy5hY3RpdmVBc3NldHMsXG4gICAgICBxdWFsaWZpZXI6IHRoaXMucHJvcHMucXVhbGlmaWVyLFxuICAgIH0pO1xuICAgIHRoaXMuanVzdFJlZnJlc2hlZFN0YWNrcygpO1xuXG4gICAgLy8gSWYgc3RvcCgpIHdhcyBjYWxsZWQgd2hpbGUgdGhlIGF3YWl0ZWQgcmVmcmVzaFN0YWNrcygpIGFib3ZlIHdhcyBpbiBmbGlnaHQsIGRvIG5vdFxuICAgIC8vIHJlaW5zdGFsbCBhIHRpbWVyIOKAlCBjbGVhclRpbWVvdXQoKSBpbiBzdG9wKCkgY291bGQgbm90IGNhbmNlbCB0aGUgYWxyZWFkeS1leGVjdXRpbmdcbiAgICAvLyByZWZyZXNoKCkgY2FsbCwgYW5kIHNjaGVkdWxpbmcgYSBuZXcgb25lIGhlcmUgd291bGQgcGluIHRoZSBldmVudCBsb29wIGZvcmV2ZXIuXG4gICAgaWYgKHRoaXMuc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBsYXN0IGludm9jYXRpb24gb2YgcmVmcmVzaFN0YWNrcyB0YWtlcyA8NSBtaW51dGVzLCB0aGUgbmV4dCBpbnZvY2F0aW9uIHN0YXJ0cyA1IG1pbnV0ZXMgYWZ0ZXIgdGhlIGxhc3Qgb25lIHN0YXJ0ZWQuXG4gICAgLy8gSWYgdGhlIGxhc3QgaW52b2NhdGlvbiBvZiByZWZyZXNoU3RhY2tzIHRha2VzID41IG1pbnV0ZXMsIHRoZSBuZXh0IGludm9jYXRpb24gc3RhcnRzIGltbWVkaWF0ZWx5LlxuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWZyZXNoKCksIE1hdGgubWF4KHN0YXJ0VGltZSArIDMwMF8wMDAgLSBEYXRlLm5vdygpLCAwKSk7XG4gIH1cblxuICBwcml2YXRlIGp1c3RSZWZyZXNoZWRTdGFja3MoKSB7XG4gICAgdGhpcy5sYXN0UmVmcmVzaFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLnF1ZXVlZFByb21pc2VzLnNwbGljZSgwLCB0aGlzLnF1ZXVlZFByb21pc2VzLmxlbmd0aCkpIHtcbiAgICAgIHAodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBsYXN0IHN1Y2Nlc3NmdWwgYmFja2dyb3VuZCByZWZyZXNoIGhhcHBlbmVkIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgZnJhbWUuXG4gICAqIElmIHRoZSBsYXN0IHJlZnJlc2ggaXMgb2xkZXIgdGhhbiB0aGUgc3BlY2lmaWVkIHRpbWUgZnJhbWUsIGl0IHJldHVybnMgYSBQcm9taXNlIHRoYXQgcmVzb2x2ZXNcbiAgICogd2hlbiB0aGUgbmV4dCBiYWNrZ3JvdW5kIHJlZnJlc2ggY29tcGxldGVzIG9yIHJlamVjdHMgaWYgdGhlIHJlZnJlc2ggdGFrZXMgdG9vIGxvbmcuXG4gICAqL1xuICBwdWJsaWMgbm9PbGRlclRoYW4obXM6IG51bWJlcikge1xuICAgIGNvbnN0IGhvcml6b24gPSBEYXRlLm5vdygpIC0gbXM7XG5cbiAgICAvLyBUaGUgbGFzdCByZWZyZXNoIGhhcHBlbmVkIHdpdGhpbiB0aGUgdGltZSBmcmFtZVxuICAgIGlmICh0aGlzLmxhc3RSZWZyZXNoVGltZSA+PSBob3Jpem9uKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGxhc3QgcmVmcmVzaCBoYXBwZW5lZCBlYXJsaWVyIHRoYW4gdGhlIHRpbWUgZnJhbWVcbiAgICAvLyBXZSB3aWxsIHdhaXQgZm9yIHRoZSBsYXRlc3QgcmVmcmVzaCB0byBsYW5kIG9yIHJlamVjdCBpZiBpdCB0YWtlcyB0b28gbG9uZ1xuICAgIHJldHVybiBQcm9taXNlLnJhY2UoW1xuICAgICAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB0aGlzLnF1ZXVlZFByb21pc2VzLnB1c2gocmVzb2x2ZSkpLFxuICAgICAgbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IFRvb2xraXRFcnJvcignU3RhY2tSZWZyZXNoVGltZW91dCcsICdyZWZyZXNoU3RhY2tzIHRvb2sgdG9vIGxvbmc7IHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBsaWtlbHkgdGhyZXcgYW4gZXJyb3InKSksIG1zKSksXG4gICAgXSk7XG4gIH1cblxuICBwdWJsaWMgc3RvcCgpIHtcbiAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG59XG4iXX0=
|
|
@@ -35,7 +35,7 @@ export declare class NoticesFilter {
|
|
|
35
35
|
* Adds dynamic values from the given ActualComponents
|
|
36
36
|
*
|
|
37
37
|
* If there are multiple components with the same dynamic name, they are joined
|
|
38
|
-
* by
|
|
38
|
+
* by the separator declared in `specs[name].separator`, defaulting to `','`.
|
|
39
39
|
*/
|
|
40
40
|
private addDynamicValues;
|
|
41
41
|
/**
|
|
@@ -98,7 +98,7 @@ class NoticesFilter {
|
|
|
98
98
|
// For every clause in the filter we matched one or more components
|
|
99
99
|
if (matched.every(xs => xs.length > 0)) {
|
|
100
100
|
const ret = new FilteredNotice(notice);
|
|
101
|
-
this.addDynamicValues(matched.flatMap(x => x), ret);
|
|
101
|
+
this.addDynamicValues(matched.flatMap(x => x), ret, notice.dynamicValues);
|
|
102
102
|
return [ret];
|
|
103
103
|
}
|
|
104
104
|
}
|
|
@@ -118,9 +118,9 @@ class NoticesFilter {
|
|
|
118
118
|
* Adds dynamic values from the given ActualComponents
|
|
119
119
|
*
|
|
120
120
|
* If there are multiple components with the same dynamic name, they are joined
|
|
121
|
-
* by
|
|
121
|
+
* by the separator declared in `specs[name].separator`, defaulting to `','`.
|
|
122
122
|
*/
|
|
123
|
-
addDynamicValues(comps, notice) {
|
|
123
|
+
addDynamicValues(comps, notice, specs) {
|
|
124
124
|
const dynamicValues = {};
|
|
125
125
|
for (const comp of comps) {
|
|
126
126
|
if (comp.dynamicName) {
|
|
@@ -129,7 +129,7 @@ class NoticesFilter {
|
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
for (const [key, values] of Object.entries(dynamicValues)) {
|
|
132
|
-
notice.addDynamicValue(key, values.join(','));
|
|
132
|
+
notice.addDynamicValue(key, values.join(specs?.[key]?.separator ?? ','));
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
/**
|
|
@@ -212,4 +212,4 @@ class FilteredNotice {
|
|
|
212
212
|
}
|
|
213
213
|
}
|
|
214
214
|
exports.FilteredNotice = FilteredNotice;
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUNqQyw4REFBZ0U7QUFHaEUsa0NBQTBDO0FBRzFDOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxFQUFrQztJQUM3RCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxhQUFhLENBQUMsTUFBYztJQUNuQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4RCxPQUFPLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLENBQVk7SUFDbkMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sR0FBRyxJQUFBLG9DQUFtQixFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDekUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxFQUFlO0lBQ3hDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FB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O1FBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDRjtBQXBDRCx3Q0FvQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IGxhbmd1YWdlRGlzcGxheU5hbWUgfSBmcm9tICcuLi8uLi91dGlsL2d1ZXNzLWxhbmd1YWdlJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0VHJlZU5vZGUgfSBmcm9tICcuLi90cmVlJztcbmltcG9ydCB7IGxvYWRUcmVlRnJvbURpciB9IGZyb20gJy4uL3RyZWUnO1xuaW1wb3J0IHR5cGUgeyBCb290c3RyYXBwZWRFbnZpcm9ubWVudCwgQ29tcG9uZW50LCBOb3RpY2UgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBOb3JtYWxpemVzIHRoZSBnaXZlbiBjb21wb25lbnRzIHN0cnVjdHVyZSBpbnRvIERORiBmb3JtXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudHMoeHM6IEFycmF5PENvbXBvbmVudCB8IENvbXBvbmVudFtdPik6IENvbXBvbmVudFtdW10ge1xuICByZXR1cm4geHMubWFwKHggPT4gQXJyYXkuaXNBcnJheSh4KSA/IHggOiBbeF0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIERORiBjb21wb25lbnRzIGZvciBhIG5vdGljZS5cbiAqIFVzZXMgY29tcG9uZW50c1YyIHdoZW4gc2NoZW1hVmVyc2lvbiBpcyAnMicsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIGNvbXBvbmVudHMuXG4gKi9cbmZ1bmN0aW9uIGRuZkNvbXBvbmVudHMobm90aWNlOiBOb3RpY2UpOiBDb21wb25lbnRbXVtdIHtcbiAgaWYgKG5vdGljZS5zY2hlbWFWZXJzaW9uID09PSAnMicgJiYgbm90aWNlLmNvbXBvbmVudHNWMikge1xuICAgIHJldHVybiBub3JtYWxpemVDb21wb25lbnRzKG5vdGljZS5jb21wb25lbnRzVjIpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVDb21wb25lbnRzKG5vdGljZS5jb21wb25lbnRzKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ29tcG9uZW50KGM6IENvbXBvbmVudCk6IHN0cmluZyB7XG4gIGlmIChjLm5hbWUuc3RhcnRzV2l0aCgnbGFuZ3VhZ2U6JykpIHtcbiAgICByZXR1cm4gYCR7bGFuZ3VhZ2VEaXNwbGF5TmFtZShjLm5hbWUuc2xpY2UoJ2xhbmd1YWdlOicubGVuZ3RoKSl9IGFwcHNgO1xuICB9XG4gIHJldHVybiBgJHtjLm5hbWV9OiAke2MudmVyc2lvbn1gO1xufVxuXG5mdW5jdGlvbiByZW5kZXJDb25qdW5jdGlvbih4czogQ29tcG9uZW50W10pOiBzdHJpbmcge1xuICByZXR1cm4geHMubWFwKHJlbmRlckNvbXBvbmVudCkuam9pbignIEFORCAnKTtcbn1cblxuaW50ZXJmYWNlIEFjdHVhbENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIG1hdGNoZWQsIHVuZGVyIHdoYXQgbmFtZSBzaG91bGQgaXQgYmUgYWRkZWQgdG8gdGhlIHNldCBvZiBkeW5hbWljIHZhbHVlc1xuICAgKlxuICAgKiBUaGVzZSB3aWxsIGJlIHVzZWQgdG8gc3Vic3RpdHV0ZSBwbGFjZWhvbGRlcnMgaW4gdGhlIG1lc3NhZ2Ugc3RyaW5nLCB3aGVyZVxuICAgKiBwbGFjZWhvbGRlcnMgbG9vayBsaWtlIGB7cmVzb2x2ZTpYWVp9YC5cbiAgICpcbiAgICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjb21wb25lbnQgd2l0aCB0aGUgc2FtZSBkeW5hbWljIG5hbWUsIHRoZXkgYXJlXG4gICAqIGpvaW5lZCBieSAnLCcuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRG9uJ3QgYWRkIHRvIHRoZSBzZXQgb2YgZHluYW1pYyB2YWx1ZXNcbiAgICovXG4gIHJlYWRvbmx5IGR5bmFtaWNOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBtYXRjaGVkLCB3aGF0IHdlIHNob3VsZCBwdXQgaW4gdGhlIHNldCBvZiBkeW5hbWljIHZhbHVlcyBpbnN0ZWFkIG9mIHRoZSB2ZXJzaW9uLlxuICAgKlxuICAgKiBPbmx5IHVzZWQgaWYgYGR5bmFtaWNOYW1lYCBpcyBzZXQ7IGJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIGFjdHVhbCB2ZXJzaW9uXG4gICAqIG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIHZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IGR5bmFtaWNWYWx1ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpY2VzRmlsdGVyRmlsdGVyT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGRhdGE6IE5vdGljZVtdO1xuICByZWFkb25seSBjbGlWZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dERpcjogc3RyaW5nO1xuICByZWFkb25seSBib290c3RyYXBwZWRFbnZpcm9ubWVudHM6IEJvb3RzdHJhcHBlZEVudmlyb25tZW50W107XG5cbiAgLyoqXG4gICAqIFRoZSBkZXRlY3RlZCBDREsgYXBwIGxhbmd1YWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGxhbmd1YWdlIGNvbXBvbmVudCBpcyBhZGRlZFxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RpY2VzRmlsdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgY29uc3RydWN0b3IoaW9IZWxwZXI6IElvSGVscGVyKSB7XG4gICAgdGhpcy5pb0hlbHBlciA9IGlvSGVscGVyO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZpbHRlcihvcHRpb25zOiBOb3RpY2VzRmlsdGVyRmlsdGVyT3B0aW9ucyk6IFByb21pc2U8RmlsdGVyZWROb3RpY2VbXT4ge1xuICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXG4gICAgICAuLi4oYXdhaXQgdGhpcy5jb25zdHJ1Y3RUcmVlQ29tcG9uZW50cyhvcHRpb25zLm91dERpcikpLFxuICAgICAgLi4uKGF3YWl0IHRoaXMub3RoZXJDb21wb25lbnRzKG9wdGlvbnMpKSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHRoaXMuZmluZEZvck5hbWVkQ29tcG9uZW50cyhvcHRpb25zLmRhdGEsIGNvbXBvbmVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZyb20gYSBzZXQgb2YgaW5wdXQgb3B0aW9ucywgcmV0dXJuIHRoZSBub3RpY2VzIGNvbXBvbmVudHMgd2UgYXJlIHNlYXJjaGluZyBmb3JcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgb3RoZXJDb21wb25lbnRzKG9wdGlvbnM6IE5vdGljZXNGaWx0ZXJGaWx0ZXJPcHRpb25zKTogUHJvbWlzZTxBY3R1YWxDb21wb25lbnRbXT4ge1xuICAgIC8vIEJvb3RzdHJhcCBlbnZpcm9ubWVudHNcbiAgICBsZXQgYm9vdHN0cmFwcGVkRW52aXJvbm1lbnRzID0gW107XG4gICAgZm9yIChjb25zdCBlbnYgb2Ygb3B0aW9ucy5ib290c3RyYXBwZWRFbnZpcm9ubWVudHMpIHtcbiAgICAgIGNvbnN0IHNlbXZlckJvb3RzdHJhcFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKGVudi5ib290c3RyYXBTdGFja1ZlcnNpb24pO1xuICAgICAgaWYgKCFzZW12ZXJCb290c3RyYXBWZXJzaW9uKSB7XG4gICAgICAgIC8vIHdlIGRvbid0IHRocm93IGJlY2F1c2Ugbm90aWNlcyBzaG91bGQgbmV2ZXIgY3Jhc2ggdGhlIGNsaS5cbiAgICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy53YXJuaW5nKGBXaGlsZSBmaWx0ZXJpbmcgbm90aWNlcywgY291bGQgbm90IGNvZXJjZSBib290c3RyYXAgdmVyc2lvbiAnJHtlbnYuYm9vdHN0cmFwU3RhY2tWZXJzaW9ufScgaW50byBzZW12ZXJgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGJvb3RzdHJhcHBlZEVudmlyb25tZW50cy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ2Jvb3RzdHJhcCcsXG4gICAgICAgIHZlcnNpb246IGAke3NlbXZlckJvb3RzdHJhcFZlcnNpb259YCxcbiAgICAgICAgZHluYW1pY05hbWU6ICdFTlZJUk9OTUVOVFMnLFxuICAgICAgICBkeW5hbWljVmFsdWU6IGVudi5lbnZpcm9ubWVudC5uYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgIC8vIENMSVxuICAgICAge1xuICAgICAgICBuYW1lOiAnY2xpJyxcbiAgICAgICAgdmVyc2lvbjogb3B0aW9ucy5jbGlWZXJzaW9uLFxuICAgICAgfSxcblxuICAgICAgLy8gTm9kZSB2ZXJzaW9uXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdub2RlJyxcbiAgICAgICAgdmVyc2lvbjogcHJvY2Vzcy52ZXJzaW9uLnJlcGxhY2UoL152LywgJycpLCAvLyByZW1vdmUgdGhlICd2JyBwcmVmaXguXG4gICAgICAgIGR5bmFtaWNOYW1lOiAnbm9kZScsXG4gICAgICB9LFxuXG4gICAgICAvLyBCb290c3RyYXAgZW52aXJvbm1lbnRzXG4gICAgICAuLi5ib290c3RyYXBwZWRFbnZpcm9ubWVudHMsXG5cbiAgICAgIC8vIExhbmd1YWdlXG4gICAgICAuLi4ob3B0aW9ucy5sYW5ndWFnZSA/IFt7XG4gICAgICAgIG5hbWU6IGBsYW5ndWFnZToke29wdGlvbnMubGFuZ3VhZ2V9YCxcbiAgICAgICAgdmVyc2lvbjogJzAuMC4wJyxcbiAgICAgICAgZHluYW1pY05hbWU6ICdMQU5HVUFHRScsXG4gICAgICAgIGR5bmFtaWNWYWx1ZTogbGFuZ3VhZ2VEaXNwbGF5TmFtZShvcHRpb25zLmxhbmd1YWdlKSxcbiAgICAgIH1dIDogW10pLFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogQmFzZWQgb24gYSBzZXQgb2YgY29tcG9uZW50IG5hbWVzLCBmaW5kIGFsbCBub3RpY2VzIHRoYXQgbWF0Y2ggb25lIG9mIHRoZSBnaXZlbiBjb21wb25lbnRzXG4gICAqL1xuICBwcml2YXRlIGZpbmRGb3JOYW1lZENvbXBvbmVudHMoZGF0YTogTm90aWNlW10sIGFjdHVhbENvbXBvbmVudHM6IEFjdHVhbENvbXBvbmVudFtdKTogRmlsdGVyZWROb3RpY2VbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmxhdE1hcChub3RpY2UgPT4ge1xuICAgICAgY29uc3Qgb3JzID0gdGhpcy5yZXNvbHZlQWxpYXNlcyhkbmZDb21wb25lbnRzKG5vdGljZSkpO1xuXG4gICAgICAvLyBGaW5kIHRoZSBmaXJzdCBzZXQgb2YgdGhlIGRpc2p1bmN0aW9ucyBvZiB3aGljaCBhbGwgY29tcG9uZW50cyBtYXRjaCBhZ2FpbnN0IHRoZSBhY3R1YWwgY29tcG9uZW50cy5cbiAgICAgIC8vIFJldHVybiB0aGUgYWN0dWFsIGNvbXBvbmVudHMgd2UgZm91bmQgc28gdGhhdCB3ZSBjYW4gaW5qZWN0IHRoZWlyIGR5bmFtaWMgdmFsdWVzLiBBIHNpbmdsZSBmaWx0ZXJcbiAgICAgIC8vIGNvbXBvbmVudCBjYW4gbWF0Y2ggbW9yZSB0aGFuIG9uZSBhY3R1YWwgY29tcG9uZW50XG4gICAgICBmb3IgKGNvbnN0IGFuZHMgb2Ygb3JzKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWQgPSBhbmRzLm1hcChhZmZlY3RlZCA9PiBhY3R1YWxDb21wb25lbnRzLmZpbHRlcihhY3R1YWwgPT5cbiAgICAgICAgICB0aGlzLmNvbXBvbmVudE5hbWVNYXRjaGVzKGFmZmVjdGVkLCBhY3R1YWwpICYmIHNlbXZlci5zYXRpc2ZpZXMoYWN0dWFsLnZlcnNpb24sIGFmZmVjdGVkLnZlcnNpb24sIHsgaW5jbHVkZVByZXJlbGVhc2U6IHRydWUgfSkpKTtcblxuICAgICAgICAvLyBGb3IgZXZlcnkgY2xhdXNlIGluIHRoZSBmaWx0ZXIgd2UgbWF0Y2hlZCBvbmUgb3IgbW9yZSBjb21wb25lbnRzXG4gICAgICAgIGlmIChtYXRjaGVkLmV2ZXJ5KHhzID0+IHhzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgY29uc3QgcmV0ID0gbmV3IEZpbHRlcmVkTm90aWNlKG5vdGljZSk7XG4gICAgICAgICAgdGhpcy5hZGREeW5hbWljVmFsdWVzKG1hdGNoZWQuZmxhdE1hcCh4ID0+IHgpLCByZXQpO1xuICAgICAgICAgIHJldHVybiBbcmV0XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2l2ZW4gXCJhZmZlY3RlZCBjb21wb25lbnRcIiBuYW1lIGFwcGxpZXMgdG8gdGhlIGdpdmVuIGFjdHVhbCBjb21wb25lbnQgbmFtZS5cbiAgICpcbiAgICogVGhlIG5hbWUgbWF0Y2hlcyBpZiB0aGUgbmFtZSBpcyBleGFjdGx5IHRoZSBzYW1lLCBvciB0aGUgbmFtZSBpbiB0aGUgbm90aWNlXG4gICAqIGlzIGEgcHJlZml4IG9mIHRoZSBub2RlIG5hbWUgd2hlbiB0aGUgcXVlcnkgZW5kcyBpbiAnLicuXG4gICAqL1xuICBwcml2YXRlIGNvbXBvbmVudE5hbWVNYXRjaGVzKHBhdHRlcm46IENvbXBvbmVudCwgYWN0dWFsOiBBY3R1YWxDb21wb25lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGF0dGVybi5uYW1lLmVuZHNXaXRoKCcuJykgPyBhY3R1YWwubmFtZS5zdGFydHNXaXRoKHBhdHRlcm4ubmFtZSkgOiBwYXR0ZXJuLm5hbWUgPT09IGFjdHVhbC5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZHluYW1pYyB2YWx1ZXMgZnJvbSB0aGUgZ2l2ZW4gQWN0dWFsQ29tcG9uZW50c1xuICAgKlxuICAgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29tcG9uZW50cyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbmFtZSwgdGhleSBhcmUgam9pbmVkXG4gICAqIGJ5IGEgY29tbWEuXG4gICAqL1xuICBwcml2YXRlIGFkZER5bmFtaWNWYWx1ZXMoY29tcHM6IEFjdHVhbENvbXBvbmVudFtdLCBub3RpY2U6IEZpbHRlcmVkTm90aWNlKSB7XG4gICAgY29uc3QgZHluYW1pY1ZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG4gICAgZm9yIChjb25zdCBjb21wIG9mIGNvbXBzKSB7XG4gICAgICBpZiAoY29tcC5keW5hbWljTmFtZSkge1xuICAgICAgICBkeW5hbWljVmFsdWVzW2NvbXAuZHluYW1pY05hbWVdID0gZHluYW1pY1ZhbHVlc1tjb21wLmR5bmFtaWNOYW1lXSA/PyBbXTtcbiAgICAgICAgZHluYW1pY1ZhbHVlc1tjb21wLmR5bmFtaWNOYW1lXS5wdXNoKGNvbXAuZHluYW1pY1ZhbHVlID8/IGNvbXAudmVyc2lvbik7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVzXSBvZiBPYmplY3QuZW50cmllcyhkeW5hbWljVmFsdWVzKSkge1xuICAgICAgbm90aWNlLmFkZER5bmFtaWNWYWx1ZShrZXksIHZhbHVlcy5qb2luKCcsJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmVhdCAnZnJhbWV3b3JrJyBhcyBhbiBhbGlhcyBmb3IgZWl0aGVyIGBhd3MtY2RrLWxpYi5gIG9yIGBAYXdzLWNkay9jb3JlLmAuXG4gICAqXG4gICAqIEJlY2F1c2UgaXQncyBFSVRIRVIgYGF3cy1jZGstbGliYCBvciBgQGF3cy1jZGsvY29yZWAsIHdlIG5lZWQgdG8gYWRkIG11bHRpcGxlXG4gICAqIGFycmF5cyBhdCB0aGUgdG9wIGxldmVsLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlQWxpYXNlcyhvcnM6IENvbXBvbmVudFtdW10pOiBDb21wb25lbnRbXVtdIHtcbiAgICByZXR1cm4gb3JzLmZsYXRNYXAoYW5kcyA9PiB7XG4gICAgICBjb25zdCBoYXNGcmFtZXdvcmsgPSBhbmRzLmZpbmQoYyA9PiBjLm5hbWUgPT09ICdmcmFtZXdvcmsnKTtcbiAgICAgIGlmICghaGFzRnJhbWV3b3JrKSB7XG4gICAgICAgIHJldHVybiBbYW5kc107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIGFuZHMubWFwKGMgPT4gYy5uYW1lID09PSAnZnJhbWV3b3JrJyA/IHsgLi4uYywgbmFtZTogJ0Bhd3MtY2RrL2NvcmUuJyB9IDogYyksXG4gICAgICAgIGFuZHMubWFwKGMgPT4gYy5uYW1lID09PSAnZnJhbWV3b3JrJyA/IHsgLi4uYywgbmFtZTogJ2F3cy1jZGstbGliLicgfSA6IGMpLFxuICAgICAgXTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBjb25zdHJ1Y3QgdHJlZSBmcm9tIHRoZSBnaXZlbiBkaXJlY3RvcnkgYW5kIHJldHVybiBpdHMgY29tcG9uZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjb25zdHJ1Y3RUcmVlQ29tcG9uZW50cyhtYW5pZmVzdERpcjogc3RyaW5nKTogUHJvbWlzZTxBY3R1YWxDb21wb25lbnRbXT4ge1xuICAgIGNvbnN0IHRyZWUgPSBhd2FpdCBsb2FkVHJlZUZyb21EaXIobWFuaWZlc3REaXIsIChtc2c6IHN0cmluZykgPT4gdGhpcy5pb0hlbHBlci5kZWZhdWx0cy50cmFjZShtc2cpKTtcbiAgICBpZiAoIXRyZWUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQ6IEFjdHVhbENvbXBvbmVudFtdID0gW107XG4gICAgcmVjdXJzZSh0cmVlKTtcbiAgICByZXR1cm4gcmV0O1xuXG4gICAgZnVuY3Rpb24gcmVjdXJzZSh4OiBDb25zdHJ1Y3RUcmVlTm9kZSkge1xuICAgICAgaWYgKHguY29uc3RydWN0SW5mbz8uZnFuICYmIHguY29uc3RydWN0SW5mbz8udmVyc2lvbikge1xuICAgICAgICByZXQucHVzaCh7XG4gICAgICAgICAgbmFtZTogeC5jb25zdHJ1Y3RJbmZvPy5mcW4sXG4gICAgICAgICAgdmVyc2lvbjogeC5jb25zdHJ1Y3RJbmZvPy52ZXJzaW9uLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBPYmplY3QudmFsdWVzKHguY2hpbGRyZW4gPz8ge30pKSB7XG4gICAgICAgIHJlY3Vyc2UoY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE5vdGljZSBhZnRlciBwYXNzaW5nIHRoZSBmaWx0ZXIuIEEgZmlsdGVyIGNhbiBhdWdtZW50IGEgbm90aWNlIHdpdGhcbiAqIGR5bmFtaWMgdmFsdWVzIGFzIGl0IGhhcyBhY2Nlc3MgdG8gdGhlIGR5bmFtaWMgbWF0Y2hpbmcgZGF0YS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpbHRlcmVkTm90aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkeW5hbWljVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBub3RpY2U6IE5vdGljZSkge1xuICB9XG5cbiAgcHVibGljIGFkZER5bmFtaWNWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZHluYW1pY1ZhbHVlc1tge3Jlc29sdmU6JHtrZXl9fWBdID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tcG9uZW50c1ZhbHVlID0gZG5mQ29tcG9uZW50cyh0aGlzLm5vdGljZSkubWFwKHJlbmRlckNvbmp1bmN0aW9uKS5qb2luKCcsICcpO1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVEeW5hbWljVmFsdWVzKFtcbiAgICAgIGAke3RoaXMubm90aWNlLmlzc3VlTnVtYmVyfVxcdCR7dGhpcy5ub3RpY2UudGl0bGV9YCxcbiAgICAgIHRoaXMuZm9ybWF0T3ZlcnZpZXcoKSxcbiAgICAgIGBcXHRBZmZlY3RlZCB2ZXJzaW9uczogJHtjb21wb25lbnRzVmFsdWV9YCxcbiAgICAgIGBcXHRNb3JlIGluZm9ybWF0aW9uIGF0OiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLyR7dGhpcy5ub3RpY2UuaXNzdWVOdW1iZXJ9YCxcbiAgICBdLmpvaW4oJ1xcblxcbicpICsgJ1xcbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRPdmVydmlldygpIHtcbiAgICBjb25zdCB3cmFwID0gKHM6IHN0cmluZykgPT4gcy5yZXBsYWNlKC8oPyFbXlxcbl17MSw2MH0kKShbXlxcbl17MSw2MH0pXFxzL2csICckMVxcbicpO1xuXG4gICAgY29uc3QgaGVhZGluZyA9ICdPdmVydmlldzogJztcbiAgICBjb25zdCBzZXBhcmF0b3IgPSBgXFxuXFx0JHsnICcucmVwZWF0KGhlYWRpbmcubGVuZ3RoKX1gO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB3cmFwKHRoaXMubm90aWNlLm92ZXJ2aWV3KVxuICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgLmpvaW4oc2VwYXJhdG9yKTtcblxuICAgIHJldHVybiAnXFx0JyArIGhlYWRpbmcgKyBjb250ZW50O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRHluYW1pY1ZhbHVlcyhpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyh0aGlzLmR5bmFtaWNWYWx1ZXMpLmpvaW4oJ3wnKSwgJ2cnKTtcbiAgICByZXR1cm4gaW5wdXQucmVwbGFjZShwYXR0ZXJuLCAobWF0Y2hlZCkgPT4gdGhpcy5keW5hbWljVmFsdWVzW21hdGNoZWRdID8/IG1hdGNoZWQpO1xuICB9XG59XG4iXX0=
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUNqQyw4REFBZ0U7QUFHaEUsa0NBQTBDO0FBRzFDOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxFQUFrQztJQUM3RCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxhQUFhLENBQUMsTUFBYztJQUNuQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4RCxPQUFPLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLENBQVk7SUFDbkMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sR0FBRyxJQUFBLG9DQUFtQixFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDekUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxFQUFlO0lBQ3hDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FB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O1FBRW5CLE9BQU8sSUFBSSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDbEMsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQWE7UUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUM7SUFDckYsQ0FBQztDQUNGO0FBcENELHdDQW9DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgbGFuZ3VhZ2VEaXNwbGF5TmFtZSB9IGZyb20gJy4uLy4uL3V0aWwvZ3Vlc3MtbGFuZ3VhZ2UnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RUcmVlTm9kZSB9IGZyb20gJy4uL3RyZWUnO1xuaW1wb3J0IHsgbG9hZFRyZWVGcm9tRGlyIH0gZnJvbSAnLi4vdHJlZSc7XG5pbXBvcnQgdHlwZSB7IEJvb3RzdHJhcHBlZEVudmlyb25tZW50LCBDb21wb25lbnQsIER5bmFtaWNWYWx1ZVNwZWMsIE5vdGljZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgdGhlIGdpdmVuIGNvbXBvbmVudHMgc3RydWN0dXJlIGludG8gRE5GIGZvcm1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50cyh4czogQXJyYXk8Q29tcG9uZW50IHwgQ29tcG9uZW50W10+KTogQ29tcG9uZW50W11bXSB7XG4gIHJldHVybiB4cy5tYXAoeCA9PiBBcnJheS5pc0FycmF5KHgpID8geCA6IFt4XSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgRE5GIGNvbXBvbmVudHMgZm9yIGEgbm90aWNlLlxuICogVXNlcyBjb21wb25lbnRzVjIgd2hlbiBzY2hlbWFWZXJzaW9uIGlzICcyJywgb3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gY29tcG9uZW50cy5cbiAqL1xuZnVuY3Rpb24gZG5mQ29tcG9uZW50cyhub3RpY2U6IE5vdGljZSk6IENvbXBvbmVudFtdW10ge1xuICBpZiAobm90aWNlLnNjaGVtYVZlcnNpb24gPT09ICcyJyAmJiBub3RpY2UuY29tcG9uZW50c1YyKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudHMobm90aWNlLmNvbXBvbmVudHNWMik7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudHMobm90aWNlLmNvbXBvbmVudHMpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJDb21wb25lbnQoYzogQ29tcG9uZW50KTogc3RyaW5nIHtcbiAgaWYgKGMubmFtZS5zdGFydHNXaXRoKCdsYW5ndWFnZTonKSkge1xuICAgIHJldHVybiBgJHtsYW5ndWFnZURpc3BsYXlOYW1lKGMubmFtZS5zbGljZSgnbGFuZ3VhZ2U6Jy5sZW5ndGgpKX0gYXBwc2A7XG4gIH1cbiAgcmV0dXJuIGAke2MubmFtZX06ICR7Yy52ZXJzaW9ufWA7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvbmp1bmN0aW9uKHhzOiBDb21wb25lbnRbXSk6IHN0cmluZyB7XG4gIHJldHVybiB4cy5tYXAocmVuZGVyQ29tcG9uZW50KS5qb2luKCcgQU5EICcpO1xufVxuXG5pbnRlcmZhY2UgQWN0dWFsQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogSWYgbWF0Y2hlZCwgdW5kZXIgd2hhdCBuYW1lIHNob3VsZCBpdCBiZSBhZGRlZCB0byB0aGUgc2V0IG9mIGR5bmFtaWMgdmFsdWVzXG4gICAqXG4gICAqIFRoZXNlIHdpbGwgYmUgdXNlZCB0byBzdWJzdGl0dXRlIHBsYWNlaG9sZGVycyBpbiB0aGUgbWVzc2FnZSBzdHJpbmcsIHdoZXJlXG4gICAqIHBsYWNlaG9sZGVycyBsb29rIGxpa2UgYHtyZXNvbHZlOlhZWn1gLlxuICAgKlxuICAgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGNvbXBvbmVudCB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbmFtZSwgdGhleSBhcmVcbiAgICogam9pbmVkIGJ5ICcsJy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEb24ndCBhZGQgdG8gdGhlIHNldCBvZiBkeW5hbWljIHZhbHVlc1xuICAgKi9cbiAgcmVhZG9ubHkgZHluYW1pY05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIG1hdGNoZWQsIHdoYXQgd2Ugc2hvdWxkIHB1dCBpbiB0aGUgc2V0IG9mIGR5bmFtaWMgdmFsdWVzIGluc3RlYWQgb2YgdGhlIHZlcnNpb24uXG4gICAqXG4gICAqIE9ubHkgdXNlZCBpZiBgZHluYW1pY05hbWVgIGlzIHNldDsgYnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgYWN0dWFsIHZlcnNpb25cbiAgICogb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgZHluYW1pY1ZhbHVlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGljZXNGaWx0ZXJGaWx0ZXJPcHRpb25zIHtcbiAgcmVhZG9ubHkgZGF0YTogTm90aWNlW107XG4gIHJlYWRvbmx5IGNsaVZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgb3V0RGlyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGJvb3RzdHJhcHBlZEVudmlyb25tZW50czogQm9vdHN0cmFwcGVkRW52aXJvbm1lbnRbXTtcblxuICAvKipcbiAgICogVGhlIGRldGVjdGVkIENESyBhcHAgbGFuZ3VhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbGFuZ3VhZ2UgY29tcG9uZW50IGlzIGFkZGVkXG4gICAqL1xuICByZWFkb25seSBsYW5ndWFnZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIE5vdGljZXNGaWx0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcjtcblxuICBjb25zdHJ1Y3Rvcihpb0hlbHBlcjogSW9IZWxwZXIpIHtcbiAgICB0aGlzLmlvSGVscGVyID0gaW9IZWxwZXI7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZmlsdGVyKG9wdGlvbnM6IE5vdGljZXNGaWx0ZXJGaWx0ZXJPcHRpb25zKTogUHJvbWlzZTxGaWx0ZXJlZE5vdGljZVtdPiB7XG4gICAgY29uc3QgY29tcG9uZW50cyA9IFtcbiAgICAgIC4uLihhd2FpdCB0aGlzLmNvbnN0cnVjdFRyZWVDb21wb25lbnRzKG9wdGlvbnMub3V0RGlyKSksXG4gICAgICAuLi4oYXdhaXQgdGhpcy5vdGhlckNvbXBvbmVudHMob3B0aW9ucykpLFxuICAgIF07XG5cbiAgICByZXR1cm4gdGhpcy5maW5kRm9yTmFtZWRDb21wb25lbnRzKG9wdGlvbnMuZGF0YSwgY29tcG9uZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogRnJvbSBhIHNldCBvZiBpbnB1dCBvcHRpb25zLCByZXR1cm4gdGhlIG5vdGljZXMgY29tcG9uZW50cyB3ZSBhcmUgc2VhcmNoaW5nIGZvclxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBvdGhlckNvbXBvbmVudHMob3B0aW9uczogTm90aWNlc0ZpbHRlckZpbHRlck9wdGlvbnMpOiBQcm9taXNlPEFjdHVhbENvbXBvbmVudFtdPiB7XG4gICAgLy8gQm9vdHN0cmFwIGVudmlyb25tZW50c1xuICAgIGxldCBib290c3RyYXBwZWRFbnZpcm9ubWVudHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudiBvZiBvcHRpb25zLmJvb3RzdHJhcHBlZEVudmlyb25tZW50cykge1xuICAgICAgY29uc3Qgc2VtdmVyQm9vdHN0cmFwVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UoZW52LmJvb3RzdHJhcFN0YWNrVmVyc2lvbik7XG4gICAgICBpZiAoIXNlbXZlckJvb3RzdHJhcFZlcnNpb24pIHtcbiAgICAgICAgLy8gd2UgZG9uJ3QgdGhyb3cgYmVjYXVzZSBub3RpY2VzIHNob3VsZCBuZXZlciBjcmFzaCB0aGUgY2xpLlxuICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLndhcm5pbmcoYFdoaWxlIGZpbHRlcmluZyBub3RpY2VzLCBjb3VsZCBub3QgY29lcmNlIGJvb3RzdHJhcCB2ZXJzaW9uICcke2Vudi5ib290c3RyYXBTdGFja1ZlcnNpb259JyBpbnRvIHNlbXZlcmApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYm9vdHN0cmFwcGVkRW52aXJvbm1lbnRzLnB1c2goe1xuICAgICAgICBuYW1lOiAnYm9vdHN0cmFwJyxcbiAgICAgICAgdmVyc2lvbjogYCR7c2VtdmVyQm9vdHN0cmFwVmVyc2lvbn1gLFxuICAgICAgICBkeW5hbWljTmFtZTogJ0VOVklST05NRU5UUycsXG4gICAgICAgIGR5bmFtaWNWYWx1ZTogZW52LmVudmlyb25tZW50Lm5hbWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgLy8gQ0xJXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjbGknLFxuICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLmNsaVZlcnNpb24sXG4gICAgICB9LFxuXG4gICAgICAvLyBOb2RlIHZlcnNpb25cbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ25vZGUnLFxuICAgICAgICB2ZXJzaW9uOiBwcm9jZXNzLnZlcnNpb24ucmVwbGFjZSgvXnYvLCAnJyksIC8vIHJlbW92ZSB0aGUgJ3YnIHByZWZpeC5cbiAgICAgICAgZHluYW1pY05hbWU6ICdub2RlJyxcbiAgICAgIH0sXG5cbiAgICAgIC8vIEJvb3RzdHJhcCBlbnZpcm9ubWVudHNcbiAgICAgIC4uLmJvb3RzdHJhcHBlZEVudmlyb25tZW50cyxcblxuICAgICAgLy8gTGFuZ3VhZ2VcbiAgICAgIC4uLihvcHRpb25zLmxhbmd1YWdlID8gW3tcbiAgICAgICAgbmFtZTogYGxhbmd1YWdlOiR7b3B0aW9ucy5sYW5ndWFnZX1gLFxuICAgICAgICB2ZXJzaW9uOiAnMC4wLjAnLFxuICAgICAgICBkeW5hbWljTmFtZTogJ0xBTkdVQUdFJyxcbiAgICAgICAgZHluYW1pY1ZhbHVlOiBsYW5ndWFnZURpc3BsYXlOYW1lKG9wdGlvbnMubGFuZ3VhZ2UpLFxuICAgICAgfV0gOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCYXNlZCBvbiBhIHNldCBvZiBjb21wb25lbnQgbmFtZXMsIGZpbmQgYWxsIG5vdGljZXMgdGhhdCBtYXRjaCBvbmUgb2YgdGhlIGdpdmVuIGNvbXBvbmVudHNcbiAgICovXG4gIHByaXZhdGUgZmluZEZvck5hbWVkQ29tcG9uZW50cyhkYXRhOiBOb3RpY2VbXSwgYWN0dWFsQ29tcG9uZW50czogQWN0dWFsQ29tcG9uZW50W10pOiBGaWx0ZXJlZE5vdGljZVtdIHtcbiAgICByZXR1cm4gZGF0YS5mbGF0TWFwKG5vdGljZSA9PiB7XG4gICAgICBjb25zdCBvcnMgPSB0aGlzLnJlc29sdmVBbGlhc2VzKGRuZkNvbXBvbmVudHMobm90aWNlKSk7XG5cbiAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHNldCBvZiB0aGUgZGlzanVuY3Rpb25zIG9mIHdoaWNoIGFsbCBjb21wb25lbnRzIG1hdGNoIGFnYWluc3QgdGhlIGFjdHVhbCBjb21wb25lbnRzLlxuICAgICAgLy8gUmV0dXJuIHRoZSBhY3R1YWwgY29tcG9uZW50cyB3ZSBmb3VuZCBzbyB0aGF0IHdlIGNhbiBpbmplY3QgdGhlaXIgZHluYW1pYyB2YWx1ZXMuIEEgc2luZ2xlIGZpbHRlclxuICAgICAgLy8gY29tcG9uZW50IGNhbiBtYXRjaCBtb3JlIHRoYW4gb25lIGFjdHVhbCBjb21wb25lbnRcbiAgICAgIGZvciAoY29uc3QgYW5kcyBvZiBvcnMpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGFuZHMubWFwKGFmZmVjdGVkID0+IGFjdHVhbENvbXBvbmVudHMuZmlsdGVyKGFjdHVhbCA9PlxuICAgICAgICAgIHRoaXMuY29tcG9uZW50TmFtZU1hdGNoZXMoYWZmZWN0ZWQsIGFjdHVhbCkgJiYgc2VtdmVyLnNhdGlzZmllcyhhY3R1YWwudmVyc2lvbiwgYWZmZWN0ZWQudmVyc2lvbiwgeyBpbmNsdWRlUHJlcmVsZWFzZTogdHJ1ZSB9KSkpO1xuXG4gICAgICAgIC8vIEZvciBldmVyeSBjbGF1c2UgaW4gdGhlIGZpbHRlciB3ZSBtYXRjaGVkIG9uZSBvciBtb3JlIGNvbXBvbmVudHNcbiAgICAgICAgaWYgKG1hdGNoZWQuZXZlcnkoeHMgPT4geHMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICBjb25zdCByZXQgPSBuZXcgRmlsdGVyZWROb3RpY2Uobm90aWNlKTtcbiAgICAgICAgICB0aGlzLmFkZER5bmFtaWNWYWx1ZXMobWF0Y2hlZC5mbGF0TWFwKHggPT4geCksIHJldCwgbm90aWNlLmR5bmFtaWNWYWx1ZXMpO1xuICAgICAgICAgIHJldHVybiBbcmV0XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2l2ZW4gXCJhZmZlY3RlZCBjb21wb25lbnRcIiBuYW1lIGFwcGxpZXMgdG8gdGhlIGdpdmVuIGFjdHVhbCBjb21wb25lbnQgbmFtZS5cbiAgICpcbiAgICogVGhlIG5hbWUgbWF0Y2hlcyBpZiB0aGUgbmFtZSBpcyBleGFjdGx5IHRoZSBzYW1lLCBvciB0aGUgbmFtZSBpbiB0aGUgbm90aWNlXG4gICAqIGlzIGEgcHJlZml4IG9mIHRoZSBub2RlIG5hbWUgd2hlbiB0aGUgcXVlcnkgZW5kcyBpbiAnLicuXG4gICAqL1xuICBwcml2YXRlIGNvbXBvbmVudE5hbWVNYXRjaGVzKHBhdHRlcm46IENvbXBvbmVudCwgYWN0dWFsOiBBY3R1YWxDb21wb25lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGF0dGVybi5uYW1lLmVuZHNXaXRoKCcuJykgPyBhY3R1YWwubmFtZS5zdGFydHNXaXRoKHBhdHRlcm4ubmFtZSkgOiBwYXR0ZXJuLm5hbWUgPT09IGFjdHVhbC5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZHluYW1pYyB2YWx1ZXMgZnJvbSB0aGUgZ2l2ZW4gQWN0dWFsQ29tcG9uZW50c1xuICAgKlxuICAgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29tcG9uZW50cyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbmFtZSwgdGhleSBhcmUgam9pbmVkXG4gICAqIGJ5IHRoZSBzZXBhcmF0b3IgZGVjbGFyZWQgaW4gYHNwZWNzW25hbWVdLnNlcGFyYXRvcmAsIGRlZmF1bHRpbmcgdG8gYCcsJ2AuXG4gICAqL1xuICBwcml2YXRlIGFkZER5bmFtaWNWYWx1ZXMoXG4gICAgY29tcHM6IEFjdHVhbENvbXBvbmVudFtdLFxuICAgIG5vdGljZTogRmlsdGVyZWROb3RpY2UsXG4gICAgc3BlY3M/OiBSZWNvcmQ8c3RyaW5nLCBEeW5hbWljVmFsdWVTcGVjPixcbiAgKSB7XG4gICAgY29uc3QgZHluYW1pY1ZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG4gICAgZm9yIChjb25zdCBjb21wIG9mIGNvbXBzKSB7XG4gICAgICBpZiAoY29tcC5keW5hbWljTmFtZSkge1xuICAgICAgICBkeW5hbWljVmFsdWVzW2NvbXAuZHluYW1pY05hbWVdID0gZHluYW1pY1ZhbHVlc1tjb21wLmR5bmFtaWNOYW1lXSA/PyBbXTtcbiAgICAgICAgZHluYW1pY1ZhbHVlc1tjb21wLmR5bmFtaWNOYW1lXS5wdXNoKGNvbXAuZHluYW1pY1ZhbHVlID8/IGNvbXAudmVyc2lvbik7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVzXSBvZiBPYmplY3QuZW50cmllcyhkeW5hbWljVmFsdWVzKSkge1xuICAgICAgbm90aWNlLmFkZER5bmFtaWNWYWx1ZShrZXksIHZhbHVlcy5qb2luKHNwZWNzPy5ba2V5XT8uc2VwYXJhdG9yID8/ICcsJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmVhdCAnZnJhbWV3b3JrJyBhcyBhbiBhbGlhcyBmb3IgZWl0aGVyIGBhd3MtY2RrLWxpYi5gIG9yIGBAYXdzLWNkay9jb3JlLmAuXG4gICAqXG4gICAqIEJlY2F1c2UgaXQncyBFSVRIRVIgYGF3cy1jZGstbGliYCBvciBgQGF3cy1jZGsvY29yZWAsIHdlIG5lZWQgdG8gYWRkIG11bHRpcGxlXG4gICAqIGFycmF5cyBhdCB0aGUgdG9wIGxldmVsLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlQWxpYXNlcyhvcnM6IENvbXBvbmVudFtdW10pOiBDb21wb25lbnRbXVtdIHtcbiAgICByZXR1cm4gb3JzLmZsYXRNYXAoYW5kcyA9PiB7XG4gICAgICBjb25zdCBoYXNGcmFtZXdvcmsgPSBhbmRzLmZpbmQoYyA9PiBjLm5hbWUgPT09ICdmcmFtZXdvcmsnKTtcbiAgICAgIGlmICghaGFzRnJhbWV3b3JrKSB7XG4gICAgICAgIHJldHVybiBbYW5kc107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIGFuZHMubWFwKGMgPT4gYy5uYW1lID09PSAnZnJhbWV3b3JrJyA/IHsgLi4uYywgbmFtZTogJ0Bhd3MtY2RrL2NvcmUuJyB9IDogYyksXG4gICAgICAgIGFuZHMubWFwKGMgPT4gYy5uYW1lID09PSAnZnJhbWV3b3JrJyA/IHsgLi4uYywgbmFtZTogJ2F3cy1jZGstbGliLicgfSA6IGMpLFxuICAgICAgXTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBjb25zdHJ1Y3QgdHJlZSBmcm9tIHRoZSBnaXZlbiBkaXJlY3RvcnkgYW5kIHJldHVybiBpdHMgY29tcG9uZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjb25zdHJ1Y3RUcmVlQ29tcG9uZW50cyhtYW5pZmVzdERpcjogc3RyaW5nKTogUHJvbWlzZTxBY3R1YWxDb21wb25lbnRbXT4ge1xuICAgIGNvbnN0IHRyZWUgPSBhd2FpdCBsb2FkVHJlZUZyb21EaXIobWFuaWZlc3REaXIsIChtc2c6IHN0cmluZykgPT4gdGhpcy5pb0hlbHBlci5kZWZhdWx0cy50cmFjZShtc2cpKTtcbiAgICBpZiAoIXRyZWUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQ6IEFjdHVhbENvbXBvbmVudFtdID0gW107XG4gICAgcmVjdXJzZSh0cmVlKTtcbiAgICByZXR1cm4gcmV0O1xuXG4gICAgZnVuY3Rpb24gcmVjdXJzZSh4OiBDb25zdHJ1Y3RUcmVlTm9kZSkge1xuICAgICAgaWYgKHguY29uc3RydWN0SW5mbz8uZnFuICYmIHguY29uc3RydWN0SW5mbz8udmVyc2lvbikge1xuICAgICAgICByZXQucHVzaCh7XG4gICAgICAgICAgbmFtZTogeC5jb25zdHJ1Y3RJbmZvPy5mcW4sXG4gICAgICAgICAgdmVyc2lvbjogeC5jb25zdHJ1Y3RJbmZvPy52ZXJzaW9uLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBPYmplY3QudmFsdWVzKHguY2hpbGRyZW4gPz8ge30pKSB7XG4gICAgICAgIHJlY3Vyc2UoY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE5vdGljZSBhZnRlciBwYXNzaW5nIHRoZSBmaWx0ZXIuIEEgZmlsdGVyIGNhbiBhdWdtZW50IGEgbm90aWNlIHdpdGhcbiAqIGR5bmFtaWMgdmFsdWVzIGFzIGl0IGhhcyBhY2Nlc3MgdG8gdGhlIGR5bmFtaWMgbWF0Y2hpbmcgZGF0YS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpbHRlcmVkTm90aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkeW5hbWljVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBub3RpY2U6IE5vdGljZSkge1xuICB9XG5cbiAgcHVibGljIGFkZER5bmFtaWNWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZHluYW1pY1ZhbHVlc1tge3Jlc29sdmU6JHtrZXl9fWBdID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tcG9uZW50c1ZhbHVlID0gZG5mQ29tcG9uZW50cyh0aGlzLm5vdGljZSkubWFwKHJlbmRlckNvbmp1bmN0aW9uKS5qb2luKCcsICcpO1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVEeW5hbWljVmFsdWVzKFtcbiAgICAgIGAke3RoaXMubm90aWNlLmlzc3VlTnVtYmVyfVxcdCR7dGhpcy5ub3RpY2UudGl0bGV9YCxcbiAgICAgIHRoaXMuZm9ybWF0T3ZlcnZpZXcoKSxcbiAgICAgIGBcXHRBZmZlY3RlZCB2ZXJzaW9uczogJHtjb21wb25lbnRzVmFsdWV9YCxcbiAgICAgIGBcXHRNb3JlIGluZm9ybWF0aW9uIGF0OiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLyR7dGhpcy5ub3RpY2UuaXNzdWVOdW1iZXJ9YCxcbiAgICBdLmpvaW4oJ1xcblxcbicpICsgJ1xcbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRPdmVydmlldygpIHtcbiAgICBjb25zdCB3cmFwID0gKHM6IHN0cmluZykgPT4gcy5yZXBsYWNlKC8oPyFbXlxcbl17MSw2MH0kKShbXlxcbl17MSw2MH0pXFxzL2csICckMVxcbicpO1xuXG4gICAgY29uc3QgaGVhZGluZyA9ICdPdmVydmlldzogJztcbiAgICBjb25zdCBzZXBhcmF0b3IgPSBgXFxuXFx0JHsnICcucmVwZWF0KGhlYWRpbmcubGVuZ3RoKX1gO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB3cmFwKHRoaXMubm90aWNlLm92ZXJ2aWV3KVxuICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgLmpvaW4oc2VwYXJhdG9yKTtcblxuICAgIHJldHVybiAnXFx0JyArIGhlYWRpbmcgKyBjb250ZW50O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRHluYW1pY1ZhbHVlcyhpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyh0aGlzLmR5bmFtaWNWYWx1ZXMpLmpvaW4oJ3wnKSwgJ2cnKTtcbiAgICByZXR1cm4gaW5wdXQucmVwbGFjZShwYXR0ZXJuLCAobWF0Y2hlZCkgPT4gdGhpcy5keW5hbWljVmFsdWVzW21hdGNoZWRdID8/IG1hdGNoZWQpO1xuICB9XG59XG4iXX0=
|
|
@@ -27,6 +27,26 @@ export interface Notice {
|
|
|
27
27
|
componentsV2?: Array<Component | Component[]>;
|
|
28
28
|
schemaVersion: string;
|
|
29
29
|
severity?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Per-placeholder rendering options, keyed by the dynamic name used in
|
|
32
|
+
* `{resolve:NAME}` placeholders within `overview`. Unknown fields on the
|
|
33
|
+
* spec object MUST be ignored, so new capabilities can be added later
|
|
34
|
+
* without breaking older CLIs.
|
|
35
|
+
*
|
|
36
|
+
* @default - no overrides; placeholders render with default settings (separator ',')
|
|
37
|
+
*/
|
|
38
|
+
dynamicValues?: Record<string, DynamicValueSpec>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Rendering options for a single dynamic value placeholder.
|
|
42
|
+
*/
|
|
43
|
+
export interface DynamicValueSpec {
|
|
44
|
+
/**
|
|
45
|
+
* Separator used to join multiple values for the same dynamic name.
|
|
46
|
+
*
|
|
47
|
+
* @default ","
|
|
48
|
+
*/
|
|
49
|
+
readonly separator?: string;
|
|
30
50
|
}
|
|
31
51
|
export interface NoticeDataSource {
|
|
32
52
|
fetch(): Promise<Notice[]>;
|
package/lib/api/notices/types.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50IHtcbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmFuZ2Ugb2YgYWZmZWN0ZWQgdmVyc2lvbnNcbiAgICovXG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpY2Uge1xuICB0aXRsZTogc3RyaW5nO1xuICBpc3N1ZU51bWJlcjogbnVtYmVyO1xuICBvdmVydmlldzogc3RyaW5nO1xuICAvKipcbiAgICogQSBmbGF0IGxpc3Qgb2YgYWZmZWN0ZWQgY29tcG9uZW50cywgZXZhbHVhdGVkIGFzIGFuIE9SLlxuICAgKlxuICAgKiBUaGUgbm90aWNlIG1hdGNoZXMgaWYgYW55IHNpbmdsZSBjb21wb25lbnQgbWF0Y2hlcy5cbiAgICovXG4gIGNvbXBvbmVudHM6IEFycmF5PENvbXBvbmVudD47XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgYWZmZWN0ZWQgY29tcG9uZW50cyBpbiBEaXNqdW5jdGl2ZSBOb3JtYWwgRm9ybSAoT1Igb2YgQU5EcykuXG4gICAqXG4gICAqIFRoZSBvdXRlciBhcnJheSBpcyBhbiBPUiwgdGhlIGlubmVyIGFycmF5cyBhcmUgQU5Ecy4gVGhlIG5vdGljZSBtYXRjaGVzXG4gICAqIGlmIGFsbCBjb21wb25lbnRzIG9mIGF0IGxlYXN0IG9uZSBpbm5lciBhcnJheSBtYXRjaC5cbiAgICpcbiAgICogT25seSBhdmFpbGFibGUgd2hlbiBgc2NoZW1hVmVyc2lvbmAgaXMgYCcyJ2AuXG4gICAqL1xuICBjb21wb25lbnRzVjI/OiBBcnJheTxDb21wb25lbnQgfCBDb21wb25lbnRbXT47XG4gIHNjaGVtYVZlcnNpb246IHN0cmluZztcbiAgc2V2ZXJpdHk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlRGF0YVNvdXJjZSB7XG4gIGZldGNoKCk6IFByb21pc2U8Tm90aWNlW10+O1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IGEgYm9vdHN0cmFwcGVkIGVudmlyb25tZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcHBlZEVudmlyb25tZW50IHtcbiAgcmVhZG9ubHkgYm9vdHN0cmFwU3RhY2tWZXJzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IGVudmlyb25tZW50OiBFbnZpcm9ubWVudDtcbn1cbiJdfQ==
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50IHtcbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmFuZ2Ugb2YgYWZmZWN0ZWQgdmVyc2lvbnNcbiAgICovXG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpY2Uge1xuICB0aXRsZTogc3RyaW5nO1xuICBpc3N1ZU51bWJlcjogbnVtYmVyO1xuICBvdmVydmlldzogc3RyaW5nO1xuICAvKipcbiAgICogQSBmbGF0IGxpc3Qgb2YgYWZmZWN0ZWQgY29tcG9uZW50cywgZXZhbHVhdGVkIGFzIGFuIE9SLlxuICAgKlxuICAgKiBUaGUgbm90aWNlIG1hdGNoZXMgaWYgYW55IHNpbmdsZSBjb21wb25lbnQgbWF0Y2hlcy5cbiAgICovXG4gIGNvbXBvbmVudHM6IEFycmF5PENvbXBvbmVudD47XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgYWZmZWN0ZWQgY29tcG9uZW50cyBpbiBEaXNqdW5jdGl2ZSBOb3JtYWwgRm9ybSAoT1Igb2YgQU5EcykuXG4gICAqXG4gICAqIFRoZSBvdXRlciBhcnJheSBpcyBhbiBPUiwgdGhlIGlubmVyIGFycmF5cyBhcmUgQU5Ecy4gVGhlIG5vdGljZSBtYXRjaGVzXG4gICAqIGlmIGFsbCBjb21wb25lbnRzIG9mIGF0IGxlYXN0IG9uZSBpbm5lciBhcnJheSBtYXRjaC5cbiAgICpcbiAgICogT25seSBhdmFpbGFibGUgd2hlbiBgc2NoZW1hVmVyc2lvbmAgaXMgYCcyJ2AuXG4gICAqL1xuICBjb21wb25lbnRzVjI/OiBBcnJheTxDb21wb25lbnQgfCBDb21wb25lbnRbXT47XG4gIHNjaGVtYVZlcnNpb246IHN0cmluZztcbiAgc2V2ZXJpdHk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBlci1wbGFjZWhvbGRlciByZW5kZXJpbmcgb3B0aW9ucywga2V5ZWQgYnkgdGhlIGR5bmFtaWMgbmFtZSB1c2VkIGluXG4gICAqIGB7cmVzb2x2ZTpOQU1FfWAgcGxhY2Vob2xkZXJzIHdpdGhpbiBgb3ZlcnZpZXdgLiBVbmtub3duIGZpZWxkcyBvbiB0aGVcbiAgICogc3BlYyBvYmplY3QgTVVTVCBiZSBpZ25vcmVkLCBzbyBuZXcgY2FwYWJpbGl0aWVzIGNhbiBiZSBhZGRlZCBsYXRlclxuICAgKiB3aXRob3V0IGJyZWFraW5nIG9sZGVyIENMSXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gb3ZlcnJpZGVzOyBwbGFjZWhvbGRlcnMgcmVuZGVyIHdpdGggZGVmYXVsdCBzZXR0aW5ncyAoc2VwYXJhdG9yICcsJylcbiAgICovXG4gIGR5bmFtaWNWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBEeW5hbWljVmFsdWVTcGVjPjtcbn1cblxuLyoqXG4gKiBSZW5kZXJpbmcgb3B0aW9ucyBmb3IgYSBzaW5nbGUgZHluYW1pYyB2YWx1ZSBwbGFjZWhvbGRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljVmFsdWVTcGVjIHtcbiAgLyoqXG4gICAqIFNlcGFyYXRvciB1c2VkIHRvIGpvaW4gbXVsdGlwbGUgdmFsdWVzIGZvciB0aGUgc2FtZSBkeW5hbWljIG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiLFwiXG4gICAqL1xuICByZWFkb25seSBzZXBhcmF0b3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlRGF0YVNvdXJjZSB7XG4gIGZldGNoKCk6IFByb21pc2U8Tm90aWNlW10+O1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IGEgYm9vdHN0cmFwcGVkIGVudmlyb25tZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcHBlZEVudmlyb25tZW50IHtcbiAgcmVhZG9ubHkgYm9vdHN0cmFwU3RhY2tWZXJzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IGVudmlyb25tZW50OiBFbnZpcm9ubWVudDtcbn1cbiJdfQ==
|
|
@@ -144,26 +144,33 @@ function resourceMoves(before, after, direction = 'direct', ignoreModifications
|
|
|
144
144
|
const digestsAfter = resourceDigests(after, direction);
|
|
145
145
|
if (!(ignoreModifications || isomorphic(digestsBefore, digestsAfter))) {
|
|
146
146
|
const message = ['A refactor operation cannot add, remove or update resources. Only resource moves and renames are allowed.'];
|
|
147
|
-
const
|
|
148
|
-
return Array.from((0, sets_1.setDiff)(new Set(Object.keys(a)), new Set(Object.keys(b)))).flatMap(k => a[k])
|
|
149
|
-
.map(x => ` - ${x.toPath()}`)
|
|
150
|
-
.sort()
|
|
151
|
-
.join('\n');
|
|
147
|
+
const locationsForDigests = (a, b) => {
|
|
148
|
+
return Array.from((0, sets_1.setDiff)(new Set(Object.keys(a)), new Set(Object.keys(b)))).flatMap(k => a[k]);
|
|
152
149
|
};
|
|
150
|
+
const formatList = (locs, icon) => locs.map(x => ` [${icon}] ${x.toPath()}`).sort().join('\n');
|
|
153
151
|
const stackNames = (stacks) => stacks.length === 0
|
|
154
152
|
? 'NONE'
|
|
155
153
|
: stacks
|
|
156
154
|
.map((s) => s.stackName)
|
|
157
155
|
.sort()
|
|
158
156
|
.join(', ');
|
|
159
|
-
const
|
|
160
|
-
const
|
|
157
|
+
const onlyDeployedLocs = locationsForDigests(digestsBefore, digestsAfter);
|
|
158
|
+
const onlyLocalLocs = locationsForDigests(digestsAfter, digestsBefore);
|
|
159
|
+
const onlyDeployedPaths = new Set(onlyDeployedLocs.map(l => l.toPath()));
|
|
160
|
+
const onlyLocalPaths = new Set(onlyLocalLocs.map(l => l.toPath()));
|
|
161
|
+
const differentPaths = new Set(Array.from(onlyDeployedPaths).filter(p => onlyLocalPaths.has(p)));
|
|
162
|
+
const onlyDeployed = formatList(onlyDeployedLocs.filter(l => !differentPaths.has(l.toPath())), '-');
|
|
163
|
+
const onlyLocal = formatList(onlyLocalLocs.filter(l => !differentPaths.has(l.toPath())), '+');
|
|
164
|
+
const different = formatList([...onlyDeployedLocs, ...onlyLocalLocs].filter(l => differentPaths.has(l.toPath())), '~');
|
|
161
165
|
if (onlyDeployed.length > 0) {
|
|
162
166
|
message.push(`The following resources are present only in the AWS environment:\n${onlyDeployed}`);
|
|
163
167
|
}
|
|
164
168
|
if (onlyLocal.length > 0) {
|
|
165
169
|
message.push(`\nThe following resources are present only in your CDK application:\n${onlyLocal}`);
|
|
166
170
|
}
|
|
171
|
+
if (different.length > 0) {
|
|
172
|
+
message.push(`\nThe following resources are different in your CDK application and the AWS environment:\n${different}`);
|
|
173
|
+
}
|
|
167
174
|
message.push('');
|
|
168
175
|
message.push('The following stacks were used in the comparison:');
|
|
169
176
|
message.push(` - Deployed: ${stackNames(before)}`);
|
|
@@ -328,4 +335,4 @@ async function replaceAwsPlaceholders(object, aws) {
|
|
|
328
335
|
},
|
|
329
336
|
});
|
|
330
337
|
}
|
|
331
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMFlBLHdEQTJCQztBQXJhRCw0REFBc0U7QUFFdEUsb0VBQXNFO0FBR3RFLHFEQUFxRTtBQUVyRSxxQ0FBa0Q7QUFDbEQsK0RBQTJEO0FBQzNELDBDQUFxRDtBQUdyRCxnREFBOEQ7QUFFOUQsc0NBQWlDO0FBa0JqQzs7R0FFRztBQUNILE1BQWEsa0JBQWtCO0lBQ1osU0FBUyxHQUFzQixFQUFFLENBQUM7SUFDbEMsY0FBYyxHQUFtQixFQUFFLENBQUM7SUFDcEMsV0FBVyxDQUF3QjtJQUNuQyxhQUFhLENBQVU7SUFDeEIsV0FBVyxDQUFjO0lBRXpDLFlBQVksS0FBZ0M7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzFHLE1BQU0sbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUV6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aWVudCwgdHlwZSBJQXdzIH0gZnJvbSAnQGF3cy1jZGsvY2RrLWFzc2V0cy1saWInO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFBsYWNlaG9sZGVycyB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgdHlwZSB7IFN0YWNrRGVmaW5pdGlvbiB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IENsb3VkRm9ybWF0aW9uU3RhY2sgfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IFJlc291cmNlTG9jYXRpb24sIFJlc291cmNlTWFwcGluZyB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBHcmFwaERpcmVjdGlvbiB9IGZyb20gJy4vZGlnZXN0JztcbmltcG9ydCB7IGNvbXB1dGVSZXNvdXJjZURpZ2VzdHMgfSBmcm9tICcuL2RpZ2VzdCc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgZXF1YWxTZXRzLCBzZXREaWZmIH0gZnJvbSAnLi4vLi4vdXRpbC9zZXRzJztcbmltcG9ydCB0eXBlIHsgU0RLIH0gZnJvbSAnLi4vYXdzLWF1dGgvc2RrJztcbmltcG9ydCB0eXBlIHsgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hd3MtYXV0aC9zZGstcHJvdmlkZXInO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRSZXNvdXJjZXNSZWdpc3RyeSB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi9wbHVnaW4nO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzZXQgb2YgcG9zc2libGUgbW92ZXMgb2YgYSByZXNvdXJjZSBmcm9tIG9uZSBsb2NhdGlvblxuICogdG8gYW5vdGhlci4gSW4gdGhlIGlkZWFsIGNhc2UsIHRoZXJlIGlzIG9ubHkgb25lIHNvdXJjZSBhbmQgb25seSBvbmVcbiAqIGRlc3RpbmF0aW9uLlxuICovXG50eXBlIFJlc291cmNlTW92ZSA9IFtSZXNvdXJjZUxvY2F0aW9uW10sIFJlc291cmNlTG9jYXRpb25bXV07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVmYWN0b3JpbmdDb250ZXh0T3B0aW9ucyB7XG4gIGVudmlyb25tZW50OiBFbnZpcm9ubWVudDtcbiAgbG9jYWxTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXTtcbiAgZGVwbG95ZWRTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXTtcbiAgb3ZlcnJpZGVzPzogUmVzb3VyY2VNYXBwaW5nW107XG4gIGFzc3VtZVJvbGVBcm4/OiBzdHJpbmc7XG4gIGlnbm9yZU1vZGlmaWNhdGlvbnM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEVuY2Fwc3VsYXRlcyB0aGUgaW5mb3JtYXRpb24gZm9yIHJlZmFjdG9yaW5nIHJlc291cmNlcyBpbiBhIHNpbmdsZSBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlZmFjdG9yaW5nQ29udGV4dCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hcHBpbmdzOiBSZXNvdXJjZU1hcHBpbmdbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGFtYmlndW91c01vdmVzOiBSZXNvdXJjZU1vdmVbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG4gIHByaXZhdGUgcmVhZG9ubHkgYXNzdW1lUm9sZUFybj86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGVudmlyb25tZW50OiBFbnZpcm9ubWVudDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUmVmYWN0b3JpbmdDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBwcm9wcy5lbnZpcm9ubWVudDtcbiAgICBjb25zdCBtb3ZlcyA9IHJlc291cmNlTW92ZXMocHJvcHMuZGVwbG95ZWRTdGFja3MsIHByb3BzLmxvY2FsU3RhY2tzLCAnZGlyZWN0JywgcHJvcHMuaWdub3JlTW9kaWZpY2F0aW9ucyk7XG4gICAgY29uc3QgYWRkaXRpb25hbE92ZXJyaWRlcyA9IHN0cnVjdHVyYWxPdmVycmlkZXMocHJvcHMuZGVwbG95ZWRTdGFja3MsIHByb3BzLmxvY2FsU3RhY2tzKTtcbiAgICBjb25zdCBvdmVycmlkZXMgPSAocHJvcHMub3ZlcnJpZGVzID8/IFtdKS5jb25jYXQoYWRkaXRpb25hbE92ZXJyaWRlcyk7XG4gICAgY29uc3QgW25vbkFtYmlndW91c01vdmVzLCBhbWJpZ3VvdXNNb3Zlc10gPSBwYXJ0aXRpb25CeUFtYmlndWl0eShvdmVycmlkZXMsIG1vdmVzKTtcbiAgICB0aGlzLmFtYmlndW91c01vdmVzID0gYW1iaWd1b3VzTW92ZXM7XG4gICAgdGhpcy5sb2NhbFN0YWNrcyA9IHByb3BzLmxvY2FsU3RhY2tzO1xuICAgIHRoaXMuYXNzdW1lUm9sZUFybiA9IHByb3BzLmFzc3VtZVJvbGVBcm47XG5cbiAgICB0aGlzLl9tYXBwaW5ncyA9IHJlc291cmNlTWFwcGluZ3Mobm9uQW1iaWd1b3VzTW92ZXMpO1xuICB9XG5cbiAgcHVibGljIGdldCBhbWJpZ3VvdXNQYXRocygpOiBbc3RyaW5nW10sIHN0cmluZ1tdXVtdIHtcbiAgICByZXR1cm4gdGhpcy5hbWJpZ3VvdXNNb3Zlcy5tYXAoKFthLCBiXSkgPT4gW2NvbnZlcnQoYSksIGNvbnZlcnQoYildKTtcblxuICAgIGZ1bmN0aW9uIGNvbnZlcnQobG9jYXRpb25zOiBSZXNvdXJjZUxvY2F0aW9uW10pOiBzdHJpbmdbXSB7XG4gICAgICByZXR1cm4gbG9jYXRpb25zLm1hcCgobCkgPT4gbC50b1BhdGgoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBtYXBwaW5ncygpOiBSZXNvdXJjZU1hcHBpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcHBpbmdzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGV4ZWN1dGUoc3RhY2tEZWZpbml0aW9uczogU3RhY2tEZWZpbml0aW9uW10sIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlciwgaW9IZWxwZXI6IElvSGVscGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMubWFwcGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXNzdW1lUm9sZUFybiA9IHRoaXMuYXNzdW1lUm9sZUFybiA/PyBhd2FpdCB0aGlzLmZpbmRSb2xlVG9Bc3N1bWUoc2RrUHJvdmlkZXIpO1xuICAgIGNvbnN0IHNkayA9IChcbiAgICAgIGF3YWl0IHNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50KHRoaXMuZW52aXJvbm1lbnQsIE1vZGUuRm9yV3JpdGluZywge1xuICAgICAgICBhc3N1bWVSb2xlQXJuLFxuICAgICAgfSlcbiAgICApLnNkaztcblxuICAgIGF3YWl0IHRoaXMuY2hlY2tCb290c3RyYXBWZXJzaW9uKHNkaywgaW9IZWxwZXIpO1xuXG4gICAgY29uc3QgY2ZuID0gc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG4gICAgY29uc3QgbWFwcGluZ3MgPSB0aGlzLm1hcHBpbmdzO1xuXG4gICAgY29uc3QgaW5wdXQgPSB7XG4gICAgICBSZXNvdXJjZU1hcHBpbmdzOiBtYXBwaW5ncy5tYXAoKG0pID0+IG0udG9DbG91ZEZvcm1hdGlvbigpKSxcbiAgICAgIFN0YWNrRGVmaW5pdGlvbnM6IHN0YWNrRGVmaW5pdGlvbnMsXG4gICAgfTtcbiAgICBjb25zdCByZWZhY3RvciA9IGF3YWl0IGNmbi5jcmVhdGVTdGFja1JlZmFjdG9yKGlucHV0KTtcblxuICAgIGF3YWl0IGNmbi53YWl0VW50aWxTdGFja1JlZmFjdG9yQ3JlYXRlQ29tcGxldGUoe1xuICAgICAgU3RhY2tSZWZhY3RvcklkOiByZWZhY3Rvci5TdGFja1JlZmFjdG9ySWQsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBjZm4uZXhlY3V0ZVN0YWNrUmVmYWN0b3Ioe1xuICAgICAgU3RhY2tSZWZhY3RvcklkOiByZWZhY3Rvci5TdGFja1JlZmFjdG9ySWQsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBjZm4ud2FpdFVudGlsU3RhY2tSZWZhY3RvckV4ZWN1dGVDb21wbGV0ZSh7XG4gICAgICBTdGFja1JlZmFjdG9ySWQ6IHJlZmFjdG9yLlN0YWNrUmVmYWN0b3JJZCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tCb290c3RyYXBWZXJzaW9uKHNkazogU0RLLCBpb0hlbHBlcjogSW9IZWxwZXIpIHtcbiAgICBjb25zdCBlbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5ID0gbmV3IEVudmlyb25tZW50UmVzb3VyY2VzUmVnaXN0cnkoKTtcbiAgICBjb25zdCBlbnZSZXNvdXJjZXMgPSBlbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5LmZvcih0aGlzLmVudmlyb25tZW50LCBzZGssIGlvSGVscGVyKTtcbiAgICBsZXQgYm9vdHN0cmFwVmVyc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAvLyBUcnkgdG8gZ2V0IHRoZSBib290c3RyYXAgdmVyc2lvblxuICAgICAgYm9vdHN0cmFwVmVyc2lvbiA9IChhd2FpdCBlbnZSZXNvdXJjZXMubG9va3VwVG9vbGtpdCgpKS52ZXJzaW9uO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIEJ1dCBpZiB3ZSBjYW4ndCwga2VlcCBnb2luZy4gTWF5YmUgd2UgY2FuIHN0aWxsIHN1Y2NlZWQuXG4gICAgfVxuICAgIGlmIChib290c3RyYXBWZXJzaW9uICE9IG51bGwgJiYgYm9vdHN0cmFwVmVyc2lvbiA8IDI4KSB7XG4gICAgICBjb25zdCBlbnZpcm9ubWVudCA9IGBhd3M6Ly8ke3RoaXMuZW52aXJvbm1lbnQuYWNjb3VudH0vJHt0aGlzLmVudmlyb25tZW50LnJlZ2lvbn1gO1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgICAgJ0Jvb3RzdHJhcFZlcnNpb25Ub29Mb3cnLFxuICAgICAgICBgVGhlIENESyB0b29sa2l0IHN0YWNrIGluIGVudmlyb25tZW50ICR7ZW52aXJvbm1lbnR9IGRvZXNuJ3Qgc3VwcG9ydCByZWZhY3RvcmluZy4gUGxlYXNlIHJ1biAnY2RrIGJvb3RzdHJhcCAke2Vudmlyb25tZW50fScgdG8gdXBkYXRlIGl0LmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmluZFJvbGVUb0Fzc3VtZShzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIpOiBQcm9taXNlIDwgc3RyaW5nIHwgdW5kZWZpbmVkID4ge1xuICAgIC8vIFRvIGV4ZWN1dGUgYSByZWZhY3Rvciwgd2UgbmVlZCB0aGUgZGVwbG95bWVudCByb2xlIEFSTiBmb3IgdGhlIGdpdmVuXG4gICAgLy8gZW52aXJvbm1lbnQuIE1vc3QgdG9vbGtpdCBjb21tYW5kcyBnZXQgdGhlIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIHJvbGVzIHRvXG4gICAgLy8gYXNzdW1lIGZyb20gdGhlIGNsb3VkIGFzc2VtYmx5IChhbmQgdWx0aW1hdGVseSBmcm9tIHRoZSBDREsgZnJhbWV3b3JrKS4gUmVmYWN0b3JcbiAgICAvLyBpcyBkaWZmZXJlbnQgYmVjYXVzZSBpdCBpcyBub3QgdGhlIGFwcGxpY2F0aW9uL2ZyYW1ld29yayB0aGF0IGRpY3RhdGVzIHdoYXQgdGhlXG4gICAgLy8gdG9vbGtpdCBzaG91bGQgZG8sIGJ1dCBpdCBpcyB0aGUgdG9vbGtpdCBpdHNlbGYgdGhhdCBoYXMgdG8gZmlndXJlIGl0IG91dC5cbiAgICAvL1xuICAgIC8vIE5ldmVydGhlbGVzcywgdGhlIGNsb3VkIGFzc2VtYmx5IGlzIHRoZSBtb3N0IHJlbGlhYmxlIHNvdXJjZSBmb3IgdGhpcyBraW5kIG9mXG4gICAgLy8gaW5mb3JtYXRpb24uIEZvciB0aGUgZGVwbG95bWVudCByb2xlIEFSTiwgaW4gcGFydGljdWxhciwgd2hhdCB3ZSBkbyBoZXJlXG4gICAgLy8gaXMgbG9vayBhdCBhbGwgdGhlIHN0YWNrcyBmb3IgYSBnaXZlbiBlbnZpcm9ubWVudCBpbiB0aGUgY2xvdWQgYXNzZW1ibHkgYW5kXG4gICAgLy8gZXh0cmFjdCB0aGUgZGVwbG95bWVudCByb2xlIEFSTiB0aGF0IGlzIGNvbW1vbiB0byBhbGwgb2YgdGhlbS4gSWYgbm8gcm9sZSBpc1xuICAgIC8vIGZvdW5kLCB3ZSBnbyBhaGVhZCB3aXRob3V0IGFzc3VtaW5nIGEgcm9sZS4gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSByb2xlLFxuICAgIC8vIHdlIGNvbnNpZGVyIHRoYXQgYW4gaW52YXJpYW50IHdhcyB2aW9sYXRlZCwgYW5kIHRocm93IGFuIGVycm9yLlxuXG4gICAgY29uc3QgZW52ID0gdGhpcy5lbnZpcm9ubWVudDtcbiAgICBjb25zdCByb2xlQXJucyA9IG5ldyBTZXQoXG4gICAgICB0aGlzLmxvY2FsU3RhY2tzXG4gICAgICAgIC5maWx0ZXIoKHMpID0+IHMuZW52aXJvbm1lbnQuYWNjb3VudCA9PT0gZW52LmFjY291bnQgJiYgcy5lbnZpcm9ubWVudC5yZWdpb24gPT09IGVudi5yZWdpb24pXG4gICAgICAgIC5tYXAoKHMpID0+IHMuYXNzdW1lUm9sZUFybiksXG4gICAgKTtcblxuICAgIGlmIChyb2xlQXJucy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChyb2xlQXJucy5zaXplICE9PSAxKSB7XG4gICAgICAvLyBVbmxpa2VseSB0byBoYXBwZW4uIEJ1dCBpZiBpdCBkb2VzLCB3ZSBjYW4ndCBwcm9jZWVkXG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAnTXVsdGlwbGVEZXBsb3ltZW50Um9sZXMnLFxuICAgICAgICBgTXVsdGlwbGUgc3RhY2tzIGluIGVudmlyb25tZW50IGF3czovLyR7ZW52LmFjY291bnR9LyR7ZW52LnJlZ2lvbn0gaGF2ZSBkaWZmZXJlbnQgZGVwbG95bWVudCByb2xlIEFSTnMuIENhbm5vdCBwcm9jZWVkLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGFybiA9IEFycmF5LmZyb20ocm9sZUFybnMpWzBdO1xuICAgIGlmIChhcm4gIT0gbnVsbCkge1xuICAgICAgY29uc3QgcmVzb2x2ZWRFbnYgPSBhd2FpdCBzZGtQcm92aWRlci5yZXNvbHZlRW52aXJvbm1lbnQoZW52KTtcbiAgICAgIGNvbnN0IHJlZ2lvbiA9IHJlc29sdmVkRW52LnJlZ2lvbjtcbiAgICAgIHJldHVybiAoYXdhaXQgcmVwbGFjZUF3c1BsYWNlaG9sZGVycyh7IHJlZ2lvbiwgYXNzdW1lUm9sZUFybjogYXJuIH0sIG5ldyBEZWZhdWx0QXdzQ2xpZW50KCkpKS5hc3N1bWVSb2xlQXJuO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGNvdWxkbid0IGZpbmQgYSByb2xlIEFSTiwgd2UgY2FuIHByb2NlZWQgd2l0aG91dCBhc3N1bWluZyBhIHJvbGUuXG4gICAgLy8gTWF5YmUgdGhlIGRlZmF1bHQgY3JlZGVudGlhbHMgaGF2ZSBwZXJtaXNzaW9ucyB0byBkbyB3aGF0IHdlIG5lZWQuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhbiBhdXRvbWF0aWMgbGlzdCBvZiBvdmVycmlkZXMgdGhhdCBjYW4gYmUgZGVkdWNlZCBmcm9tIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG9wcG9zaXRlIHJlc291cmNlIGdyYXBoLlxuICogU3VwcG9zZSB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgcmVzb3VyY2UgZ3JhcGg6XG4gKlxuICogICAgIEEgLS0+IEJcbiAqICAgICBDIC0tPiBEXG4gKlxuICogc3VjaCB0aGF0IEIgYW5kIEQgYXJlIGlkZW50aWNhbCwgYnV0IEEgaXMgZGlmZmVyZW50IGZyb20gQy4gVGhlbiBkaWdlc3QoQikgPSBkaWdlc3QoRCkuIElmIGJvdGggcmVzb3VyY2VzIGFyZSBtb3ZlZCxcbiAqIHdlIGhhdmUgYW4gYW1iaWd1aXR5LiBCdXQgaWYgd2UgcmV2ZXJzZSB0aGUgYXJyb3dzOlxuICpcbiAqICAgICBBIDwtLSBCXG4gKiAgICAgQyA8LS0gRFxuICpcbiAqIHRoZW4gZGlnZXN0KEIpIOKJoCBkaWdlc3QoRCksIGJlY2F1c2UgdGhleSBub3cgaGF2ZSBkaWZmZXJlbnQgZGVwZW5kZW5jaWVzLiBJZiB3ZSBjb21wdXRlIHRoZSBtYXBwaW5ncyBmcm9tIHRoaXNcbiAqIG9wcG9zaXRlIGdyYXBoLCB3ZSBjYW4gdXNlIHRoZW0gYXMgYSBzZXQgb2Ygb3ZlcnJpZGVzIHRvIGRpc2FtYmlndWF0ZSB0aGUgb3JpZ2luYWwgbW92ZXMuXG4gKlxuICovXG5mdW5jdGlvbiBzdHJ1Y3R1cmFsT3ZlcnJpZGVzKGRlcGxveWVkU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW10sIGxvY2FsU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW10pOiBSZXNvdXJjZU1hcHBpbmdbXSB7XG4gIGNvbnN0IG1vdmVzID0gcmVzb3VyY2VNb3ZlcyhkZXBsb3llZFN0YWNrcywgbG9jYWxTdGFja3MsICdvcHBvc2l0ZScsIHRydWUpO1xuICBjb25zdCBbbm9uQW1iaWd1b3VzTW92ZXNdID0gcGFydGl0aW9uQnlBbWJpZ3VpdHkoW10sIG1vdmVzKTtcbiAgcmV0dXJuIHJlc291cmNlTWFwcGluZ3Mobm9uQW1iaWd1b3VzTW92ZXMpO1xufVxuXG5mdW5jdGlvbiByZXNvdXJjZU1vdmVzKFxuICBiZWZvcmU6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSxcbiAgYWZ0ZXI6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSxcbiAgZGlyZWN0aW9uOiBHcmFwaERpcmVjdGlvbiA9ICdkaXJlY3QnLFxuICBpZ25vcmVNb2RpZmljYXRpb25zOiBib29sZWFuID0gZmFsc2UpOiBSZXNvdXJjZU1vdmVbXSB7XG4gIGNvbnN0IGRpZ2VzdHNCZWZvcmUgPSByZXNvdXJjZURpZ2VzdHMoYmVmb3JlLCBkaXJlY3Rpb24pO1xuICBjb25zdCBkaWdlc3RzQWZ0ZXIgPSByZXNvdXJjZURpZ2VzdHMoYWZ0ZXIsIGRpcmVjdGlvbik7XG5cbiAgaWYgKCEoaWdub3JlTW9kaWZpY2F0aW9ucyB8fCBpc29tb3JwaGljKGRpZ2VzdHNCZWZvcmUsIGRpZ2VzdHNBZnRlcikpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IFsnQSByZWZhY3RvciBvcGVyYXRpb24gY2Fubm90IGFkZCwgcmVtb3ZlIG9yIHVwZGF0ZSByZXNvdXJjZXMuIE9ubHkgcmVzb3VyY2UgbW92ZXMgYW5kIHJlbmFtZXMgYXJlIGFsbG93ZWQuJ107XG5cbiAgICBjb25zdCBkaWZmZXJlbmNlID0gKGE6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTG9jYXRpb25bXT4sIGI6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTG9jYXRpb25bXT4pID0+IHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHNldERpZmYobmV3IFNldChPYmplY3Qua2V5cyhhKSksIG5ldyBTZXQoT2JqZWN0LmtleXMoYikpKSkuZmxhdE1hcChrID0+IGFba10hKVxuICAgICAgICAubWFwKHggPT4gYCAgLSAke3gudG9QYXRoKCl9YClcbiAgICAgICAgLnNvcnQoKVxuICAgICAgICAuam9pbignXFxuJyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHN0YWNrTmFtZXMgPSAoc3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW10pID0+XG4gICAgICBzdGFja3MubGVuZ3RoID09PSAwXG4gICAgICAgID8gJ05PTkUnXG4gICAgICAgIDogc3RhY2tzXG4gICAgICAgICAgLm1hcCgocykgPT4gcy5zdGFja05hbWUpXG4gICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgIC5qb2luKCcsICcpO1xuXG4gICAgY29uc3Qgb25seURlcGxveWVkID0gZGlmZmVyZW5jZShkaWdlc3RzQmVmb3JlLCBkaWdlc3RzQWZ0ZXIpO1xuICAgIGNvbnN0IG9ubHlMb2NhbCA9IGRpZmZlcmVuY2UoZGlnZXN0c0FmdGVyLCBkaWdlc3RzQmVmb3JlKTtcblxuICAgIGlmIChvbmx5RGVwbG95ZWQubGVuZ3RoID4gMCkge1xuICAgICAgbWVzc2FnZS5wdXNoKGBUaGUgZm9sbG93aW5nIHJlc291cmNlcyBhcmUgcHJlc2VudCBvbmx5IGluIHRoZSBBV1MgZW52aXJvbm1lbnQ6XFxuJHtvbmx5RGVwbG95ZWR9YCk7XG4gICAgfVxuXG4gICAgaWYgKG9ubHlMb2NhbC5sZW5ndGggPiAwKSB7XG4gICAgICBtZXNzYWdlLnB1c2goYFxcblRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzIGFyZSBwcmVzZW50IG9ubHkgaW4geW91ciBDREsgYXBwbGljYXRpb246XFxuJHtvbmx5TG9jYWx9YCk7XG4gICAgfVxuXG4gICAgbWVzc2FnZS5wdXNoKCcnKTtcbiAgICBtZXNzYWdlLnB1c2goJ1RoZSBmb2xsb3dpbmcgc3RhY2tzIHdlcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbjonKTtcbiAgICBtZXNzYWdlLnB1c2goIGAgIC0gRGVwbG95ZWQ6ICR7c3RhY2tOYW1lcyhiZWZvcmUpfWApO1xuICAgIG1lc3NhZ2UucHVzaCggYCAgLSBMb2NhbDogJHtzdGFja05hbWVzKGFmdGVyKX1gKTtcbiAgICBtZXNzYWdlLnB1c2goJycpO1xuICAgIG1lc3NhZ2UucHVzaCgnSGludDogYnkgZGVmYXVsdCwgb25seSBkZXBsb3llZCBzdGFja3MgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgYSBsb2NhbCBzdGFjayBhcmUgaW5jbHVkZWQuJyk7XG4gICAgbWVzc2FnZS5wdXNoKCdJZiB5b3Ugd2FudCB0byBpbmNsdWRlIGFkZGl0aW9uYWwgZGVwbG95ZWQgc3RhY2tzIGZvciBjb21wYXJpc29uLCByZS1ydW4gdGhlIGNvbW1hbmQgd2l0aCB0aGUgb3B0aW9uIFxcJy0tYWRkaXRpb25hbC1zdGFjay1uYW1lPTxTVEFDSz5cXCcgZm9yIGVhY2ggc3RhY2suJyk7XG5cbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdSZWZhY3RvclJlc291cmNlTWlzbWF0Y2gnLCBtZXNzYWdlLmpvaW4oJ1xcbicpKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlbW92ZVVubW92ZWRSZXNvdXJjZXMoemlwKGRpZ2VzdHNCZWZvcmUsIGRpZ2VzdHNBZnRlcikpKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHR3byBzZXRzIG9mIHJlc291cmNlcyBoYXZlIHRoZSBzYW1lIGVsZW1lbnRzICh1bmlxdWVseSBpZGVudGlmaWVkIGJ5IHRoZSBkaWdlc3QpLCBhbmRcbiAqIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgc2FtZSBudW1iZXIgb2YgbG9jYXRpb25zLiBUaGUgbG9jYXRpb25zIHRoZW1zZWx2ZXMgbWF5IGJlIGRpZmZlcmVudC5cbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpYyhhOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZUxvY2F0aW9uW10+LCBiOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZUxvY2F0aW9uW10+KTogYm9vbGVhbiB7XG4gIGNvbnN0IHNhbWVLZXlzID0gZXF1YWxTZXRzKG5ldyBTZXQoT2JqZWN0LmtleXMoYSkpLCBuZXcgU2V0KE9iamVjdC5rZXlzKGIpKSk7XG4gIHJldHVybiBzYW1lS2V5cyAmJiBPYmplY3QuZW50cmllcyhhKS5ldmVyeSgoW2RpZ2VzdCwgbG9jYXRpb25zXSkgPT4gbG9jYXRpb25zLmxlbmd0aCA9PT0gYltkaWdlc3RdLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVVubW92ZWRSZXNvdXJjZXMobW92ZXM6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZT4pOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmU+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmU+ID0ge307XG4gIGZvciAoY29uc3QgW2hhc2gsIFtiZWZvcmUsIGFmdGVyXV0gb2YgT2JqZWN0LmVudHJpZXMobW92ZXMpKSB7XG4gICAgY29uc3QgY29tbW9uID0gYmVmb3JlLmZpbHRlcigoYikgPT4gYWZ0ZXIuc29tZSgoYSkgPT4gYS5lcXVhbFRvKGIpKSk7XG4gICAgcmVzdWx0W2hhc2hdID0gW1xuICAgICAgYmVmb3JlLmZpbHRlcigoYikgPT4gIWNvbW1vbi5zb21lKChjKSA9PiBiLmVxdWFsVG8oYykpKSxcbiAgICAgIGFmdGVyLmZpbHRlcigoYSkgPT4gIWNvbW1vbi5zb21lKChjKSA9PiBhLmVxdWFsVG8oYykpKSxcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBGb3IgZWFjaCBoYXNoLCBpZGVudGlmeWluZyBhIHNpbmdsZSByZXNvdXJjZSwgemlwIHRoZSB0d28gbGlzdHMgb2YgbG9jYXRpb25zLFxuICogcHJvZHVjaW5nIGEgcmVzb3VyY2UgbW92ZVxuICovXG5mdW5jdGlvbiB6aXAoXG4gIG0xOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZUxvY2F0aW9uW10+LFxuICBtMjogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPixcbik6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZT4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZT4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFtoYXNoLCBsb2NhdGlvbnNdIG9mIE9iamVjdC5lbnRyaWVzKG0xKSkge1xuICAgIGlmIChoYXNoIGluIG0yKSB7XG4gICAgICByZXN1bHRbaGFzaF0gPSBbbG9jYXRpb25zLCBtMltoYXNoXV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtoYXNoXSA9IFtsb2NhdGlvbnMsIFtdXTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IFtoYXNoLCBsb2NhdGlvbnNdIG9mIE9iamVjdC5lbnRyaWVzKG0yKSkge1xuICAgIGlmICghKGhhc2ggaW4gbTEpKSB7XG4gICAgICByZXN1bHRbaGFzaF0gPSBbW10sIGxvY2F0aW9uc107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyBhIGxpc3Qgb2YgcGFpcnMgW2RpZ2VzdCwgbG9jYXRpb25dIGZvciBlYWNoIHJlc291cmNlIGluIHRoZSBzdGFjay5cbiAqL1xuZnVuY3Rpb24gcmVzb3VyY2VEaWdlc3RzKHN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdLCBkaXJlY3Rpb246IEdyYXBoRGlyZWN0aW9uKTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPiB7XG4gIC8vIGluZGV4IHN0YWNrcyBieSBuYW1lXG4gIGNvbnN0IHN0YWNrc0J5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBDbG91ZEZvcm1hdGlvblN0YWNrPigpO1xuICBmb3IgKGNvbnN0IHN0YWNrIG9mIHN0YWNrcykge1xuICAgIHN0YWNrc0J5TmFtZS5zZXQoc3RhY2suc3RhY2tOYW1lLCBzdGFjayk7XG4gIH1cblxuICBjb25zdCBkaWdlc3RzID0gY29tcHV0ZVJlc291cmNlRGlnZXN0cyhzdGFja3MsIGRpcmVjdGlvbik7XG5cbiAgcmV0dXJuIGdyb3VwQnlLZXkoXG4gICAgT2JqZWN0LmVudHJpZXMoZGlnZXN0cykubWFwKChbbG9jLCBkaWdlc3RdKSA9PiB7XG4gICAgICBjb25zdCBbc3RhY2tOYW1lLCBsb2dpY2FsSWRdID0gbG9jLnNwbGl0KCcuJyk7XG4gICAgICBjb25zdCBsb2NhdGlvbjogUmVzb3VyY2VMb2NhdGlvbiA9IG5ldyBSZXNvdXJjZUxvY2F0aW9uKHN0YWNrc0J5TmFtZS5nZXQoc3RhY2tOYW1lKSEsIGxvZ2ljYWxJZCk7XG4gICAgICByZXR1cm4gW2RpZ2VzdCwgbG9jYXRpb25dO1xuICAgIH0pLFxuICApO1xuXG4gIGZ1bmN0aW9uIGdyb3VwQnlLZXk8QT4oZW50cmllczogW3N0cmluZywgQV1bXSk6IFJlY29yZDxzdHJpbmcsIEFbXT4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgQVtdPiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcykge1xuICAgICAgaWYgKGtleSBpbiByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0FtYmlndW91c01vdmUobW92ZTogUmVzb3VyY2VNb3ZlKTogYm9vbGVhbiB7XG4gIGNvbnN0IFtwcmUsIHBvc3RdID0gbW92ZTtcblxuICAvLyBBIG1vdmUgaXMgY29uc2lkZXJlZCBhbWJpZ3VvdXMgaWYgdHdvIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAgLy8gIDEuIEJvdGggc2lkZXMgaGF2ZSBhdCBsZWFzdCBvbmUgZWxlbWVudCAob3RoZXJ3aXNlLCBpdCdzIGp1c3QgYWRkaXRpb24gb3IgZGVsZXRpb24pXG4gIC8vICAyLiBBdCBsZWFzdCBvbmUgc2lkZSBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50XG4gIHJldHVybiBwcmUubGVuZ3RoID4gMCAmJiBwb3N0Lmxlbmd0aCA+IDAgJiYgKHByZS5sZW5ndGggPiAxIHx8IHBvc3QubGVuZ3RoID4gMSk7XG59XG5cbmZ1bmN0aW9uIHJlc291cmNlTWFwcGluZ3MobW92ZW1lbnRzOiBSZXNvdXJjZU1vdmVbXSk6IFJlc291cmNlTWFwcGluZ1tdIHtcbiAgcmV0dXJuIG1vdmVtZW50c1xuICAgIC5maWx0ZXIoKFtwcmUsIHBvc3RdKSA9PiBwcmUubGVuZ3RoID09PSAxICYmIHBvc3QubGVuZ3RoID09PSAxICYmICFwcmVbMF0uZXF1YWxUbyhwb3N0WzBdKSlcbiAgICAubWFwKChbcHJlLCBwb3N0XSkgPT4gbmV3IFJlc291cmNlTWFwcGluZyhwcmVbMF0sIHBvc3RbMF0pKTtcbn1cblxuLyoqXG4gKiBQYXJ0aXRpb25zIGEgbGlzdCBvZiBtb3ZlcyBpbnRvIG5vbi1hbWJpZ3VvdXMgYW5kIGFtYmlndW91cyBtb3Zlcy5cbiAqIEBwYXJhbSBvdmVycmlkZXMgLSBUaGUgbGlzdCBvZiBvdmVycmlkZXMgdG8gZGlzYW1iaWd1YXRlIG1vdmVzXG4gKiBAcGFyYW0gbW92ZXMgLSBhIHBhaXIgb2YgbGlzdHMgb2YgbW92ZXMuIEZpcnN0OiBub24tYW1iaWd1b3VzLCBzZWNvbmQ6IGFtYmlndW91c1xuICovXG5mdW5jdGlvbiBwYXJ0aXRpb25CeUFtYmlndWl0eShvdmVycmlkZXM6IFJlc291cmNlTWFwcGluZ1tdLCBtb3ZlczogUmVzb3VyY2VNb3ZlW10pOiBbUmVzb3VyY2VNb3ZlW10sIFJlc291cmNlTW92ZVtdXSB7XG4gIGNvbnN0IGFtYmlndW91czogUmVzb3VyY2VNb3ZlW10gPSBbXTtcbiAgY29uc3Qgbm9uQW1iaWd1b3VzOiBSZXNvdXJjZU1vdmVbXSA9IFtdO1xuXG4gIGZvciAobGV0IG1vdmUgb2YgbW92ZXMpIHtcbiAgICBpZiAoIWlzQW1iaWd1b3VzTW92ZShtb3ZlKSkge1xuICAgICAgbm9uQW1iaWd1b3VzLnB1c2gobW92ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3Qgb3ZlcnJpZGUgb2Ygb3ZlcnJpZGVzKSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkTW92ZSA9IHJlc29sdmUob3ZlcnJpZGUsIG1vdmUpO1xuICAgICAgICBpZiAocmVzb2x2ZWRNb3ZlICE9IG51bGwpIHtcbiAgICAgICAgICBub25BbWJpZ3VvdXMucHVzaChyZXNvbHZlZE1vdmUpO1xuICAgICAgICAgIG1vdmUgPSByZW1vdmUob3ZlcnJpZGUsIG1vdmUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBPbmUgbGFzdCBjaGFuY2UgdG8gYmUgbm9uLWFtYmlndW91c1xuICAgICAgaWYgKCFpc0FtYmlndW91c01vdmUobW92ZSkpIHtcbiAgICAgICAgbm9uQW1iaWd1b3VzLnB1c2gobW92ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbWJpZ3VvdXMucHVzaChtb3ZlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXNvbHZlKG92ZXJyaWRlOiBSZXNvdXJjZU1hcHBpbmcsIG1vdmU6IFJlc291cmNlTW92ZSk6IFJlc291cmNlTW92ZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgW3ByZSwgcG9zdF0gPSBtb3ZlO1xuICAgIGNvbnN0IHNvdXJjZSA9IHByZS5maW5kKChsb2MpID0+IGxvYy5lcXVhbFRvKG92ZXJyaWRlLnNvdXJjZSkpO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gcG9zdC5maW5kKChsb2MpID0+IGxvYy5lcXVhbFRvKG92ZXJyaWRlLmRlc3RpbmF0aW9uKSk7XG4gICAgcmV0dXJuIChzb3VyY2UgJiYgZGVzdGluYXRpb24pID8gW1tzb3VyY2VdLCBbZGVzdGluYXRpb25dXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZShvdmVycmlkZTogUmVzb3VyY2VNYXBwaW5nLCBtb3ZlOiBSZXNvdXJjZU1vdmUpOiBSZXNvdXJjZU1vdmUge1xuICAgIGNvbnN0IFtwcmUsIHBvc3RdID0gbW92ZTtcbiAgICByZXR1cm4gW1xuICAgICAgcHJlLmZpbHRlcihsb2MgPT4gIWxvYy5lcXVhbFRvKG92ZXJyaWRlLnNvdXJjZSkpLFxuICAgICAgcG9zdC5maWx0ZXIobG9jID0+ICFsb2MuZXF1YWxUbyhvdmVycmlkZS5kZXN0aW5hdGlvbikpLFxuICAgIF07XG4gIH1cblxuICByZXR1cm4gW25vbkFtYmlndW91cywgYW1iaWd1b3VzXTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlIHRoZSB7QUNDT1VOVH0gYW5kIHtSRUdJT059IHBsYWNlaG9sZGVycyBpbiBhbGwgc3RyaW5ncyBmb3VuZCBpbiBhIGNvbXBsZXggb2JqZWN0LlxuICpcbiAqIER1cGxpY2F0ZWQgYmV0d2VlbiBjZGstYXNzZXRzIGFuZCBhd3MtY2RrIENMSSBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBnb29kIHNpbmdsZSBwbGFjZSB0byBwdXQgaXRcbiAqICh0aGV5J3JlIG5vbWluYWxseSBpbmRlcGVuZGVudCB0b29scykuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlQXdzUGxhY2Vob2xkZXJzPEEgZXh0ZW5kcyB7IHJlZ2lvbj86IHN0cmluZyB9PihcbiAgb2JqZWN0OiBBLFxuICBhd3M6IElBd3MsXG4pOiBQcm9taXNlPEE+IHtcbiAgbGV0IHBhcnRpdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwID0gYXdhaXQgYXdzLmRpc2NvdmVyUGFydGl0aW9uKCk7XG4gICAgcGFydGl0aW9uID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHApO1xuICAgIHJldHVybiBwO1xuICB9O1xuXG4gIGxldCBhY2NvdW50ID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBhd2FpdCBhd3MuZGlzY292ZXJDdXJyZW50QWNjb3VudCgpO1xuICAgIGFjY291bnQgPSAoKSA9PiBQcm9taXNlLnJlc29sdmUoYSk7XG4gICAgcmV0dXJuIGE7XG4gIH07XG5cbiAgcmV0dXJuIEVudmlyb25tZW50UGxhY2Vob2xkZXJzLnJlcGxhY2VBc3luYyhvYmplY3QsIHtcbiAgICBhc3luYyByZWdpb24oKSB7XG4gICAgICByZXR1cm4gb2JqZWN0LnJlZ2lvbiA/PyBhd3MuZGlzY292ZXJEZWZhdWx0UmVnaW9uKCk7XG4gICAgfSxcbiAgICBhc3luYyBhY2NvdW50SWQoKSB7XG4gICAgICByZXR1cm4gKGF3YWl0IGFjY291bnQoKSkuYWNjb3VudElkO1xuICAgIH0sXG4gICAgYXN5bmMgcGFydGl0aW9uKCkge1xuICAgICAgcmV0dXJuIHBhcnRpdGlvbigpO1xuICAgIH0sXG4gIH0pO1xufVxuXG4iXX0=
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBc1pBLHdEQTJCQztBQWpiRCw0REFBc0U7QUFFdEUsb0VBQXNFO0FBR3RFLHFEQUFxRTtBQUVyRSxxQ0FBa0Q7QUFDbEQsK0RBQTJEO0FBQzNELDBDQUFxRDtBQUdyRCxnREFBOEQ7QUFFOUQsc0NBQWlDO0FBa0JqQzs7R0FFRztBQUNILE1BQWEsa0JBQWtCO0lBQ1osU0FBUyxHQUFzQixFQUFFLENBQUM7SUFDbEMsY0FBYyxHQUFtQixFQUFFLENBQUM7SUFDcEMsV0FBVyxDQUF3QjtJQUNuQyxhQUFhLENBQVU7SUFDeEIsV0FBVyxDQUFjO0lBRXpDLFlBQVksS0FBZ0M7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzFHLE1BQU0sbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUV6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Z0JBQVMsRUFBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsT0FBTyxRQUFRLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0csQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsS0FBbUM7SUFDakUsTUFBTSxNQUFNLEdBQWlDLEVBQUUsQ0FBQztJQUNoRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ2IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FB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Q3JDLENBQUM7UUFDRCxLQUFLLENBQUMsU0FBUztZQUNiLE9BQU8sU0FBUyxFQUFFLENBQUM7UUFDckIsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0QXdzQ2xpZW50LCB0eXBlIElBd3MgfSBmcm9tICdAYXdzLWNkay9jZGstYXNzZXRzLWxpYic7XG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50IH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB7IEVudmlyb25tZW50UGxhY2Vob2xkZXJzIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB0eXBlIHsgU3RhY2tEZWZpbml0aW9uIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB0eXBlIHsgQ2xvdWRGb3JtYXRpb25TdGFjayB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgUmVzb3VyY2VMb2NhdGlvbiwgUmVzb3VyY2VNYXBwaW5nIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRGlyZWN0aW9uIH0gZnJvbSAnLi9kaWdlc3QnO1xuaW1wb3J0IHsgY29tcHV0ZVJlc291cmNlRGlnZXN0cyB9IGZyb20gJy4vZGlnZXN0JztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBlcXVhbFNldHMsIHNldERpZmYgfSBmcm9tICcuLi8uLi91dGlsL3NldHMnO1xuaW1wb3J0IHR5cGUgeyBTREsgfSBmcm9tICcuLi9hd3MtYXV0aC9zZGsnO1xuaW1wb3J0IHR5cGUgeyBTZGtQcm92aWRlciB9IGZyb20gJy4uL2F3cy1hdXRoL3Nkay1wcm92aWRlcic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5IH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHsgTW9kZSB9IGZyb20gJy4uL3BsdWdpbic7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNldCBvZiBwb3NzaWJsZSBtb3ZlcyBvZiBhIHJlc291cmNlIGZyb20gb25lIGxvY2F0aW9uXG4gKiB0byBhbm90aGVyLiBJbiB0aGUgaWRlYWwgY2FzZSwgdGhlcmUgaXMgb25seSBvbmUgc291cmNlIGFuZCBvbmx5IG9uZVxuICogZGVzdGluYXRpb24uXG4gKi9cbnR5cGUgUmVzb3VyY2VNb3ZlID0gW1Jlc291cmNlTG9jYXRpb25bXSwgUmVzb3VyY2VMb2NhdGlvbltdXTtcblxuZXhwb3J0IGludGVyZmFjZSBSZWZhY3RvcmluZ0NvbnRleHRPcHRpb25zIHtcbiAgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50O1xuICBsb2NhbFN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdO1xuICBkZXBsb3llZFN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdO1xuICBvdmVycmlkZXM/OiBSZXNvdXJjZU1hcHBpbmdbXTtcbiAgYXNzdW1lUm9sZUFybj86IHN0cmluZztcbiAgaWdub3JlTW9kaWZpY2F0aW9ucz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5jYXBzdWxhdGVzIHRoZSBpbmZvcm1hdGlvbiBmb3IgcmVmYWN0b3JpbmcgcmVzb3VyY2VzIGluIGEgc2luZ2xlIGVudmlyb25tZW50LlxuICovXG5leHBvcnQgY2xhc3MgUmVmYWN0b3JpbmdDb250ZXh0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFwcGluZ3M6IFJlc291cmNlTWFwcGluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgYW1iaWd1b3VzTW92ZXM6IFJlc291cmNlTW92ZVtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBhc3N1bWVSb2xlQXJuPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBSZWZhY3RvcmluZ0NvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IHByb3BzLmVudmlyb25tZW50O1xuICAgIGNvbnN0IG1vdmVzID0gcmVzb3VyY2VNb3Zlcyhwcm9wcy5kZXBsb3llZFN0YWNrcywgcHJvcHMubG9jYWxTdGFja3MsICdkaXJlY3QnLCBwcm9wcy5pZ25vcmVNb2RpZmljYXRpb25zKTtcbiAgICBjb25zdCBhZGRpdGlvbmFsT3ZlcnJpZGVzID0gc3RydWN0dXJhbE92ZXJyaWRlcyhwcm9wcy5kZXBsb3llZFN0YWNrcywgcHJvcHMubG9jYWxTdGFja3MpO1xuICAgIGNvbnN0IG92ZXJyaWRlcyA9IChwcm9wcy5vdmVycmlkZXMgPz8gW10pLmNvbmNhdChhZGRpdGlvbmFsT3ZlcnJpZGVzKTtcbiAgICBjb25zdCBbbm9uQW1iaWd1b3VzTW92ZXMsIGFtYmlndW91c01vdmVzXSA9IHBhcnRpdGlvbkJ5QW1iaWd1aXR5KG92ZXJyaWRlcywgbW92ZXMpO1xuICAgIHRoaXMuYW1iaWd1b3VzTW92ZXMgPSBhbWJpZ3VvdXNNb3ZlcztcbiAgICB0aGlzLmxvY2FsU3RhY2tzID0gcHJvcHMubG9jYWxTdGFja3M7XG4gICAgdGhpcy5hc3N1bWVSb2xlQXJuID0gcHJvcHMuYXNzdW1lUm9sZUFybjtcblxuICAgIHRoaXMuX21hcHBpbmdzID0gcmVzb3VyY2VNYXBwaW5ncyhub25BbWJpZ3VvdXNNb3Zlcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFtYmlndW91c1BhdGhzKCk6IFtzdHJpbmdbXSwgc3RyaW5nW11dW10ge1xuICAgIHJldHVybiB0aGlzLmFtYmlndW91c01vdmVzLm1hcCgoW2EsIGJdKSA9PiBbY29udmVydChhKSwgY29udmVydChiKV0pO1xuXG4gICAgZnVuY3Rpb24gY29udmVydChsb2NhdGlvbnM6IFJlc291cmNlTG9jYXRpb25bXSk6IHN0cmluZ1tdIHtcbiAgICAgIHJldHVybiBsb2NhdGlvbnMubWFwKChsKSA9PiBsLnRvUGF0aCgpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1hcHBpbmdzKCk6IFJlc291cmNlTWFwcGluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwcGluZ3M7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZXhlY3V0ZShzdGFja0RlZmluaXRpb25zOiBTdGFja0RlZmluaXRpb25bXSwgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLCBpb0hlbHBlcjogSW9IZWxwZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5tYXBwaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhc3N1bWVSb2xlQXJuID0gdGhpcy5hc3N1bWVSb2xlQXJuID8/IGF3YWl0IHRoaXMuZmluZFJvbGVUb0Fzc3VtZShzZGtQcm92aWRlcik7XG4gICAgY29uc3Qgc2RrID0gKFxuICAgICAgYXdhaXQgc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQodGhpcy5lbnZpcm9ubWVudCwgTW9kZS5Gb3JXcml0aW5nLCB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm4sXG4gICAgICB9KVxuICAgICkuc2RrO1xuXG4gICAgYXdhaXQgdGhpcy5jaGVja0Jvb3RzdHJhcFZlcnNpb24oc2RrLCBpb0hlbHBlcik7XG5cbiAgICBjb25zdCBjZm4gPSBzZGsuY2xvdWRGb3JtYXRpb24oKTtcbiAgICBjb25zdCBtYXBwaW5ncyA9IHRoaXMubWFwcGluZ3M7XG5cbiAgICBjb25zdCBpbnB1dCA9IHtcbiAgICAgIFJlc291cmNlTWFwcGluZ3M6IG1hcHBpbmdzLm1hcCgobSkgPT4gbS50b0Nsb3VkRm9ybWF0aW9uKCkpLFxuICAgICAgU3RhY2tEZWZpbml0aW9uczogc3RhY2tEZWZpbml0aW9ucyxcbiAgICB9O1xuICAgIGNvbnN0IHJlZmFjdG9yID0gYXdhaXQgY2ZuLmNyZWF0ZVN0YWNrUmVmYWN0b3IoaW5wdXQpO1xuXG4gICAgYXdhaXQgY2ZuLndhaXRVbnRpbFN0YWNrUmVmYWN0b3JDcmVhdGVDb21wbGV0ZSh7XG4gICAgICBTdGFja1JlZmFjdG9ySWQ6IHJlZmFjdG9yLlN0YWNrUmVmYWN0b3JJZCxcbiAgICB9KTtcblxuICAgIGF3YWl0IGNmbi5leGVjdXRlU3RhY2tSZWZhY3Rvcih7XG4gICAgICBTdGFja1JlZmFjdG9ySWQ6IHJlZmFjdG9yLlN0YWNrUmVmYWN0b3JJZCxcbiAgICB9KTtcblxuICAgIGF3YWl0IGNmbi53YWl0VW50aWxTdGFja1JlZmFjdG9yRXhlY3V0ZUNvbXBsZXRlKHtcbiAgICAgIFN0YWNrUmVmYWN0b3JJZDogcmVmYWN0b3IuU3RhY2tSZWZhY3RvcklkLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0Jvb3RzdHJhcFZlcnNpb24oc2RrOiBTREssIGlvSGVscGVyOiBJb0hlbHBlcikge1xuICAgIGNvbnN0IGVudmlyb25tZW50UmVzb3VyY2VzUmVnaXN0cnkgPSBuZXcgRW52aXJvbm1lbnRSZXNvdXJjZXNSZWdpc3RyeSgpO1xuICAgIGNvbnN0IGVudlJlc291cmNlcyA9IGVudmlyb25tZW50UmVzb3VyY2VzUmVnaXN0cnkuZm9yKHRoaXMuZW52aXJvbm1lbnQsIHNkaywgaW9IZWxwZXIpO1xuICAgIGxldCBib290c3RyYXBWZXJzaW9uOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byBnZXQgdGhlIGJvb3RzdHJhcCB2ZXJzaW9uXG4gICAgICBib290c3RyYXBWZXJzaW9uID0gKGF3YWl0IGVudlJlc291cmNlcy5sb29rdXBUb29sa2l0KCkpLnZlcnNpb247XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gQnV0IGlmIHdlIGNhbid0LCBrZWVwIGdvaW5nLiBNYXliZSB3ZSBjYW4gc3RpbGwgc3VjY2VlZC5cbiAgICB9XG4gICAgaWYgKGJvb3RzdHJhcFZlcnNpb24gIT0gbnVsbCAmJiBib290c3RyYXBWZXJzaW9uIDwgMjgpIHtcbiAgICAgIGNvbnN0IGVudmlyb25tZW50ID0gYGF3czovLyR7dGhpcy5lbnZpcm9ubWVudC5hY2NvdW50fS8ke3RoaXMuZW52aXJvbm1lbnQucmVnaW9ufWA7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAnQm9vdHN0cmFwVmVyc2lvblRvb0xvdycsXG4gICAgICAgIGBUaGUgQ0RLIHRvb2xraXQgc3RhY2sgaW4gZW52aXJvbm1lbnQgJHtlbnZpcm9ubWVudH0gZG9lc24ndCBzdXBwb3J0IHJlZmFjdG9yaW5nLiBQbGVhc2UgcnVuICdjZGsgYm9vdHN0cmFwICR7ZW52aXJvbm1lbnR9JyB0byB1cGRhdGUgaXQuYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5kUm9sZVRvQXNzdW1lKHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcik6IFByb21pc2UgPCBzdHJpbmcgfCB1bmRlZmluZWQgPiB7XG4gICAgLy8gVG8gZXhlY3V0ZSBhIHJlZmFjdG9yLCB3ZSBuZWVkIHRoZSBkZXBsb3ltZW50IHJvbGUgQVJOIGZvciB0aGUgZ2l2ZW5cbiAgICAvLyBlbnZpcm9ubWVudC4gTW9zdCB0b29sa2l0IGNvbW1hbmRzIGdldCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggcm9sZXMgdG9cbiAgICAvLyBhc3N1bWUgZnJvbSB0aGUgY2xvdWQgYXNzZW1ibHkgKGFuZCB1bHRpbWF0ZWx5IGZyb20gdGhlIENESyBmcmFtZXdvcmspLiBSZWZhY3RvclxuICAgIC8vIGlzIGRpZmZlcmVudCBiZWNhdXNlIGl0IGlzIG5vdCB0aGUgYXBwbGljYXRpb24vZnJhbWV3b3JrIHRoYXQgZGljdGF0ZXMgd2hhdCB0aGVcbiAgICAvLyB0b29sa2l0IHNob3VsZCBkbywgYnV0IGl0IGlzIHRoZSB0b29sa2l0IGl0c2VsZiB0aGF0IGhhcyB0byBmaWd1cmUgaXQgb3V0LlxuICAgIC8vXG4gICAgLy8gTmV2ZXJ0aGVsZXNzLCB0aGUgY2xvdWQgYXNzZW1ibHkgaXMgdGhlIG1vc3QgcmVsaWFibGUgc291cmNlIGZvciB0aGlzIGtpbmQgb2ZcbiAgICAvLyBpbmZvcm1hdGlvbi4gRm9yIHRoZSBkZXBsb3ltZW50IHJvbGUgQVJOLCBpbiBwYXJ0aWN1bGFyLCB3aGF0IHdlIGRvIGhlcmVcbiAgICAvLyBpcyBsb29rIGF0IGFsbCB0aGUgc3RhY2tzIGZvciBhIGdpdmVuIGVudmlyb25tZW50IGluIHRoZSBjbG91ZCBhc3NlbWJseSBhbmRcbiAgICAvLyBleHRyYWN0IHRoZSBkZXBsb3ltZW50IHJvbGUgQVJOIHRoYXQgaXMgY29tbW9uIHRvIGFsbCBvZiB0aGVtLiBJZiBubyByb2xlIGlzXG4gICAgLy8gZm91bmQsIHdlIGdvIGFoZWFkIHdpdGhvdXQgYXNzdW1pbmcgYSByb2xlLiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHJvbGUsXG4gICAgLy8gd2UgY29uc2lkZXIgdGhhdCBhbiBpbnZhcmlhbnQgd2FzIHZpb2xhdGVkLCBhbmQgdGhyb3cgYW4gZXJyb3IuXG5cbiAgICBjb25zdCBlbnYgPSB0aGlzLmVudmlyb25tZW50O1xuICAgIGNvbnN0IHJvbGVBcm5zID0gbmV3IFNldChcbiAgICAgIHRoaXMubG9jYWxTdGFja3NcbiAgICAgICAgLmZpbHRlcigocykgPT4gcy5lbnZpcm9ubWVudC5hY2NvdW50ID09PSBlbnYuYWNjb3VudCAmJiBzLmVudmlyb25tZW50LnJlZ2lvbiA9PT0gZW52LnJlZ2lvbilcbiAgICAgICAgLm1hcCgocykgPT4gcy5hc3N1bWVSb2xlQXJuKSxcbiAgICApO1xuXG4gICAgaWYgKHJvbGVBcm5zLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHJvbGVBcm5zLnNpemUgIT09IDEpIHtcbiAgICAgIC8vIFVubGlrZWx5IHRvIGhhcHBlbi4gQnV0IGlmIGl0IGRvZXMsIHdlIGNhbid0IHByb2NlZWRcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgICdNdWx0aXBsZURlcGxveW1lbnRSb2xlcycsXG4gICAgICAgIGBNdWx0aXBsZSBzdGFja3MgaW4gZW52aXJvbm1lbnQgYXdzOi8vJHtlbnYuYWNjb3VudH0vJHtlbnYucmVnaW9ufSBoYXZlIGRpZmZlcmVudCBkZXBsb3ltZW50IHJvbGUgQVJOcy4gQ2Fubm90IHByb2NlZWQuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJuID0gQXJyYXkuZnJvbShyb2xlQXJucylbMF07XG4gICAgaWYgKGFybiAhPSBudWxsKSB7XG4gICAgICBjb25zdCByZXNvbHZlZEVudiA9IGF3YWl0IHNka1Byb3ZpZGVyLnJlc29sdmVFbnZpcm9ubWVudChlbnYpO1xuICAgICAgY29uc3QgcmVnaW9uID0gcmVzb2x2ZWRFbnYucmVnaW9uO1xuICAgICAgcmV0dXJuIChhd2FpdCByZXBsYWNlQXdzUGxhY2Vob2xkZXJzKHsgcmVnaW9uLCBhc3N1bWVSb2xlQXJuOiBhcm4gfSwgbmV3IERlZmF1bHRBd3NDbGllbnQoKSkpLmFzc3VtZVJvbGVBcm47XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgY291bGRuJ3QgZmluZCBhIHJvbGUgQVJOLCB3ZSBjYW4gcHJvY2VlZCB3aXRob3V0IGFzc3VtaW5nIGEgcm9sZS5cbiAgICAvLyBNYXliZSB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyBoYXZlIHBlcm1pc3Npb25zIHRvIGRvIHdoYXQgd2UgbmVlZC5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIGF1dG9tYXRpYyBsaXN0IG9mIG92ZXJyaWRlcyB0aGF0IGNhbiBiZSBkZWR1Y2VkIGZyb20gdGhlIHN0cnVjdHVyZSBvZiB0aGUgb3Bwb3NpdGUgcmVzb3VyY2UgZ3JhcGguXG4gKiBTdXBwb3NlIHdlIGhhdmUgdGhlIGZvbGxvd2luZyByZXNvdXJjZSBncmFwaDpcbiAqXG4gKiAgICAgQSAtLT4gQlxuICogICAgIEMgLS0+IERcbiAqXG4gKiBzdWNoIHRoYXQgQiBhbmQgRCBhcmUgaWRlbnRpY2FsLCBidXQgQSBpcyBkaWZmZXJlbnQgZnJvbSBDLiBUaGVuIGRpZ2VzdChCKSA9IGRpZ2VzdChEKS4gSWYgYm90aCByZXNvdXJjZXMgYXJlIG1vdmVkLFxuICogd2UgaGF2ZSBhbiBhbWJpZ3VpdHkuIEJ1dCBpZiB3ZSByZXZlcnNlIHRoZSBhcnJvd3M6XG4gKlxuICogICAgIEEgPC0tIEJcbiAqICAgICBDIDwtLSBEXG4gKlxuICogdGhlbiBkaWdlc3QoQikg4omgIGRpZ2VzdChEKSwgYmVjYXVzZSB0aGV5IG5vdyBoYXZlIGRpZmZlcmVudCBkZXBlbmRlbmNpZXMuIElmIHdlIGNvbXB1dGUgdGhlIG1hcHBpbmdzIGZyb20gdGhpc1xuICogb3Bwb3NpdGUgZ3JhcGgsIHdlIGNhbiB1c2UgdGhlbSBhcyBhIHNldCBvZiBvdmVycmlkZXMgdG8gZGlzYW1iaWd1YXRlIHRoZSBvcmlnaW5hbCBtb3Zlcy5cbiAqXG4gKi9cbmZ1bmN0aW9uIHN0cnVjdHVyYWxPdmVycmlkZXMoZGVwbG95ZWRTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSwgbG9jYWxTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSk6IFJlc291cmNlTWFwcGluZ1tdIHtcbiAgY29uc3QgbW92ZXMgPSByZXNvdXJjZU1vdmVzKGRlcGxveWVkU3RhY2tzLCBsb2NhbFN0YWNrcywgJ29wcG9zaXRlJywgdHJ1ZSk7XG4gIGNvbnN0IFtub25BbWJpZ3VvdXNNb3Zlc10gPSBwYXJ0aXRpb25CeUFtYmlndWl0eShbXSwgbW92ZXMpO1xuICByZXR1cm4gcmVzb3VyY2VNYXBwaW5ncyhub25BbWJpZ3VvdXNNb3Zlcyk7XG59XG5cbmZ1bmN0aW9uIHJlc291cmNlTW92ZXMoXG4gIGJlZm9yZTogQ2xvdWRGb3JtYXRpb25TdGFja1tdLFxuICBhZnRlcjogQ2xvdWRGb3JtYXRpb25TdGFja1tdLFxuICBkaXJlY3Rpb246IEdyYXBoRGlyZWN0aW9uID0gJ2RpcmVjdCcsXG4gIGlnbm9yZU1vZGlmaWNhdGlvbnM6IGJvb2xlYW4gPSBmYWxzZSk6IFJlc291cmNlTW92ZVtdIHtcbiAgY29uc3QgZGlnZXN0c0JlZm9yZSA9IHJlc291cmNlRGlnZXN0cyhiZWZvcmUsIGRpcmVjdGlvbik7XG4gIGNvbnN0IGRpZ2VzdHNBZnRlciA9IHJlc291cmNlRGlnZXN0cyhhZnRlciwgZGlyZWN0aW9uKTtcblxuICBpZiAoIShpZ25vcmVNb2RpZmljYXRpb25zIHx8IGlzb21vcnBoaWMoZGlnZXN0c0JlZm9yZSwgZGlnZXN0c0FmdGVyKSkpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gWydBIHJlZmFjdG9yIG9wZXJhdGlvbiBjYW5ub3QgYWRkLCByZW1vdmUgb3IgdXBkYXRlIHJlc291cmNlcy4gT25seSByZXNvdXJjZSBtb3ZlcyBhbmQgcmVuYW1lcyBhcmUgYWxsb3dlZC4nXTtcblxuICAgIGNvbnN0IGxvY2F0aW9uc0ZvckRpZ2VzdHMgPSAoYTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPiwgYjogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPikgPT4ge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20oc2V0RGlmZihuZXcgU2V0KE9iamVjdC5rZXlzKGEpKSwgbmV3IFNldChPYmplY3Qua2V5cyhiKSkpKS5mbGF0TWFwKGsgPT4gYVtrXSEpO1xuICAgIH07XG5cbiAgICBjb25zdCBmb3JtYXRMaXN0ID0gKGxvY3M6IFJlc291cmNlTG9jYXRpb25bXSwgaWNvbjogc3RyaW5nKSA9PlxuICAgICAgbG9jcy5tYXAoeCA9PiBgICBbJHtpY29ufV0gJHt4LnRvUGF0aCgpfWApLnNvcnQoKS5qb2luKCdcXG4nKTtcblxuICAgIGNvbnN0IHN0YWNrTmFtZXMgPSAoc3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW10pID0+XG4gICAgICBzdGFja3MubGVuZ3RoID09PSAwXG4gICAgICAgID8gJ05PTkUnXG4gICAgICAgIDogc3RhY2tzXG4gICAgICAgICAgLm1hcCgocykgPT4gcy5zdGFja05hbWUpXG4gICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgIC5qb2luKCcsICcpO1xuXG4gICAgY29uc3Qgb25seURlcGxveWVkTG9jcyA9IGxvY2F0aW9uc0ZvckRpZ2VzdHMoZGlnZXN0c0JlZm9yZSwgZGlnZXN0c0FmdGVyKTtcbiAgICBjb25zdCBvbmx5TG9jYWxMb2NzID0gbG9jYXRpb25zRm9yRGlnZXN0cyhkaWdlc3RzQWZ0ZXIsIGRpZ2VzdHNCZWZvcmUpO1xuXG4gICAgY29uc3Qgb25seURlcGxveWVkUGF0aHMgPSBuZXcgU2V0KG9ubHlEZXBsb3llZExvY3MubWFwKGwgPT4gbC50b1BhdGgoKSkpO1xuICAgIGNvbnN0IG9ubHlMb2NhbFBhdGhzID0gbmV3IFNldChvbmx5TG9jYWxMb2NzLm1hcChsID0+IGwudG9QYXRoKCkpKTtcbiAgICBjb25zdCBkaWZmZXJlbnRQYXRocyA9IG5ldyBTZXQoQXJyYXkuZnJvbShvbmx5RGVwbG95ZWRQYXRocykuZmlsdGVyKHAgPT4gb25seUxvY2FsUGF0aHMuaGFzKHApKSk7XG5cbiAgICBjb25zdCBvbmx5RGVwbG95ZWQgPSBmb3JtYXRMaXN0KG9ubHlEZXBsb3llZExvY3MuZmlsdGVyKGwgPT4gIWRpZmZlcmVudFBhdGhzLmhhcyhsLnRvUGF0aCgpKSksICctJyk7XG4gICAgY29uc3Qgb25seUxvY2FsID0gZm9ybWF0TGlzdChvbmx5TG9jYWxMb2NzLmZpbHRlcihsID0+ICFkaWZmZXJlbnRQYXRocy5oYXMobC50b1BhdGgoKSkpLCAnKycpO1xuICAgIGNvbnN0IGRpZmZlcmVudCA9IGZvcm1hdExpc3QoWy4uLm9ubHlEZXBsb3llZExvY3MsIC4uLm9ubHlMb2NhbExvY3NdLmZpbHRlcihsID0+IGRpZmZlcmVudFBhdGhzLmhhcyhsLnRvUGF0aCgpKSksICd+Jyk7XG5cbiAgICBpZiAob25seURlcGxveWVkLmxlbmd0aCA+IDApIHtcbiAgICAgIG1lc3NhZ2UucHVzaChgVGhlIGZvbGxvd2luZyByZXNvdXJjZXMgYXJlIHByZXNlbnQgb25seSBpbiB0aGUgQVdTIGVudmlyb25tZW50OlxcbiR7b25seURlcGxveWVkfWApO1xuICAgIH1cblxuICAgIGlmIChvbmx5TG9jYWwubGVuZ3RoID4gMCkge1xuICAgICAgbWVzc2FnZS5wdXNoKGBcXG5UaGUgZm9sbG93aW5nIHJlc291cmNlcyBhcmUgcHJlc2VudCBvbmx5IGluIHlvdXIgQ0RLIGFwcGxpY2F0aW9uOlxcbiR7b25seUxvY2FsfWApO1xuICAgIH1cblxuICAgIGlmIChkaWZmZXJlbnQubGVuZ3RoID4gMCkge1xuICAgICAgbWVzc2FnZS5wdXNoKGBcXG5UaGUgZm9sbG93aW5nIHJlc291cmNlcyBhcmUgZGlmZmVyZW50IGluIHlvdXIgQ0RLIGFwcGxpY2F0aW9uIGFuZCB0aGUgQVdTIGVudmlyb25tZW50OlxcbiR7ZGlmZmVyZW50fWApO1xuICAgIH1cblxuICAgIG1lc3NhZ2UucHVzaCgnJyk7XG4gICAgbWVzc2FnZS5wdXNoKCdUaGUgZm9sbG93aW5nIHN0YWNrcyB3ZXJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb246Jyk7XG4gICAgbWVzc2FnZS5wdXNoKCBgICAtIERlcGxveWVkOiAke3N0YWNrTmFtZXMoYmVmb3JlKX1gKTtcbiAgICBtZXNzYWdlLnB1c2goIGAgIC0gTG9jYWw6ICR7c3RhY2tOYW1lcyhhZnRlcil9YCk7XG4gICAgbWVzc2FnZS5wdXNoKCcnKTtcbiAgICBtZXNzYWdlLnB1c2goJ0hpbnQ6IGJ5IGRlZmF1bHQsIG9ubHkgZGVwbG95ZWQgc3RhY2tzIHRoYXQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIGEgbG9jYWwgc3RhY2sgYXJlIGluY2x1ZGVkLicpO1xuICAgIG1lc3NhZ2UucHVzaCgnSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGRlcGxveWVkIHN0YWNrcyBmb3IgY29tcGFyaXNvbiwgcmUtcnVuIHRoZSBjb21tYW5kIHdpdGggdGhlIG9wdGlvbiBcXCctLWFkZGl0aW9uYWwtc3RhY2stbmFtZT08U1RBQ0s+XFwnIGZvciBlYWNoIHN0YWNrLicpO1xuXG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignUmVmYWN0b3JSZXNvdXJjZU1pc21hdGNoJywgbWVzc2FnZS5qb2luKCdcXG4nKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZW1vdmVVbm1vdmVkUmVzb3VyY2VzKHppcChkaWdlc3RzQmVmb3JlLCBkaWdlc3RzQWZ0ZXIpKSk7XG59XG5cbi8qKlxuICogV2hldGhlciB0d28gc2V0cyBvZiByZXNvdXJjZXMgaGF2ZSB0aGUgc2FtZSBlbGVtZW50cyAodW5pcXVlbHkgaWRlbnRpZmllZCBieSB0aGUgZGlnZXN0KSwgYW5kXG4gKiBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHNhbWUgbnVtYmVyIG9mIGxvY2F0aW9ucy4gVGhlIGxvY2F0aW9ucyB0aGVtc2VsdmVzIG1heSBiZSBkaWZmZXJlbnQuXG4gKi9cbmZ1bmN0aW9uIGlzb21vcnBoaWMoYTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPiwgYjogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPik6IGJvb2xlYW4ge1xuICBjb25zdCBzYW1lS2V5cyA9IGVxdWFsU2V0cyhuZXcgU2V0KE9iamVjdC5rZXlzKGEpKSwgbmV3IFNldChPYmplY3Qua2V5cyhiKSkpO1xuICByZXR1cm4gc2FtZUtleXMgJiYgT2JqZWN0LmVudHJpZXMoYSkuZXZlcnkoKFtkaWdlc3QsIGxvY2F0aW9uc10pID0+IGxvY2F0aW9ucy5sZW5ndGggPT09IGJbZGlnZXN0XS5sZW5ndGgpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVVbm1vdmVkUmVzb3VyY2VzKG1vdmVzOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmU+KTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VNb3ZlPiB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VNb3ZlPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtoYXNoLCBbYmVmb3JlLCBhZnRlcl1dIG9mIE9iamVjdC5lbnRyaWVzKG1vdmVzKSkge1xuICAgIGNvbnN0IGNvbW1vbiA9IGJlZm9yZS5maWx0ZXIoKGIpID0+IGFmdGVyLnNvbWUoKGEpID0+IGEuZXF1YWxUbyhiKSkpO1xuICAgIHJlc3VsdFtoYXNoXSA9IFtcbiAgICAgIGJlZm9yZS5maWx0ZXIoKGIpID0+ICFjb21tb24uc29tZSgoYykgPT4gYi5lcXVhbFRvKGMpKSksXG4gICAgICBhZnRlci5maWx0ZXIoKGEpID0+ICFjb21tb24uc29tZSgoYykgPT4gYS5lcXVhbFRvKGMpKSksXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRm9yIGVhY2ggaGFzaCwgaWRlbnRpZnlpbmcgYSBzaW5nbGUgcmVzb3VyY2UsIHppcCB0aGUgdHdvIGxpc3RzIG9mIGxvY2F0aW9ucyxcbiAqIHByb2R1Y2luZyBhIHJlc291cmNlIG1vdmVcbiAqL1xuZnVuY3Rpb24gemlwKFxuICBtMTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPixcbiAgbTI6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTG9jYXRpb25bXT4sXG4pOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmU+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmU+ID0ge307XG5cbiAgZm9yIChjb25zdCBbaGFzaCwgbG9jYXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhtMSkpIHtcbiAgICBpZiAoaGFzaCBpbiBtMikge1xuICAgICAgcmVzdWx0W2hhc2hdID0gW2xvY2F0aW9ucywgbTJbaGFzaF1dO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbaGFzaF0gPSBbbG9jYXRpb25zLCBbXV07XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBbaGFzaCwgbG9jYXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhtMikpIHtcbiAgICBpZiAoIShoYXNoIGluIG0xKSkge1xuICAgICAgcmVzdWx0W2hhc2hdID0gW1tdLCBsb2NhdGlvbnNdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgYSBsaXN0IG9mIHBhaXJzIFtkaWdlc3QsIGxvY2F0aW9uXSBmb3IgZWFjaCByZXNvdXJjZSBpbiB0aGUgc3RhY2suXG4gKi9cbmZ1bmN0aW9uIHJlc291cmNlRGlnZXN0cyhzdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSwgZGlyZWN0aW9uOiBHcmFwaERpcmVjdGlvbik6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTG9jYXRpb25bXT4ge1xuICAvLyBpbmRleCBzdGFja3MgYnkgbmFtZVxuICBjb25zdCBzdGFja3NCeU5hbWUgPSBuZXcgTWFwPHN0cmluZywgQ2xvdWRGb3JtYXRpb25TdGFjaz4oKTtcbiAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja3MpIHtcbiAgICBzdGFja3NCeU5hbWUuc2V0KHN0YWNrLnN0YWNrTmFtZSwgc3RhY2spO1xuICB9XG5cbiAgY29uc3QgZGlnZXN0cyA9IGNvbXB1dGVSZXNvdXJjZURpZ2VzdHMoc3RhY2tzLCBkaXJlY3Rpb24pO1xuXG4gIHJldHVybiBncm91cEJ5S2V5KFxuICAgIE9iamVjdC5lbnRyaWVzKGRpZ2VzdHMpLm1hcCgoW2xvYywgZGlnZXN0XSkgPT4ge1xuICAgICAgY29uc3QgW3N0YWNrTmFtZSwgbG9naWNhbElkXSA9IGxvYy5zcGxpdCgnLicpO1xuICAgICAgY29uc3QgbG9jYXRpb246IFJlc291cmNlTG9jYXRpb24gPSBuZXcgUmVzb3VyY2VMb2NhdGlvbihzdGFja3NCeU5hbWUuZ2V0KHN0YWNrTmFtZSkhLCBsb2dpY2FsSWQpO1xuICAgICAgcmV0dXJuIFtkaWdlc3QsIGxvY2F0aW9uXTtcbiAgICB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBncm91cEJ5S2V5PEE+KGVudHJpZXM6IFtzdHJpbmcsIEFdW10pOiBSZWNvcmQ8c3RyaW5nLCBBW10+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEFbXT4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgIGlmIChrZXkgaW4gcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBbWJpZ3VvdXNNb3ZlKG1vdmU6IFJlc291cmNlTW92ZSk6IGJvb2xlYW4ge1xuICBjb25zdCBbcHJlLCBwb3N0XSA9IG1vdmU7XG5cbiAgLy8gQSBtb3ZlIGlzIGNvbnNpZGVyZWQgYW1iaWd1b3VzIGlmIHR3byBjb25kaXRpb25zIGFyZSBtZXQ6XG4gIC8vICAxLiBCb3RoIHNpZGVzIGhhdmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQgKG90aGVyd2lzZSwgaXQncyBqdXN0IGFkZGl0aW9uIG9yIGRlbGV0aW9uKVxuICAvLyAgMi4gQXQgbGVhc3Qgb25lIHNpZGUgaGFzIG1vcmUgdGhhbiBvbmUgZWxlbWVudFxuICByZXR1cm4gcHJlLmxlbmd0aCA+IDAgJiYgcG9zdC5sZW5ndGggPiAwICYmIChwcmUubGVuZ3RoID4gMSB8fCBwb3N0Lmxlbmd0aCA+IDEpO1xufVxuXG5mdW5jdGlvbiByZXNvdXJjZU1hcHBpbmdzKG1vdmVtZW50czogUmVzb3VyY2VNb3ZlW10pOiBSZXNvdXJjZU1hcHBpbmdbXSB7XG4gIHJldHVybiBtb3ZlbWVudHNcbiAgICAuZmlsdGVyKChbcHJlLCBwb3N0XSkgPT4gcHJlLmxlbmd0aCA9PT0gMSAmJiBwb3N0Lmxlbmd0aCA9PT0gMSAmJiAhcHJlWzBdLmVxdWFsVG8ocG9zdFswXSkpXG4gICAgLm1hcCgoW3ByZSwgcG9zdF0pID0+IG5ldyBSZXNvdXJjZU1hcHBpbmcocHJlWzBdLCBwb3N0WzBdKSk7XG59XG5cbi8qKlxuICogUGFydGl0aW9ucyBhIGxpc3Qgb2YgbW92ZXMgaW50byBub24tYW1iaWd1b3VzIGFuZCBhbWJpZ3VvdXMgbW92ZXMuXG4gKiBAcGFyYW0gb3ZlcnJpZGVzIC0gVGhlIGxpc3Qgb2Ygb3ZlcnJpZGVzIHRvIGRpc2FtYmlndWF0ZSBtb3Zlc1xuICogQHBhcmFtIG1vdmVzIC0gYSBwYWlyIG9mIGxpc3RzIG9mIG1vdmVzLiBGaXJzdDogbm9uLWFtYmlndW91cywgc2Vjb25kOiBhbWJpZ3VvdXNcbiAqL1xuZnVuY3Rpb24gcGFydGl0aW9uQnlBbWJpZ3VpdHkob3ZlcnJpZGVzOiBSZXNvdXJjZU1hcHBpbmdbXSwgbW92ZXM6IFJlc291cmNlTW92ZVtdKTogW1Jlc291cmNlTW92ZVtdLCBSZXNvdXJjZU1vdmVbXV0ge1xuICBjb25zdCBhbWJpZ3VvdXM6IFJlc291cmNlTW92ZVtdID0gW107XG4gIGNvbnN0IG5vbkFtYmlndW91czogUmVzb3VyY2VNb3ZlW10gPSBbXTtcblxuICBmb3IgKGxldCBtb3ZlIG9mIG1vdmVzKSB7XG4gICAgaWYgKCFpc0FtYmlndW91c01vdmUobW92ZSkpIHtcbiAgICAgIG5vbkFtYmlndW91cy5wdXNoKG1vdmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IG92ZXJyaWRlIG9mIG92ZXJyaWRlcykge1xuICAgICAgICBjb25zdCByZXNvbHZlZE1vdmUgPSByZXNvbHZlKG92ZXJyaWRlLCBtb3ZlKTtcbiAgICAgICAgaWYgKHJlc29sdmVkTW92ZSAhPSBudWxsKSB7XG4gICAgICAgICAgbm9uQW1iaWd1b3VzLnB1c2gocmVzb2x2ZWRNb3ZlKTtcbiAgICAgICAgICBtb3ZlID0gcmVtb3ZlKG92ZXJyaWRlLCBtb3ZlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gT25lIGxhc3QgY2hhbmNlIHRvIGJlIG5vbi1hbWJpZ3VvdXNcbiAgICAgIGlmICghaXNBbWJpZ3VvdXNNb3ZlKG1vdmUpKSB7XG4gICAgICAgIG5vbkFtYmlndW91cy5wdXNoKG1vdmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYW1iaWd1b3VzLnB1c2gobW92ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZShvdmVycmlkZTogUmVzb3VyY2VNYXBwaW5nLCBtb3ZlOiBSZXNvdXJjZU1vdmUpOiBSZXNvdXJjZU1vdmUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IFtwcmUsIHBvc3RdID0gbW92ZTtcbiAgICBjb25zdCBzb3VyY2UgPSBwcmUuZmluZCgobG9jKSA9PiBsb2MuZXF1YWxUbyhvdmVycmlkZS5zb3VyY2UpKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHBvc3QuZmluZCgobG9jKSA9PiBsb2MuZXF1YWxUbyhvdmVycmlkZS5kZXN0aW5hdGlvbikpO1xuICAgIHJldHVybiAoc291cmNlICYmIGRlc3RpbmF0aW9uKSA/IFtbc291cmNlXSwgW2Rlc3RpbmF0aW9uXV0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmUob3ZlcnJpZGU6IFJlc291cmNlTWFwcGluZywgbW92ZTogUmVzb3VyY2VNb3ZlKTogUmVzb3VyY2VNb3ZlIHtcbiAgICBjb25zdCBbcHJlLCBwb3N0XSA9IG1vdmU7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByZS5maWx0ZXIobG9jID0+ICFsb2MuZXF1YWxUbyhvdmVycmlkZS5zb3VyY2UpKSxcbiAgICAgIHBvc3QuZmlsdGVyKGxvYyA9PiAhbG9jLmVxdWFsVG8ob3ZlcnJpZGUuZGVzdGluYXRpb24pKSxcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIFtub25BbWJpZ3VvdXMsIGFtYmlndW91c107XG59XG5cbi8qKlxuICogUmVwbGFjZSB0aGUge0FDQ09VTlR9IGFuZCB7UkVHSU9OfSBwbGFjZWhvbGRlcnMgaW4gYWxsIHN0cmluZ3MgZm91bmQgaW4gYSBjb21wbGV4IG9iamVjdC5cbiAqXG4gKiBEdXBsaWNhdGVkIGJldHdlZW4gY2RrLWFzc2V0cyBhbmQgYXdzLWNkayBDTEkgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgZ29vZCBzaW5nbGUgcGxhY2UgdG8gcHV0IGl0XG4gKiAodGhleSdyZSBub21pbmFsbHkgaW5kZXBlbmRlbnQgdG9vbHMpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUF3c1BsYWNlaG9sZGVyczxBIGV4dGVuZHMgeyByZWdpb24/OiBzdHJpbmcgfT4oXG4gIG9iamVjdDogQSxcbiAgYXdzOiBJQXdzLFxuKTogUHJvbWlzZTxBPiB7XG4gIGxldCBwYXJ0aXRpb24gPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcCA9IGF3YWl0IGF3cy5kaXNjb3ZlclBhcnRpdGlvbigpO1xuICAgIHBhcnRpdGlvbiA9ICgpID0+IFByb21pc2UucmVzb2x2ZShwKTtcbiAgICByZXR1cm4gcDtcbiAgfTtcblxuICBsZXQgYWNjb3VudCA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gYXdhaXQgYXdzLmRpc2NvdmVyQ3VycmVudEFjY291bnQoKTtcbiAgICBhY2NvdW50ID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGEpO1xuICAgIHJldHVybiBhO1xuICB9O1xuXG4gIHJldHVybiBFbnZpcm9ubWVudFBsYWNlaG9sZGVycy5yZXBsYWNlQXN5bmMob2JqZWN0LCB7XG4gICAgYXN5bmMgcmVnaW9uKCkge1xuICAgICAgcmV0dXJuIG9iamVjdC5yZWdpb24gPz8gYXdzLmRpc2NvdmVyRGVmYXVsdFJlZ2lvbigpO1xuICAgIH0sXG4gICAgYXN5bmMgYWNjb3VudElkKCkge1xuICAgICAgcmV0dXJuIChhd2FpdCBhY2NvdW50KCkpLmFjY291bnRJZDtcbiAgICB9LFxuICAgIGFzeW5jIHBhcnRpdGlvbigpIHtcbiAgICAgIHJldHVybiBwYXJ0aXRpb24oKTtcbiAgICB9LFxuICB9KTtcbn1cblxuIl19
|