@rentman/rm-core 1.2.7 → 1.2.8
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/changelog.md +3 -0
- package/dist/dist/classes/ApiFormatter.d.ts +1 -1
- package/dist/dist/classes/ColumnSet.d.ts +4 -0
- package/dist/dist/models/ItemEntry.d.ts +8 -0
- package/dist/dist/models/ItemResource.d.ts +6 -0
- package/dist/rm-core.js +30 -2
- package/dist/rm-core.min.js +1 -1
- package/package.json +1 -1
package/dist/rm-core.js
CHANGED
|
@@ -2525,6 +2525,13 @@ var ColumnSet = /** @class */ (function () {
|
|
|
2525
2525
|
this.notItem = [];
|
|
2526
2526
|
this.requestColumnsTrue = this.request === true;
|
|
2527
2527
|
}
|
|
2528
|
+
ColumnSet.prototype.toJSON = function () {
|
|
2529
|
+
var parseColumns = function (columns) { return columns.map(function (c) { return c.id; }); };
|
|
2530
|
+
return {
|
|
2531
|
+
main: parseColumns(this.main),
|
|
2532
|
+
derived: parseColumns(this.derived)
|
|
2533
|
+
};
|
|
2534
|
+
};
|
|
2528
2535
|
ColumnSet.prototype.resolve = function (responseColumns, enableCaching, includeIdColumn) {
|
|
2529
2536
|
if (enableCaching === void 0) { enableCaching = true; }
|
|
2530
2537
|
if (includeIdColumn === void 0) { includeIdColumn = true; }
|
|
@@ -6584,6 +6591,16 @@ var ItemEntry = /** @class */ (function () {
|
|
|
6584
6591
|
}
|
|
6585
6592
|
return this;
|
|
6586
6593
|
};
|
|
6594
|
+
ItemEntry.prototype.toJSON = function () {
|
|
6595
|
+
return {
|
|
6596
|
+
id: this.id,
|
|
6597
|
+
parent: this.parent,
|
|
6598
|
+
initial: this.initial,
|
|
6599
|
+
modified: this.modified,
|
|
6600
|
+
derived: this.derived,
|
|
6601
|
+
columns: this.columns
|
|
6602
|
+
};
|
|
6603
|
+
};
|
|
6587
6604
|
return ItemEntry;
|
|
6588
6605
|
}());
|
|
6589
6606
|
|
|
@@ -6614,6 +6631,17 @@ var ItemResource = /** @class */ (function () {
|
|
|
6614
6631
|
ItemResource.prototype.deactivate = function () {
|
|
6615
6632
|
this.options.onDeactivate(this.entry);
|
|
6616
6633
|
};
|
|
6634
|
+
ItemResource.prototype.toJSON = function () {
|
|
6635
|
+
var columnIds = [];
|
|
6636
|
+
for (var columnId in this.columns)
|
|
6637
|
+
columnIds.push(columnId);
|
|
6638
|
+
return {
|
|
6639
|
+
columns: columnIds,
|
|
6640
|
+
fields: this.fields,
|
|
6641
|
+
derived: this.derived,
|
|
6642
|
+
entry: this.entry
|
|
6643
|
+
};
|
|
6644
|
+
};
|
|
6617
6645
|
return ItemResource;
|
|
6618
6646
|
}());
|
|
6619
6647
|
|
|
@@ -7098,7 +7126,7 @@ var TemplateFactory_TemplateFactory = /** @class */ (function () {
|
|
|
7098
7126
|
var main_RmCore = /** @class */ (function () {
|
|
7099
7127
|
function RmCore(externalApiRequestService, localCacheManager, authInterface, errorHandlerInterface, promiseInterface) {
|
|
7100
7128
|
this.noop = noop;
|
|
7101
|
-
this.version = '1.2.
|
|
7129
|
+
this.version = '1.2.8';
|
|
7102
7130
|
this.apiFormatter = new ApiFormatter_ApiFormatter();
|
|
7103
7131
|
this.keyService = new KeyService_KeyService();
|
|
7104
7132
|
this.queryService = new QueryService();
|
|
@@ -7259,4 +7287,4 @@ function identity(value) {
|
|
|
7259
7287
|
/***/ })
|
|
7260
7288
|
/******/ ]);
|
|
7261
7289
|
});
|
|
7262
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1BZG1pbmlzdHJhdG9yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1SZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVzb3VyY2VTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0tleVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL3R5cGVzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2FsQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9ja1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5TWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVBhcnNlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVkaXRSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0l0ZW1FbnRyeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0l0ZW1SZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL1ZpZXdSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0VkaXRSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL1RlbXBsYXRlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5JbmZvRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DcmVhdGVSZXF1ZXN0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0xvY2FsQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5TWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1RlbXBsYXRlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tYWluLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7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QUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLHNCQUFzQixFQUMzQixJQUFJLENBQUMsNkJBQTZCLEVBQ2xDLElBQUksQ0FBQyxZQUFZLEVBQ2pCLHFCQUFxQixDQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUNGLGFBQUM7QUFBRCxDQUFDOztBQUVLO0FBQ04sQ0FBQztBQUVLLGtCQUFvQixLQUFLO0lBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDZCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDblNzQjtBQUNLO0FBQ0g7QUFFQztBQUNFO0FBQ0oiLCJmaWxlIjoicm0tY29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJtb21lbnRcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUm1Db3JlXCJdID0gZmFjdG9yeShyZXF1aXJlKFwibW9tZW50XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSbUNvcmVcIl0gPSBmYWN0b3J5KHJvb3RbXCJtb21lbnRcIl0pO1xufSkod2luZG93LCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXzsiLCJleHBvcnQgZnVuY3Rpb24gc2hhbGxvd01lcmdlIChvYmplY3QsIGRlZmF1bHRzKSB7XG5cdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcblx0XHRyZXR1cm4gZGVmYXVsdHM7XG5cblx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdHMpIHtcblx0XHRyZXN1bHRba2V5XSA9IG9iamVjdFtrZXldID09PSB1bmRlZmluZWQgP1xuXHRcdFx0ZGVmYXVsdHNba2V5XSA6IG9iamVjdFtrZXldO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Byb3BlcnRpZXMgKG9iamVjdCkge1xuXHQvLyBAdHMtaWdub3JlXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXJzdFByb3BlcnR5IChvYmplY3QpIHtcblx0aWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKVxuXHRcdHJldHVybiBudWxsO1xuXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcblx0XHRyZXR1cm4ga2V5O1xuXG5cdHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5BcnJheSAobmVlZGxlLCBoYXlzdGFjaykge1xuXHRmb3IgKGNvbnN0IGhheSBvZiBoYXlzdGFjaykge1xuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0aWYgKG5lZWRsZSA9PSBoYXkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFycmF5PFQ+IChzb3VyY2U6IFRbXSwgY2FsbGJhY2s6IChUKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG5cdGNvbnN0IGZpbHRlcmVkOiBUW10gPSBbXTtcblxuXHRmb3IgKGNvbnN0IHNyYyBvZiBzb3VyY2UpIHtcblx0XHRpZiAoY2FsbGJhY2soc3JjKSlcblx0XHRcdGZpbHRlcmVkLnB1c2goc3JjKTtcblx0fVxuXG5cdGlmIChmaWx0ZXJlZC5sZW5ndGggPT09IHNvdXJjZS5sZW5ndGgpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdGVtcHR5QXJyYXkoc291cmNlKTtcblxuXHRmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJlZClcblx0XHRzb3VyY2UucHVzaChmaWx0ZXIpO1xuXG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlBcnJheSAoYXJyYXkpOiB2b2lkIHtcblx0YXJyYXkuc3BsaWNlKDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEV4aXN0cyAoc291cmNlLCBwYXRoKSB7XG5cdGlmICh0eXBlb2Ygc291cmNlID09PSAndW5kZWZpbmVkJylcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0Zm9yIChjb25zdCBwIG9mIHBhdGgpIHtcblx0XHRpZiAodHlwZW9mIHNvdXJjZVtwXSA9PT0gJ3VuZGVmaW5lZCcpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzb3VyY2UgPSBzb3VyY2VbcF07XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGggKG9iamVjdCwgcGF0aCwgZGVmYXVsdHMpIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBwYXRoW2ldO1xuXG5cdFx0aWYgKG9iamVjdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdG9iamVjdFt2YWx1ZV0gPSBkZWZhdWx0c1tpXTtcblxuXHRcdG9iamVjdCA9IG9iamVjdFt2YWx1ZV07XG5cdH1cblxuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aCAob2JqZWN0LCBwYXRoLCBjcmVhdGUgPSBmYWxzZSkge1xuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xuXHRcdG9iamVjdCA9IG9iamVjdFtwXTsgLy8gd29uJ3QgYWx0ZXIgdGhlIGNhbGxlcidzIHZhclxuXG5cdFx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkICYmICFjcmVhdGUpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLy8gVGFrZW4gZnJvbSBBbmd1bGFySlMsIGFkZGVkIGNvbW1lbnRzIHRvIGlnbm9yZSBUeXBlU2NyaXB0IGVycm9yc1xuZnVuY3Rpb24gYmFzZUV4dGVuZCAoZHN0LCBvYmpzLCBkZWVwKSB7XG5cdGZvciAobGV0IGkgPSAwLCBpaSA9IG9ianMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuXHRcdGNvbnN0IG9iaiA9IG9ianNbaV07XG5cblx0XHRpZiAoIWlzT2JqZWN0KG9iaikgJiYgIWlzRnVuY3Rpb24ob2JqKSlcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG5cblx0XHRmb3IgKGxldCBqID0gMCwgamogPSBrZXlzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbal07XG5cdFx0XHRjb25zdCBzcmMgPSBvYmpba2V5XTtcblxuXHRcdFx0aWYgKGRlZXAgJiYgaXNPYmplY3Qoc3JjKSkge1xuXHRcdFx0XHRpZiAoaXNEYXRlKHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBEYXRlKHNyYy52YWx1ZU9mKCkpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBSZWdFeHAoc3JjKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzcmMubm9kZU5hbWUpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNFbGVtZW50KHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICghaXNPYmplY3QoZHN0W2tleV0pKVxuXHRcdFx0XHRcdFx0ZHN0W2tleV0gPSBpc0FycmF5KHNyYykgPyBbXSA6IHt9O1xuXG5cdFx0XHRcdFx0YmFzZUV4dGVuZChkc3Rba2V5XSwgW3NyY10sIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkc3Rba2V5XSA9IHNyYztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZHN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kIChkc3QsIC4uLmFyZ3MpIHtcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSAoZHN0LCAuLi5hcmdzKSB7XG5cdHJldHVybiBiYXNlRXh0ZW5kKGRzdCwgYXJncywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCAodmFsdWUpIHtcblx0Ly8gaHR0cDovL2pzcGVyZi5jb20vaXNvYmplY3Q0XG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua09iamVjdCAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIU9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlciAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGUgKHZhbHVlKSB7XG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWdFeHAgKHZhbHVlKSB7XG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4gKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudCAobm9kZSkge1xuXHRyZXR1cm4gISEobm9kZSAmJlxuXHRcdChcblx0XHRcdG5vZGUubm9kZU5hbWUgIC8vIFdlIGFyZSBhIGRpcmVjdCBlbGVtZW50LlxuXHRcdFx0fHwgKG5vZGUucHJvcCAmJiBub2RlLmF0dHIgJiYgbm9kZS5maW5kKVxuXHRcdClcblx0KTsgIC8vIFdlIGhhdmUgYW4gb24gYW5kIGZpbmQgbWV0aG9kIHBhcnQgb2YgalF1ZXJ5IEFQSS5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2luZG93IChvYmopIHtcblx0cmV0dXJuIG9iaiAmJiBvYmoud2luZG93ID09PSBvYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluZWQgKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzIChvMSwgbzIpIHtcblx0aWYgKG8xID09PSBvMilcblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRpZiAobzEgPT09IG51bGwgfHwgbzIgPT09IG51bGwpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcblx0aWYgKG8xICE9PSBvMSAmJiBvMiAhPT0gbzIpXG5cdFx0cmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXG5cblx0Y29uc3QgdDEgPSB0eXBlb2YgbzE7XG5cdGNvbnN0IHQyID0gdHlwZW9mIG8yO1xuXG5cdGxldCBsZW5ndGg7XG5cdGxldCBrZXk7XG5cdGxldCBrZXlTZXQ7XG5cblx0aWYgKHQxID09PSB0MiAmJiB0MSA9PT0gJ29iamVjdCcpIHtcblx0XHRpZiAoaXNBcnJheShvMSkpIHtcblx0XHRcdGlmICghaXNBcnJheShvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0bGVuZ3RoID0gbzEubGVuZ3RoO1xuXG5cdFx0XHRpZiAobzEubGVuZ3RoID09PSBvMi5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChrZXkgPSAwOyBrZXkgPCBsZW5ndGg7IGtleSsrKSB7XG5cdFx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzRGF0ZShvMSkpIHtcblx0XHRcdGlmICghaXNEYXRlKG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gc2ltcGxlQ29tcGFyZShvMS5nZXRUaW1lKCksIG8yLmdldFRpbWUoKSk7XG5cdFx0fSBlbHNlIGlmIChpc1JlZ0V4cChvMSkpIHtcblx0XHRcdGlmICghaXNSZWdFeHAobzIpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdHJldHVybiBvMS50b1N0cmluZygpID09PSBvMi50b1N0cmluZygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoaXNXaW5kb3cobzEpIHx8IGlzV2luZG93KG8yKSB8fCBpc0FycmF5KG8yKSB8fCBpc0RhdGUobzIpIHx8IGlzUmVnRXhwKG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRrZXlTZXQgPSBjcmVhdGVNYXAoKTtcblx0XHRcdGZvciAoa2V5IGluIG8xKSB7XG5cdFx0XHRcdGlmIChpc0Z1bmN0aW9uKG8xW2tleV0pKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0XHRrZXlTZXRba2V5XSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoa2V5IGluIG8yKSB7XG5cdFx0XHRcdGlmICghKGtleSBpbiBrZXlTZXQpICYmIGlzRGVmaW5lZChvMltrZXldKSAmJiAhaXNGdW5jdGlvbihvMltrZXldKSlcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWFwICgpIHtcblx0cmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbmZ1bmN0aW9uIHNpbXBsZUNvbXBhcmUgKGEsIGIpIHtcblx0cmV0dXJuIGEgPT09IGIgfHwgKGEgIT09IGEgJiYgYiAhPT0gYik7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRPYmplY3RNYXhEZXB0aCAobWF4RGVwdGgpIHtcblx0cmV0dXJuIGlzTnVtYmVyKG1heERlcHRoKSAmJiBtYXhEZXB0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChzb3VyY2UsIGRlc3RpbmF0aW9uPywgbWF4RGVwdGg/KSB7XG5cdGNvbnN0IHN0YWNrU291cmNlID0gW107XG5cdGNvbnN0IHN0YWNrRGVzdCA9IFtdO1xuXG5cdG1heERlcHRoID0gaXNWYWxpZE9iamVjdE1heERlcHRoKG1heERlcHRoKSA/IG1heERlcHRoIDogTmFOO1xuXG5cdGlmIChkZXN0aW5hdGlvbikge1xuXHRcdGlmIChzb3VyY2UgPT09IGRlc3RpbmF0aW9uKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgaWRlbnRpY2FsLicpO1xuXHRcdH1cblxuXHRcdC8vIEVtcHR5IHRoZSBkZXN0aW5hdGlvbiBvYmplY3Rcblx0XHRpZiAoaXNBcnJheShkZXN0aW5hdGlvbikpIHtcblx0XHRcdGRlc3RpbmF0aW9uLmxlbmd0aCA9IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGRlc3RpbmF0aW9uKVxuXHRcdFx0XHRkZWxldGUgZGVzdGluYXRpb25ba2V5XTtcblx0XHR9XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0c3RhY2tTb3VyY2UucHVzaChzb3VyY2UpO1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGFja0Rlc3QucHVzaChkZXN0aW5hdGlvbik7XG5cblx0XHRyZXR1cm4gY29weVJlY3Vyc2Uoc291cmNlLCBkZXN0aW5hdGlvbiwgbWF4RGVwdGgpO1xuXHR9XG5cblx0cmV0dXJuIGNvcHlFbGVtZW50KHNvdXJjZSwgbWF4RGVwdGgpO1xuXG5cdGZ1bmN0aW9uIGNvcHlSZWN1cnNlIChfc291cmNlLCBfZGVzdGluYXRpb24sIF9tYXhEZXB0aCkge1xuXHRcdF9tYXhEZXB0aC0tO1xuXG5cdFx0aWYgKF9tYXhEZXB0aCA8IDApXG5cdFx0XHRyZXR1cm4gJy4uLic7XG5cblx0XHRpZiAoaXNBcnJheShfc291cmNlKSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlpID0gX3NvdXJjZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG5cdFx0XHRcdF9kZXN0aW5hdGlvbi5wdXNoKGNvcHlFbGVtZW50KF9zb3VyY2VbaV0sIF9tYXhEZXB0aCkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNCbGFua09iamVjdChfc291cmNlKSkge1xuXHRcdFx0Ly8gY3JlYXRlTWFwKCkgZmFzdCBwYXRoIC0tLSBTYWZlIHRvIGF2b2lkIGhhc093blByb3BlcnR5IGNoZWNrIGJlY2F1c2UgcHJvdG90eXBlIGNoYWluIGlzIGVtcHR5XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XG5cdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoX3NvdXJjZSAmJiB0eXBlb2YgX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gU2xvdyBwYXRoLCB3aGljaCBtdXN0IHJlbHkgb24gaGFzT3duUHJvcGVydHlcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0aWYgKF9zb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFNsb3dlc3QgcGF0aCAtLS0gaGFzT3duUHJvcGVydHkgY2FuJ3QgYmUgY2FsbGVkIGFzIGEgbWV0aG9kXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XG5cdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX3NvdXJjZSwga2V5KSkge1xuXHRcdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIF9kZXN0aW5hdGlvbjtcblx0fVxuXG5cdGZ1bmN0aW9uIGNvcHlFbGVtZW50IChfc291cmNlLCBfbWF4RGVwdGggPSA1KSB7XG5cdFx0Ly8gU2ltcGxlIHZhbHVlc1xuXHRcdGlmICghaXNPYmplY3QoX3NvdXJjZSkpXG5cdFx0XHRyZXR1cm4gX3NvdXJjZTtcblxuXHRcdC8vIEFscmVhZHkgY29waWVkIHZhbHVlc1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCBpbmRleCA9IHN0YWNrU291cmNlLmluZGV4T2YoX3NvdXJjZSk7XG5cblx0XHRpZiAoaW5kZXggIT09IC0xKVxuXHRcdFx0cmV0dXJuIHN0YWNrRGVzdFtpbmRleF07XG5cblx0XHRpZiAoaXNXaW5kb3coX3NvdXJjZSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBNYWtpbmcgY29waWVzIG9mIFdpbmRvdyBpbnN0YW5jZXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcblx0XHR9XG5cblx0XHRsZXQgbmVlZHNSZWN1cnNlID0gZmFsc2U7XG5cdFx0bGV0IF9kZXN0aW5hdGlvbiA9IGNvcHlUeXBlKF9zb3VyY2UpO1xuXG5cdFx0aWYgKF9kZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRfZGVzdGluYXRpb24gPSBpc0FycmF5KF9zb3VyY2UpID8gW10gOiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihfc291cmNlKSk7XG5cdFx0XHRuZWVkc1JlY3Vyc2UgPSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGFja1NvdXJjZS5wdXNoKF9zb3VyY2UpO1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGFja0Rlc3QucHVzaChfZGVzdGluYXRpb24pO1xuXG5cdFx0cmV0dXJuIG5lZWRzUmVjdXJzZVxuXHRcdFx0PyBjb3B5UmVjdXJzZShfc291cmNlLCBfZGVzdGluYXRpb24sIF9tYXhEZXB0aClcblx0XHRcdDogX2Rlc3RpbmF0aW9uO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29weVR5cGUgKF9zb3VyY2UpIHtcblx0XHRzd2l0Y2ggKHRvU3RyaW5nLmNhbGwoX3NvdXJjZSkpIHtcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50OEFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDE2QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MzJBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBGbG9hdDMyQXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQ4QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDE2QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDMyQXJyYXldJzpcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKGNvcHlFbGVtZW50KF9zb3VyY2UuYnVmZmVyKSwgX3NvdXJjZS5ieXRlT2Zmc2V0LCBfc291cmNlLmxlbmd0aCk7XG5cblx0XHRcdGNhc2UgJ1tvYmplY3QgQXJyYXlCdWZmZXJdJzpcblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUxMFxuXHRcdFx0XHRpZiAoIV9zb3VyY2Uuc2xpY2UpIHtcblx0XHRcdFx0XHQvLyBJZiB3ZSdyZSBpbiB0aGlzIGNhc2Ugd2Uga25vdyB0aGUgZW52aXJvbm1lbnQgc3VwcG9ydHMgQXJyYXlCdWZmZXJcblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuXHRcdFx0XHRcdGNvbnN0IGNvcGllZCA9IG5ldyBBcnJheUJ1ZmZlcihfc291cmNlLmJ5dGVMZW5ndGgpO1xuXHRcdFx0XHRcdG5ldyBVaW50OEFycmF5KGNvcGllZCkuc2V0KG5ldyBVaW50OEFycmF5KF9zb3VyY2UpKTtcblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlICovXG5cdFx0XHRcdFx0cmV0dXJuIGNvcGllZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gX3NvdXJjZS5zbGljZSgwKTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBTdHJpbmddJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoX3NvdXJjZS52YWx1ZU9mKCkpO1xuXG5cdFx0XHRjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuXHRcdFx0XHRjb25zdCByZSA9IG5ldyBSZWdFeHAoX3NvdXJjZS5fc291cmNlLCBfc291cmNlLnRvU3RyaW5nKCkubWF0Y2goL1teL10qJC8pWzBdKTtcblxuXHRcdFx0XHRyZS5sYXN0SW5kZXggPSBfc291cmNlLmxhc3RJbmRleDtcblxuXHRcdFx0XHRyZXR1cm4gcmU7XG5cblx0XHRcdGNhc2UgJ1tvYmplY3QgQmxvYl0nOlxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoW19zb3VyY2VdLCB7dHlwZTogX3NvdXJjZS50eXBlfSk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzRnVuY3Rpb24oX3NvdXJjZS5jbG9uZU5vZGUpKSB7XG5cdFx0XHRyZXR1cm4gX3NvdXJjZS5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEZpZWxkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mbyB9IGZyb20gJy4vQ29sdW1uSW5mbyc7XG5cbmltcG9ydCB7IGNvcHksIGVxdWFscyB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBBcGlGb3JtYXR0ZXIge1xuXHRNT01FTlRfSU5WQUxJRCA9ICdJbnZhbGlkIGRhdGUnO1xuXHRTRVJWRVJfREFURVRJTUVfRk9STUFUID0gJ1lZWVktTU0tRERbVF1ISDptbTpzc1onO1xuXHRTRVJWRVJfVElNRV9GT1JNQVQgPSAnSEg6bW06c3MnO1xuXHRTRVJWRVJfREFURV9GT1JNQVQgPSAnWVlZWS1NTS1ERCc7XG5cblx0Y29uc3RydWN0b3IgKCkge1xuXG5cdH1cblxuXHRmb3JtYXRSZXNwb25zZSAoZmllbGRzOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogRmllbGRNYXAge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXG5cdFx0XHRmaWVsZHNbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbi5wYXRoXSk7XG5cblx0XHRyZXR1cm4gZmllbGRzO1xuXHR9XG5cblx0ZXhwYW5kUmVzcG9uc2UgKGN1cnJlbnQ6IEZpZWxkTWFwLCBleHBhbmRlZDogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKVxuXHRcdFx0Y3VycmVudFtjb2x1bW4ucGF0aF0gPSB0aGlzLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBleHBhbmRlZFtjb2x1bW4ucGF0aF0pO1xuXG5cdFx0cmV0dXJuIGN1cnJlbnQ7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0IChpbml0aWFsOiBGaWVsZE1hcCwgbW9kaWZpZWQ6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cdFx0XHRjb25zdCBjb2x1bW5UeXBlID0gYXBpQ29sdW1uLnR5cGU7XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcblx0XHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuZm9ybWF0UmVxdWVzdFZhbHVlKGNvbHVtblR5cGUsIG1vZGlmaWVkW2NvbHVtbklkXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3RMb2NhbCAoZmllbGRzOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogRmllbGRNYXAge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuZm9ybWF0UmVxdWVzdFZhbHVlKGFwaUNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0aGFzQ2hhbmdlcyAoaW5pdGlhbDogRmllbGRNYXAsIG1vZGlmaWVkOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogYm9vbGVhbiB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRnZXRDaGFuZ2VzIChpbml0aWFsOiBGaWVsZE1hcCwgbW9kaWZpZWQ6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0OiBvYmplY3RbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG9sZFZhbHVlOiBpbml0aWFsW2NvbHVtbklkXSxcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBtb2RpZmllZFtjb2x1bW5JZF0sXG5cdFx0XHRcdFx0XHRjb2x1bW46IGNvbHVtbi5hcGlDb2x1bW5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNvcHlGaWVsZHMgKHNvdXJjZTogRmllbGRNYXAsIGRlc3RpbmF0aW9uOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogRmllbGRNYXAge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW4ucGF0aDtcblxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uUGF0aF0gPSB0aGlzLmNsb25lKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgc291cmNlW2NvbHVtblBhdGhdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRzaGFsbG93Q29weUZpZWxkcyAoXG5cdFx0c2hhbGxvd1NvdXJjZTogRmllbGRNYXAsXG5cdFx0ZGVlcFNvdXJjZTogRmllbGRNYXAsXG5cdFx0ZGVzdGluYXRpb246IEZpZWxkTWFwLFxuXHRcdGNvbHVtbnM6IENvbHVtbkluZm9bXVxuXHQpOiBGaWVsZE1hcCB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbi5wYXRoO1xuXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gOlxuXHRcdFx0XHR0aGlzLmNsb25lKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZGVlcFNvdXJjZVtjb2x1bW5QYXRoXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0c2V0RGVmYXVsdFZhbHVlcyAoZGVzdGluYXRpb246IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbi5pZF0gPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0Y29tcGFyZUZpZWxkczxUPiAoY29sdW1uVHlwZTogc3RyaW5nLCBmaXJzdDogVCwgc2Vjb25kOiBUKTogYm9vbGVhbiB7XG5cdFx0aWYgKGZpcnN0ID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gc2Vjb25kID09PSB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2Vjb25kID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVNb21lbnRPYmplY3RzKGZpcnN0LCBzZWNvbmQpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRHVyYXRpb25zKGZpcnN0LCBzZWNvbmQpO1xuXHRcdFx0Y2FzZSAnaWQnOiAvLyBpZCB0eXBlc1xuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdsaW5rJzpcblx0XHRcdGNhc2UgJ2NoaWxkJzpcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdFx0XHRyZXR1cm4gZmlyc3QgPT0gc2Vjb25kOyAvLyB1c2Ugbm9uLXN0cmljdCBjb21wYXJpc29uXG5cdFx0XHRjYXNlICdjdXJyZW50Jzpcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XG5cdFx0XHRjYXNlICdkb3VibGUnOiAvLyBmbG9hdGluZyBwb2ludCB0eXBlc1xuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ3F1YW50aXR5Jzpcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZsb2F0cyhmaXJzdCwgc2Vjb25kKTtcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcblx0XHRcdGNhc2UgJ2Jvb2wnOiAvLyBib29sZWFuIHR5cGVzXG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdGNhc2UgJ2VtYWlsJzogLy8gc3RyaW5nIHR5cGVzXG5cdFx0XHRjYXNlICdwaG9uZSc6XG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PT0gc2Vjb25kO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGVxdWFscyhmaXJzdCwgc2Vjb25kKTtcblx0XHR9XG5cdH1cblxuXHRjb21wYXJlRmxvYXRzIChhLCBiKSB7XG5cdFx0Y29uc3QgYWJzQSA9IE1hdGguYWJzKGEpO1xuXHRcdGNvbnN0IGFic0IgPSBNYXRoLmFicyhiKTtcblx0XHRjb25zdCBkaWZmID0gTWF0aC5hYnMoYSAtIGIpO1xuXG5cdFx0Y29uc3QgRVBTSUxPTiA9IDEuMTllLTA3O1xuXG5cdFx0Ly8gc2hvcnRjdXQsIGhhbmRsZXMgaW5maW5pdGllc1xuXHRcdGlmIChhID09PSBiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKGEgPT09IDAgfHwgYiA9PT0gMCB8fCBkaWZmIDwgTnVtYmVyLk1JTl9WQUxVRSkge1xuXHRcdFx0Ly8gYSBvciBiIGlzIHplcm8gb3IgYm90aCBhcmUgZXh0cmVtZWx5IGNsb3NlIHRvIGl0XG5cdFx0XHQvLyByZWxhdGl2ZSBlcnJvciBpcyBsZXNzIG1lYW5pbmdmdWwgaGVyZVxuXHRcdFx0cmV0dXJuIGRpZmYgPCAoRVBTSUxPTiAqIE51bWJlci5NSU5fVkFMVUUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyB1c2UgcmVsYXRpdmUgZXJyb3Jcblx0XHRcdHJldHVybiBkaWZmIC8gTWF0aC5taW4oKGFic0EgKyBhYnNCKSwgTnVtYmVyLk1BWF9WQUxVRSkgPCBFUFNJTE9OO1xuXHRcdH1cblx0fVxuXG5cdGNvbXBhcmVNb21lbnRPYmplY3RzIChmaXJzdCwgc2Vjb25kKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFmaXJzdC5pc1ZhbGlkKCkpXG5cdFx0XHRyZXR1cm4gIXNlY29uZC5pc1ZhbGlkKCk7XG5cblx0XHRpZiAoIXNlY29uZC5pc1ZhbGlkKCkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGZpcnN0IElTIHZhbGlkXG5cblx0XHRyZXR1cm4gZmlyc3QuaXNTYW1lKHNlY29uZCk7XG5cdH1cblxuXHRjb21wYXJlRHVyYXRpb25zIChmaXJzdCwgc2Vjb25kKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZpcnN0LmFzTWlsbGlzZWNvbmRzKCkgPT09IHNlY29uZC5hc01pbGxpc2Vjb25kcygpO1xuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2VWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZURhdGUodmFsdWUpO1xuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUNvbG9yKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEdXJhdGlvbih2YWx1ZSk7XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcnID8gSlNPTi5wYXJzZSh2YWx1ZSkgOiB2YWx1ZTtcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZTtcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIC8gMTAwMDAwMDtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0VmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlVGltZSh2YWx1ZSk7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGUodmFsdWUpO1xuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0Q29sb3IodmFsdWUpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RHVyYXRpb24odmFsdWUpO1xuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlRGF0ZSAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBtb21lbnQuaW52YWxpZCgpIDogbW9tZW50KHZhbHVlKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlRHVyYXRpb24gKHZhbHVlKSB7XG5cdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbih2YWx1ZSA9PT0gbnVsbCA/IDAgOiB2YWx1ZSwgJ3NlY29uZHMnKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlQ29sb3IgKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUgOiAnIycgKyB2YWx1ZTtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3REYXRlVGltZSAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCkgOiBudWxsO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdERhdGUgKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlLmZvcm1hdCh0aGlzLlNFUlZFUl9EQVRFX0ZPUk1BVCkgOiBudWxsO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdER1cmF0aW9uICh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZS5hc1NlY29uZHMoKTtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3RDb2xvciAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUuY2hhckF0KDApID09PSAnIycgPyB2YWx1ZS5zdWJzdHJpbmcoMSkgOiB2YWx1ZTtcblx0fVxuXG5cdGdldERlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZSkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnaW50Jzpcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxuXHRcdFx0Y2FzZSAnc2libGluZyc6XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0XHRyZXR1cm4gJzAnO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5pbnZhbGlkKCk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oKTtcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiAnIzAwMDAwMCc7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHQvLyBcdFx0XHRcdFx0ZW1haWxcblx0XHRcdC8vIFx0XHRcdFx0XHR1cmxcblx0XHRcdC8vIFx0XHRcdFx0XHRodG1sXG5cdFx0XHQvLyBcdFx0XHRcdFx0anNvblxuXHRcdFx0Ly8gXHRcdFx0XHRcdGRhdGFcblx0XHR9XG5cdH1cblxuXHRpc0RlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIHZhbHVlLCB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW5UeXBlKSk7XG5cdH1cblxuXHRjbG9uZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbih2YWx1ZSk7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdFx0cmV0dXJuIGNvcHkodmFsdWUpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGdldENsb25lRnVuY3Rpb24gKGNvbHVtblR5cGUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbjtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZURhdGU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZGVudGl0eTtcblx0XHR9XG5cdH1cblxuXHRjbG9uZUR1cmF0aW9uIChkdXJhdGlvbikge1xuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oZHVyYXRpb24pO1xuXHR9XG5cblx0Y2xvbmVEYXRlIChkYXRlKSB7XG5cdFx0cmV0dXJuIGRhdGUuY2xvbmUoKTtcblx0fVxuXG5cdGlkZW50aXR5IChpbnB1dCkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEFwaVJlcXVlc3RTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0dGVtcGxhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcGFyYW1zOiBhbnkpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgcGFyYW1zKSk7XG5cdH1cblxuXHRjcmVhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIHZhbHVlczogYW55LCBwYXJlbnRUeXBlPzogSXRlbVR5cGUsIHBhcmVudElkPzogSXRlbUlkKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY3JlYXRlKGl0ZW1UeXBlLCBpdGVtSWQsIHZhbHVlcywgcGFyZW50VHlwZSwgcGFyZW50SWQpKTtcblx0fVxuXG5cdGRlbGV0ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWRzOiBJdGVtSWRbXSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaXRlbUlkcykpO1xuXHR9XG5cblx0dXBkYXRlSXRlbXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbXM6IG9iamVjdCwgY29sdW1uczogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSk7XG5cdH1cblxuXHRyZXF1ZXN0U2tlbGV0b24gKHBhcmFtczogYW55LCByZXF1ZXN0Q2FuY2VsZXI/OiBQcm9taXNlPGFueT4pOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocGFyYW1zLCByZXF1ZXN0Q2FuY2VsZXIpKTtcblx0fVxuXG5cdG1vdmVJdGVtcyAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1zOiBvYmplY3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1zKSk7XG5cdH1cblxuXHRjb2x1bW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbnM6IG9iamVjdCwgcGFyYW1zPzogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zKSk7XG5cdH1cblxuXHRxdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogb2JqZWN0LCBjb2x1bW5zOiBvYmplY3QsIGxpbWl0Pzogb2JqZWN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zLCBsaW1pdCkpO1xuXHR9XG5cblx0cHJvY2Vzc1Jlc3BvbnNlIChyZXF1ZXN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiByZXF1ZXN0LnRoZW4ocmVzcG9uc2UgPT4gdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KHJlc3BvbnNlKSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVR5cGVNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3Ige1xuXHRjb2x1bW5zOiBJdGVtVHlwZU1hcDtcblx0aXRlbXM6IEl0ZW1UeXBlTWFwO1xuXHRsaW5rczogSXRlbVR5cGVNYXA7XG5cdGNhY2hlYWJsZTogYm9vbGVhbjtcblx0bWFwOiBhbnk7XG5cblx0Y29sdW1uSW5kZXhNYXA6IGFueSA9IHt9O1xuXHRjb2x1bW5NYXA6IGFueSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHVibGljIHJlc3BvbnNlOiBhbnlcblx0KSB7XG5cdFx0dGhpcy5jb2x1bW5zID0gcmVzcG9uc2UuY29sdW1ucztcblx0XHR0aGlzLml0ZW1zID0gcmVzcG9uc2UuaXRlbXM7XG5cdFx0dGhpcy5saW5rcyA9IHJlc3BvbnNlLmxpbmtzO1xuXHRcdHRoaXMuY2FjaGVhYmxlID0gcmVzcG9uc2UuY2FjaGVhYmxlO1xuXHRcdHRoaXMubWFwID0gcmVzcG9uc2UubWFwO1xuXG5cdFx0dGhpcy5jcmVhdGVDb2x1bW5NYXBzKCk7XG5cdH1cblxuXHRjcmVhdGVDb2x1bW5NYXBzICgpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtblR5cGUgaW4gdGhpcy5jb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdID0ge307XG5cdFx0XHR0aGlzLmNvbHVtbk1hcFtjb2x1bW5UeXBlXSA9IHt9O1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbY29sdW1uVHlwZV1baV07XG5cdFx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGk7XG5cdFx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBjb2x1bW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZmV0Y2hWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSWQpIHtcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGFbdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdXTtcblx0fVxuXG5cdGZldGNoRGVyaXZlZE9iamVjdCAoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhcblx0XHRcdFx0dGhpcy5mZXRjaFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbi5pZCksXG5cdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0cmVzdWx0XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaERlcml2ZWRWYWx1ZXMgKHZhbHVlLCBjb2x1bW4sIGRlc3RpbmF0aW9uKSB7XG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcblx0XHRcdGxldCBjaGlsZFZhbHVlO1xuXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IG51bGw7XG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0RGVmYXVsdFZhbHVlKGNoaWxkQ29sdW1uLmFwaUNvbHVtbi50eXBlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNoaWxkVmFsdWUgPSB0aGlzLmZldGNoVmFsdWUoY29sdW1uLml0ZW1UeXBlLCB2YWx1ZSwgY2hpbGRDb2x1bW4uaWQpO1xuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IGNoaWxkVmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjaGlsZENvbHVtbi5pc0xlYWYpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhjaGlsZFZhbHVlLCBjaGlsZENvbHVtbiwgZGVzdGluYXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdGZldGNoT2JqZWN0IChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3M6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG5cdFx0aWYgKHRoaXMuaXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgaXRlbSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGE7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0cmVzdWx0W3RoaXMuY29sdW1uc1tpdGVtVHlwZV1baV0uaWRdID0gZGF0YVtpXTtcblx0XHR9XG5cblx0XHRpZiAoaW5jbHVkZUxpbmtzKSB7XG5cdFx0XHRjb25zdCBsaW5rcyA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0ubGlua3M7XG5cdFx0XHRyZXN1bHQuX19saW5rcyA9IHt9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtUeXBlIGluIGxpbmtzKVxuXHRcdFx0XHRyZXN1bHQuX19saW5rc1tsaW5rVHlwZV0gPVxuXHRcdFx0XHRcdHRoaXMuZmV0Y2hPYmplY3RBcnJheShsaW5rVHlwZSwgaW5jbHVkZUxpbmtzLCBsaW5rc1tsaW5rVHlwZV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaE9iamVjdEFycmF5IChpdGVtVHlwZSwgaW5jbHVkZUxpbmtzLCBpZEFycmF5KSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSBbXTtcblxuXHRcdGlmIChpZEFycmF5ID09PSBudWxsKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRpZiAoaWRBcnJheSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0aWRBcnJheSA9IHRoaXMubGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaWRBcnJheSlcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hPYmplY3RNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCwgaW5jbHVkZUxpbmtzLCByZXR1cm5LZXlzKSB7XG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuXHRcdGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRjb25zdCBrZXkgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0uZGF0YVtjb2x1bW5JbmRleF07XG5cdFx0XHRrZXlzLnB1c2goa2V5KTtcblx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaWQsIGluY2x1ZGVMaW5rcyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJldHVybktleXMpXG5cdFx0XHRyZXR1cm4ge3Jlc3VsdDogcmVzdWx0LCBrZXlzOiBrZXlzfTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hGaWVsZE1hcCAoaXRlbVR5cGUsIGNvbHVtbklkKSB7XG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxuXHRcdFx0cmVzdWx0W2lkXSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5kYXRhW2luZGV4XTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaENvbHVtbkFycmF5IChpdGVtVHlwZSkge1xuXHRcdGNvbnN0IHJlc3VsdDogUmVzcG9uc2VDb2x1bW5bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBhcGlDb2x1bW4gb2YgdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSlcblx0XHRcdHJlc3VsdC5wdXNoKGFwaUNvbHVtbik7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hDb2x1bW5PYmplY3QgKGl0ZW1UeXBlKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwW2l0ZW1UeXBlXTtcblx0fVxuXG5cdGZldGNoQ29sdW1uc09iamVjdCAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwO1xuXHR9XG5cblx0Y3JlYXRlUmVzb3VyY2UgKGl0ZW1UeXBlLCBpZCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRvYmplY3Q6IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkKSxcblx0XHRcdGxpbmtzOiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0ubGlua3Ncblx0XHR9O1xuXHR9XG5cblx0aGFzSXRlbXMgKGl0ZW1UeXBlKSB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRnZXRJZEFycmF5IChpdGVtVHlwZSkge1xuXHRcdGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRyZXN1bHQucHVzaChpdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImV4cG9ydCBlbnVtIEVOVFJZX1NUQVRVUyB7XG5cdENBQ0hFRCA9ICdjYWNoZWQnLFxuXHRQUk9NSVNFRCA9ICdwcm9taXNlZCcsXG5cdEVYUEFORCA9ICdleHBhbmQnLFxuXHRQUk9NSVNFRF9FWFBBTkQgPSAncHJvbWlzZWQtZXhwYW5kJyxcblx0UkVTT0xWRSA9ICdyZXNvbHZlJyxcblx0UkVTT0xWRV9WQUxVRVMgPSAncmVzb2x2ZS12YWx1ZXMnLFxuXHRMT0NBTCA9ICdsb2NhbCdcbn1cblxuZXhwb3J0IGNvbnN0IEFMTF9QRVJNSVNTSU9OUyA9ICc3JztcblxuZXhwb3J0IGNvbnN0IENPTFVNTl9TRVBFUkFUT1IgPSAnPic7XG5leHBvcnQgY29uc3QgUkVOREVSX0FTX1NFUEVSQVRPUiA9ICc6JztcblxuZXhwb3J0IGNvbnN0IE5FV19QUkVGSVg6IHN0cmluZyA9ICctMSc7XG5leHBvcnQgY29uc3QgRFVQTElDQVRFX1BSRUZJWDogc3RyaW5nID0gJy0yJztcblxuZXhwb3J0IGNvbnN0IE5FV19LRVlXT1JEOiBzdHJpbmcgPSAnbmV3LSc7XG5leHBvcnQgY29uc3QgRFVQTElDQVRFX0tFWVdPUkQ6IHN0cmluZyA9ICdkdXAtJztcbiIsImltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgRW50cnlTdGF0dXMsIEl0ZW1FbnRyeUVudHJ5U3RhdHVzTWFwLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1cyB7XG5cdHJlYWRvbmx5IHJlcXVlc3RTdGF0dXNBcnJheSA9IFtcblx0XHRFTlRSWV9TVEFUVVMuUkVTT0xWRSxcblx0XHRFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVMsXG5cdFx0RU5UUllfU1RBVFVTLkVYUEFORCxcblx0XHRFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXG5cdF07XG5cblx0ZW50cmllczogSXRlbUVudHJ5RW50cnlTdGF0dXNNYXAgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRwdWJsaWMgZ2V0SXRlbUlkOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IEl0ZW1JZCxcblx0XHRwdWJsaWMgZ2V0UHJvbWlzZTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBQcm9taXNlPEl0ZW1FbnRyeT4gLy8gdG9kbzogcHJvbWlzZSByZXR1cm4gdHlwZVxuXHQpIHtcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBFTlRSWV9TVEFUVVMpXG5cdFx0XHR0aGlzLmVudHJpZXNbRU5UUllfU1RBVFVTW3N0YXR1c11dID0gW107XG5cdH1cblxuXHRhZGQgKGVudHJ5U3RhdHVzOiBFbnRyeVN0YXR1czxJdGVtRW50cnk+KTogdm9pZCB7XG5cdFx0Y29uc3Qgc3RhdHVzID0gZW50cnlTdGF0dXMuc3RhdHVzO1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tzdGF0dXNdID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmVudHJpZXNbc3RhdHVzXSA9IFtdO1xuXG5cdFx0dGhpcy5lbnRyaWVzW3N0YXR1c10ucHVzaChlbnRyeVN0YXR1cy5lbnRyeSk7XG5cdH1cblxuXHRoYXNFbnRyaWVzIChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10pOiBib29sZWFuIHtcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBvZiBzdGF0dXNBcnJheSkge1xuXHRcdFx0aWYgKHRoaXMuZW50cmllc1tzdGF0dXNdLmxlbmd0aCA+IDApXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGhhc1JlcXVlc3RzICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5oYXNFbnRyaWVzKHRoaXMucmVxdWVzdFN0YXR1c0FycmF5KTtcblx0fVxuXG5cdGZvckVhY2hFbnRyeSAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdLCBjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKSB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0UHJvbWlzZXMgKCk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBwcm9taXNlczogQXJyYXk8UHJvbWlzZTxJdGVtRW50cnk+PiA9IFtdO1xuXG5cdFx0dGhpcy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLlBST01JU0VELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cHJvbWlzZXMucHVzaCh0aGlzLmdldFByb21pc2UoZW50cnkpKTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKTtcblx0fVxuXG5cdGdldFJlcXVlc3RJZHMgKCkge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkW10gPSBbXTtcblxuXHRcdHRoaXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0dGhpcy5yZXF1ZXN0U3RhdHVzQXJyYXksXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZ2V0SXRlbUlkKGVudHJ5KSk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRBcnJheSAoKTogSXRlbUVudHJ5W10ge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIHRoaXMuZW50cmllcykge1xuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IHRoaXMuZW50cmllc1tzdGF0dXNdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1c0VudHJ5IG9mIHN0YXR1c0VudHJpZXMpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHN0YXR1c0VudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgRW50cnlQYXJlbnQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ2hhbmdlc0NvbXBpbGF0aW9uIHtcblx0Y29tcGlsYXRpb24gPSB7XG5cdFx0Y3JlYXRlOiB7fSxcblx0XHRkZWxldGU6IHt9LFxuXHRcdHVwZGF0ZToge30sXG5cdFx0bW92ZToge31cblx0fTtcblxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXG5cdHByaXZhdGUgbW92ZUFycmF5OiBJdGVtRW50cnlbXSA9IFtdO1xuXHRwcml2YXRlIGRlbGV0ZU1hcCA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0cHVibGljIHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSxcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W11cblx0KSB7XG5cdFx0dGhpcy5jb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblxuXHRcdHRoaXMucHJvY2Vzc1NpbmdsZUl0ZW1zKCk7XG5cdFx0dGhpcy5wcm9jZXNzQ29sbGVjdGlvbnMoY29sbGVjdGlvbkVudHJpZXMpO1xuXHRcdHRoaXMucG9zdFByb2Nlc3MoKTtcblx0fVxuXG5cdGdldERlZmF1bHRQYXJlbnQgKCk6IEVudHJ5UGFyZW50IHtcblx0XHRyZXR1cm4ge2l0ZW1UeXBlOiAnVm9pZCcsIGl0ZW1JZDogMH07XG5cdH1cblxuXHRhZGRNb3ZlRW50cnkgKGl0ZW1FbnRyeSkge1xuXHRcdHRoaXMubW92ZUFycmF5LnB1c2goaXRlbUVudHJ5KTtcblx0fVxuXG5cdGFkZERlbGV0ZUVudHJ5IChpdGVtRW50cnksIHBhcmVudElkLCBwYXJlbnRUeXBlKSB7XG5cdFx0Y3JlYXRlUGF0aChcblx0XHRcdHRoaXMuZGVsZXRlTWFwLFxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHtwYXJlbnRJZDogcGFyZW50SWQsIGl0ZW06IGl0ZW1FbnRyeSwgcGFyZW50VHlwZTogcGFyZW50VHlwZX1dXG5cdFx0KTtcblx0fVxuXG5cdGFkZFVwZGF0ZUVudHJ5IChpdGVtRW50cnkpIHtcblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi51cGRhdGUsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRhZGRDcmVhdGVFbnRyeSAoaXRlbUVudHJ5KSB7XG5cdFx0bGV0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cGFyZW50ID0gdGhpcy5nZXREZWZhdWx0UGFyZW50KCk7XG5cblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi5jcmVhdGUsXG5cdFx0XHRbcGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0W3t9LCB7fSwge30sIGl0ZW1FbnRyeV1cblx0XHQpO1xuXHR9XG5cblx0cG9zdFByb2Nlc3MgKCkge1xuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHRoaXMubW92ZUFycmF5KSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdFx0Y29uc3QgZGVsZXRlRW50cnkgPSB0aGlzLmRlbGV0ZU1hcFtpdGVtRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0XHRpZiAoZGVsZXRlRW50cnkgPT09IHVuZGVmaW5lZCB8fCBkZWxldGVFbnRyeVtpdGVtSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHQvLyBhc3N1bWUgdGhlIGl0ZW1FbnRyeSBoYXMgYSBwYXJlbnQgKG9yIHNvbWV0aGluZyB3ZW50IHNlcmlvdXNseSB3cm9uZylcblx0XHRcdGNvbnN0IHBhcmVudCA9IDxFbnRyeVBhcmVudD4gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0Y29uc3QgZGVzdGluYXRpb24gPSBjcmVhdGVQYXRoKFxuXHRcdFx0XHR0aGlzLmNvbXBpbGF0aW9uLm1vdmUsXG5cdFx0XHRcdFtwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWRdLFxuXHRcdFx0XHRbe30sIFtdXVxuXHRcdFx0KTtcblxuXHRcdFx0ZGVzdGluYXRpb24ucHVzaChkZWxldGVFbnRyeVtpdGVtSWRdKTtcblxuXHRcdFx0ZGVsZXRlIGRlbGV0ZUVudHJ5W2l0ZW1JZF07XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmRlbGV0ZU1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5kZWxldGVNYXBbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gdGhpcy5kZWxldGVNYXBbaXRlbVR5cGVdW2l0ZW1JZF0uaXRlbTtcblx0XHRcdFx0Y29uc3QgZGVzdGluYXRpb24gPSB0aGlzLmNvbXBpbGF0aW9uLmRlbGV0ZTtcblxuXHRcdFx0XHRpZiAoZGVzdGluYXRpb25baXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0ZGVzdGluYXRpb25baXRlbVR5cGVdID0gW107XG5cblx0XHRcdFx0ZGVzdGluYXRpb25baXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NTaW5nbGVJdGVtcyAoKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5zaW5nbGVJdGVtcykge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdHRoaXMuYWRkQ3JlYXRlRW50cnkoaXRlbUVudHJ5KTtcblx0XHRcdGVsc2UgaWYgKGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXG5cdFx0XHRcdHRoaXMuYWRkVXBkYXRlRW50cnkoaXRlbUVudHJ5KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NDb2xsZWN0aW9ucyAoY29sbGVjdGlvbkVudHJpZXMpIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcykge1xuXHRcdFx0dGhpcy5jb2xsZWN0aW9ucy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHQvLyBhZGQgdGhlIGNvbGxlY3Rpb24gcGFyZW50IGlkIHRvIHRoZSBkZWxldGUgZW50cnkgKGluIGNhc2UgdGhlIGl0ZW0gaGFzIGJlZW4gbW92ZWQpXG5cdFx0XHRsZXQgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcblxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdFx0cGFyZW50ID0gdGhpcy5nZXREZWZhdWx0UGFyZW50KCk7XG5cblx0XHRcdGxldCBhZGRlZEl0ZW1zO1xuXHRcdFx0bGV0IHJlbW92ZWRJdGVtcztcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpIHtcblx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtcztcblx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gW107XG5cdFx0XHR9IGVsc2UgaWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzKSB7XG5cdFx0XHRcdGFkZGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0QWRkZWRJdGVtcygpO1xuXHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0UmVtb3ZlZEl0ZW1zKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRlZEl0ZW1zID0gW107XG5cdFx0XHRcdHJlbW92ZWRJdGVtcyA9IFtdO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbSBvZiBhZGRlZEl0ZW1zKSB7IC8vIGl0IGlzIHBvc3NpYmxlIHRvIG1vdmUgYW4gZXhpc3RpbmcgaXRlbSB0byBhIG5ldyBjb2xsZWN0aW9uXG5cdFx0XHRcdGlmIChhZGRlZEl0ZW0uaXNMb2NhbCgpKVxuXHRcdFx0XHRcdHRoaXMuYWRkQ3JlYXRlRW50cnkoYWRkZWRJdGVtKTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRoaXMuYWRkTW92ZUVudHJ5KGFkZGVkSXRlbSk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW0gb2YgcmVtb3ZlZEl0ZW1zKVxuXHRcdFx0XHR0aGlzLmFkZERlbGV0ZUVudHJ5KHJlbW92ZWRJdGVtLCBwYXJlbnQuaXRlbUlkLCBwYXJlbnQuaXRlbVR5cGUpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzKSB7XG5cdFx0XHRcdGNvbnN0IHVwZGF0ZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRVcGRhdGVkSXRlbXMoKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHVwZGF0ZWRJdGVtIG9mIHVwZGF0ZWRJdGVtcylcblx0XHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KHVwZGF0ZWRJdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0Q2hhbmdlc0NvbXBpbGF0aW9uLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sdW1uSW5mbyxcblx0SXRlbUhhbmRsZXJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlc3BvbnNlLCBDcmVhdGVSZXF1ZXN0RW50cnksIENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsIEVudHJ5UGFyZW50LCBJdGVtSWQsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXBcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBjcmVhdGVQYXRoLCBnZXRQYXRoLCBoYXNQcm9wZXJ0aWVzLCBpbkFycmF5IH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3Ige1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHQvLyBUT0RPOiB3ZSBjYW4gcmVtb3ZlIHRoZXNlIG9uY2UgdGhlIGRvY3VtZW50IGNyZWF0aW9uIGhhcyBiZWVuIHVwZGF0ZWRcblx0Z2V0SXRlbVR5cGVVcGRhdGVQcmlvcml0eSAoaXRlbVR5cGUpIHtcblx0XHRzd2l0Y2ggKGl0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdGYWN0dXVycmVnZWxiZWRyYWcnOlxuXHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdGNhc2UgJ0ZhY3R1dXJyZWdlbCc6XG5cdFx0XHRjYXNlICdNaW5mYWN0dXVyJzpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHR9XG5cdH1cblxuXHRpc0RvY3VtZW50SXRlbVR5cGUgKGl0ZW1UeXBlKSB7XG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xuXHRcdFx0Y2FzZSAnQm9uJzpcblx0XHRcdGNhc2UgJ09mZmVydGUnOlxuXHRcdFx0Y2FzZSAnQ29udHJhY3QnOlxuXHRcdFx0Y2FzZSAnRmFjdHV1cic6XG5cdFx0XHRjYXNlICdNYXRlcmlhYWxib24nOlxuXHRcdFx0Y2FzZSAnQ29udGFjdGJvbic6XG5cdFx0XHRjYXNlICdJbmh1dXJib24nOlxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcmJvbic6XG5cdFx0XHRjYXNlICdSZXBhcmF0aWVib24nOlxuXHRcdFx0Y2FzZSAnVm9lcnR1aWdib24nOlxuXHRcdFx0Y2FzZSAnQWFubWFuaW5nJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aXNEb2N1bWVudFVwZGF0ZSAoY29tcGlsYXRpb24pIHtcblx0XHRjb25zdCB1cGRhdGVDb21waWxhdGlvbiA9IGNvbXBpbGF0aW9uLnVwZGF0ZTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdXBkYXRlQ29tcGlsYXRpb24pIHtcblx0XHRcdGlmICh0aGlzLmlzRG9jdW1lbnRJdGVtVHlwZShpdGVtVHlwZSkpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGJ1aWxkTW92ZVJlcXVlc3QgKGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gY29tcGlsYXRpb25FbnRyeS5pdGVtO1xuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRcdGlmIChyZXN1bHRbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc3VsdFtpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0cmVzdWx0W2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRNYXBWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XG5cdFx0aWYgKG1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3RzIChcblx0XHRjaGFuZ2VzQ29tcGlsYXRpb246IENoYW5nZXNDb21waWxhdGlvbixcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhbixcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxuXHQpIHtcblx0XHRjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uLmNyZWF0ZSxcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbi5jb2xsZWN0aW9ucyxcblx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcblx0XHQpLnJ1bigpO1xuXHRcdGNvbnN0IHJlc3BvbnNlczogQXJyYXk8UHJvbWlzZTxhbnk+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKVxuXHRcdFx0cmVzcG9uc2VzLnB1c2godGhpcy5leGVjdXRlQ3JlYXRlUmVxdWVzdChyZXF1ZXN0LCBjb252ZXJzaW9uTWFwKS50aGVuKG5vdGlmeSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3BvbnNlcykudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdGZ1bmN0aW9uIG5vdGlmeSAocmVzdWx0KSB7XG5cdFx0XHRpZiAob25BZnRlckNyZWF0ZUNhbGxiYWNrICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDcmVhdGVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2U6IENyZWF0ZVJlcXVlc3RFbnRyeSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VNYXAgPSByZXNwb25zZS5tYXA7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5pdGVtcztcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1uc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3SXRlbUlkOiBJdGVtSWQgPSB0aGlzLmdldE1hcFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIHJlc3BvbnNlTWFwKTtcblxuXHRcdFx0XHRcdFx0aWYgKG5ld0l0ZW1JZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignQ3JlYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCk7XG5cdFx0XHRcdFx0XHRjb25zdCBleHBhbmRSZXNvdXJjZSA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkID0gbmV3SXRlbUlkO1xuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUZpZWxkcyhcblx0XHRcdFx0XHRcdFx0ZmllbGRzLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCwgaXRlbUVudHJ5LmNvbHVtbnMucm9vdCksXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcblx0XHRcdFx0XHRcdFx0XHRmaWVsZHMsXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQsIGV4cGFuZFJlc291cmNlLmRpZmZlcmVuY2Uucm9vdCksXG5cdFx0XHRcdFx0XHRcdFx0ZXhwYW5kUmVzb3VyY2Vcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlcXVlc3RSZXNvdXJjZS5jb2xsZWN0aW9ucy5hZGRUb0NvbGxlY3Rpb25zKCk7XG5cblx0XHRcdFx0Ly8gZXh0ZW5kIGNvbnZlcnNpb24gbWFwXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gcmVzcG9uc2VNYXApIHtcblx0XHRcdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiByZXNwb25zZU1hcFtpdGVtVHlwZV0pXG5cdFx0XHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVtpdGVtSWRdID0gcmVzcG9uc2VNYXBbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBwcmlvcml0aXplVXBkYXRlUmVxdWVzdHMgKGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgcHJpb3JpdGl6ZWRJdGVtVHlwZXM6IHN0cmluZ1tdW10gPSBbW10sIFtdLCBbXV07XG5cdFx0bGV0IHJlcXVlc3RDaGFpbiA9IHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbilcblx0XHRcdHByaW9yaXRpemVkSXRlbVR5cGVzW3RoaXMuZ2V0SXRlbVR5cGVVcGRhdGVQcmlvcml0eShpdGVtVHlwZSldLnB1c2goaXRlbVR5cGUpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZXMgb2YgcHJpb3JpdGl6ZWRJdGVtVHlwZXMpIHtcblx0XHRcdGlmIChpdGVtVHlwZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0cmVxdWVzdENoYWluID0gcmVxdWVzdENoYWluLnRoZW4oXG5cdFx0XHRcdHRoaXMuZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzKGl0ZW1UeXBlcywgY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpLFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlcXVlc3RDaGFpbjtcblx0fVxuXG5cdC8vIGNvbnN0cnVjdCBhIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzIChpdGVtVHlwZXMsIGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSB7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlPEFwaVJlc3BvbnNlPj4gPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBvZiBpdGVtVHlwZXMpXG5cdFx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdLCBwYXJhbWV0ZXJzKSk7XG5cblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3QgKGl0ZW1UeXBlLCBpdGVtRW50cmllcywgcGFyYW1ldGVyTWFwKSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IHt9O1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoKTtcblxuXHRcdHJlcXVlc3RbaXRlbVR5cGVdID0ge307XG5cblx0XHQvLyB3ZSBuZWVkIHRvIGRvIHRoZSBmb3JtYXRSZXF1ZXN0IGNhbGwgaGVyZSAoZmllbGRzIG1pZ2h0IGhhdmUgYmVlbiB1cGRhdGVkKVxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xuXHRcdFx0Ly8gUk1Db3JlIHRvZG86IHR5cGVcblx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0W2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aChwYXJhbWV0ZXJNYXAsIFtpdGVtVHlwZSwgaXRlbUlkXSk7XG5cblx0XHRcdGl0ZW1SZXF1ZXN0LnZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XG5cblx0XHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zID0gY29sbGVjdGlvbk1hdGNoZXIuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKVxuXHRcdFx0cmVxdWVzdENvbHVtbnMuZXhwYW5kKGNvbGxlY3Rpb24uY29sdW1ucyk7XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS51cGRhdGVJdGVtcyhpdGVtVHlwZSwgcmVxdWVzdCwgcmVxdWVzdENvbHVtbnMuZ2V0KCkpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMuZ2V0KCksXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XG5cdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignVXBkYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5pbml0aWFsLCB7fSwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cblx0XHRcdFx0XHRpdGVtRW50cnlcblx0XHRcdFx0XHRcdC51cGRhdGVGaWVsZHMoZmllbGRzLCByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaXRlbUVudHJ5LmNvbHVtbnMucm9vdCkpXG5cdFx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdFx0XHRcdGNvbnN0IGV4cGFuZFJlc291cmNlID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XG5cblx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgPT09IG51bGwpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXG5cdFx0XHRcdFx0XHRmaWVsZHMsXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZURlbGV0ZVJlcXVlc3RzIChjb21waWxhdGlvbikge1xuXHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlPEFwaVJlc3BvbnNlPj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pIC8vIGNsZWFyaW5nIG5vdCBuZWNlc3Nhcnlcblx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdCAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xuXHRcdGNvbnN0IGlkQXJyYXk6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGlkQXJyYXkucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaWRBcnJheSkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJZEFycmF5ID0gcmVzcG9uc2UuaXRlbXM7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5nZXRDb2xsZWN0aW9uTWF0Y2hlcigpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0aWYgKCFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIHJlc3BvbnNlSWRBcnJheSkpXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ0RlbGV0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZU1vdmVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIGNvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZTxBcGlSZXNwb25zZT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY29tcGlsYXRpb24pIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29tcGlsYXRpb25bcGFyZW50VHlwZV0pXG5cdFx0XHRcdGV4ZWN1dGVNb3ZlUmVxdWVzdChwYXJlbnRUeXBlLCBwYXJlbnRJZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcblxuXHRcdGZ1bmN0aW9uIGV4ZWN1dGVNb3ZlUmVxdWVzdCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcblx0XHRcdC8vIG9ubHkgdGhlIHBhcmVudCBpZCBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZFxuXHRcdFx0Y29uc3QgY29tcGlsYXRpb25FbnRyaWVzID0gY29tcGlsYXRpb25bcGFyZW50VHlwZV1bcGFyZW50SWRdO1xuXHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSBzZWxmLmdldE1hcFZhbHVlKHBhcmVudFR5cGUsIHBhcmVudElkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0cmVxdWVzdHMucHVzaChcblx0XHRcdFx0c2VsZi5hcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMoXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkID8gbmV3UGFyZW50SWQgOiBwYXJlbnRJZCxcblx0XHRcdFx0XHRzZWxmLmJ1aWxkTW92ZVJlcXVlc3QoY29tcGlsYXRpb25FbnRyaWVzKVxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0c2VsZi5wcm9jZXNzTW92ZVJlc3BvbnNlKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllcyk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzZWxmLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NNb3ZlUmVzcG9uc2UgKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdC8vIFRPRE86IHByb2Nlc3MgcmVzcG9uc2VcblxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRcdGNvbnN0IHJlbW92ZUNvbGxlY3Rpb25NYXAgPSB7fTtcblx0XHRjb25zdCBhZGRDb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbXBpbGF0aW9uRW50cnkgb2YgY29tcGlsYXRpb25FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGNvbXBpbGF0aW9uRW50cnkuaXRlbTtcblxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXG5cdFx0XHRcdHJlbW92ZUNvbGxlY3Rpb25NYXAsXG5cdFx0XHRcdGNvbXBpbGF0aW9uRW50cnkucGFyZW50SWQsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZFxuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXG5cdFx0XHRcdGFkZENvbGxlY3Rpb25NYXAsXG5cdFx0XHRcdCg8RW50cnlQYXJlbnQ+IGl0ZW1FbnRyeS5wYXJlbnQpLml0ZW1JZCxcblx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRpdGVtRW50cnlcblx0XHRcdCk7XG5cblx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKHJlbW92ZUNvbGxlY3Rpb25NYXAsICdyZW1vdmVJdGVtcycpO1xuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb24oYWRkQ29sbGVjdGlvbk1hcCwgJ2FkZEl0ZW1zJyk7XG5cdH1cblxuXHRwcml2YXRlIGFkZENvbGxlY3Rpb25NYXBFbnRyeSAoY29sbGVjdGlvbk1hcCwgcGFyZW50SWQsIGl0ZW1FbnRyeSwgdmFsdWUpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwRW50cnkgPSBjcmVhdGVQYXRoKFxuXHRcdFx0Y29sbGVjdGlvbk1hcCxcblx0XHRcdFtpdGVtRW50cnkucGFyZW50Lml0ZW1UeXBlLCBwYXJlbnRJZCwgaXRlbUVudHJ5Lml0ZW1UeXBlXSxcblx0XHRcdFt7fSwge30sIFtdXVxuXHRcdCk7XG5cblx0XHRjb2xsZWN0aW9uTWFwRW50cnkucHVzaCh2YWx1ZSk7XG5cdH1cblxuXHRwcml2YXRlIGZvckVhY2hDb2xsZWN0aW9uIChjb2xsZWN0aW9uTWFwLCBtZXRob2QpIHtcblx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF0pIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTtcblxuXHRcdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeVttZXRob2RdKFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdLFxuXHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gbm90ZTogd2l0aCB0aGUgbmV3IGl0ZW0gc3RydWN0dXJlLCAqYWxsKiBsb2NhbCBpdGVtcyBhcmUgaW4gdGhlIHNpbmdsZSBpdGVtIGNhY2hlXG5cdHByaXZhdGUgb25JdGVtc0NyZWF0ZWQgKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSwgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdKSB7XG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbnZlcnNpb25NYXApKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbnMpIHtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XG5cdFx0XHRjb25zdCB1cGRhdGVkQ29sdW1uczoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1Db2x1bW5zKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5xdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShjb2xsZWN0aW9uRW50cnkub3B0aW9ucyk7XG5cblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHVwZGF0ZWRDb2x1bW5zKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICh1cGRhdGVkQ29sdW1ucy5pZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcFtjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdKTtcblxuXHRcdFx0Ly8gd2hlbiB1cGRhdGluZyBhbiBpdGVtIHRvIHJlZmVyIHRvIGEgbmV3bHkgY3JlYXRlZCBpdGVtLCB0aGUgdXBkYXRlZCBpdGVtIHdpbGwgKm5vdCogYmUgYWRkZWQgdG9cblx0XHRcdC8vIHNpbmdsZSBpdGVtcyAoZS5nLiBtb3ZpbmcgYSBmdW5jdGlvbiB0byBhIG5ld2x5IGNyZWF0ZWQgZnVuY3Rpb24gZ3JvdXApXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXG5cdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHNpbmdsZUl0ZW1zKSB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0XHRpdGVtRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHRoaXMuZ2V0TWFwVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcHJvcGVyIG9yZGVyOiBjcmVhdGUgLSBtb3ZlIC0gZGVsZXRlIC0gdXBkYXRlXG5cdGV4ZWN1dGUgKFxuXHRcdHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSxcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10sXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHt9LFxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KTogUHJvbWlzZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgY2hhbmdlc0NvbXBpbGF0aW9uID0gdGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xuXHRcdGNvbnN0IGNvbXBpbGF0aW9uID0gY2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uO1xuXHRcdGNvbnN0IGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fTtcblxuXHRcdGxldCBwcm9taXNlQ2hhaW4gPSB0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyhcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbixcblx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRjb252ZXJzaW9uTWFwLFxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50LFxuXHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHR0aGlzLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZU1vdmVSZXF1ZXN0cyhjb21waWxhdGlvbi5tb3ZlLCBjb252ZXJzaW9uTWFwKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcblxuXHRcdFx0XHRyZXR1cm4gZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGlmICh0aGlzLmlzRG9jdW1lbnRVcGRhdGUoY29tcGlsYXRpb24pKSB7XG5cdFx0XHRwcm9taXNlQ2hhaW4gPSBwcm9taXNlQ2hhaW4udGhlbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVEZWxldGVSZXF1ZXN0cyhjb21waWxhdGlvbi5kZWxldGUpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpLnRoZW4oXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5wcmlvcml0aXplVXBkYXRlUmVxdWVzdHMoY29tcGlsYXRpb24udXBkYXRlLCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvbWlzZUNoYWluID0gcHJvbWlzZUNoYWluLnRoZW4oXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5wcmlvcml0aXplVXBkYXRlUmVxdWVzdHMoY29tcGlsYXRpb24udXBkYXRlLCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KS50aGVuKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLmRlbGV0ZSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb21pc2VDaGFpbi50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5lbnVtIENPTlNUQU5UUyB7XG5cdE1BWUJFID0gJ21heWJlJ1xufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlIHtcblx0ZW50cmllczoge1xuXHRcdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFx0W2NvbGxlY3Rpb25FbnRyeUlkOiBudW1iZXJdOiBDb2xsZWN0aW9uRW50cnlcblx0XHR9XG5cdH0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXG5cdH1cblxuXHRjb250YWlucyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV07XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGVudHJpZXNbY29sbGVjdGlvbkVudHJ5LmlkXSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0c29tZSAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGlmIChjYWxsYmFjayhlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSkpXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCBpbiB1c2Vcblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRjYWxsYmFjayhlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSk7XG5cdFx0fVxuXHR9XG5cblx0dG9BcnJheSAoKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0cmVzdWx0LnB1c2goZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGQgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogQ29sbGVjdGlvbkVudHJ5IHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKGVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRlbnRyaWVzW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0cmV0dXJuIGVudHJpZXNbaXRlbVR5cGVdW2NvbGxlY3Rpb25FbnRyeS5pZF0gPSBjb2xsZWN0aW9uRW50cnk7XG5cdH1cblxuXHRjbGVhciAoY29sbGVjdGlvbkVudHJ5PzogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGNvbGxlY3Rpb25FbnRyeSkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMuZW50cmllc1tjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdW2NvbGxlY3Rpb25FbnRyeS5pZF07XG5cdH1cblxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbZW50cnlJZF0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdG1hdGNoUGFyZW50IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHQvLyA9PSB0byBjb21wYXJlIGl0ZW1JZHNcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xuXHR9XG5cblx0Ly8gVE9ETzogdGhpbmsgb2YgYmV0dGVyIG5hbWVcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk6IENvbGxlY3Rpb25FbnRyeSB8IG51bGwge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGlmICh0aGlzLm1hdGNoUGFyZW50KGVudHJpZXNbZW50cnlJZF0sIHBhcmVudFR5cGUsIHBhcmVudElkKSlcblx0XHRcdFx0cmV0dXJuIGVudHJpZXNbZW50cnlJZF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXRSZXNvdXJjZUJ5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmdldEJ5UGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LmdldEN1cnJlbnRSZXNvdXJjZSgpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbnNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdO1xuXG5cdFx0XHRcdGlmICh0aGlzLm1hdGNoUGFyZW50KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50VHlwZSwgcGFyZW50SWQpKVxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBPbmx5IHJlc291cmNlc1xuXHQgKiBAcGFyYW0ge1N0cmluZ30gaXRlbVR5cGVcblx0ICogQHBhcmFtIHtTdHJpbmd8SW50ZWdlcn0gaXRlbUlkXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IEFycmF5IG9mIGNvbGxlY3Rpb25zLlxuXHQgKi9cblx0Z2V0QnlDb250YWluaW5nSXRlbSAoaXRlbVR5cGUsIGl0ZW1JZCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuZ2V0SXRlbUJ5SWQoaXRlbUlkKSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBhcnJheSBvZiBjb2xsZWN0aW9ucyB0aGUgaXRlbSAnYmVsb25ncycgaW4uXG5cdCAqL1xuXHRnZXRCeUZpdHRpbmdJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGZpZWxkczogRmllbGRNYXAsIHBhcmVudDogRW50cnlQYXJlbnROdWxsKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQgPSB7Zml0dGluZzogW10sIG5vdGZpdHRpbmc6IFtdLCBtYXliZTogW119O1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHQvLyBjb25zb2xlLnRpbWUoJ2dldEJ5Rml0dGluZ0l0ZW0nKTtcblxuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGZpZWxkcywgcGFyZW50KTtcblxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2VudHJ5SWRdO1xuXHRcdFx0Y29uc3QgbWF0Y2hSZXN1bHQgPSBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0KTtcblxuXHRcdFx0Ly8gVE9ETzogbWF5YmU/XG5cdFx0XHRpZiAobWF0Y2hSZXN1bHQgPT09IHRydWUpIC8vIG1pZ2h0IGFsc28gcmV0dXJuICdtYXliZSdcblx0XHRcdFx0cmVzdWx0LmZpdHRpbmcucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdFx0ZWxzZSBpZiAobWF0Y2hSZXN1bHQgPT09IENPTlNUQU5UUy5NQVlCRSlcblx0XHRcdFx0cmVzdWx0Lm1heWJlLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0cmVzdWx0Lm5vdGZpdHRpbmcucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH1cblxuXHRcdC8vIGNvbnNvbGUudGltZUVuZCgnZ2V0QnlGaXR0aW5nSXRlbScpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlLCBxdWVyeSk6IENvbGxlY3Rpb25FbnRyeSB8IG51bGwge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkucXVlcnkuc3RyaW5nID09PSBxdWVyeS5zdHJpbmcpXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXRCeUtleSAoaXRlbVR5cGUsIGVudHJ5S2V5KSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmVudHJ5S2V5ID09PSBlbnRyeUtleSlcblx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVzb3VyY2VCeUtleSAoaXRlbVR5cGUsIHJlc291cmNlS2V5KSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VzID0gZW50cmllc1tlbnRyeUlkXS5yZXNvdXJjZXM7XG5cblx0XHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG5cdFx0XHRcdGlmIChyZXNvdXJjZS5vcHRpb25zLnJlc291cmNlS2V5ID09PSByZXNvdXJjZUtleSlcblx0XHRcdFx0XHRyZXN1bHQucHVzaChyZXNvdXJjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IFF1ZXJ5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlQYXJzZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0Ly8gbm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgY29sdW1ucyBwcm9wZXJ0eSwgaXQgd2lsbCBiZSByZXBsYWNlZCBpbiB3aGVuIGNvbHVtbnMgYXJlIGV4cGFuZGVkXG5cdGNsb25lT3B0aW9ucyAob3B0aW9ucywgcGFyZW50KSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTsgLy8gZG9lcyBhIHNoYWxsb3cgY29weVxuXG5cdFx0cmVzdWx0LnF1ZXJ5UGFyYW1zID0gdGhpcy5jbG9uZVF1ZXJ5UGFyYW1zKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXHRcdHJlc3VsdC5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y2xvbmVRdWVyeVBhcmFtcyAocGFyYW1ldGVycykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcGFyYW1ldGVycykge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBwYXJhbWV0ZXJzW2tleV07XG5cdFx0XHRsZXQgY2xvbmU7XG5cblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZS5zbGljZSgpOyAvLyB3ZSdyZSBvbmx5IHVzaW5nIHByaW1pdGl2ZSBhcnJheXNcblx0XHRcdGVsc2UgaWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpXG5cdFx0XHRcdGNsb25lID0gdmFsdWUuY2xvbmUoKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZTtcblxuXHRcdFx0cmVzdWx0W2tleV0gPSBjbG9uZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdHtcblx0XHRcdFx0Y29sdW1uczogW10sXG5cdFx0XHRcdHF1ZXJ5OiBudWxsLFxuXHRcdFx0XHRxdWVyeUl0ZW1UeXBlOiBudWxsLFxuXHRcdFx0XHRxdWVyeVBhcmFtczoge30sXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZSxcblx0XHRcdFx0bGltaXQ6IG51bGwsXG5cdFx0XHRcdGVudHJ5S2V5OiAnJ1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRjcmVhdGVRdWVyeSAob3B0aW9ucykge1xuXHRcdGNvbnN0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0bGV0IHF1ZXJ5O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeTtcblx0XHRlbHNlIHtcblx0XHRcdGNvbnN0IGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHtpZDogJyZwYXJlbnRJZCd9fTtcblx0XHRcdG9wdGlvbnMucXVlcnlQYXJhbXMucGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xuXG5cdFx0XHRxdWVyeSA9IG9wdGlvbnMucXVlcnkgPT09IG51bGwgP1xuXHRcdFx0XHRsaW5rZWRUb1F1ZXJ5IDpcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKG9wdGlvbnMucXVlcnksIGxpbmtlZFRvUXVlcnkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KHF1ZXJ5LCBvcHRpb25zLnF1ZXJ5UGFyYW1zKS5wYXJzZSgpO1xuXG5cdFx0cmV0dXJuIHtvYmplY3Q6IHBhcnNlZFF1ZXJ5WzBdLCBzdHJpbmc6IHBhcnNlZFF1ZXJ5WzFdfTtcblx0fVxuXG5cdGdldElkQXJyYXkgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgYWNjdW11bGF0b3IpOiBJdGVtSWRbXSB7XG5cdFx0aWYgKGFjY3VtdWxhdG9yID09PSB1bmRlZmluZWQpXG5cdFx0XHRhY2N1bXVsYXRvciA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRhY2N1bXVsYXRvci5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXG5cdFx0cmV0dXJuIGFjY3VtdWxhdG9yO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7SXRlbUVudHJ5W119IGl0ZW1FbnRyaWVzXG5cdCAqIEBwYXJhbSB7KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFufSBjYWxsYmFja1xuXHQgKiBAcmV0dXJucyB7SXRlbUVudHJ5W119XG5cdCAqXG5cdCAqIGZpbHRlciBhbiBhcnJheSBhY2NvcmRpbmcgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBSZXR1cm4gdGhlIGVudHJpZXMgdGhhdCBmYWlsZWQgdGhlIGNvbmRpdGlvblxuXHQgKiBSZXBsYWNlIHRoZSBnaXZlbiBhcnJheSB3aXRoIHRoZSBlbnRyaWVzIHRoYXQgZGlkbid0IGZhaWwgdGhlIGNvbmRpdGlvbi5cblx0ICovXG5cdGZpbHRlckFycmF5IChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pIHtcblx0XHRjb25zdCBmaWx0ZXJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cdFx0Y29uc3QgcmVtb3ZlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdChjYWxsYmFjayhpdGVtRW50cnkpID8gZmlsdGVyZWRFbnRyaWVzIDogcmVtb3ZlZEVudHJpZXMpLnB1c2goaXRlbUVudHJ5KTtcblxuXHRcdGlmIChyZW1vdmVkRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XG5cblx0XHRpdGVtRW50cmllcy5sZW5ndGggPSBmaWx0ZXJlZEVudHJpZXMubGVuZ3RoO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtRW50cmllcy5sZW5ndGg7IGkrKylcblx0XHRcdGl0ZW1FbnRyaWVzW2ldID0gZmlsdGVyZWRFbnRyaWVzW2ldO1xuXG5cdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uLyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uQ2FjaGUsXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25NYXRjaGVyLFxuXHRDb2x1bW5FeHBhbnNpb24sXG5cdENvbHVtbkhhbmRsZXIsXG5cdENvbHVtblNldCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdFF1ZXJ5U2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LCBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIFF1ZXJ5UGFyc2VyRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXAsXG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRFbnRyeVBhcmVudCxcblx0RW50cnlTdGF0dXMsXG5cdEl0ZW1FbnRyeVBhcmVudElkTWFwLFxuXHRJdGVtSWQsXG5cdEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCxcblx0SXRlbVR5cGUsXG5cdFJlcXVlc3RDb2x1bW5cbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25IYW5kbGVyIHtcblx0ZW50cmllczogQ29sbGVjdGlvbkNhY2hlO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0XHR0aGlzLmVudHJpZXMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdH1cblxuXHRnZXRQcm9taXNlcyAoc3RhdHVzUmVzb3VyY2U6IENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwKSB7XG5cdFx0Y29uc3QgcHJvbWlzZWQgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUFJPTUlTRURdO1xuXHRcdGNvbnN0IHByb21pc2VkRXhwYW5kID0gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwcm9taXNlZClcblx0XHRcdHJlc3VsdC5wdXNoKHByb21pc2VkW3BhcmVudElkXSk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHByb21pc2VkRXhwYW5kKVxuXHRcdFx0cmVzdWx0LnB1c2gocHJvbWlzZWRFeHBhbmRbcGFyZW50SWRdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZXF1ZXN0SWRzIChzdGF0dXNSZXNvdXJjZSkge1xuXHRcdGNvbnN0IHJlc29sdmUgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUkVTT0xWRV07XG5cdFx0Y29uc3QgZXhwYW5kID0gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLkVYUEFORF07XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiByZXNvbHZlKVxuXHRcdFx0cmVzdWx0LnB1c2gocmVzb2x2ZVtwYXJlbnRJZF0ucGFyZW50Lml0ZW1JZCk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGV4cGFuZClcblx0XHRcdHJlc3VsdC5wdXNoKGV4cGFuZFtwYXJlbnRJZF0ucGFyZW50Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XG5cdCAqL1xuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8pIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeSA9IGVudHJ5LmNvbGxlY3Rpb247XG5cblx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoZW50cnkubm90Zml0dGluZywgbnVsbCwgdHJ1ZSk7XG5cdFx0XHRjb2xsZWN0aW9uLmFkZEl0ZW1zKGVudHJ5LmZpdHRpbmcsIG51bGwsIHRydWUpOyAvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxuXG5cdFx0XHRpZiAoZW50cnkubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblx0fVxuXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyICgpOiBDb2xsZWN0aW9uTWF0Y2hlciB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbdGhpcy5lbnRyaWVzXSwgdHJ1ZSwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0ICovXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8sIHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGZpdHRpbmcgPSBtYXBFbnRyeS5maXR0aW5nO1xuXHRcdFx0Y29uc3QgbWF5YmUgPSBtYXBFbnRyeS5tYXliZTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblx0XHRcdGNvbnN0IGlkQXJyYXk6IEl0ZW1JZFtdID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgZml0dGluZ0l0ZW0gb2YgZml0dGluZylcblx0XHRcdFx0aWRBcnJheS5wdXNoKGZpdHRpbmdJdGVtLml0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgbWF5YmVJdGVtIG9mIG1heWJlKVxuXHRcdFx0XHRpZEFycmF5LnB1c2gobWF5YmVJdGVtKTtcblxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCBudWxsLCB1cGRhdGVJbml0aWFsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Ly8gVE9ETzogbWF5YmUsIGJvb2xlYW4gaW5zdGVhZCBvZiBtZXNzYWdlXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxuXHQgKi9cblx0YWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbDogYm9vbGVhbiwgcmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKTogSXRlbVJlc291cmNlW10ge1xuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCBudWxsLCB1cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0aWYgKHVwZGF0ZUluaXRpYWwgJiYgbWFwRW50cnkubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGJhdGNoRXhwYW5kIChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZVtdLFxuXHRcdG5ld0NvbHVtbnM6IFJlcXVlc3RDb2x1bW5bXVxuXHQpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZVtdPiB7XG5cdFx0aWYgKG5ld0NvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjb2xsZWN0aW9ucyk7XG5cblx0XHRjb25zdCBwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXHRcdGxldCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdC8vIFRPRE86IGZpbHRlciBsb2NhbCBpdGVtcz9cblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbnMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeTtcblxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmRlZmVyKCk7XG5cblx0XHRcdHBhcmVudElkQXJyYXkucHVzaCgoPEVudHJ5UGFyZW50PiBjb2xsZWN0aW9uRW50cnkucGFyZW50KS5pdGVtSWQpO1xuXHRcdFx0aXRlbUVudHJpZXMgPSBpdGVtRW50cmllcy5jb25jYXQoY29sbGVjdGlvbkVudHJ5Lml0ZW1zKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRudWxsLFxuXHRcdFx0bmV3Q29sdW1uc1xuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0V4cGFuc2lvbihcblx0XHRcdFx0XHRuZXdDb2x1bW5zLFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xuXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4cGFuZENvbHVtbnMoY29sdW1uRXhwYW5zaW9uKTtcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuX3Jlc29sdmUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9ucztcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0YmF0Y2hFeHRlbmQgKFxuXHRcdHBhcmVudFR5cGU6IHN0cmluZyxcblx0XHRpdGVtVHlwZTogc3RyaW5nLFxuXHRcdG9wdGlvbnMsXG5cdFx0cXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvblJlc291cmNlW10sXG5cdFx0cmV0dXJuQWxsSXRlbXMgPSBmYWxzZVxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcD4ge1xuXHRcdGlmICghaGFzUHJvcGVydGllcyhjb2xsZWN0aW9ucykpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHt9KTtcblxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdID0gW107XG5cdFx0bGV0IGl0ZW1JZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IHF1ZXJ5Q2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKTtcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaCgoPEVudHJ5UGFyZW50PiBjb2xsZWN0aW9uRW50cnkucGFyZW50KS5pdGVtSWQpO1xuXG5cdFx0XHRpdGVtSWRBcnJheSA9IGl0ZW1JZEFycmF5LmNvbmNhdChjb2xsZWN0aW9uRW50cnkuZ2V0SWRBcnJheSgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKS5vYmplY3QsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKGl0ZW1JZEFycmF5KVxuXHRcdFx0KSxcblx0XHRcdG9wdGlvbnMuY29sdW1uc1xuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXTtcblx0XHRcdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmVudHJ5LmFkZEl0ZW1zKCAvLyBzaG91bGQgZ28gZmlyc3Rcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gcmV0dXJuQWxsSXRlbXMgPyBjb2xsZWN0aW9uUmVzb3VyY2UuaXRlbXMgOiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0YmF0Y2hGZXRjaCAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnMsXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA+IHtcblx0XHRjb25zdCByZXNvdXJjZSA9IHRoaXMuY3JlYXRlU3RhdHVzUmVzb3VyY2UocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIG9wdGlvbnMsIGxvY2FsQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwodGhpcy5nZXRQcm9taXNlcyhyZXNvdXJjZSkpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RJZHMgPSB0aGlzLmdldFJlcXVlc3RJZHMocmVzb3VyY2UpO1xuXG5cdFx0XHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRvcHRpb25zLnF1ZXJ5ID09PSBudWxsID9cblx0XHRcdFx0XHRcdFx0bnVsbCA6XG5cdFx0XHRcdFx0XHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LmNvbnN0cnVjdChvcHRpb25zLnF1ZXJ5LCBvcHRpb25zLnF1ZXJ5UGFyYW1zKS5wYXJzZSgpWzBdLFxuXHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zXG5cdFx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0xpbmtSZXNwb25zZShcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdHJlcXVlc3RJZHMsXG5cdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShyZXNvdXJjZSwgaXRlbUVudHJ5UmVzb3VyY2UsIGl0ZW1DYWNoZSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChoYXNQcm9wZXJ0aWVzKHJlc291cmNlW0VOVFJZX1NUQVRVUy5MT0NBTF0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKS50aGVuKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRpdGVtQ2FjaGVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc291cmNlW0VOVFJZX1NUQVRVUy5DQUNIRURdO1xuXG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZVN0YXR1c1Jlc291cmNlIChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9ucyxcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcblx0KTogQ29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXAge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBzdGF0dXNJZCBpbiBFTlRSWV9TVEFUVVMpXG5cdFx0XHRyZXN1bHRbRU5UUllfU1RBVFVTW3N0YXR1c0lkXV0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNsb25lT3B0aW9ucyhcblx0XHRcdFx0b3B0aW9ucyxcblx0XHRcdFx0e2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfVxuXHRcdFx0KTtcblxuXHRcdFx0Y29uc3Qgc3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0ZW50cnlPcHRpb25zLFxuXHRcdFx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZSxcblx0XHRcdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGVcblx0XHRcdCk7XG5cblx0XHRcdHJlc3VsdFtzdGF0dXNSZXNvdXJjZS5zdGF0dXNdW3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLmVudHJ5O1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnMsXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3Qgc3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBsb2NhbENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xuXHRcdGNvbnN0IGVudHJ5ID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XG5cblx0XHRzd2l0Y2ggKHN0YXR1c1Jlc291cmNlLnN0YXR1cykge1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGVudHJ5KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORDpcblx0XHRcdFx0cmV0dXJuIGVudHJ5LmV4cGFuZChvcHRpb25zLmNvbHVtbnMpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4gZW50cnkuX3Jlc29sdmUoKSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4gZW50cnkuZGVmZXIoKS5leHBhbmQob3B0aW9ucy5jb2x1bW5zKSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiBlbnRyeS5fcmVzb2x2ZSgpLFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkxPQ0FMOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoZW50cnksIGl0ZW1DYWNoZSk7XG5cdFx0XHRkZWZhdWx0OiAvLyBjYXNlIEVOVFJZX1NUQVRVUy5SRVNPTFZFOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlUmVtb3RlKGVudHJ5LCBpdGVtQ2FjaGUpO1xuXHRcdH1cblx0fVxuXG5cdGdldENhY2hlZEVudHJ5U3RhdHVzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IEVOVFJZX1NUQVRVUyB7XG5cdFx0aWYgKCFjb2xsZWN0aW9uRW50cnkuY29sdW1ucy5pc1N1cGVyc2V0T2Yob3B0aW9ucy5jb2x1bW5zKSkge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5FWFBBTkQ7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlBST01JU0VEO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQpIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQgPSBmYWxzZTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xuXHRcdH1cblxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXHR9XG5cblx0Z2V0RGVmZXJyZWRFbnRyeVN0YXR1cyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnMsXG5cdFx0cXVlcnksXG5cdFx0ZGVmZXJyZWRFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGVcblx0KToge2VudHJ5OiBDb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGJvb2xlYW59IHtcblx0XHRsZXQgY29sbGVjdGlvbkVudHJ5O1xuXG5cdFx0aWYgKCFvcHRpb25zLmRlZmVyUmVxdWVzdCkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucyk7XG5cblx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogZmFsc2V9O1xuXHRcdH1cblxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IGRlZmVycmVkRW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kUmVxdWVzdENvbHVtbnMob3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBmYWxzZX07XG5cdFx0fVxuXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucyk7XG5cblx0XHRyZXR1cm4ge2VudHJ5OiBkZWZlcnJlZEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSksIGlzRGVmZXJyZWQ6IHRydWV9O1xuXHR9XG5cblx0Z2V0RW50cnlTdGF0dXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zLFxuXHRcdGxvY2FsRW50cmllczogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdGRlZmVycmVkRW50cmllczogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IEVudHJ5U3RhdHVzPENvbGxlY3Rpb25FbnRyeT4ge1xuXHRcdGNvbnN0IHF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHRcdGxldCBjb2xsZWN0aW9uRW50cnk7XG5cdFx0bGV0IGlzRGVmZXJyZWQ7XG5cblx0XHRpZiAodGhpcy5pc0xvY2FsKG9wdGlvbnMpKSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPSBsb2NhbEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKVxuXHRcdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpfTtcblxuXHRcdFx0KHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkfSA9IHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgcXVlcnksIGRlZmVycmVkRW50cmllcykpO1xuXG5cdFx0XHRpZiAoaXNEZWZlcnJlZClcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRH07XG5cblx0XHRcdC8vIG5ldyBsb2NhbCBlbnRyeSBjcmVhdGVkLCBzaG91bGQgYmUgYWRkZWQgdG8gbG9jYWwgY2FjaGUgb25seVxuXHRcdFx0cmV0dXJuIHtlbnRyeTogbG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5MT0NBTH07XG5cdFx0fVxuXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcblxuXHRcdC8vIGVudHJ5IGFscmVhZHkgZXhpc3RzIGluIGdsb2JhbCBjYWNoZSwgYWRkIHRvIGxvY2FsIGNhY2hlXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGVudHJ5OiBsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSksXG5cdFx0XHRcdHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpXG5cdFx0XHR9O1xuXG5cdFx0KHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkfSA9IHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgcXVlcnksIGRlZmVycmVkRW50cmllcykpO1xuXG5cdFx0aWYgKGlzRGVmZXJyZWQpXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlBST01JU0VEfTtcblxuXHRcdC8vIG5ldyBnbG9iYWwgZW50cnkgY3JlYXRlZCwgYWRkIHRvIGJvdGggbG9jYWwgYW5kIGdsb2JhbCBjYWNoZVxuXHRcdGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblx0XHR0aGlzLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cblx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlJFU09MVkV9O1xuXHR9XG5cblx0aGFuZGxlQmF0Y2hSZXNwb25zZSAoXG5cdFx0c3RhdHVzUmVzb3VyY2UsXG5cdFx0aXRlbUVudHJ5Q29tcG91bmQ6IHtcblx0XHRcdGNvbHVtbnM6IENvbHVtblNldCxcblx0XHRcdGNvbHVtbkV4cGFuc2lvbj86IENvbHVtbkV4cGFuc2lvbixcblx0XHRcdGl0ZW1zPzogSXRlbUVudHJ5UGFyZW50SWRNYXBcblx0XHR9LFxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UuY2FjaGVkKVxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLmNhY2hlZFtwYXJlbnRJZF07XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLnJlc29sdmUpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHN0YXR1c1Jlc291cmNlLnJlc29sdmVbcGFyZW50SWRdO1xuXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpdGVtczogKDxJdGVtRW50cnlQYXJlbnRJZE1hcD4gaXRlbUVudHJ5Q29tcG91bmQuaXRlbXMpW3BhcmVudElkXVxuXHRcdFx0XHRcdFx0LmNvbmNhdChpdGVtQ2FjaGUuZ2V0TG9jYWxCeVF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSksXG5cdFx0XHRcdFx0Y29sdW1uczogaXRlbUVudHJ5Q29tcG91bmQuY29sdW1uc1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UuZXhwYW5kKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IHN0YXR1c1Jlc291cmNlLmV4cGFuZFtwYXJlbnRJZF07XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHBhbmRDb2x1bW5zKDxDb2x1bW5FeHBhbnNpb24+IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbkV4cGFuc2lvbik7XG5cblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnkuX3Jlc29sdmUoKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLmxvY2FsKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IHN0YXR1c1Jlc291cmNlLmxvY2FsW3BhcmVudElkXTtcblxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aXRlbXM6IGl0ZW1DYWNoZS5nZXRCeVF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSxcblx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zXG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJlc29sdmVMb2NhbCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnM7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykudGhlbihcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpdGVtczogaXRlbUNhY2hlLmdldEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zLCBmYWxzZSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVSZW1vdGUgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XG5cblx0XHRsZXQgY29sdW1uU2V0O1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhjb2xsZWN0aW9uRW50cnkpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1ucyxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQsXG5cdFx0XHRcdFx0Y29sdW1uU2V0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aXRlbXM6IGl0ZW1FbnRyaWVzLmNvbmNhdChpdGVtQ2FjaGUuZ2V0TG9jYWxCeVF1ZXJ5KGl0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkucXVlcnkpKSxcblx0XHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtblNldFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0aXNMb2NhbCAob3B0aW9ucykge1xuXHRcdGNvbnN0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBpZGVudGl0eSwgSXRlbUlkIH0gZnJvbSAnLi4vJztcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcy8nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25NYXRjaGVyIHtcblx0bWFwOiB7XG5cdFx0W2NvbGxlY3Rpb25FbnRyeUlkOiBudW1iZXJdOiB7XG5cdFx0XHRjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnlcblx0XHRcdG1hdGNoZXM6IHtcblx0XHRcdFx0W2l0ZW1JZDogbnVtYmVyXTogeyBpdGVtOiBJdGVtRW50cnksIGlzTWF0Y2g6IGJvb2xlYW4gfVxuXHRcdFx0fVxuXHRcdH1cblx0fSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVzOiBDb2xsZWN0aW9uQ2FjaGVbXSxcblx0XHRwcml2YXRlIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sXG5cdFx0cHJpdmF0ZSBjYWxsT25BY3RpdmF0ZTogYm9vbGVhblxuXHQpIHtcblxuXHR9XG5cblx0ZXhwYW5kIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgcXVlcnlNYXRjaGVyID0gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnRcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uQ2FjaGUgb2YgdGhpcy5jb2xsZWN0aW9uQ2FjaGVzKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cmllcyA9IGNvbGxlY3Rpb25DYWNoZS5nZXRCeUl0ZW1UeXBlKGl0ZW1FbnRyeS5pdGVtVHlwZSk7XG5cblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5ICBvZiBjb2xsZWN0aW9uRW50cmllcykge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnlJZCA9IGNvbGxlY3Rpb25FbnRyeS5pZDtcblx0XHRcdFx0bGV0IG1hdGNoZXM7XG5cblx0XHRcdFx0aWYgKHRoaXMubWFwW2NvbGxlY3Rpb25FbnRyeUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHRoaXMubWFwW2NvbGxlY3Rpb25FbnRyeUlkXSA9IHsgY29sbGVjdGlvbjogY29sbGVjdGlvbkVudHJ5LCBtYXRjaGVzOiB7fSB9O1xuXG5cdFx0XHRcdG1hdGNoZXMgPSB0aGlzLm1hcFtjb2xsZWN0aW9uRW50cnlJZF0ubWF0Y2hlcztcblxuXHRcdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0bWF0Y2hlc1tpdGVtSWRdID0ge1xuXHRcdFx0XHRcdGl0ZW06IGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRpc01hdGNoOiBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0KVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zICgpIHtcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xuXG5cdFx0XHRpZiAodGhpcy5oYXNGaXR0aW5nSXRlbXMobWFwRW50cnkubWF0Y2hlcykpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKG1hcEVudHJ5LmNvbGxlY3Rpb24pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGRUb0NvbGxlY3Rpb25zIChyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpIHtcblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XG5cdFx0XHRjb25zdCBmaXR0aW5nSXRlbUVudHJpZXMgPSBncm91cGVkSXRlbUVudHJpZXMuZml0dGluZztcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSkge1xuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0XHRcdHRoaXMudXBkYXRlSW5pdGlhbCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWN0aXZhdGVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhcblx0XHRcdFx0XHRmaXR0aW5nSXRlbUVudHJpZXMsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUluaXRpYWwsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFjdGl2YXRlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnVwZGF0ZUluaXRpYWwgJiYgZ3JvdXBlZEl0ZW1FbnRyaWVzLm1heWJlLmxlbmd0aCA+IDApXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHRoaXMudXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAocmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKSB7XG5cdFx0bGV0IHJlc3VsdDogSXRlbVJlc291cmNlW10gfCBudWxsID0gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xuXHRcdFx0Y29uc3QgZml0dGluZ0l0ZW1JZHMgPSB0aGlzLmdyb3VwSXRlbUlkcyhtYXBFbnRyeS5tYXRjaGVzKS5maXR0aW5nO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgPT09IG51bGwgfHwgY29sbGVjdGlvbkVudHJ5ICE9PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCByZXN1bHRSZXNvdXJjZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoKSB7XG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhncm91cGVkSXRlbUVudHJpZXMubm90Rml0dGluZywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0Ly8gZG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIGluaXRpYWxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhncm91cGVkSXRlbUVudHJpZXMuZml0dGluZywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0aWYgKGdyb3VwZWRJdGVtRW50cmllcy5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ3JvdXBJdGVtRW50cmllcyAobWF0Y2hlcykge1xuXHRcdGNvbnN0IGZpdHRpbmc6IEl0ZW1FbnRyeVtdID0gW107XG5cdFx0Y29uc3Qgbm90Rml0dGluZzogSXRlbUlkW10gPSBbXTtcblx0XHRjb25zdCBtYXliZTogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcblx0XHRcdGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gbWF0Y2guaXRlbTtcblx0XHRcdGNvbnN0IGlzTWF0Y2ggPSBtYXRjaC5pc01hdGNoO1xuXG5cdFx0XHRpZiAoaXNNYXRjaCA9PT0gdHJ1ZSlcblx0XHRcdFx0Zml0dGluZy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRlbHNlIGlmIChpc01hdGNoID09PSBmYWxzZSlcblx0XHRcdFx0bm90Rml0dGluZy5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRtYXliZS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgZml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZywgbWF5YmU6IG1heWJlIH07XG5cdH1cblxuXHRwcml2YXRlIGdyb3VwSXRlbUlkcyAobWF0Y2hlcykge1xuXHRcdC8vIGFsc28gaW5jbHVkZXMgJ21heWJlJztcblx0XHRjb25zdCBmaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xuXHRcdGNvbnN0IG5vdEZpdHRpbmc6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcblxuXHRcdFx0KG1hdGNoLmlzTWF0Y2ggPT09IGZhbHNlID8gbm90Rml0dGluZyA6IGZpdHRpbmcpLnB1c2gobWF0Y2guaXRlbS5pdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7IGZpdHRpbmc6IGZpdHRpbmcsIG5vdEZpdHRpbmc6IG5vdEZpdHRpbmcgfTtcblx0fVxuXG5cdHByaXZhdGUgaGFzRml0dGluZ0l0ZW1zIChtYXRjaGVzKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xuXHRcdFx0aWYgKG1hdGNoZXNbaXRlbUlkXS5pc01hdGNoID09PSB0cnVlKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8nO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2Uge1xuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXG5cdFx0XHRvcHRpb25zLFxuXHRcdFx0e1xuXHRcdFx0XHRlZGl0SXRlbXM6IGZhbHNlLFxuXHRcdFx0XHRlZGl0Q29sbGVjdGlvbjogZmFsc2UsXG5cdFx0XHRcdG1vZEluc3RhbnQ6IGZhbHNlLFxuXHRcdFx0XHRlbmFibGVTYXZlOiB0cnVlLFxuXHRcdFx0XHRvbkl0ZW1zQ3JlYXRlZDogbm9vcCxcblx0XHRcdFx0b25DaGFuZ2U6IG5vb3AsIC8vIG5lZWRlZCBmb3IgY29tcGFyaXNvblxuXHRcdFx0XHRvbkFkZDogbm9vcCxcblx0XHRcdFx0b25SZW1vdmU6IG5vb3AsXG5cdFx0XHRcdG9uQWRkSW5pdGlhbDogbm9vcCxcblx0XHRcdFx0b25SZW1vdmVJbml0aWFsOiBub29wLFxuXHRcdFx0XHRyZXNvdXJjZUtleTogbnVsbCwgLy8gVE9ETzogcmVtb3ZlXG5cdFx0XHRcdGNsZWFyT25UYWJDaGFuZ2U6IHRydWUsXG5cdFx0XHRcdGNsZWFyT25TdWJUYWJDaGFuZ2U6IHRydWUsXG5cdFx0XHRcdGN1c3RvbTogbnVsbFxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRnZXRJZEFycmF5IChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSkge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1UeXBlLCBSZXF1ZXN0Q29sdW1uLCBSZXF1ZXN0Q29sdW1ucywgUmVzcG9uc2VDb2x1bW4sIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uQ2FjaGUge1xuXHRjYWNoZTogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblx0YWxsQ29sdW1uczoge1tpdGVtVHlwZTogc3RyaW5nXTogYm9vbGVhbn0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0c2V0Q29sdW1uIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uOiBSZXNwb25zZUNvbHVtbikge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRcdGlmIChjYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGNhY2hlW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0Y29uc3QgZW50cnkgPSBjYWNoZVtpdGVtVHlwZV07XG5cdFx0Y29uc3QgY29sdW1uSWQgPSByZXNwb25zZUNvbHVtbi5pZDtcblxuXHRcdGlmIChlbnRyeVtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdGVudHJ5W2NvbHVtbklkXSA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0cmV0dXJuIGVudHJ5W2NvbHVtbklkXTtcblx0fVxuXG5cdHNldENvbHVtbnMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiBSZXNwb25zZUNvbHVtbk1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHJlc3BvbnNlVHlwZSBpbiByZXNwb25zZUNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbnMgPSByZXNwb25zZUNvbHVtbnNbcmVzcG9uc2VUeXBlXTtcblxuXHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxuXHRcdFx0XHRyZXN1bHRbcmVzcG9uc2VUeXBlXVtjb2x1bW5JZF0gPSB0aGlzLnNldENvbHVtbihyZXNwb25zZVR5cGUsIGNvbHVtbnNbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpXG5cdFx0XHR0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID0gdHJ1ZTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZXRyaWV2ZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1uc1xuXHQpOiB7Y2FjaGVkOiBSZXNwb25zZUNvbHVtbk1hcCwgbWlzc2luZzogUmVxdWVzdENvbHVtbnN9IHtcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcblx0XHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHRoaXMuZ2V0Q29sdW1ucyhpdGVtVHlwZSksIG1pc3Npbmc6IFtdfTtcblxuXHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHt9LCBtaXNzaW5nOiB0cnVlfTtcblx0XHR9XG5cblx0XHRjb25zdCByZXNwb25zZUFjY3VtdWxhdG9yID0ge307XG5cdFx0Y29uc3QgcmVxdWVzdEFjY3VtdWxhdG9yID0gW107XG5cblx0XHR0aGlzLnJldHJpZXZlQ29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cblx0XHRyZXR1cm4ge2NhY2hlZDogcmVzcG9uc2VBY2N1bXVsYXRvciwgbWlzc2luZzogcmVxdWVzdEFjY3VtdWxhdG9yfTtcblx0fVxuXG5cdGNvbnRhaW5zQWxsIChpdGVtVHlwZTogSXRlbVR5cGUpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9PT0gdHJ1ZTtcblx0fVxuXG5cdGdldENvbHVtbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IFJlc3BvbnNlQ29sdW1uTWFwIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0XHRyZXR1cm4ge1tpdGVtVHlwZV06IGNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkID8gW10gOiBjYWNoZVtpdGVtVHlwZV19O1xuXHR9XG5cblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbnMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbltdLFxuXHRcdHJlcXVlc3RBY2N1bXVsYXRvcjogUmVxdWVzdENvbHVtbltdLFxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IHZvaWQge1xuXHRcdC8vIGFsd2F5cyByZXRyaWV2ZSB0aGUgaWQgY29sdW1uXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgJ2lkJywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucylcblx0XHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW4sIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cdH1cblxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1uIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbjogUmVxdWVzdENvbHVtbixcblx0XHRyZXF1ZXN0QWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uW10sXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcjogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5VdGlsLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uKGl0ZW1UeXBlLCBjb2x1bW4uaWQpO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKHJlcXVlc3RDb2x1bW4pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdW2NvbHVtbi5pZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y29uc3QgbWlzc2luZ0Rlcml2ZWQgPSBbXTtcblxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW5zKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjb2x1bW4uY2hpbGRyZW4sIG1pc3NpbmdEZXJpdmVkLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblxuXHRcdGlmIChtaXNzaW5nRGVyaXZlZC5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHRyZXF1ZXN0QWNjdW11bGF0b3IucHVzaCh7W2NvbHVtbi5pZF06IG1pc3NpbmdEZXJpdmVkfSk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbHVtbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5JZDogc3RyaW5nKTogUmVzcG9uc2VDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZVtpdGVtVHlwZV07XG5cblx0XHRpZiAoY2FjaGUgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdHJldHVybiBjYWNoZVtjb2x1bW5JZF07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblNldCwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uUmVzdWx0LCBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbiwgUmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uIHtcblx0ZXhwYW5zaW9uTWFwOiB7W2NvbHVtblNldElkOiBudW1iZXJdOiBDb2x1bW5FeHBhbnNpb25SZXN1bHR9ID0ge307XG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcblx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5bXTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLFxuXHRcdHB1YmxpYyByZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCkge1xuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gcmVxdWVzdENvbHVtbnMgc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheSwgd2hlbiBpdCBpcyB0cnVlIGRlcml2ZWQgY29sdW1uIGluZm9ybWF0aW9uIHdpbGwgYmUgbG9zdFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0cnVlO1xuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMucHVzaChjb2x1bW5JZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gZmFsc2U7XG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zID0gcmVxdWVzdENvbHVtbnM7XG5cdFx0fVxuXHR9XG5cblx0cnVuIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IENvbHVtbkV4cGFuc2lvblJlc3VsdCB8IG51bGwge1xuXHRcdGNvbnN0IGNvbHVtblNldElkID0gY29sdW1uU2V0LmlkO1xuXG5cdFx0aWYgKHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXTtcblxuXHRcdGNvbnN0IGlzQ29sdW1uU3Vic2V0ID0gdGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyxcblx0XHRcdGNvbHVtblNldC5yZXF1ZXN0LFxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZVxuXHRcdCk7XG5cblx0XHRpZiAoaXNDb2x1bW5TdWJzZXQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSA9IGNvbHVtblNldC5leHBhbmQoXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUsXG5cdFx0XHR0aGlzLnJlc3BvbnNlQ29sdW1uc1xuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5leHBhbnNpb25NYXBbY29sdW1uU2V0SWRdO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5DYWNoZSwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zLCBSZXNwb25zZUNvbHVtbiwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5IYW5kbGVyIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGNhY2hlOiBDb2x1bW5DYWNoZSxcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRzZXRDb2x1bW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogUmVzcG9uc2VDb2x1bW4ge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbihpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pO1xuXHR9XG5cblx0c2V0Q29sdW1ucyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IFJlc3BvbnNlQ29sdW1uTWFwIHtcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0fVxuXG5cdGZldGNoSXRlbVR5cGVUcmFuc2xhdGlvbnMgKGl0ZW1UeXBlczogSXRlbVR5cGVbXSk6IFByb21pc2U8e1tpdGVtVHlwZTogc3RyaW5nXTogc3RyaW5nfT4ge1xuXHRcdGNvbnN0IHByb21pc2VzOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBQcm9taXNlPFJlc3BvbnNlQ29sdW1uTWFwPn0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKVxuXHRcdFx0cHJvbWlzZXNbaXRlbVR5cGVdID0gdGhpcy5mZXRjaChpdGVtVHlwZSwgWydpZCddKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcylcblx0XHRcdC50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHJlc3BvbnNlKVxuXHRcdFx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHJlc3BvbnNlW2l0ZW1UeXBlXVtpdGVtVHlwZV0uaWQubmFtZTtcblxuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0fVxuXG5cdHJlcXVlc3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sdW1uczogUmVxdWVzdENvbHVtbnMsIHBhcmFtcyA9IHtmaWx0ZXI6IGZhbHNlfSk6IFByb21pc2U8UmVzcG9uc2VDb2x1bW5NYXA+IHtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtbaXRlbVR5cGVdOiBjb2x1bW5zfTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCBwYXJhbXMpLnRoZW4oXG5cdFx0XHRjb2x1bW5SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0Y29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsIHBhcmFtcz8pOiBQcm9taXNlPFJlc3BvbnNlQ29sdW1uTWFwPiB7XG5cdFx0Y29uc3QgY29sdW1uUmVzb3VyY2UgPSB0aGlzLmNhY2hlLnJldHJpZXZlKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk7XG5cblx0XHRpZiAoY29sdW1uUmVzb3VyY2UubWlzc2luZyAhPT0gdHJ1ZSAmJiBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sdW1uUmVzb3VyY2UuY2FjaGVkKTtcblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIGNvbHVtblJlc291cmNlLm1pc3NpbmcsIHBhcmFtcykudGhlbihcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMoXG5cdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0XHRcdGNvbHVtblJlc291cmNlLmNhY2hlZFxuXHRcdFx0XHQpLm1lcmdlZDtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0ZmV0Y2hBbGwgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IFByb21pc2U8UmVzcG9uc2VDb2x1bW5NYXA+IHtcblx0XHRpZiAodGhpcy5jYWNoZS5jb250YWluc0FsbChpdGVtVHlwZSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMuY2FjaGUuZ2V0Q29sdW1ucyhpdGVtVHlwZSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdChpdGVtVHlwZSwgdHJ1ZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENPTFVNTl9TRVBFUkFUT1IgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mbyB7XG5cdGlkOiBzdHJpbmc7XG5cdGxldmVsOiBudW1iZXI7XG5cdHBhdGg6IHN0cmluZztcblx0dGFpbFBhdGg6IHN0cmluZztcblx0aXRlbVR5cGU6IHN0cmluZyA9ICcnO1xuXHRjaGlsZHJlbjogQ29sdW1uSW5mb1tdID0gW107XG5cdGlzTGVhZjogYm9vbGVhbiA9IHRydWU7XG5cblx0Y29uc3RydWN0b3IgKHJlYWRvbmx5IGFwaUNvbHVtbjogYW55LCByZWFkb25seSBwYXJlbnQ6IENvbHVtbkluZm8gfCBudWxsID0gbnVsbCkge1xuXHRcdGNvbnN0IGNvbHVtbklkID0gYXBpQ29sdW1uLmlkO1xuXG5cdFx0dGhpcy5pZCA9IGNvbHVtbklkO1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy5sZXZlbCA9IDA7XG5cdFx0XHR0aGlzLnBhdGggPSBjb2x1bW5JZDtcblx0XHRcdHRoaXMudGFpbFBhdGggPSAnJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5sZXZlbCA9IHBhcmVudC5sZXZlbCArIDE7XG5cdFx0XHR0aGlzLnBhdGggPSBwYXJlbnQucGF0aCArIENPTFVNTl9TRVBFUkFUT1IgKyBjb2x1bW5JZDtcblx0XHRcdHRoaXMudGFpbFBhdGggPSBwYXJlbnQubGV2ZWwgPT09IDAgP1xuXHRcdFx0XHRjb2x1bW5JZCA6XG5cdFx0XHRcdHBhcmVudC50YWlsUGF0aCArIENPTFVNTl9TRVBFUkFUT1IgKyBjb2x1bW5JZDtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkhhbmRsZXIsIENvbHVtbkluZm8sIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvblJlc3VsdCwgUmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBlbXB0eU9iamVjdCA9IHt9O1xubGV0IGN1cnJlbnRJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXQge1xuXHRpZCA9ICsrY3VycmVudElkO1xuXG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcblx0cmVzcG9uc2U6IFJlc3BvbnNlQ29sdW1uTWFwID0gZW1wdHlPYmplY3Q7XG5cblx0bGluazogQ29sdW1uSW5mbyB8IG51bGwgPSBudWxsO1xuXHRtYWluOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0ZGVyaXZlZDogQ29sdW1uSW5mb1tdID0gW107XG5cdHJvb3Q6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRsZWFmOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0Zm9ybWF0dGVkOiB7bWFpbjogQ29sdW1uSW5mb1tdLCBkZXJpdmVkOiBDb2x1bW5JbmZvW119ID0ge21haW46IFtdLCBkZXJpdmVkOiBbXX07XG5cdGZpbHRlcmVkOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0Y3VzdG9tOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0c2VhcmNoYWJsZTogQ29sdW1uSW5mb1tdID0gW107XG5cdGl0ZW06IENvbHVtbkluZm9bXSA9IFtdO1xuXHRub3RJdGVtOiBDb2x1bW5JbmZvW10gPSBbXTtcblxuXHRlbmFibGVDYWNoaW5nOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGUsXG5cdFx0cHVibGljIHJlcXVlc3Q6IFJlcXVlc3RDb2x1bW5zLFxuXHQpIHtcblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRoaXMucmVxdWVzdCA9PT0gdHJ1ZTtcblx0fVxuXG5cdHJlc29sdmUgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsIGVuYWJsZUNhY2hpbmcgPSB0cnVlLCBpbmNsdWRlSWRDb2x1bW4gPSB0cnVlKTogdGhpcyB7XG5cdFx0dGhpcy5lbmFibGVDYWNoaW5nID0gZW5hYmxlQ2FjaGluZztcblxuXHRcdGlmICh0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSlcblx0XHRcdHRoaXMucHJvY2Vzc1Jlc3BvbnNlQ29sdW1ucyhyZXNwb25zZUNvbHVtbnMpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMucHJvY2Vzc1JlcXVlc3RDb2x1bW5zKHJlc3BvbnNlQ29sdW1ucywgaW5jbHVkZUlkQ29sdW1uKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZXhwYW5kUmVxdWVzdENvbHVtbnMgKGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0Y29uc3QgbWVyZ2VkUmVxdWVzdENvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLnJlcXVlc3QsIGNvbHVtbnMpLm1lcmdlZDtcblxuXHRcdHRoaXMucmVxdWVzdCA9IG1lcmdlZFJlcXVlc3RDb2x1bW5zO1xuXHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gbWVyZ2VkUmVxdWVzdENvbHVtbnMgPT09IHRydWU7XG5cdH1cblxuXHRpc1N1cGVyc2V0T2YgKGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChjb2x1bW5zLCB0aGlzLnJlcXVlc3QsIHRoaXMucmVxdWVzdENvbHVtbnNUcnVlKTtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1Jlc3BvbnNlQ29sdW1ucyAocmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcblxuXHRcdHRoaXMucmVxdWVzdCA9IFtdO1xuXHRcdHRoaXMucmVzcG9uc2UgPSB0aGlzLmVuYWJsZUNhY2hpbmcgP1xuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbnModGhpcy5pdGVtVHlwZSwgdHJ1ZSwgcmVzcG9uc2VDb2x1bW5zKSA6XG5cdFx0XHRyZXNwb25zZUNvbHVtbnM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pIHtcblx0XHRcdHRoaXMubWFpbi5wdXNoKHRoaXMuZ2V0Q29sdW1uSW5mbyhjb2x1bW5JZCwgaXRlbVR5cGUsIFtdLCBudWxsLCByZXNwb25zZUNvbHVtbnMpKTtcblx0XHRcdHRoaXMucmVxdWVzdC5wdXNoKGNvbHVtbklkKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NSZXF1ZXN0Q29sdW1ucyAocmVzcG9uc2VDb2x1bW5zLCBpbmNsdWRlSWRDb2x1bW4pIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSA8b2JqZWN0W10+IHRoaXMucmVxdWVzdDsgLy8gd2UgY2FuIGFzc3VtZSByZXF1ZXN0Q29sdW1ucyBpcyBhbiBhcnJheSBoZXJlXG5cblx0XHR0aGlzLnJlc3BvbnNlID0ge307XG5cblx0XHRpZiAocmVxdWVzdENvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhyZXF1ZXN0Q29sdW1uLCBpdGVtVHlwZSwgbnVsbCwgcmVzcG9uc2VDb2x1bW5zKTtcblxuXHRcdFx0aWYgKGNvbHVtbkluZm8gPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLm1haW4ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdFx0aWYgKCFjb2x1bW5JbmZvLmlzTGVhZilcblx0XHRcdFx0dGhpcy5yb290LnB1c2goY29sdW1uSW5mbyk7XG5cdFx0fVxuXG5cdFx0aWYgKGluY2x1ZGVJZENvbHVtbiAmJiB0aGlzLnJlc3BvbnNlW2l0ZW1UeXBlXS5pZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbygnaWQnLCBpdGVtVHlwZSwgbnVsbCwgcmVzcG9uc2VDb2x1bW5zKTtcblxuXHRcdFx0aWYgKGNvbHVtbkluZm8gIT09IG51bGwpXG5cdFx0XHRcdHRoaXMubWFpbi5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0UmVxdWVzdENvbHVtbkluZm8gKHJlcXVlc3RDb2x1bW4sIGl0ZW1UeXBlLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucykge1xuXHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBwYXJzZWRDb2x1bW4uaWQ7XG5cblx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XG5cblx0XHRpZiAocmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXTtcblxuXHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ05vIGFwaSBjb2x1bW4gZm9yIHJlcXVlc3QgY29sdW1uJywgY29sdW1uSWQsICdmb3IgaXRlbVR5cGUnLCBpdGVtVHlwZSk7XG5cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmVuYWJsZUNhY2hpbmcpXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHRoaXMuY29sdW1uSGFuZGxlci5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcblxuXHRcdGNvbnN0IHJlc3VsdFJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcblxuXHRcdGlmIChyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0aWYgKHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXVtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdHJldHVybiB0aGlzLmdldENvbHVtbkluZm8oY29sdW1uSWQsIGl0ZW1UeXBlLCBwYXJzZWRDb2x1bW4uY2hpbGRyZW4sIHBhcmVudCwgcmVzcG9uc2VDb2x1bW5zKTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q29sdW1uSW5mbyAoY29sdW1uSWQsIGl0ZW1UeXBlLCBjaGlsZHJlbiwgcGFyZW50LCByZXNwb25zZUNvbHVtbnMpOiBDb2x1bW5JbmZvIHtcblx0XHRjb25zdCBjb2x1bW5VdGlsID0gdGhpcy5jb2x1bW5VdGlsO1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkuY29uc3RydWN0KHJlc3BvbnNlQ29sdW1uLCBwYXJlbnQpO1xuXHRcdGNvbnN0IGlzRGVyaXZlZCA9IHBhcmVudCAhPT0gbnVsbDtcblxuXHRcdGlmIChpc0Rlcml2ZWQpXG5cdFx0XHR0aGlzLmRlcml2ZWQucHVzaChjb2x1bW5JbmZvKTtcblx0XHRlbHNlIC8vIHdlIGNvdWxkIHBvc3NpYmx5IGFkZCBkZXJpdmVkIGNvbHVtbnMgdG8gJ25vdEl0ZW0nXG5cdFx0XHR0aGlzW2NvbHVtblV0aWwuaXNJdGVtQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSA/ICdpdGVtJyA6ICdub3RJdGVtJ10ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRm9ybWF0dGVkQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuZm9ybWF0dGVkW2lzRGVyaXZlZCA/ICdkZXJpdmVkJyA6ICdtYWluJ10ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRmlsdGVyZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5maWx0ZXJlZC5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNTZWFyY2hhYmxlQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuc2VhcmNoYWJsZS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNDdXN0b21Db2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5jdXN0b20ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChyZXNwb25zZUNvbHVtbi50eXBlID09PSAnbGluaycpXG5cdFx0XHR0aGlzLmxpbmsgPSBjb2x1bW5JbmZvO1xuXG5cdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5sZWFmLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRcdHJldHVybiBjb2x1bW5JbmZvO1xuXHRcdH1cblxuXHRcdGNvbHVtbkluZm8uaXRlbVR5cGUgPSByZXNwb25zZUNvbHVtbi5pdGVtVHlwZTtcblx0XHRjb2x1bW5JbmZvLmNoaWxkcmVuID0gW107XG5cdFx0Y29sdW1uSW5mby5pc0xlYWYgPSBmYWxzZTtcblxuXHRcdC8vIGNvbHVtbnMgaXMgKm5vdCogdHJ1ZVxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW5JZCBvZiBjaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgY2hpbGRJbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhcblx0XHRcdFx0Y2hpbGRDb2x1bW5JZCxcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsXG5cdFx0XHRcdGNvbHVtbkluZm8sXG5cdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGNoaWxkSW5mbyA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGNvbHVtbkluZm8uY2hpbGRyZW4ucHVzaChjaGlsZEluZm8pO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5JbmZvO1xuXHR9XG5cblx0ZXhwYW5kIChcblx0XHRyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVxdWVzdENvbHVtbnNUcnVlOiBib29sZWFuLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogQ29sdW1uRXhwYW5zaW9uUmVzdWx0IHtcblx0XHRjb25zdCByZXF1ZXN0TWVyZ2VSZXN1bHQgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLnJlcXVlc3QsIHJlcXVlc3RDb2x1bW5zKTtcblx0XHRjb25zdCBtZXJnZWRSZXNwb25zZUNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWxcblx0XHRcdC5tZXJnZVJlc3BvbnNlQ29sdW1ucyh0aGlzLnJlc3BvbnNlLCByZXNwb25zZUNvbHVtbnMpXG5cdFx0XHQubWVyZ2VkO1xuXG5cdFx0Y29uc3QgbWVyZ2VkID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRyZXF1ZXN0TWVyZ2VSZXN1bHQubWVyZ2VkLFxuXHRcdFx0bWVyZ2VkUmVzcG9uc2VDb2x1bW5zXG5cdFx0KTtcblxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0dGhpcy5pdGVtVHlwZSxcblx0XHRcdHJlcXVlc3RNZXJnZVJlc3VsdC5kaWZmZXJlbmNlLFxuXHRcdFx0bWVyZ2VkUmVzcG9uc2VDb2x1bW5zLCAvLyB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gbG9vayB1cCB0aGUgcGFyZW50IG9mIGRlcml2ZWQgY29sdW1uc1xuXHRcdFx0ZmFsc2UsXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cblx0XHRtZXJnZWQucmVxdWVzdENvbHVtbnNUcnVlID0gdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgfHwgcmVxdWVzdENvbHVtbnNUcnVlO1xuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SLCBSRU5ERVJfQVNfU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IExvY2FsQ29sdW1uLCBSZXF1ZXN0Q29sdW1uLCBSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgZXh0ZW5kLCBnZXRGaXJzdFByb3BlcnR5LCBpc0RlZmluZWQgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uVXRpbCB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGdldENvbHVtblBhdGggKGNvbHVtbnMsIHJlbmRlckFzKSB7XG5cdFx0bGV0IHNlcGFyYXRvciA9ICcnO1xuXHRcdGxldCByZXN1bHQgPSAnJztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdHJlc3VsdCArPSBzZXBhcmF0b3IgKyBjb2x1bW4uaWQ7XG5cdFx0XHRzZXBhcmF0b3IgPSBDT0xVTU5fU0VQRVJBVE9SO1xuXHRcdH1cblxuXHRcdGlmIChyZW5kZXJBcyAhPT0gbnVsbClcblx0XHRcdHJlc3VsdCArPSBSRU5ERVJfQVNfU0VQRVJBVE9SICsgcmVuZGVyQXM7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0RGF0ZUZvcm1hdE9wdGlvbnMgKGNvbHVtblR5cGUpIHtcblx0XHRjb25zdCBub3cgPSBtb21lbnQoKTtcblxuXHRcdGNvbnN0IGZvcm1hdHMgPSB7XG5cdFx0XHQnSi1NLVknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZJyksXG5cdFx0XHQnSi1NJzogbm93LmZvcm1hdCgnREQtTU0nKSxcblx0XHRcdCdqK0YrWSc6IG5vdy5mb3JtYXQoJ0QgTU1NIFlZWVknKSxcblx0XHRcdCdEK2orRitZJzogbm93LmZvcm1hdCgnZGRkZCBEIE1NTSBZWVlZJyksXG5cdFx0XHQnRic6IG5vdy5mb3JtYXQoJ01NTScpLFxuXHRcdFx0J2YnOiBub3cuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHQnRCc6IG5vdy5mb3JtYXQoJ2RkZGQnKSxcblx0XHRcdCdkJzogbm93LmZvcm1hdCgnZGRkJylcblx0XHR9O1xuXG5cdFx0aWYgKGNvbHVtblR5cGUgPT09ICdkYXRldGltZScpXG5cdFx0XHRleHRlbmQoZm9ybWF0cywge1xuXHRcdFx0XHQnSi1NLVkrSDppJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWSBISDptbScpLFxuXHRcdFx0XHQnSi1NK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NIEhIOm1tJyksXG5cdFx0XHRcdCdqK0YrWStIOmknOiBub3cuZm9ybWF0KCdERCBNTU1NIFkgSEg6bW0nKSxcblx0XHRcdFx0J0QraitGK1krSDppJzogbm93LmZvcm1hdCgnZGRkZCBERCBNTU0gWSBISDptbScpLFxuXHRcdFx0XHQnSDppJzogbm93LmZvcm1hdCgnSEg6bW0nKSxcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIGZvcm1hdHM7XG5cdH1cblxuXHRpc1N0cmluZ0NvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAncGhvbmUnOlxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0XHQvLyBjYXNlICdodG1sJzogLy8gVE9ETzogc29ydCBvbiBmaWx0ZXJlZCB2YWx1ZVxuXHRcdFx0XHQvLyBjYXNlICdlbnVtJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGbG9hdENvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZG91YmxlJzogLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXNcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzSW50Q29sdW1uIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdpbnQnOiAvLyBpbnRlZ2VyIHR5cGVzXG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc051bWJlckNvbHVtbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXNGbG9hdENvbHVtbihjb2x1bW4pIHx8IHRoaXMuaXNJbnRDb2x1bW4oY29sdW1uKTtcblx0fVxuXG5cdGlzQ3VzdG9tQ29sdW1uIChjb2x1bW4pIHtcblx0XHRyZXR1cm4gY29sdW1uLmZpZWxkdHlwZSA9PT0gJ2N1c3RvbWZpZWxkJztcblx0fVxuXG5cdGlzSXRlbUNvbHVtbiAoY29sdW1uLCBpbmNsdWRlSWQgPSB0cnVlKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnaWQnOlxuXHRcdFx0XHRyZXR1cm4gaW5jbHVkZUlkO1xuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdjaGlsZCc6XG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0RhdGVDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc1JlbmRlcmVkQ29sdW1uIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGaWx0ZXJlZENvbHVtbiAoY29sdW1uKSB7XG5cdFx0Ly8gdWdseSBoYWNrIDotKFxuXHRcdGlmIChjb2x1bW4uaWQgPT09ICdzdGFmZmVsJylcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKGNvbHVtbi5nZW5lcmF0b3IgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3F1YW50aXR5Jzpcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3VybCc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0Y2FzZSAnaHRtbCc6XG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGb3JtYXR0ZWRDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzU2VsZWN0YWJsZUNvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnYmxvYic6XG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcblx0XHRcdGNhc2UgJ2ZvcmNldXBkYXRlJzpcblx0XHRcdGNhc2UgJ2lkJzpcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0Y2FzZSAnb3JkZXInOlxuXHRcdFx0Y2FzZSAncGFyZW50aWQnOlxuXHRcdFx0Y2FzZSAncGFyZW50dHlwZSc6XG5cdFx0XHRjYXNlICdwYXNzd29yZCc6XG5cdFx0XHRjYXNlICd0b2tlbic6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGhhc0xvY2F0aW9uUHJvcGVydHkgKGNvbHVtbiwgbG9jYXRpb24pIHtcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuXHRcdHJldHVybiAobG9jYXRpb24gJiBjb2x1bW4ubG9jYXRpb24pICE9PSAwO1xuXHR9XG5cblx0aXNFZGl0YWJsZUNvbHVtbiAoY29sdW1uKSB7XG5cdFx0aWYgKGNvbHVtbi5yZWFkT25seSlcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpc1NlYXJjaGFibGVDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3Bob25lJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAnaHRtbCc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGdldERlZmF1bHRXZWlnaHQgKGNvbHVtbikge1xuXHRcdC8vIFx0XHRcdGNvbnNvbGUubG9nKCdnZXREZWZhdWx0V2VpZ2h0JywgY29sdW1uKTtcblxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdib29sJzpcblx0XHRcdGNhc2UgJ2ludCc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdwb3dlcic6XG5cdFx0XHRjYXNlICdjdXJyZW50Jzpcblx0XHRcdFx0cmV0dXJuIDAuNTtcblxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0XHRyZXR1cm4gMS41O1xuXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdodG1sJzpcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q29tcGFyYXRvcnMgKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJz4nLCAnPCddO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIFsnPicsICc8J107XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJyE9J107XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmV0dXJucyB3aGV0aGVyIHRoZSBmaXJzdCBjb2x1bW4gc2V0IGlzIGEgc3Vic2V0IG9mIHRoZSBzZWNvbmRcblx0aXNDb2x1bW5TdWJzZXQgKGZpcnN0LCBzZWNvbmQsIHNlY29uZFRydWUpIHtcblx0XHRpZiAoZmlyc3QgPT09IHRydWUpIC8vID09PSBvcGVyYXRvciBuZWVkZWQgaGVyZVxuXHRcdFx0cmV0dXJuIHNlY29uZFRydWU7XG5cblx0XHQvLyB3aGVuIHNlY29uZFRydWUgaXMgdGhlIGNhc2Ugd2UgbmVlZCB0byBjaGVjayBmb3IgZGVyaXZlZCBjb2x1bW5zXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgZmlyc3QpIHtcblx0XHRcdGlmICghdGhpcy5jb250YWluc0NvbHVtbihjb2x1bW4sIHNlY29uZCkpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNvbnRhaW5zQ29sdW1uIChyZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbikge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xuXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSlcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhdGhpcy5jb250YWluc0NvbHVtbihcblx0XHRcdFx0XHRjaGlsZENvbHVtbixcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uLmlkXVxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZSAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbk1hcCkge1xuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xuXHRcdFx0Y29uc3QgcGFyc2VkQ29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IHBhcnNlZENvbHVtbi5jaGlsZHJlbjtcblx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uTWFwW2l0ZW1UeXBlXTtcblx0XHRcdGxldCByZXNwb25zZUNvbHVtbjtcblxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW3BhcnNlZENvbHVtbi5pZF07XG5cblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdGlmIChjaGlsZHJlbi5sZW5ndGggPiAwICYmICF0aGlzLnJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZShyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY2hpbGRyZW4sIHJlc3BvbnNlQ29sdW1uTWFwKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29weVJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyk6IFJlcXVlc3RDb2x1bW5zIHtcblx0XHRpZiAoY29sdW1ucyA9PT0gdHJ1ZSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0Y29uc3QgcmVzdWx0OiBSZXF1ZXN0Q29sdW1uW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmNvcHlSZXF1ZXN0Q29sdW1uKGNvbHVtbikpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNvcHlSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uOiBSZXF1ZXN0Q29sdW1uKTogUmVxdWVzdENvbHVtbiB7XG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBjb2x1bW4uaWQ7XG5cblx0XHRjb25zdCBjaGlsZHJlbjogUmVxdWVzdENvbHVtbltdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbilcblx0XHRcdGNoaWxkcmVuLnB1c2godGhpcy5jb3B5UmVxdWVzdENvbHVtbihjaGlsZENvbHVtbikpO1xuXG5cdFx0cmV0dXJuIHtbY29sdW1uLmlkXTogY2hpbGRyZW59O1xuXHR9XG5cblx0LyoqXG5cdCAqIERpZmZlcmVuY2U6IGNvbHVtbnMgdGhhdCBhcmUgaW4gc2Vjb25kLCBidXQgbm90IGluIGZpcnN0XG5cdCAqIEBwYXJhbSB7QXJyYXl9IGZpcnN0XG5cdCAqIEBwYXJhbSB7QXJyYXl9IHNlY29uZFxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyAnbWVyZ2VkJyBhbmQgJ2RpZmZlcmVuY2UnIHByb3BlcnRpZXNcblx0ICovXG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0OiBSZXF1ZXN0Q29sdW1ucywgc2Vjb25kOiBSZXF1ZXN0Q29sdW1ucyk6IHttZXJnZWQ6IFJlcXVlc3RDb2x1bW5zLCBkaWZmZXJlbmNlOiBSZXF1ZXN0Q29sdW1uc30ge1xuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXG5cdFx0XHRyZXR1cm4ge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogW119O1xuXG5cdFx0aWYgKHNlY29uZCA9PT0gdHJ1ZSlcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiB0cnVlfTtcblxuXHRcdGNvbnN0IG1lcmdlZDogUmVxdWVzdENvbHVtbnMgPSB0aGlzLmNvcHlSZXF1ZXN0Q29sdW1ucyhmaXJzdCk7XG5cdFx0Y29uc3QgZGlmZmVyZW5jZTogUmVxdWVzdENvbHVtbnMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHNlY29uZCkge1xuXHRcdFx0Y29uc3QgYWRkZWRDb2x1bW4gPSB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbihjb2x1bW4sIG1lcmdlZCk7XG5cblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcblx0XHRcdFx0ZGlmZmVyZW5jZS5wdXNoKGFkZGVkQ29sdW1uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcblx0fVxuXG5cdG1lcmdlUmVxdWVzdENvbHVtbiAocmVxdWVzdENvbHVtbiwgZGVzdGluYXRpb24pIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2gocmVxdWVzdENvbHVtbik7XG5cdFx0XHRyZXR1cm4gcmVxdWVzdENvbHVtbjtcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0aWYgKHR5cGVvZiBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPSB7XG5cdFx0XHRcdFtjb2x1bW4uaWRdOiBbXVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRjb25zdCBhZGRlZENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgYWRkZWRDb2x1bW4gPSB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbihcblx0XHRcdFx0Y2hpbGRDb2x1bW4sXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXG5cdFx0XHRcdGFkZGVkQ29sdW1ucy5wdXNoKGFkZGVkQ29sdW1uKTtcblx0XHR9XG5cblx0XHRpZiAoYWRkZWRDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdFtjb2x1bW4uaWRdOiBhZGRlZENvbHVtbnNcblx0XHR9O1xuXHR9XG5cblx0cGFyc2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uKToge2lkOiBzdHJpbmcsIGNoaWxkcmVuOiBSZXF1ZXN0Q29sdW1uW119IHtcblx0XHRjb25zdCBpc0xlYWYgPSB0eXBlb2YgcmVxdWVzdENvbHVtbiA9PT0gJ3N0cmluZyc7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBpc0xlYWYgPyByZXF1ZXN0Q29sdW1uIDogZ2V0Rmlyc3RQcm9wZXJ0eShyZXF1ZXN0Q29sdW1uKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRpZDogY29sdW1uSWQsXG5cdFx0XHRjaGlsZHJlbjogaXNMZWFmID8gW10gOiByZXF1ZXN0Q29sdW1uW2NvbHVtbklkXVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogTWVyZ2VzIHR3byBzZXRzIG9mIHJlc3BvbnNlIGNvbHVtbnMuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBmaXJzdFxuXHQgKiBAcGFyYW0ge29iamVjdH0gc2Vjb25kXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIGEgJ21lcmdlZCcgYW5kIGEgJ2RpZmZlcmVuY2UnIHByb3BlcnR5LlxuXHQgKi9cblx0bWVyZ2VSZXNwb25zZUNvbHVtbnMgKGZpcnN0LCBzZWNvbmQpIHtcblx0XHRjb25zdCBtZXJnZWQgPSB7fTtcblx0XHRjb25zdCBkaWZmZXJlbmNlID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGZpcnN0KSB7XG5cdFx0XHRpZiAoc2Vjb25kW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBmaXJzdFtpdGVtVHlwZV07XG5cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG1lcmdlUmVzdWx0ID0gdGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1uTWFwKFxuXHRcdFx0XHRmaXJzdFtpdGVtVHlwZV0sXG5cdFx0XHRcdHNlY29uZFtpdGVtVHlwZV1cblx0XHRcdCk7XG5cblx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBtZXJnZVJlc3VsdC5tZXJnZWQ7XG5cdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0LmRpZmZlcmVuY2U7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBzZWNvbmQpIHtcblx0XHRcdGlmIChmaXJzdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gc2Vjb25kW2l0ZW1UeXBlXTtcblx0XHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7YXJyYXl9IGZpcnN0XG5cdCAqIEBwYXJhbSB7YXJyYXl9IHNlY29uZFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBkaWZmZXJlbmNlOiB0aGUgY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3QuXG5cdCAqL1xuXHRtZXJnZVJlc3BvbnNlQ29sdW1uTWFwIChmaXJzdCwgc2Vjb25kKSB7XG5cdFx0Y29uc3QgbWVyZ2VkID0ge307XG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBmaXJzdClcblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBmaXJzdFtjb2x1bW5JZF07XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHNlY29uZCkge1xuXHRcdFx0aWYgKGlzRGVmaW5lZChmaXJzdFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bWVyZ2VkW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XG5cdFx0XHRkaWZmZXJlbmNlW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHRpc0xvY2FsQ29sdW1uSWQgKGNvbHVtbklkKSB7XG5cdFx0cmV0dXJuIGNvbHVtbklkLnN1YnN0cmluZygwLCAyKSA9PT0gJ19fJztcblx0fVxuXG5cdHByb2Nlc3NDb25maWdDb2x1bW5zIChjb2x1bW5zKSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0aWYgKHRoaXMuaXNMb2NhbENvbHVtbklkKGNvbHVtbikpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4odGhpcy5wYXJzZUNvbmZpZ0NvbHVtbihjb2x1bW4pLCByZXF1ZXN0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVxdWVzdDtcblx0fVxuXG5cdHByb2Nlc3NMb2NhbENvbmZpZ0NvbHVtbnMgKGNvbmZpZ0NvbHVtbnMsIGxvY2FsQ29sdW1ucywgcmVtb3RlQ29sdW1uQ2FsbGJhY2ssIGxvY2FsQ29sdW1uQ2FsbGJhY2spIHtcblx0XHRjb25zdCBsb2NhbENvbHVtbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBsb2NhbENvbHVtbiBvZiBsb2NhbENvbHVtbnMpXG5cdFx0XHRsb2NhbENvbHVtbk1hcFtsb2NhbENvbHVtbi5pZF0gPSBsb2NhbENvbHVtbjtcblxuXHRcdGZvciAoY29uc3QgY29uZmlnSWQgb2YgY29uZmlnQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgcGFyc2VkQ29uZmlnSWQgPSBjb25maWdJZC5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKTtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gcGFyc2VkQ29uZmlnSWRbMF07XG5cblx0XHRcdGlmICghdGhpcy5pc0xvY2FsQ29sdW1uSWQoY29sdW1uSWQpKSB7XG5cdFx0XHRcdHJlbW90ZUNvbHVtbkNhbGxiYWNrKGNvbmZpZ0lkLCBjb2x1bW5JZCwgcGFyc2VkQ29uZmlnSWRbMV0pO1xuXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBjb2x1bW4gbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBpbiBsb2NhbENvbHVtbnNcblx0XHRcdGlmIChsb2NhbENvbHVtbk1hcFtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGxvY2FsQ29sdW1uQ2FsbGJhY2soY29uZmlnSWQsIGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXSk7XG5cdFx0XHRkZWxldGUgbG9jYWxDb2x1bW5NYXBbY29sdW1uSWRdO1xuXHRcdH1cblx0fVxuXG5cdC8vIFRPRE86IG1vdmUgdG8gZnJvbnQtZW5kXG5cdGNvbnNvbGlkYXRlQ29sdW1ucyAoXG5cdFx0Y29uZmlnQ29sdW1ucyxcblx0XHRsb2NhbENvbHVtbnMsXG5cdFx0YWRkUmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5bXVxuXHQpIHtcblx0XHRjb25zdCBmaWx0ZXJlZExvY2FsQ29sdW1uczogTG9jYWxDb2x1bW5bXSA9IFtdO1xuXHRcdGxldCByZXF1ZXN0Q29sdW1ucyA9IDxSZXF1ZXN0Q29sdW1uW10+IHRoaXMuY29weVJlcXVlc3RDb2x1bW5zKGFkZFJlcXVlc3RDb2x1bW5zKTtcblxuXHRcdHRoaXMucHJvY2Vzc0xvY2FsQ29uZmlnQ29sdW1ucyhcblx0XHRcdGNvbmZpZ0NvbHVtbnMsXG5cdFx0XHRsb2NhbENvbHVtbnMsXG5cdFx0XHQoXywgY29sdW1uSWQpID0+IHtcblx0XHRcdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKGNvbHVtbklkLnNwbGl0KENPTFVNTl9TRVBFUkFUT1IpLCByZXF1ZXN0Q29sdW1ucyk7XG5cdFx0XHR9LFxuXHRcdFx0KF8sIGxvY2FsQ29sdW1uKSA9PiB7XG5cdFx0XHRcdGZpbHRlcmVkTG9jYWxDb2x1bW5zLnB1c2gobG9jYWxDb2x1bW4pO1xuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyA9IDxSZXF1ZXN0Q29sdW1uW10+IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1ucyhcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0XHRsb2NhbENvbHVtbi52YWx1ZU9wdGlvbnMucmVxdWVzdENvbHVtbnNcblx0XHRcdFx0KS5tZXJnZWQ7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiB7cmVxdWVzdDogcmVxdWVzdENvbHVtbnMsIGxvY2FsOiBmaWx0ZXJlZExvY2FsQ29sdW1uc307XG5cdH1cblxuXHRwYXJzZUNvbmZpZ0NvbHVtbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIGNvbHVtbi5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKVswXS5zcGxpdChDT0xVTU5fU0VQRVJBVE9SKTtcblx0fVxuXG5cdHByb2Nlc3NDb25maWdDb2x1bW4gKGNvbHVtbkFycmF5LCBkZXN0aW5hdGlvbikge1xuXHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uQXJyYXlbMF07XG5cdFx0Y29uc3QgaXNMZWFmID0gY29sdW1uQXJyYXkubGVuZ3RoID09PSAxO1xuXG5cdFx0aWYgKGlzTGVhZikge1xuXHRcdFx0aWYgKGRlc3RpbmF0aW9uLmluZGV4T2YoY29sdW1uSWQpID09PSAtMSlcblx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaChjb2x1bW5JZCk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRDb2x1bW5PYmplY3QoY29sdW1uSWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcblx0XHRcdGNvbHVtbkluZGV4ID0gZGVzdGluYXRpb24ucHVzaCh7XG5cdFx0XHRcdFtjb2x1bW5JZF06IFtdXG5cdFx0XHR9KSAtIDE7XG5cdFx0fVxuXG5cdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKFxuXHRcdFx0Y29sdW1uQXJyYXkuc2xpY2UoMSksXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uSWRdXG5cdFx0KTtcblx0fVxuXG5cdGZpbmRDb2x1bW5PYmplY3QgKGNvbHVtbklkLCBhcnJheSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChnZXRGaXJzdFByb3BlcnR5KGFycmF5W2ldKSA9PT0gY29sdW1uSWQpXG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdH1cblxuXHRcdHJldHVybiAtMTtcblx0fVxuXG5cdGZpbmRDb2x1bW4gKGNvbHVtbklkLCBhcnJheSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IGFycmF5W2ldO1xuXG5cdFx0XHRpZiAodHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0aWYgKGNvbHVtbiA9PT0gY29sdW1uSWQpXG5cdFx0XHRcdFx0cmV0dXJuIGk7XG5cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChnZXRGaXJzdFByb3BlcnR5KGNvbHVtbikgPT09IGNvbHVtbklkKVxuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cblx0XHRyZXR1cm4gLTE7XG5cdH1cbn1cbiIsImltcG9ydCB7IENoYW5nZXNDb21waWxhdGlvbiwgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDcmVhdGVSZXF1ZXN0RW50cnksIENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdCB7XG5cdHJlcXVlc3RzOiBDcmVhdGVSZXF1ZXN0RW50cnlbXSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbXBpbGF0aW9uOiBDaGFuZ2VzQ29tcGlsYXRpb24sXG5cdFx0cHJpdmF0ZSBsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdHByaXZhdGUgcGFyYW1ldGVyTWFwOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRcdHByaXZhdGUgYnJlYWt1cEJ5UGFyZW50ID0gZmFsc2Vcblx0KSB7XG5cdH1cblxuXHRmaW5hbGl6ZVJlcXVlc3QgKHJlcXVlc3RSZXNvdXJjZTogQ3JlYXRlUmVxdWVzdEVudHJ5KSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSByZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gcmVxdWVzdFJlc291cmNlLmNvbHVtbnM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcylcblx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoY29sbGVjdGlvbkVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcblxuXHRcdHJldHVybiByZXF1ZXN0UmVzb3VyY2U7XG5cdH1cblxuXHRzZXRSZXF1ZXN0UGFyZW50IChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpIHtcblx0XHRjb25zdCByZXF1ZXN0ID0gcmVxdWVzdFJlc291cmNlLnJlcXVlc3Q7XG5cblx0XHRpZiAocGFyZW50VHlwZSA9PT0gJ1ZvaWQnKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmVxdWVzdC5wYXJlbnRUeXBlID0gcGFyZW50VHlwZTtcblx0XHRyZXF1ZXN0LnBhcmVudElkID0ge307XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJ1biAoKSB7XG5cdFx0aWYgKHRoaXMuYnJlYWt1cEJ5UGFyZW50KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gdGhpcy5jb21waWxhdGlvbikge1xuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSB0aGlzLmNvbXBpbGF0aW9uW3BhcmVudFR5cGVdO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcGFyZW50TWFwKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50SWQpKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XG5cblx0XHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoXG5cdFx0XHRcdFx0XHRwYXJlbnRNYXBbcGFyZW50SWRdLFxuXHRcdFx0XHRcdFx0dGhpcy5zZXRSZXF1ZXN0UGFyZW50KHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSkgPyBwYXJlbnRJZCA6IG51bGwsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2Vcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0cy5wdXNoKHRoaXMuZmluYWxpemVSZXF1ZXN0KHJlcXVlc3RSZXNvdXJjZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiB0aGlzLmNvbXBpbGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudE1hcCA9IHRoaXMuY29tcGlsYXRpb25bcGFyZW50VHlwZV07XG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RSZXNvdXJjZSA9IHRoaXMuaW5pdGlhbGl6ZVJlcXVlc3QoKTtcblx0XHRcdFx0Y29uc3QgaGFzUGFyZW50ID0gdGhpcy5zZXRSZXF1ZXN0UGFyZW50KHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSk7XG5cblx0XHRcdFx0bGV0IHZhbGlkUmVxdWVzdCA9IGZhbHNlO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcGFyZW50TWFwKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50SWQpKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoXG5cdFx0XHRcdFx0XHRwYXJlbnRNYXBbcGFyZW50SWRdLFxuXHRcdFx0XHRcdFx0aGFzUGFyZW50ID8gcGFyZW50SWQgOiBudWxsLFxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHZhbGlkUmVxdWVzdCA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodmFsaWRSZXF1ZXN0KVxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0cztcblx0fVxuXG5cdGluaXRpYWxpemVSZXF1ZXN0ICgpOiBDcmVhdGVSZXF1ZXN0RW50cnkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRyZXF1ZXN0OiB7XG5cdFx0XHRcdHJlcXVlc3RUeXBlOiAnY3JlYXRlJyxcblx0XHRcdFx0aXRlbXM6IHt9LFxuXHRcdFx0XHRjb2x1bW5zOiB7fVxuXHRcdFx0fSxcblx0XHRcdGNvbHVtbnM6IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCksXG5cdFx0XHRpdGVtczoge30sXG5cdFx0XHRjb2xsZWN0aW9uczogdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRbdGhpcy5sb2NhbENvbGxlY3Rpb25DYWNoZSwgdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzXSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdClcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBleHRlbmRSZXF1ZXN0IChpdGVtRW50cmllcywgcmVxdWVzdFBhcmVudElkLCBkZXN0aW5hdGlvbikge1xuXHRcdGNvbnN0IHJlcXVlc3QgPSBkZXN0aW5hdGlvbi5yZXF1ZXN0O1xuXHRcdGNvbnN0IGl0ZW1FbnRyeU1hcCA9IGRlc3RpbmF0aW9uLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKHJlcXVlc3QuaXRlbVR5cGUgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmVxdWVzdC5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSB7fTtcblx0XHRcdFx0cmVxdWVzdC5pdGVtc1tpdGVtVHlwZV0gPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0XHRjb25zdCBjaGlsZEVudHJpZXMgPSBnZXRQYXRoKHRoaXMuY29tcGlsYXRpb24sIFtpdGVtVHlwZSwgaXRlbUlkXSk7XG5cdFx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXRoKHRoaXMucGFyYW1ldGVyTWFwLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXG5cdFx0XHRcdGxldCBsaW5rcztcblxuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmVudElkICE9PSBudWxsKVxuXHRcdFx0XHRcdHJlcXVlc3QucGFyZW50SWRbaXRlbUlkXSA9IHJlcXVlc3RQYXJlbnRJZDtcblxuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XG5cdFx0XHRcdGRlc3RpbmF0aW9uLmNvbGxlY3Rpb25zLmV4cGFuZChpdGVtRW50cnkpO1xuXG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV1baXRlbUlkXSA9IGl0ZW1FbnRyeTtcblxuXHRcdFx0XHRpdGVtUmVxdWVzdC52YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblxuXHRcdFx0XHRpZiAoY2hpbGRFbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0bGlua3MgPSBpdGVtUmVxdWVzdC5saW5rcyA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkRW50cmllcykge1xuXHRcdFx0XHRcdGxpbmtzW2NoaWxkVHlwZV0gPSBbXTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgY2hpbGRJZCBpbiBjaGlsZEVudHJpZXNbY2hpbGRUeXBlXSlcblx0XHRcdFx0XHRcdGxpbmtzW2NoaWxkVHlwZV0ucHVzaChjaGlsZElkKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChjaGlsZEVudHJpZXMsIG51bGwsIGRlc3RpbmF0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25DYWNoZSxcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdENvbGxlY3Rpb25NYXRjaGVyLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRJdGVtQ2FjaGUsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1IYW5kbGVyLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdExvY2FsQ2FjaGUsXG5cdFF1ZXJ5U2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgTG9jYWxDYWNoZUZhY3RvcnksIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRBdXRoSW50ZXJmYWNlLFxuXHRFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCxcblx0Q3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0SXRlbUlkLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtT3B0aW9ucyxcblx0SXRlbVJlc291cmNlSXRlbVR5cGVNYXAsXG5cdEl0ZW1UeXBlLFxuXHRMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24sXG5cdE9uU2F2ZUNhbGxiYWNrLFxuXHRTdGF0ZUtleVR5cGUsXG5cdFRlbXBsYXRlSXRlbUVudHJ5TWFwLFxuXHRUZW1wbGF0ZUxpbmtlZEl0ZW1FbnRyeU1hcFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUFkbWluaXN0cmF0b3Ige1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBtb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgcHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHRpbnZhbGlkYXRlQ2FjaGUgKCk6IHZvaWQge1xuXHRcdC8vIHRoZSBpdGVtSGFuZGxlciBjYWNoZSBvbmx5IGNvbnRhaW5zIHJlbW90ZSBlbnRyaWVzXG5cdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmZvckVhY2goXG5cdFx0XHRpdGVtRW50cnkgPT4gaXRlbUVudHJ5LnF1ZXVlUmVsb2FkKClcblx0XHQpO1xuXG5cdFx0Ly8gcXVldWVSZWxvYWQgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIGVhY2ggaW5kaXZpZHVhbCBpdGVtXG5cdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmZvckVhY2goXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPT4gY29sbGVjdGlvbkVudHJ5LnF1ZXVlUmVsb2FkKClcblx0XHQpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbk1hdGNoZXIgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgYWRkVG9UYWI6IGJvb2xlYW4pOiBDb2xsZWN0aW9uTWF0Y2hlciB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFtsb2NhbENhY2hlLmNvbGxlY3Rpb25zXSwgZmFsc2UsIHRydWUpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdC8vIHRoaXMgaXMgb25seSByZWxldmFudCBpZiB0aGVyZSBhcmUgbm8gY29sbGVjdGlvbnMgdG8gYWRkIHRoZSBpdGVtIHRvLCBidXQgd2Ugc3RpbGwgd2FudCB0byBzYXZlIHRoZSBpdGVtXG5cdFx0XHRpZiAoYWRkVG9UYWIpXG5cdFx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMuYWRkKGl0ZW1FbnRyeSk7XG5cblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2xsZWN0aW9uTWF0Y2hlcjtcblx0fVxuXG5cdGZldGNoVGl0bGUgKGl0ZW1UeXBlLCBpdGVtSWQsIGRlZmVyUmVxdWVzdCkge1xuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoVGl0bGUoaXRlbVR5cGUsIGl0ZW1JZCwgZGVmZXJSZXF1ZXN0LCB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcyk7XG5cdH1cblxuXHRnZXRJdGVtQnlJZCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgb3B0aW9uczogSXRlbU9wdGlvbnMsIGlzUm9vdD86IGJvb2xlYW4pOiBQcm9taXNlPEl0ZW1SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zLCBpc1Jvb3QpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZHM6IG51bWJlcltdLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtcyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5UXVlcnkgKGl0ZW1UeXBlOiBzdHJpbmcsIHF1ZXJ5OiBhbnksIG9wdGlvbnM6IGFueSk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge307XG5cblx0XHRyZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0gPSBlbnRyeU9wdGlvbnMuY29sdW1ucztcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRQYXJlbnRDb25kaXRpb24ocXVlcnksIGVudHJ5T3B0aW9ucy5wYXJlbnQpLFxuXHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQsXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZW50cnlPcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cmllczogSXRlbUVudHJ5W10pID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGRlcGVuZGVkIG9uIHRoZSByZXR1cm4gbGlua3MgYm9vbGVhbi4gdHJ1ZSByZXR1cm5zIHRoZSBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwLlxuXHQgKiBUaGUgdHlwZSBoYXMgdG8gYmUgYXNzZXJ0ZWQgYXQgdXNlIHNpbmNlIHlvdSBvbmx5IGtub3cgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1UeXBlXG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gcmV0dXJuTGlua3Ncblx0ICogQHBhcmFtIHtib29sZWFufSBpc1Jvb3Rcblx0ICogQHJldHVybnMge1Byb21pc2U8SXRlbVJlc291cmNlIHwgVGVtcGxhdGVJdGVtRW50cnlNYXA+fVxuXHQgKi9cblx0Z2V0TmV3UmVzb3VyY2UgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9ucyA9IHt9LFxuXHRcdHJldHVybkxpbmtzOiBib29sZWFuID0gZmFsc2UsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZSB8IFRlbXBsYXRlSXRlbUVudHJ5TWFwPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0b3B0aW9ucy5lZGl0ID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoTmV3SXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cnlSZXNvdXJjZTogVGVtcGxhdGVJdGVtRW50cnlNYXApID0+IHtcblx0XHRcdFx0Y29uc3QgbWFpbiA9IGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeVJlc291cmNlLm1haW4sIG9wdGlvbnMsIGlzUm9vdCwgdHJ1ZSk7XG5cdFx0XHRcdGNvbnN0IGxpbmtlZCA9IHRoaXMucHJvY2Vzc0xpbmtlZEl0ZW1zKGl0ZW1FbnRyeVJlc291cmNlLmxpbmtlZCwgb3B0aW9ucywgdHJ1ZSk7IC8vIGRvIHRoaXMgYmVmb3JlaGFuZFxuXG5cdFx0XHRcdHJldHVybiByZXR1cm5MaW5rcyA/IHttYWluOiBtYWluLCBsaW5rZWQ6IGxpbmtlZH0gOiBtYWluO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXREdXBsaWNhdGVCeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0ZHVwbGljYXRlSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9ucyA9IHt9LFxuXHRcdHJldHVybkxpbmtzPzogYm9vbGVhbixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2U8SXRlbVJlc291cmNlIHwgVGVtcGxhdGVJdGVtRW50cnlNYXA+IHtcblx0XHRvcHRpb25zLmlzRHVwbGljYXRlID0gdHJ1ZTtcblxuXHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPSB7fTtcblxuXHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID0gZHVwbGljYXRlSWQ7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXROZXdSZXNvdXJjZShpdGVtVHlwZSwgb3B0aW9ucywgcmV0dXJuTGlua3MsIGlzUm9vdCk7XG5cdH1cblxuXHQvLyBzdGF0ZUtleSBjYW4gYmUgYSBrZXl3b3JkIG9yIGEgbG9jYWwgaWQgKGluIGNhc2Ugb2YgYSByZWZyZXNoKVxuXHRnZXRJdGVtQnlTdGF0ZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHN0YXRlS2V5OiBJdGVtSWQgfCBzdHJpbmcsXG5cdFx0b3B0aW9ucz86IEl0ZW1PcHRpb25zLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZTxJdGVtUmVzb3VyY2U+IHtcblx0XHRjb25zdCBwYXJzZWRTdGF0ZUtleSA9IHRoaXMua2V5U2VydmljZS5wYXJzZVN0YXRlS2V5KDxzdHJpbmc+IHN0YXRlS2V5KTtcblxuXHRcdGlmIChwYXJzZWRTdGF0ZUtleSA9PT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gPEl0ZW1JZD4gc3RhdGVLZXk7XG5cblx0XHRcdGlmICghdGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChpdGVtSWQpIHx8IHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zLmNvbnRhaW5zKGl0ZW1UeXBlLCBpdGVtSWQpKVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRJdGVtQnlJZChpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLCBpc1Jvb3QpO1xuXHRcdH0gZWxzZSBpZiAocGFyc2VkU3RhdGVLZXkudHlwZSA9PT0gU3RhdGVLZXlUeXBlLkR1cGxpY2F0ZSkge1xuXHRcdFx0cmV0dXJuIDxQcm9taXNlPEl0ZW1SZXNvdXJjZT4+IHRoaXMuZ2V0RHVwbGljYXRlQnlJZChcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdDxJdGVtSWQ+IHBhcnNlZFN0YXRlS2V5Lml0ZW1JZCxcblx0XHRcdFx0b3B0aW9ucyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGlzUm9vdFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gPFByb21pc2U8SXRlbVJlc291cmNlPj4gdGhpcy5nZXROZXdSZXNvdXJjZShpdGVtVHlwZSwgb3B0aW9ucywgZmFsc2UsIGlzUm9vdCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uRGVmIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRlbnRyeTogdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLCAvLyB3ZSBuZWVkIHRoZSBkZWZhdWx0IGNvbHVtbiB2YWx1ZVxuXHRcdFx0XHRyZXNvdXJjZTogdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uc0RlZiAobGlua1R5cGU6IHN0cmluZywgbGlua0lkQXJyYXk6IG51bWJlcltdLCBpdGVtVHlwZTogc3RyaW5nLCBsaW5rRmllbGQ6IHN0cmluZywgb3B0aW9uczogYW55KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdGxpbmtUeXBlOiBsaW5rVHlwZSxcblx0XHRcdGxpbmtJZEFycmF5OiBsaW5rSWRBcnJheSxcblx0XHRcdGxpbmtGaWVsZDogbGlua0ZpZWxkLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRlbnRyeTogdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0XHRyZXNvdXJjZTogdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb24gKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0ZW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoXG5cdFx0XHRcdFx0ZW50cnksXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25Gcm9tRGVmIChkZWZpbml0aW9uOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcblx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5lbnRyeSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0ZW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoZW50cnksIGRlZmluaXRpb24ub3B0aW9ucy5yZXNvdXJjZSk7XG5cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgYHBhcmVudGAgaW4gb3B0aW9uc1xuXHQgKi9cblx0Z2V0TGlua0NvbGxlY3Rpb24gKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZDogbnVtYmVyLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRlbnRyeU9wdGlvbnMucGFyZW50ID0ge2l0ZW1UeXBlOiBsaW5rVHlwZSwgaXRlbUlkOiBsaW5rSWR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGVudHJ5T3B0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKFxuXHRcdFx0XHRcdGVudHJ5LFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnMgKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZEFycmF5OiBudW1iZXJbXSwgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxuXHRcdFx0bGlua1R5cGUsXG5cdFx0XHRsaW5rSWRBcnJheSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHQoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMoXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uc0Zyb21EZWYgKGRlZmluaXRpb246IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxuXHRcdFx0ZGVmaW5pdGlvbi5saW5rVHlwZSxcblx0XHRcdGRlZmluaXRpb24ubGlua0lkQXJyYXksXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHQoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMoXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldEFsbExpbmtDb2xsZWN0aW9ucyAobGlua1R5cGU6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcD4ge1xuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGxpbmtUeXBlLCB7fSwge30pXG5cdFx0XHQudGhlbihcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmdldExpbmtDb2xsZWN0aW9ucyhcblx0XHRcdFx0XHRcdGxpbmtUeXBlLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbbGlua1R5cGVdLFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpO1xuXHR9XG5cblx0Y2xvbmVJdGVtIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSwgb3B0aW9uczogYW55KTogSXRlbVJlc291cmNlIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1SZXNvdXJjZS5lbnRyeS5jbG9uZSgpLCBvcHRpb25zLCBmYWxzZSk7XG5cdH1cblxuXHRjbG9uZUNvbGxlY3Rpb24gKGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlLCBvcHRpb25zOiBhbnksIGNvbnZlcnNpb25NYXA6IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0bGV0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cGFyZW50ID0gbnVsbDtcblxuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuY2xvbmUocGFyZW50LCBjb252ZXJzaW9uTWFwKSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0c2F2ZUN1cnJlbnRMb2NhbENhY2hlIChcblx0XHRjbG9zZVRhYj86IGJvb2xlYW4sXG5cdFx0cGFyYW1ldGVycz86IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhbixcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuc2F2ZShjbG9zZVRhYiwgcGFyYW1ldGVycywgYnJlYWt1cEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spO1xuXHR9XG5cblx0Z2V0Q3VycmVudENvbGxlY3Rpb25zICgpOiBDb2xsZWN0aW9uQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5jb2xsZWN0aW9ucztcblx0fVxuXG5cdGdldEN1cnJlbnRJdGVtcyAoKTogSXRlbUNhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXM7XG5cdH1cblxuXHRnZXRNb2R1bGVDaGFuZ2VzIChsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCkpIHtcblx0XHRpZiAobG9jYWxDYWNoZS5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpdGVtQWRtaW5pc3RyYXRvcjogTm8gcm9vdCBpdGVtIGZvciBsb2NhbCBjYWNoZSAnICsgbG9jYWxDYWNoZS5pZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGxvY2FsQ2FjaGUucm9vdEl0ZW0sXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9uc1xuXHRcdCkucHJvY2VzcygpO1xuXHR9XG5cblx0YWRkU2luZ2xlSXRlbSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnMsXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKClcblx0KTogSXRlbVJlc291cmNlIHtcblx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UobG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KSwgb3B0aW9ucywgaXNSb290KTtcblx0fVxuXG5cdGFkZFNpbmdsZUl0ZW1zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnM6IEl0ZW1PcHRpb25zKSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgZmFsc2UsIGxvY2FsQ2FjaGUpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGRDb2xsZWN0aW9uIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9uczogYW55KTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkNhY2hlID0gbG9jYWxDYWNoZS5jb2xsZWN0aW9ucztcblxuXHRcdGNvbGxlY3Rpb25DYWNoZS5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblxuXHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzTGlua2VkSXRlbXMgKFxuXHRcdGxpbmtlZEVudHJpZXM6IFRlbXBsYXRlTGlua2VkSXRlbUVudHJ5TWFwW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnMsXG5cdFx0YWRkVG9Db2xsZWN0aW9uczogYm9vbGVhblxuXHQpOiBJdGVtUmVzb3VyY2VJdGVtVHlwZU1hcCB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBlbnRyeS5pdGVtVHlwZTtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gZW50cnkuaXRlbUVudHJpZXM7XG5cdFx0XHRsZXQgY29sbGVjdGlvbk1hdGNoZXI7XG5cblx0XHRcdGlmIChhZGRUb0NvbGxlY3Rpb25zKVxuXHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbbG9jYWxDYWNoZS5jb2xsZWN0aW9uc10sIGZhbHNlLCBmYWxzZSk7XG5cblx0XHRcdGl0ZW1SZXNvdXJjZXNbaXRlbVR5cGVdID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZXNbaXRlbVR5cGVdLnB1c2gobG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zKSk7XG5cblx0XHRcdFx0aWYgKGFkZFRvQ29sbGVjdGlvbnMpXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0aWYgKGl0ZW1UeXBlID09PSAnUHJvamVjdG5vdGl0aWUnKSB7XG5cdFx0XHRcdFx0Y3JlYXRlUGF0aChcblx0XHRcdFx0XHRcdGxvY2FsQ2FjaGUudGFiUmVxdWVzdFBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFx0XHRcdFt7fSwge25vX25vdGlmaWNhdGlvbjogdHJ1ZX1dXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyB0aGUgaXRlbUVudHJpZXMgYXJlIGluIHRvcC1kb3duIG9yZGVyLCBzbyBjYWxsIGZvciBlYWNoIGl0ZW0gdHlwZSBzZXBhcmF0ZWx5XG5cdFx0XHRpZiAoYWRkVG9Db2xsZWN0aW9ucylcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuYWRkVG9Db2xsZWN0aW9ucygpO1xuXHRcdH1cblxuXHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHR9XG5cblx0Z2V0TG9jYWxDYWNoZSAoKTogTG9jYWxDYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMubG9jYWxDYWNoZU1hbmFnZXIuZ2V0Q3VycmVudExvY2FsQ2FjaGUodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpKTtcblx0fVxuXG5cdHJlc2V0TG9jYWxDYWNoZSAoKSB7XG5cdFx0Y29uc3Qgb2xkTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXG5cdFx0b2xkTG9jYWxDYWNoZS5jbGVhclJlc291cmNlcygpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlTWFuYWdlci5zZXRDdXJyZW50TG9jYWxDYWNoZSh0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VW5pcXVlVXNlcklkKCksIGxvY2FsQ2FjaGUpO1xuXHR9XG5cblx0YWRkVG9Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCByZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihpdGVtRW50cmllcywgdHJ1ZSlcblx0XHRcdC5hZGRUb0NvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XG5cdH1cblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgcmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoaXRlbUVudHJpZXMsIGZhbHNlKVxuXHRcdFx0LnJlbW92ZUZyb21Db2xsZWN0aW9ucyhyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpO1xuXHR9XG5cblx0c2F2ZUxvY2FsIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1SZXNvdXJjZS5lbnRyeTtcblxuXHRcdGl0ZW1FbnRyeS5zZXREaXNwbGF5TmFtZSgpO1xuXHRcdHRoaXMuYWRkVG9Db2xsZWN0aW9ucyhbaXRlbUVudHJ5XSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlSW50ZXJmYWNlLndoZW4oaXRlbVJlc291cmNlKTtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1JZE1hcCAoY29sbGVjdGlvbk1hcDogYW55LCBjb252ZXJzaW9uTWFwKSB7XG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3Qgb2xkSWQgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Y29uc3QgbmV3SWQgPSBjb252ZXJzaW9uTWFwW29sZElkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbb2xkSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2xsZWN0aW9uTWFwW25ld0lkXSA9IGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9uczogYW55LCBwcm9jZXNzT3B0aW9ucyA9IHRydWUpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXG5cdFx0XHRjb2xsZWN0aW9uRW50cnksXG5cdFx0XHRwcm9jZXNzT3B0aW9ucyA/IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhyZXNvdXJjZU9wdGlvbnMpIDogcmVzb3VyY2VPcHRpb25zXG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IGFueSwgaXNSb290OiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCk7XG5cdH1cblxuXHRvbkJlZm9yZVNhdmUgKGtleTogc3RyaW5nLCBjYWxsYmFjazogKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpID0+IGFueSwgY29uZGl0aW9uPzogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLm9uQmVmb3JlU2F2ZShrZXksIGNhbGxiYWNrLCBjb25kaXRpb24pO1xuXHR9XG5cblx0b25TYXZlU3VjY2VzcyAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrOiBPblNhdmVDYWxsYmFjaywgY29uZGl0aW9uPzogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLm9uU2F2ZVN1Y2Nlc3Moa2V5LCBjYWxsYmFjaywgY29uZGl0aW9uKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1DYWNoZSB7XG5cdGVudHJpZXM6IHtcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IEl0ZW1FbnRyeVxuXHRcdH1cblx0fSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRzb21lIChjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0aWYgKGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldEJ5SXRlbVR5cGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbUlkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICh0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBxdWVyeSkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldExvY2FsQnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xuXG5cdFx0XHRpZiAoIWl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRCeVBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1UeXBlOiBJdGVtVHlwZSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0XHRpZiAocGFyZW50VHlwZSA9PT0gcGFyZW50Lml0ZW1UeXBlICYmIHBhcmVudElkID09IHBhcmVudC5pdGVtSWQpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0Y2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSk7XG5cdFx0fVxuXHR9XG5cblx0dG9BcnJheSAoKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YWRkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmIChlbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW50cmllc1tpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJldHVybiBlbnRyaWVzW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXSA9IGl0ZW1FbnRyeTtcblx0fVxuXG5cdGdldCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdH1cblxuXHQvLyBzaG91bGQgYmUgZmFzdFxuXHRjb250YWlucyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHR1cGRhdGVJdGVtSWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvbGRJdGVtSWQpIHtcblx0XHRjb25zdCBlbnRyeU1hcCA9IHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0ZGVsZXRlIGVudHJ5TWFwW29sZEl0ZW1JZF07XG5cdFx0cmV0dXJuIGVudHJ5TWFwW2l0ZW1FbnRyeS5pdGVtSWRdID0gaXRlbUVudHJ5O1xuXHR9XG5cblx0Y2xlYXIgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogYm9vbGVhbiB7XG5cdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbUVudHJ5Lml0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGRlbGV0ZSB0aGlzLmVudHJpZXNbaXRlbUVudHJ5Lml0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcblx0fVxuXG5cdG1hdGNoUXVlcnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBxdWVyeSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudFxuXHRcdCkubWF0Y2hRdWVyeShxdWVyeS5vYmplY3QpID09PSB0cnVlOyAvLyBUT0RPOiBtYXliZT9cblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFMTF9QRVJNSVNTSU9OUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBdXRoSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5U2VydmljZSB7XG5cdC8vIHRvZG86IHRyYW5zbGF0ZVxuXHR1bmRlZmluZWRJdGVtRXJyb3IgPSAnVGhlIHJlcXVlc3RlZCBpdGVtIGNvdWxkIG5vdCBiZSBmb3VuZCAvIHlvdXIgY3VycmVudCBwZXJtaXNzaW9ucyBhcmUgbm90IHN1ZmZpY2llbnQnO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucz8pIHtcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdHtcblx0XHRcdFx0Y29sdW1uczogdHJ1ZSxcblx0XHRcdFx0cGFyZW50OiBudWxsLFxuXHRcdFx0XHR0ZW1wbGF0ZU9wdGlvbnM6IHt9LFxuXHRcdFx0XHR0ZW1wbGF0ZUNvbHVtbnM6IHt9LFxuXHRcdFx0XHRkZWZlclJlcXVlc3Q6IGZhbHNlLFxuXHRcdFx0XHRpc0R1cGxpY2F0ZTogZmFsc2Vcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0Y3JlYXRlVW5mb3VuZExvY2FsSXRlbUVycm9yIChpdGVtVHlwZTogSXRlbVR5cGUpIHtcblx0XHRyZXR1cm4ge21lc3NhZ2U6ICdBIGxvY2FsIGl0ZW0gb2YgdHlwZSAnICsgaXRlbVR5cGUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCd9O1xuXHR9XG5cblx0Y3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBkb0V4dGVuZCA9IGZhbHNlLCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpIHtcblx0XHRjb25zdCBhcGlJdGVtSWQgPSBhcGlSZXNwb25zZS5saW5rc1tpdGVtVHlwZV1bMF07XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge307XG5cblx0XHRyZXN1bHRbaXRlbVR5cGVdID0ge307XG5cdFx0cmVzdWx0W2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gaXRlbUlkO1xuXG5cdFx0aWYgKGRvRXh0ZW5kKVxuXHRcdFx0dGhpcy5leHBhbmRMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGFwaUl0ZW1JZCwgYXBpUmVzcG9uc2UsIHJlc3VsdCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwIChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgbGlua3MgPSBhcGlSZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXVtwYXJlbnRJZF0ubGlua3M7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxpbmtzKSB7XG5cdFx0XHRjb25zdCBpZEFycmF5ID0gbGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgaWRBcnJheSkge1xuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcblxuXHRcdFx0XHR0aGlzLmV4cGFuZExvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgYXBpSXRlbUlkLCBhcGlSZXNwb25zZSwgY29udmVyc2lvbk1hcCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZXhwYW5kQ29udmVyc2lvbk1hcCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsIG5ld0l0ZW1JZD86IEl0ZW1JZCkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRsZXQgY29udmVyc2lvbk1hcEVudHJ5O1xuXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0Y29udmVyc2lvbk1hcEVudHJ5ID0gY29udmVyc2lvbk1hcFtpdGVtVHlwZV07XG5cblx0XHRpZiAoY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXTtcblxuXHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZClcblx0XHRcdG5ld0l0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XG5cblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gPSBuZXdJdGVtSWQ7XG5cdH1cblxuXHRiYXRjaEV4cGFuZENvbnZlcnNpb25NYXAgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0dGhpcy5leHBhbmRDb252ZXJzaW9uTWFwKGl0ZW1FbnRyeSwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0fVxuXG5cdGdldENvbnZlcnNpb25WYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHR9XG5cblx0YmF0Y2hDbG9uZSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge30pIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHQvLyB0aGUgdGhlIGl0ZW1zIG1pZ2h0IHJlZmVyZW5jZSBlYWNoIG90aGVyLCBzbyB1cGRhdGUgdGhlIGNvbnZlcnNpb24gbWFwIGZpcnN0XG5cdFx0dGhpcy5iYXRjaEV4cGFuZENvbnZlcnNpb25NYXAoaXRlbUVudHJpZXMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkuY2xvbmUoY29udmVyc2lvbk1hcCkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldEZ1bGxOYW1lIChmaXJzdE5hbWUsIGluZml4LCBsYXN0TmFtZSkge1xuXHRcdHJldHVybiBmaXJzdE5hbWUudHJpbSgpXG5cdFx0XHQuY29uY2F0KCcgJywgaW5maXgpLnRyaW0oKSAvLyBpbmZpeCBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nXG5cdFx0XHQuY29uY2F0KCcgJywgbGFzdE5hbWUpO1xuXHR9XG5cblx0Z2V0VGl0bGVGaWVsZCAoaXRlbVR5cGUpIHtcblx0XHRzd2l0Y2ggKGl0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdFeGVtcGxhYXInOlxuXHRcdFx0XHRyZXR1cm4gJ3NlcmllbnVtbWVyJztcblx0XHRcdGNhc2UgJ0ZhY3R1dXInOlxuXHRcdFx0XHRyZXR1cm4gJ251bW1lcic7XG5cdFx0XHRjYXNlICdGaWxlcyc6XG5cdFx0XHRcdHJldHVybiAnZnJpZW5kbHluYW1lJztcblx0XHRcdGNhc2UgJ0Z1bmN0aWUnOlxuXHRcdFx0Y2FzZSAnU3RhbmRhYXJkZnVuY3RpZSc6XG5cdFx0XHRcdHJldHVybiAnbmFhbWludGVybic7XG5cdFx0XHRjYXNlICdWb29ycmFhZG11dGF0aWUnOlxuXHRcdFx0XHRyZXR1cm4gJ29tc2NocmlqdmluZyc7XG5cdFx0XHRjYXNlICdCYXJjb2RlJzpcblx0XHRcdFx0cmV0dXJuICdjb2RlJztcblx0XHRcdGNhc2UgJ0JldGFhbG1pZGRlbCc6XG5cdFx0XHRjYXNlICdCZXRhbGluZ3Njb25kaXRpZSc6XG5cdFx0XHRjYXNlICdCcmllZnBhcGllcic6XG5cdFx0XHRjYXNlICdUYXhDbGFzcyc6XG5cdFx0XHRjYXNlICdUYXhTY2hlbWEnOlxuXHRcdFx0Y2FzZSAnQ29uZGl0aW9uJzpcblx0XHRcdGNhc2UgJ0ZhY3R1dXJtb21lbnQnOlxuXHRcdFx0Y2FzZSAnRnVuY3RpZWdyb2VwJzpcblx0XHRcdGNhc2UgJ0dyb290Ym9layc6XG5cdFx0XHRjYXNlICdJbmh1dXInOlxuXHRcdFx0Y2FzZSAnSW5odXVyZ3JvZXAnOlxuXHRcdFx0Y2FzZSAnSW5odXVybWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdNYXRlcmlhYWxDYXQnOlxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcnRhcmllZic6XG5cdFx0XHRjYXNlICdOb3RpdGllJzpcblx0XHRcdGNhc2UgJ1BsYW5uaW5nbWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxuXHRcdFx0Y2FzZSAnU3RhZmZlbGdyb2VwJzpcblx0XHRcdGNhc2UgJ1N1YnByb2plY3QnOlxuXHRcdFx0Y2FzZSAnVGFhayc6XG5cdFx0XHRjYXNlICdUYWcnOlxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxuXHRcdFx0Y2FzZSAnVGlqZCc6XG5cdFx0XHRjYXNlICdUaXRlbCc6XG5cdFx0XHRjYXNlICdUeXBlJzpcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcblx0XHRcdFx0cmV0dXJuICduYWFtJztcblx0XHRcdC8vIGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0Ly8gY2FzZSAnTWVkZXdlcmtlcic6XG5cdFx0XHQvLyBjYXNlICdQZXJzb24nOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gb25seSB1c2UgZGlzcGxheW5hbWUgZm9yIGl0ZW1zIHRoYXQgZG9udCd0IGhhdmUgYSBzaW1wbGUsIHdyaXRhYmxlIG5hbWUgZmllbGRcblx0XHRcdFx0Ly8gdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgZm9yIHRlbXBsYXRlZCBpdGVtc1xuXHRcdFx0XHRyZXR1cm4gJ2Rpc3BsYXluYW1lJztcblx0XHR9XG5cdH1cblxuXHRnZXRMb2NhbERlZmF1bHRWYWx1ZXMgKCk6IEZpZWxkTWFwIHtcblx0XHRjb25zdCBhdXRoSW50ZXJmYWNlID0gdGhpcy5hdXRoSW50ZXJmYWNlO1xuXG5cdFx0cmV0dXJuIHtwZXJtaXNzaW9uczogQUxMX1BFUk1JU1NJT05TLCBjcmVhdG9yOiBhdXRoSW50ZXJmYWNlLmdldFVzZXJJZCgpLCBjcmVhdGVkOiBtb21lbnQoKX07XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3IsXG5cdEJhdGNoU3RhdHVzLFxuXHRDb2x1bW5FeHBhbnNpb24sXG5cdENvbHVtbkhhbmRsZXIsXG5cdENvbHVtbkluZm8sXG5cdENvbHVtblNldCxcblx0Q29sdW1uVXRpbCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0Q29sdW1uU2V0RmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbUVudHJ5RmFjdG9yeSxcblx0VGVtcGxhdGVGYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIFRlbXBsYXRlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlc3BvbnNlLFxuXHRFbnRyeVN0YXR1cyxcblx0RmllbGRNYXAsXG5cdEl0ZW1JZCxcblx0SXRlbUlkQ29udmVyc2lvbk1hcCxcblx0SXRlbU9wdGlvbnMsXG5cdEl0ZW1UeXBlLFxuXHRSZXF1ZXN0Q29sdW1ucyxcblx0VGVtcGxhdGVJdGVtRW50cnlNYXAsXG5cdFRlbXBsYXRlTGlua2VkSXRlbUVudHJ5TWFwXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSwgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XG5cbi8vIHRvZG8gbWFrZSBjbGFzc1xuXG5leHBvcnQgY2xhc3MgSXRlbUhhbmRsZXIge1xuXHRlbnRyaWVzOiBJdGVtQ2FjaGU7XG5cdHRlbXBsYXRlczogeyBbaXRlbVR5cGU6IHN0cmluZ106IFRlbXBsYXRlIH0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgdGVtcGxhdGVGYWN0b3J5OiBUZW1wbGF0ZUZhY3Rvcnlcblx0KSB7XG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0ZmV0Y2hJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBvcHRpb25zOiBhbnksIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlPEl0ZW1FbnRyeT4ge1xuXHRcdGNvbnN0IGVudHJ5U3RhdHVzID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLCBsb2NhbEl0ZW1DYWNoZSk7XG5cblx0XHRpZiAoZW50cnlTdGF0dXMgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVVbmZvdW5kTG9jYWxJdGVtRXJyb3IoaXRlbVR5cGUpKTtcblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoZW50cnlTdGF0dXMuZW50cnksIGVudHJ5U3RhdHVzLnN0YXR1cywgb3B0aW9ucyk7XG5cdH1cblxuXHRmZXRjaE5ld0l0ZW0gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2U8VGVtcGxhdGVJdGVtRW50cnlNYXA+IHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSBsb2NhbEl0ZW1DYWNoZS5hZGQoXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRvcHRpb25zLmlzRHVwbGljYXRlID8gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsRHVwbGljYXRlSWQoKSA6IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoVGVtcGxhdGUoaXRlbVR5cGUsIG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLCBvcHRpb25zLnRlbXBsYXRlQ29sdW1ucykudGhlbihcblx0XHRcdHRlbXBsYXRlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUxvY2FsKGl0ZW1FbnRyeSwgb3B0aW9ucy5wYXJlbnQsIHRlbXBsYXRlLCBsb2NhbEl0ZW1DYWNoZSk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0gaXRlbUlkc1xuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxJdGVtRW50cnlbXT59XG5cdCAqXG5cdCAqIEZvciBldmVyeSBpdGVtaWQgZmluZCB0aGUgc3RhdHVzIG9mIHRoZSBJdGVtRW50cnkgYW5kIHJlc29sdmUgdGhlIHByb21pc2VzIHNvIHRoZSByZXN1bHQgaXNcblx0ICogYSB1c2FibGUgSXRlbUVudHJ5XG5cdCAqL1xuXG5cdGZldGNoSXRlbXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkczogSXRlbUlkW10sIG9wdGlvbnM6IGFueSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBiYXRjaFN0YXR1cyA9IHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2Vcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaXRlbUlkcykge1xuXHRcdFx0Y29uc3QgZW50cnlTdGF0dXMgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlKTtcblxuXHRcdFx0aWYgKGVudHJ5U3RhdHVzID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0YmF0Y2hTdGF0dXMuYWRkKGVudHJ5U3RhdHVzKTtcblx0XHR9XG5cblx0XHRjb25zdCBwcm9taXNlczogeyBlbnRyaWVzOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiwgcmVxdWVzdHM/OiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB9ID1cblx0XHRcdHsgZW50cmllczogYmF0Y2hTdGF0dXMuZ2V0UHJvbWlzZXMoKSB9O1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc1JlcXVlc3RzKCkpXG5cdFx0XHRwcm9taXNlcy5yZXF1ZXN0cyA9IHRoaXMucmVxdWVzdEl0ZW1zKGl0ZW1UeXBlLCBiYXRjaFN0YXR1cy5nZXRSZXF1ZXN0SWRzKCksIG9wdGlvbnMuY29sdW1ucyk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmJhdGNoUmVzb2x2ZShcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRiYXRjaFN0YXR1cyxcblx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnMsXG5cdFx0XHRcdFx0PHsgZW50cmllczogSXRlbUVudHJ5W10sIHJlcXVlc3RzPzogQXBpUmVzcG9uc2VQcm9jZXNzb3IgfT4gcmVzb2x2ZWRcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVzb2x2ZUNhY2hlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLCBvcHRpb25zKTogUHJvbWlzZTxJdGVtRW50cnk+IHtcblx0XHRzd2l0Y2ggKHN0YXR1cykge1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1FbnRyeSk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKSxcblx0XHRcdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxuXHRcdFx0XHRjb25zdCBjb2x1bW5EaWZmZXJlbmNlID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnMoXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMucmVxdWVzdCxcblx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnNcblx0XHRcdFx0KS5kaWZmZXJlbmNlO1xuXG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW0oaXRlbUVudHJ5LCBjb2x1bW5EaWZmZXJlbmNlKS50aGVuKFxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZUV4cGFuc2lvbihcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5EaWZmZXJlbmNlLFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlJFU09MVkVfVkFMVUVTOlxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1FbnRyeSkudGhlbihcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVSZW1vdGVWYWx1ZXMoaXRlbUVudHJ5LCByZXNwb25zZSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xuXHRcdFx0ZGVmYXVsdDogLy8gY2FzZSBFTlRSWV9TVEFUVVMuUkVTT0xWRTpcblx0XHRcdFx0dGhpcy5yZXF1ZXN0SXRlbShpdGVtRW50cnkpLnRoZW4oXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5yZXNvbHZlUmVtb3RlKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLnJlc29sdmUocmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XG5cdFx0fVxuXHR9XG5cblx0cmVzb2x2ZUxvY2FsIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcGFyZW50LCB0ZW1wbGF0ZSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFRlbXBsYXRlSXRlbUVudHJ5TWFwIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IGl0ZW1JZENvbnZlcnNpb24gPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIHRlbXBsYXRlLnJlc3BvbnNlKTtcblxuXHRcdGl0ZW1FbnRyeS5jb2x1bW5zID0gdGVtcGxhdGUuY29sdW1ucztcblxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwpXG5cdFx0XHRpdGVtRW50cnkuc2V0UGFyZW50KHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCk7IC8vIGNyZWF0ZSBuZXcgb2JqZWN0XG5cblx0XHRpdGVtRW50cnkuc2V0TG9jYWxGaWVsZHModGVtcGxhdGUuZmllbGRzLCBpdGVtSWRDb252ZXJzaW9uKS5yZXNvbHZlKCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bWFpbjogaXRlbUVudHJ5LFxuXHRcdFx0bGlua2VkOiB0aGlzLmNyZWF0ZUxvY2FsRW50cmllcyhpdGVtVHlwZSwgaXRlbUlkLCB0ZW1wbGF0ZSwgaXRlbUlkQ29udmVyc2lvbiwgbG9jYWxJdGVtQ2FjaGUpXG5cdFx0fTtcblx0fVxuXG5cdHJlc29sdmVFeHBhbnNpb24gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbiwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlKTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0Ly8gQW5vdGhlciByZXF1ZXN0IGFscmVhZHkgcmVxdWVzdGVkIHRoZSBjb2x1bW5zIHdlIG5lZWQgaGVyZSwgbm8gbmVlZCB0byBleHBhbmQgdGhlIGl0ZW0gYW5kIHJlc29sdmUgaXQgKGFscmVhZHkgZG9uZSBieSBvdGhlciByZXF1ZXN0KVxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5O1xuXG5cdFx0aXRlbUVudHJ5LmV4cGFuZChcblx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLnJvb3QpLFxuXHRcdFx0ZXhwYW5zaW9uUmVzdWx0XG5cdFx0KTtcblxuXHRcdHJldHVybiBpdGVtRW50cnkucmVzb2x2ZSgpO1xuXHR9XG5cblx0cmVzb2x2ZVJlbW90ZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtblNldDogQ29sdW1uU2V0LCByZXNwb25zZTogQXBpUmVzcG9uc2UpOiBJdGVtRW50cnkgfCBudWxsIHtcblx0XHRjb25zdCByZXNwb25zZUZpZWxkcyA9IHRoaXMuZ2V0UmVzcG9uc2VGaWVsZHMoaXRlbUVudHJ5LCBjb2x1bW5TZXQsIHJlc3BvbnNlKTtcblxuXHRcdGlmIChyZXNwb25zZUZpZWxkcyA9PT0gbnVsbClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQocmVzcG9uc2VGaWVsZHMuaW5pdGlhbCwgcmVzcG9uc2VGaWVsZHMuZGVyaXZlZCwgY29sdW1uU2V0KTtcblx0fVxuXG5cdHJlc29sdmVSZW1vdGVWYWx1ZXMgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCByZXNwb25zZTogQXBpUmVzcG9uc2UpOiBJdGVtRW50cnkgfCBudWxsIHtcblx0XHRjb25zdCByZXNwb25zZUZpZWxkcyA9IHRoaXMuZ2V0UmVzcG9uc2VGaWVsZHMoaXRlbUVudHJ5LCBpdGVtRW50cnkuY29sdW1ucywgcmVzcG9uc2UpO1xuXG5cdFx0aWYgKHJlc3BvbnNlRmllbGRzID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5LnVwZGF0ZUZpZWxkcyhyZXNwb25zZUZpZWxkcy5pbml0aWFsLCByZXNwb25zZUZpZWxkcy5kZXJpdmVkLCBmYWxzZSkucmVzb2x2ZSgpO1xuXHR9XG5cblx0Z2V0UmVzcG9uc2VGaWVsZHMgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdGNvbHVtblNldCxcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2Vcblx0KTogeyBpbml0aWFsOiBGaWVsZE1hcCwgZGVyaXZlZDogRmllbGRNYXAgfSB8IG51bGwge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0aWYgKGluaXRpYWwgPT09IHVuZGVmaW5lZCkgeyAvLyBxdWVyeSByZXR1cm5lZCBubyByZXN1bHRzXG5cdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XG5cdFx0XHR0aGlzLmVudHJpZXMuY2xlYXIoaXRlbUVudHJ5KTtcblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGluaXRpYWw6IGluaXRpYWwsXG5cdFx0XHRkZXJpdmVkOiByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0LnJvb3QpXG5cdFx0fTtcblx0fVxuXG5cdGZldGNoVGVtcGxhdGUgKGl0ZW1UeXBlOiBzdHJpbmcsIHRlbXBsYXRlT3B0aW9uczogYW55ID0ge30sIHRlbXBsYXRlQ29sdW1uczogYW55ID0ge30pOiBQcm9taXNlPFRlbXBsYXRlPiB7XG5cdFx0Y29uc3QgaGFzVGVtcGxhdGVPcHRpb25zID0gaGFzUHJvcGVydGllcyh0ZW1wbGF0ZU9wdGlvbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkl0ZW1UeXBlID0gZ2V0Rmlyc3RQcm9wZXJ0eSh0ZW1wbGF0ZUNvbHVtbnMpOyAvLyBpdCdzIHBvc3NpYmxlIHRvIGFkZCBjb2x1bW5zIHRvIGxpbmtlZCBpdGVtc1xuXG5cdFx0aWYgKCFoYXNUZW1wbGF0ZU9wdGlvbnMpIHtcblx0XHRcdGNvbnN0IGNhY2hlZFRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXNbaXRlbVR5cGVdO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNhY2hlZFRlbXBsYXRlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0KFxuXHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5VdGlsLnJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZShcblx0XHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0dGVtcGxhdGVDb2x1bW5zW2NvbHVtbkl0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdGNhY2hlZFRlbXBsYXRlLnJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY2FjaGVkVGVtcGxhdGUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChcblx0XHRcdHtcblx0XHRcdFx0dGVtcGxhdGU6IHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHRlbXBsYXRlT3B0aW9ucyksXG5cdFx0XHRcdGFkZGl0aW9uYWxDb2x1bW5zOiBjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCA/XG5cdFx0XHRcdFx0e30gOlxuXHRcdFx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChjb2x1bW5JdGVtVHlwZSwgdGVtcGxhdGVDb2x1bW5zW2NvbHVtbkl0ZW1UeXBlXSlcblx0XHRcdH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlUmVzcG9uc2UgPSByZXNvbHZlZC50ZW1wbGF0ZTtcblxuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdGVtcGxhdGVSZXNwb25zZSwgcmVzb2x2ZWQuYWRkaXRpb25hbENvbHVtbnMpO1xuXG5cdFx0XHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zICYmIHRlbXBsYXRlUmVzcG9uc2UuY2FjaGVhYmxlKVxuXHRcdFx0XHRcdHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXSA9IHRlbXBsYXRlO1xuXG5cdFx0XHRcdHJldHVybiB0ZW1wbGF0ZTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0RW50cnlTdGF0dXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBhbnksXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBFbnRyeVN0YXR1czxJdGVtRW50cnk+IHwgbnVsbCB7XG5cdFx0bGV0IGl0ZW1FbnRyeTtcblxuXHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKGl0ZW1JZCkpIHtcblx0XHRcdGl0ZW1FbnRyeSA9IGxvY2FsSXRlbUNhY2hlLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4geyBlbnRyeTogaXRlbUVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKSB9O1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpdGVtRW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHsgZW50cnk6IGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpLCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKSB9O1xuXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMuY29sdW1ucywgb3B0aW9ucy5kZWZlclJlcXVlc3QpO1xuXG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0aXRlbUVudHJ5LnNldFBhcmVudChwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQpO1xuXG5cdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0dGhpcy5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGVudHJ5OiBpdGVtRW50cnksXG5cdFx0XHRzdGF0dXM6IG9wdGlvbnMuZGVmZXJSZXF1ZXN0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlJFU09MVkVcblx0XHR9O1xuXHR9XG5cblx0aXNDb2x1bW5TdXBlcnNldCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5pc0xvY2FsKCkgfHwgaXRlbUVudHJ5LmNvbHVtbnMuaXNTdXBlcnNldE9mKGNvbHVtbnMpO1xuXHR9XG5cblx0Z2V0Q2FjaGVkRW50cnlTdGF0dXMgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zKTogRU5UUllfU1RBVFVTIHtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IG9wdGlvbnMuY29sdW1ucztcblxuXHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XG5cdFx0XHRpZiAoaXRlbUVudHJ5LmRlZmVyUmVxdWVzdCkge1xuXHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5leHBhbmRSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucyk7XG5cblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5pc0NvbHVtblN1cGVyc2V0KGl0ZW1FbnRyeSwgcmVxdWVzdENvbHVtbnMpID9cblx0XHRcdFx0RU5UUllfU1RBVFVTLlBST01JU0VEIDpcblx0XHRcdFx0RU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuaXNDb2x1bW5TdXBlcnNldChpdGVtRW50cnksIHJlcXVlc3RDb2x1bW5zKSkge1xuXHRcdFx0aXRlbUVudHJ5LmRlZmVyKCk7XG5cblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xuXHRcdH1cblxuXHRcdGlmIChpdGVtRW50cnkucmVsb2FkUXVldWVkKSB7XG5cdFx0XHRpdGVtRW50cnkucmVsb2FkUXVldWVkID0gZmFsc2U7XG5cblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcblxuXHRcdFx0aXRlbUVudHJ5LmRlZmVyKCk7XG5cblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGl0ZW1UeXBlXG5cdCAqIEBwYXJhbSB7QmF0Y2hTdGF0dXN9IGJhdGNoU3RhdHVzXG5cdCAqIEBwYXJhbSByZXF1ZXN0Q29sdW1uc1xuXHQgKiBAcGFyYW0gcmVzb2x2ZWRcblx0ICogQHJldHVybnMge0l0ZW1FbnRyeVtdfVxuXHQgKlxuXHQgKiBmb3IgZXZlcnkgdHlwZSBvZiBlbnRyeSBzdGF0dXMgdGhlcmUgaXMgaW4gdGhpcyBiYXRjaCByZXF1ZXN0IG1ha2Ugc3VyZSB0aGUgZW50cmllcyBnZXQgcmVzb2x2ZWQuXG5cdCAqIHRoZW4gcmV0dXJuIGEgYXJyYXkgb2YgdGhlIHJlc3VsdGluZyBJdGVtRW50cnlBcnJheVxuXHQgKi9cblx0YmF0Y2hSZXNvbHZlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0YmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNvbHZlZDogeyBlbnRyaWVzOiBJdGVtRW50cnlbXSwgcmVxdWVzdHM/OiBBcGlSZXNwb25zZVByb2Nlc3NvciB9XG5cdCk6IEl0ZW1FbnRyeVtdIHwgUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCByZXNwb25zZSA9IDxBcGlSZXNwb25zZVByb2Nlc3Nvcj4gcmVzb2x2ZWQucmVxdWVzdHM7XG5cdFx0Y29uc3QgZXhwYW5kU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdO1xuXHRcdGNvbnN0IHJlc29sdmVTdGF0dXMgPSBbRU5UUllfU1RBVFVTLlJFU09MVkVdO1xuXG5cdFx0bGV0IHN1Y2Nlc3MgPSB0cnVlO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoZXhwYW5kU3RhdHVzKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0KTtcblxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0XHRleHBhbmRTdGF0dXMsXG5cdFx0XHRcdGl0ZW1FbnRyeSA9PiB0aGlzLnJlc29sdmVFeHBhbnNpb24oaXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb24sIHJlc3BvbnNlKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhyZXNvbHZlU3RhdHVzKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSk7XG5cblx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFx0cmVzb2x2ZVN0YXR1cyxcblx0XHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5yZXNvbHZlUmVtb3RlKGl0ZW1FbnRyeSwgY29sdW1uSW5mbywgcmVzcG9uc2UpID09PSBudWxsKVxuXHRcdFx0XHRcdFx0c3VjY2VzcyA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFtFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVNdLFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0aWYgKHRoaXMucmVzb2x2ZVJlbW90ZVZhbHVlcyhpdGVtRW50cnksIHJlc3BvbnNlKSA9PT0gbnVsbClcblx0XHRcdFx0XHRzdWNjZXNzID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdC8vIHRvZG86IG5vIGl0ZW0gZXJyb3IgKHttZXNzYWdlOiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UudW5kZWZpbmVkSXRlbUVycm9yfSlcblx0XHRyZXR1cm4gc3VjY2VzcyA/IGJhdGNoU3RhdHVzLmdldEFycmF5KCkgOiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoKTtcblx0fVxuXG5cdGNyZWF0ZUxvY2FsRW50cmllcyAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0bG9jYWxQYXJlbnRJZDogSXRlbUlkLFxuXHRcdHRlbXBsYXRlLFxuXHRcdGl0ZW1JZENvbnZlcnNpb246IEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRleGNsdWRlSXRlbVR5cGVzOiBJdGVtVHlwZVtdID0gW11cblx0KTogVGVtcGxhdGVMaW5rZWRJdGVtRW50cnlNYXBbXSB7XG5cdFx0Y29uc3QgYXBpUmVzcG9uc2UgPSB0ZW1wbGF0ZS5yZXNwb25zZTtcblx0XHRjb25zdCBjb2x1bW5JbmZvTWFwID0ge307XG5cdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0ge307XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTx7IGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdIH0+ID0gW107XG5cblx0XHQvLyBUT0RPOiBkaXNhYmxlIGNhY2hpbmc/XG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBhcGlSZXNwb25zZS5pdGVtcykge1xuXHRcdFx0aWYgKGl0ZW1UeXBlID09PSBwYXJlbnRUeXBlIHx8IGV4Y2x1ZGVJdGVtVHlwZXMuaW5kZXhPZihpdGVtVHlwZSkgIT09IC0xKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Y29sdW1uSW5mb01hcFtpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNyZWF0ZUVudHJpZXMgPSAocGFyZW50VHlwZTIsIGxvY2FsUGFyZW50SWQyLCBhcGlQYXJlbnRJZCkgPT4ge1xuXHRcdFx0Y29uc3QgcGFyZW50ID0geyBpdGVtVHlwZTogcGFyZW50VHlwZTIsIGl0ZW1JZDogbG9jYWxQYXJlbnRJZDIgfTtcblx0XHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZTJdW2FwaVBhcmVudElkXS5saW5rcztcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xuXHRcdFx0XHRpZiAoZXhjbHVkZUl0ZW1UeXBlcy5pbmRleE9mKGl0ZW1UeXBlKSAhPT0gLTEpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0aWYgKCFsaW5rcy5oYXNPd25Qcm9wZXJ0eShpdGVtVHlwZSkpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0Y29uc3QgaWRBcnJheSA9IGxpbmtzW2l0ZW1UeXBlXTtcblxuXHRcdFx0XHQvLyB0aGUgaXRlbSBlbnRyaWVzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVzdWx0IGluIHRvcC1kb3duIG9yZGVyXG5cdFx0XHRcdGlmIChpdGVtRW50cnlNYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goeyBpdGVtVHlwZTogaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0gW10gfSk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgaWRBcnJheSkge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsSXRlbUlkID0gaXRlbUlkQ29udmVyc2lvbltpdGVtVHlwZV1bYXBpSXRlbUlkXTtcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0TG9jYWxMaW5rZWQoXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdGxvY2FsSXRlbUlkLFxuXHRcdFx0XHRcdFx0YXBpUmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGFwaUl0ZW1JZCksXG5cdFx0XHRcdFx0XHRwYXJlbnQsXG5cdFx0XHRcdFx0XHRjb2x1bW5JbmZvTWFwW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdGl0ZW1JZENvbnZlcnNpb25cblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0aXRlbUVudHJ5TWFwW2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0XHRjcmVhdGVFbnRyaWVzKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCwgYXBpSXRlbUlkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjcmVhdGVFbnRyaWVzKHBhcmVudFR5cGUsIGxvY2FsUGFyZW50SWQsIGFwaVJlc3BvbnNlLmxpbmtzW3BhcmVudFR5cGVdWzBdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaFRpdGxlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBkZWZlclJlcXVlc3QgPSB0cnVlLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKSB7XG5cdFx0Y29uc3QgdGl0bGVGaWVsZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKGl0ZW1UeXBlKTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKHsgY29sdW1uczogW3RpdGxlRmllbGRdLCBkZWZlclJlcXVlc3Q6IGRlZmVyUmVxdWVzdCB9KSxcblx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0KS50aGVuKFxuXHRcdFx0Ly8gdG9kbzogSXRlbUVudHJ5IHwgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcFxuXHRcdFx0KGVudHJ5OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKGVudHJ5Lm1haW4gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXR1cm4gZW50cnkubWFpbi5nZXRGaWVsZHMoKVt0aXRsZUZpZWxkXTtcblxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZ2V0RmllbGRzKClbdGl0bGVGaWVsZF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVEZXJpdmVkVmFsdWVzIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0Y29sdW1uczogQ29sdW1uSW5mb1tdLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xuXHRcdGNvbnN0IHByb21pc2VzOiBBcnJheTxQcm9taXNlPHZvaWQ+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcblx0XHRcdHByb21pc2VzLnB1c2godGhpcy5mZXRjaERlcml2ZWRWYWx1ZXNCeUNvbHVtbihpdGVtRW50cmllcywgY29sdW1uLCBsb2NhbEl0ZW1DYWNoZSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKFxuXHRcdFx0KCkgPT4gaXRlbUVudHJpZXMsXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXREZWZhdWx0VmFsdWVzQnlDb2x1bW4gKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgcm9vdENvbHVtbjogQ29sdW1uSW5mbyk6IHZvaWQge1xuXHRcdGNvbnN0IGNoaWxkQ29sdW1ucyA9IHJvb3RDb2x1bW4uY2hpbGRyZW47XG5cblx0XHRpZiAoY2hpbGRDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdC8vIG5vIG5lZWQgdG8gZG8gYSByZWN1cnNpdmUgY2FsbCBoZXJlLCBmdW5jdGlvbiB3aWxsIGdldCBjYWxsZWQgbXVsdGlwbGUgdGltZXNcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjaGlsZENvbHVtbnMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0XHRpdGVtRW50cnkuZGVyaXZlZFtjb2x1bW4ucGF0aF0gPSB0aGlzLmFwaUZvcm1hdHRlci5nZXREZWZhdWx0VmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEl0ZW1JZEJ5Q29sdW1uIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29sdW1uOiBDb2x1bW5JbmZvKTogSXRlbUlkIHtcblx0XHRpZiAoY29sdW1uLmxldmVsID09PSAwKSB7XG5cdFx0XHRpZiAoY29sdW1uLmFwaUNvbHVtbi50eXBlID09PSAnbGluaycgJiYgaXRlbUVudHJ5LnBhcmVudCAhPT0gbnVsbClcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5wYXJlbnQuaXRlbUlkO1xuXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5Lm1vZGlmaWVkW2NvbHVtbi5wYXRoXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdO1xuXHR9XG5cblx0cHJpdmF0ZSBmZXRjaERlcml2ZWRWYWx1ZXNCeUNvbHVtbiAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJvb3RDb2x1bW46IENvbHVtbkluZm8sXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjaGlsZENvbHVtbnMgPSByb290Q29sdW1uLmNoaWxkcmVuO1xuXG5cdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0XHRjb25zdCBmaXJzdENoaWxkID0gY2hpbGRDb2x1bW5zWzBdO1xuXG5cdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPT09IDEgJiYgZmlyc3RDaGlsZC5hcGlDb2x1bW4udHlwZSA9PT0gJ2lkJykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRcdGl0ZW1FbnRyeS5kZXJpdmVkW2ZpcnN0Q2hpbGQucGF0aF0gPSB0aGlzLmdldEl0ZW1JZEJ5Q29sdW1uKGl0ZW1FbnRyeSwgcm9vdENvbHVtbik7XG5cblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0XHR9XG5cblx0XHRjb25zdCBpdGVtSWRNYXA6IHsgW2l0ZW1JZDogc3RyaW5nXTogSXRlbUVudHJ5W10gfSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkQnlDb2x1bW4oaXRlbUVudHJ5LCByb290Q29sdW1uKTtcblxuXHRcdFx0aWYgKGl0ZW1JZE1hcFtpdGVtSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdID0gW107XG5cblx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdLnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRpZiAoaXRlbUlkTWFwLm51bGwgIT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuZ2V0RGVmYXVsdFZhbHVlc0J5Q29sdW1uKGl0ZW1JZE1hcC5udWxsLCByb290Q29sdW1uKTtcblxuXHRcdGNvbnN0IGl0ZW1JZHM6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtSWRNYXApIHtcblx0XHRcdGlmIChpdGVtSWQgPT09ICdudWxsJylcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGl0ZW1JZHMucHVzaCgraXRlbUlkKTtcblx0XHR9XG5cblx0XHRpZiAoaXRlbUlkcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0XHRjb25zdCBjb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjaGlsZENvbHVtbnMpXG5cdFx0XHRjb2x1bW5JZHMucHVzaChjb2x1bW4uaWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hJdGVtcyhcblx0XHRcdHJvb3RDb2x1bW4uaXRlbVR5cGUsXG5cdFx0XHRpdGVtSWRzLFxuXHRcdFx0eyBjb2x1bW5zOiBjb2x1bW5JZHMgfSxcblx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0KS50aGVuKFxuXHRcdFx0c291cmNlSXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBzb3VyY2VJdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeUZpZWxkcyA9IGl0ZW1FbnRyeS5nZXRGaWVsZHMoKTtcblx0XHRcdFx0XHRjb25zdCBkZXN0aW5hdGlvbkl0ZW1FbnRyaWVzID0gaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBkZXN0aW5hdGlvbkl0ZW1FbnRyeSBvZiBkZXN0aW5hdGlvbkl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjaGlsZENvbHVtbnMpXG5cdFx0XHRcdFx0XHRcdGRlc3RpbmF0aW9uSXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdID0gaXRlbUVudHJ5RmllbGRzW2NvbHVtbi5pZF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIGNoaWxkQ29sdW1ucywgbG9jYWxJdGVtQ2FjaGUpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3QpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0SXRlbXMoaXRlbUVudHJ5Lml0ZW1UeXBlLCBbaXRlbUVudHJ5Lml0ZW1JZF0sIHJlcXVlc3RDb2x1bW5zKTtcblx0fVxuXG5cdHJlcXVlc3RJdGVtcyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWRzOiBJdGVtSWRbXSwgY29sdW1uczogUmVxdWVzdENvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHsgaWQ6IGl0ZW1JZHMgfSwgeyBbaXRlbVR5cGVdOiBjb2x1bW5zIH0pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciwgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5TZXQsIEl0ZW1IYW5kbGVyLCBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIEl0ZW1FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEVudHJ5UGFyZW50TnVsbCwgSXRlbUlkLCBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbnMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IHBhdGhFeGlzdHMgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlcXVlc3RTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0cmVxdWVzdEl0ZW0gKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR7aWQ6IGl0ZW1JZH0sXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHF1ZXJ5ID0gY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCxcblx0XHRjb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1uc1xuXHQpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xuXG5cdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0cmVxdWVzdFR5cGU6ICdxdWVyeScsXG5cdFx0XHRpdGVtVHlwZTogb3B0aW9ucy5xdWVyeUl0ZW1UeXBlID09PSBudWxsID8gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlIDogb3B0aW9ucy5xdWVyeUl0ZW1UeXBlLFxuXHRcdFx0Y29sdW1uczoge1tjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdOiBjb2x1bW5zfSxcblx0XHRcdHF1ZXJ5OiBxdWVyeSxcblx0XHRcdGxpbWl0OiBudWxsXG5cdFx0fTtcblxuXHRcdGlmIChvcHRpb25zLmxpbWl0ICE9PSBudWxsKVxuXHRcdFx0cGFyYW1zLmxpbWl0ID0gb3B0aW9ucy5saW1pdDtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMpO1xuXHR9XG5cblx0cmVxdWVzdExpbmtJdGVtcyAocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgP1xuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0e2lkOiBwYXJlbnRJZEFycmF5fSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHRcdCkgOlxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHR7bGlua2VkVG86IHBhcmVudFR5cGUsIHF1ZXJ5OiB7aWQ6IHBhcmVudElkQXJyYXl9fVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyAvLyBzaG91bGQgY29udGFpbiBhIGRlcml2ZWQgY29sdW1uIHRoYXQgcmVmZXJzIHRvIHRoZSBwYXJlbnRcblx0XHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzRXhwYW5zaW9uIChcblx0XHRyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W11cblx0KSB7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oaXRlbUVudHJ5LCByZXNwb25zZSwgY29sdW1uRXhwYW5zaW9uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uO1xuXHR9XG5cblx0cHJvY2Vzc1Jlc3BvbnNlIChcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXG5cdFx0Y29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0Y29sdW1uU2V0Lml0ZW1UeXBlLFxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZSA/IHRydWUgOiBjb2x1bW5TZXQucmVxdWVzdCxcblx0XHRcdGNvbHVtblNldC5yZXNwb25zZVxuXHRcdClcblx0KTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xuXHRcdGNvbnN0IGl0ZW1IYW5kbGVyID0gdGhpcy5pdGVtSGFuZGxlcjtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtblNldC5pdGVtVHlwZTtcblx0XHRjb25zdCByb290Q29sdW1ucyA9IGNvbHVtblNldC5yb290O1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogQXJyYXk8UHJvbWlzZTxJdGVtRW50cnk+PiA9IFtdO1xuXG5cdFx0Ly8gc2hvdWxkIGJlIGZhc3QuLi5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpZEFycmF5KSB7XG5cdFx0XHRsZXQgaXRlbUVudHJ5ID0gaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGl0ZW1JZCxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxuXHRcdFx0XHRcdGNvbHVtblNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGl0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XG5cdFx0XHRcdFx0aWYgKGl0ZW1FbnRyeS5kZWZlclJlcXVlc3QpIHtcblx0XHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQoXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5TZXRcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlKTtcblx0XHRcdFx0fSBlbHNlIGlmIChpdGVtRW50cnkucmVsb2FkUXVldWVkKSB7XG5cdFx0XHRcdFx0aXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVGaWVsZHMoXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXG5cdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShpdGVtRW50cnksIHJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb24pKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcblx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxuXHRcdFx0cmVzb2x2ZWRFbnRyaWVzID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCByZXNvbHZlZEVudHJ5IG9mIHJlc29sdmVkRW50cmllcykge1xuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oXG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkRW50cnksXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHQ8Q29sdW1uRXhwYW5zaW9uPiBjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyaWVzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRoYW5kbGVDYWNoZWRJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbikge1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbCA/XG5cdFx0XHRpdGVtRW50cnkgOlxuXHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkKSxcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkLFxuXHRcdFx0XHRcdGV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLnJvb3Rcblx0XHRcdFx0KSxcblx0XHRcdFx0ZXhwYW5zaW9uUmVzdWx0XG5cdFx0XHQpO1xuXHR9XG5cblx0cHJvY2Vzc0xpbmtSZXNwb25zZSAoXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zXG5cdCkge1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xuXHRcdGNvbnN0IGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdFx0Y29uc3QgcGFyZW50SXRlbXMgPSByZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXTtcblx0XHRjb25zdCBwcm9taXNlczogYW55ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdHByb21pc2VzW3BhcmVudElkXSA9IHBhdGhFeGlzdHMocGFyZW50SXRlbXMsIFtwYXJlbnRJZCwgJ2xpbmtzJywgaXRlbVR5cGVdKSA/XG5cdFx0XHRcdHRoaXMucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHBhcmVudEl0ZW1zW3BhcmVudElkXS5saW5rc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0e2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfSxcblx0XHRcdFx0XHRjb2x1bW5TZXQsXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdCkgOlxuXHRcdFx0XHRbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aXRlbXM6IHJlc29sdmVkLFxuXHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtblNldCxcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb246IGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHR9O1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8nO1xuXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlU2VydmljZSB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblxuXHR9XG5cblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdHtcblx0XHRcdFx0ZWRpdDogZmFsc2UsXG5cdFx0XHRcdG9uQ2hhbmdlOiBub29wLFxuXHRcdFx0XHRvbkRlYWN0aXZhdGU6IG5vb3Bcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0Y29tcGFyZU9wdGlvbnMgKGZpcnN0LCBzZWNvbmQpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBmaXJzdCkge1xuXHRcdFx0aWYgKGZpcnN0W2tleV0gIT09IHNlY29uZFtrZXldKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cbiIsImltcG9ydCB7IERVUExJQ0FURV9LRVlXT1JELCBEVVBMSUNBVEVfUFJFRklYLCBORVdfS0VZV09SRCwgTkVXX1BSRUZJWCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBJdGVtSWQsIFN0YXRlS2V5LCBTdGF0ZUtleVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBLZXlTZXJ2aWNlIHtcblx0c2VwYXJhdG9yOiBzdHJpbmcgPSAnOic7XG5cblx0Y29uc3RydWN0b3IgKCkge31cblxuXHRnZXRTaW5nbGVLZXkgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGl0ZW1UeXBlICsgdGhpcy5zZXBhcmF0b3IgKyBpdGVtSWQ7XG5cdH1cblxuXHRnZXRDc3NLZXkgKCkge1xuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywgJ18nKTtcblx0fVxuXG5cdHBhcnNlU3RhdGVLZXkgKHN0YXRlS2V5OiBzdHJpbmcpOiBTdGF0ZUtleSB8IG51bGwge1xuXHRcdHN0YXRlS2V5ID0gc3RhdGVLZXkudG9TdHJpbmcoKTtcblxuXHRcdGlmIChzdGF0ZUtleS5zdWJzdHJpbmcoMCwgTkVXX0tFWVdPUkQubGVuZ3RoKSA9PT0gTkVXX0tFWVdPUkQpXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBTdGF0ZUtleVR5cGUuTmV3LFxuXHRcdFx0XHR0ZW1wbGF0ZTogc3RhdGVLZXkuc3Vic3RyaW5nKE5FV19LRVlXT1JELmxlbmd0aCkgLy8gVE9ETzogdGhpcyBpcyBjdXJyZW50bHkgbm90IGJlaW5nIHVzZWQsIHJlZXZhbHVhdGVcblx0XHRcdH07XG5cblx0XHRpZiAoc3RhdGVLZXkuc3Vic3RyaW5nKDAsIERVUExJQ0FURV9LRVlXT1JELmxlbmd0aCkgPT09IERVUExJQ0FURV9LRVlXT1JEKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogU3RhdGVLZXlUeXBlLkR1cGxpY2F0ZSxcblx0XHRcdFx0aXRlbUlkOiArc3RhdGVLZXkuc3Vic3RyaW5nKERVUExJQ0FURV9LRVlXT1JELmxlbmd0aClcblx0XHRcdH07XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldER1cGxpY2F0ZVN0YXRlS2V5IChpdGVtSWQ6IHN0cmluZyB8IG51bWJlcikge1xuXHRcdHJldHVybiBEVVBMSUNBVEVfS0VZV09SRCArIGl0ZW1JZDtcblx0fVxuXG5cdGdldE5ld1N0YXRlS2V5ICh0ZW1wbGF0ZVR5cGU6IHN0cmluZykge1xuXHRcdHJldHVybiBORVdfS0VZV09SRCArIHRlbXBsYXRlVHlwZTtcblx0fVxuXG5cdGdldExvY2FsSWQgKCk6IEl0ZW1JZCB7XG5cdFx0cmV0dXJuICsoTkVXX1BSRUZJWCArIHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpO1xuXHR9XG5cblx0Z2V0TG9jYWxEdXBsaWNhdGVJZCAoKTogSXRlbUlkIHtcblx0XHRyZXR1cm4gKyhEVVBMSUNBVEVfUFJFRklYICsgdGhpcy5nZXRSYW5kb21TdHJpbmcoKSk7XG5cdH1cblxuXHRnZXRSYW5kb21TdHJpbmcgKCkge1xuXHRcdHJldHVybiAoJycgKyBNYXRoLnJhbmRvbSgpKS5zcGxpdCgnLicpWzFdLnN1YnN0cigwLCA4KTtcblx0fVxuXG5cdC8vIG5vdGU6IHRoZSBjaGFuZ2VzIGNvbXBpbGVyIHVzZXMgdGhpc1xuXHQvLyBtaWdodCBiZSBjYWxsZWQgd2l0aCB1bmRlZmluZWQgKGl0ZW1IYW5kbGVyLmNyZWF0ZVJlcXVlc3QpXG5cdGlzTG9jYWxJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gaXRlbUlkICE9PSB1bmRlZmluZWQgJiYgKHRoaXMuaXNOZXdJZChpdGVtSWQpIHx8IHRoaXMuaXNEdXBsaWNhdGVJZChpdGVtSWQpKTtcblx0fVxuXG5cdGlzTmV3SWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGl0ZW1JZCA9PT0gTkVXX0tFWVdPUkQgfHwgKCcnICsgaXRlbUlkKS5zdWJzdHJpbmcoMCwgTkVXX1BSRUZJWC5sZW5ndGgpID09PSBORVdfUFJFRklYO1xuXHR9XG5cblx0aXNEdXBsaWNhdGVJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gaXRlbUlkID09PSBEVVBMSUNBVEVfS0VZV09SRCB8fCAoJycgKyBpdGVtSWQpLnN1YnN0cmluZygwLCBEVVBMSUNBVEVfUFJFRklYLmxlbmd0aCkgPT09IERVUExJQ0FURV9QUkVGSVg7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yLCBDb2xsZWN0aW9uTWF0Y2hlciwgQ29sdW1uU2V0LCBMb2NhbENhY2hlLCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IHR5cGUgRW50cnlQYXJlbnQgPSB7IGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyIH07XG5cbmV4cG9ydCB0eXBlIEVudHJ5UGFyZW50TnVsbCA9IEVudHJ5UGFyZW50IHwgbnVsbDtcblxuZXhwb3J0IHR5cGUgRmllbGRNYXAgPSB7XG5cdFtrZXk6IHN0cmluZ106IGFueVxufTtcblxuZXhwb3J0IHR5cGUgSXRlbU9wdGlvbnMgPSBhbnk7IC8vIFRPRE9cbi8vIGV4cG9ydCB0eXBlIEl0ZW1FbnRyeU9wdGlvbnMgPSBhbnk7IC8vIFRPRE9cbi8vIGV4cG9ydCB0eXBlIEl0ZW1SZXNvdXJjZU9wdGlvbnMgPSBhbnk7IC8vIFRPRE9cblxuZXhwb3J0IGNvbnN0IGVudW0gU3RhdGVLZXlUeXBlIHtcblx0TmV3ID0gJ25ldycsXG5cdER1cGxpY2F0ZSA9ICdkdXBsaWNhdGUnXG59XG5cbmV4cG9ydCB0eXBlIFN0YXRlS2V5ID0ge3R5cGU6IFN0YXRlS2V5VHlwZSwgdGVtcGxhdGU/OiBzdHJpbmcsIGl0ZW1JZD86IG51bWJlcn07XG5cbmV4cG9ydCB0eXBlIE9uU2F2ZUNhbGxiYWNrID0gKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUsIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IGFueTtcblxuZXhwb3J0IGVudW0gTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uIHtcblx0QWx3YXlzID0gJ2Fsd2F5cycsXG5cdE9uQ2xvc2UgPSAnb25DbG9zZScsXG5cdFNraXBPbkNsb3NlID0gJ3NraXBPbkNsb3NlJ1xufVxuXG5leHBvcnQgdHlwZSBMb2NhbENhY2hlQ2FsbGJhY2tzPFQ+ID0ge1xuXHRhbHdheXM6IHtba2V5OiBzdHJpbmddOiBUfSxcblx0b25DbG9zZToge1trZXk6IHN0cmluZ106IFR9LFxuXHRza2lwT25DbG9zZToge1trZXk6IHN0cmluZ106IFR9XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJdGVtIHJlc291cmNlXG5cbmV4cG9ydCB0eXBlIEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCA9IHtcblx0W2l0ZW1JZDogbnVtYmVyXTogSXRlbVJlc291cmNlXG59O1xuXG5leHBvcnQgdHlwZSBJdGVtUmVzb3VyY2VJdGVtVHlwZU1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtUmVzb3VyY2Vcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEl0ZW0gRW50cnlcblxuZXhwb3J0IHR5cGUgSXRlbUlkID0gbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBJdGVtVHlwZSA9IHN0cmluZztcblxuZXhwb3J0IHR5cGUgSXRlbUVudHJ5RW50cnlTdGF0dXNNYXAgPSB7XG5cdFtlbnRyeVN0YXR1czogc3RyaW5nXTogSXRlbUVudHJ5W107XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtRW50cnlQYXJlbnRJZE1hcCA9IHtcblx0W3BhcmVudElkOiBudW1iZXJdOiBJdGVtRW50cnlbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFtpdGVtSWQ6IG51bWJlcl06IG51bWJlcjtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFtpdGVtSWQ6IG51bWJlcl06IG9iamVjdFxuXHR9O1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ29sbGVjdGlvbiBFbnRyeVxuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uRW50cnlCYXRjaFN0YXR1c01hcCA9IHtcblx0W3N0YXR1czogc3RyaW5nXTogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXBcbn07XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwID0ge1xuXHRbcGFyZW50SWQ6IG51bWJlcl06IENvbGxlY3Rpb25FbnRyeVxufTtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAgPSB7XG5cdFtwYXJlbnRJZDogbnVtYmVyXTogQ29sbGVjdGlvblJlc291cmNlXG59O1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQgPSB7XG5cdGZpdHRpbmc6IENvbGxlY3Rpb25FbnRyeVtdLFxuXHRub3RmaXR0aW5nOiBDb2xsZWN0aW9uRW50cnlbXSxcblx0bWF5YmU6IENvbGxlY3Rpb25FbnRyeVtdXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDb2x1bW5zXG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RDb2x1bW4gPSBzdHJpbmcgfCBvYmplY3Q7XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RDb2x1bW5zID0gUmVxdWVzdENvbHVtbltdIHwgdHJ1ZTtcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VDb2x1bW4gPSBhbnk7IC8vIFRPRE9cblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VDb2x1bW5NYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFtjb2x1bW5JZDogc3RyaW5nXTogUmVzcG9uc2VDb2x1bW5cblx0fVxufTtcblxuZXhwb3J0IHR5cGUgTG9jYWxDb2x1bW4gPSBvYmplY3Q7IC8vIFRPRE9cblxuZXhwb3J0IHR5cGUgQ29sdW1uRXhwYW5zaW9uUmVzdWx0ID0ge1xuXHRtZXJnZWQ6IENvbHVtblNldCxcblx0ZGlmZmVyZW5jZTogQ29sdW1uU2V0XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBcGkgcmVmZXJlbmNlXG5cbmV4cG9ydCB0eXBlIEFwaVJlc3BvbnNlID0gQXBpUmVzcG9uc2VQcm9jZXNzb3I7IC8vIFRPRE9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQXBpIHRlbXBsYXRlIHJlc3BvbnNlXG5leHBvcnQgdHlwZSBUZW1wbGF0ZUl0ZW1FbnRyeU1hcCA9IHtcblx0bWFpbjogSXRlbUVudHJ5O1xuXHRsaW5rZWQ6IFRlbXBsYXRlTGlua2VkSXRlbUVudHJ5TWFwW107XG59O1xuXG5leHBvcnQgdHlwZSBUZW1wbGF0ZUxpbmtlZEl0ZW1FbnRyeU1hcCA9IHtcblx0aXRlbVR5cGU6IHN0cmluZyxcblx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdXG59O1xuXG5leHBvcnQgdHlwZSBJdGVtVHlwZU1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBFbnRyeVN0YXR1czxUPiA9IHtcblx0ZW50cnk6IFQ7XG5cdHN0YXR1czogRU5UUllfU1RBVFVTO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ3JlYXRlIHJlcXVlc3RcbmV4cG9ydCB0eXBlIENyZWF0ZVJlcXVlc3RFbnRyeSA9IHtcblx0cmVxdWVzdDoge1xuXHRcdHJlcXVlc3RUeXBlOiAnY3JlYXRlJyxcblx0XHRpdGVtczoge30sXG5cdFx0Y29sdW1uczoge31cblx0fSxcblx0Y29sdW1uczogUmVxdWVzdENvbHVtbkV4cGFuc2lvbixcblx0aXRlbXM6IHtcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IEl0ZW1FbnRyeVxuXHRcdH1cblx0fSxcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25NYXRjaGVyXG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JdGVtVHlwZXNDb2xsZWN0aW9uJztcbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25DYWNoZSxcblx0SXRlbUNhY2hlLFxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRMb2NrU2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbU9wdGlvbnMsIE9uU2F2ZUNhbGxiYWNrLFxuXHRMb2NhbENhY2hlQ2FsbGJhY2tzLCBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb25cbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgTG9jYWxDYWNoZSB7XG5cdGl0ZW1zOiBJdGVtQ2FjaGU7XG5cdHJvb3RJdGVtOiBJdGVtRW50cnkgfCB1bmRlZmluZWQ7XG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XG5cdGRlZmVycmVkQ29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcblx0dGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcblxuXHRwcml2YXRlIGNhbGxiYWNrczoge1xuXHRcdG9uQmVmb3JlU2F2ZTogTG9jYWxDYWNoZUNhbGxiYWNrczwobG9jYWxDYWNoZTogTG9jYWxDYWNoZSkgPT4gYW55Pixcblx0XHRvblNhdmVTdWNjZXNzOiBMb2NhbENhY2hlQ2FsbGJhY2tzPE9uU2F2ZUNhbGxiYWNrPixcblx0fSA9IHtcblx0XHRvbkJlZm9yZVNhdmU6IHthbHdheXM6IHt9LCBvbkNsb3NlOiB7fSwgc2tpcE9uQ2xvc2U6IHt9fSxcblx0XHRvblNhdmVTdWNjZXNzOiB7YWx3YXlzOiB7fSwgb25DbG9zZToge30sIHNraXBPbkNsb3NlOiB7fX1cblx0fTtcblxuXHRwcml2YXRlIGNoYW5nZXNJbnRlcnZhbDogbnVsbCB8IG51bWJlciA9IG51bGw7XG5cdGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHVibGljIGlkOiBzdHJpbmcgPSAnJ1xuXHQpIHtcblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogSXRlbU9wdGlvbnMsIGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlLCBpc05ldz86IGJvb2xlYW4pIHtcblx0XHRpZiAoaXNSb290KVxuXHRcdFx0dGhpcy5yb290SXRlbSA9IGl0ZW1FbnRyeTtcblxuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cdFx0b3B0aW9ucy5vbkRlYWN0aXZhdGUgPSAoX2l0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uRGVhY3RpdmF0ZUl0ZW0oX2l0ZW1FbnRyeSk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChpdGVtRW50cnksIG9wdGlvbnMsIGlzTmV3KTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9uczogSXRlbU9wdGlvbnMpIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucykpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucykge1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGNvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zLCB0aGlzKTtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMgKGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgcmVzb3VyY2VPcHRpb25zKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25FbnRyaWVzKVxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGNvbGxlY3Rpb25FbnRyaWVzW3BhcmVudElkXSwgcmVzb3VyY2VPcHRpb25zKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjbGVhckl0ZW0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSB7XG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtUmVzb3VyY2UuZW50cnkpO1xuXHR9XG5cblx0Y2xlYXJJdGVtRW50cnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XG5cdFx0dGhpcy5pdGVtcy5jbGVhcihpdGVtRW50cnkpO1xuXHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xuXHR9XG5cblx0Y2xlYXJDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbnMuY2xlYXIoY29sbGVjdGlvbkVudHJ5KTtcblx0XHRjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YlRhYkNoYW5nZSA9IGZhbHNlKSB7XG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKFxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKVxuXHRcdCk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IGNvbGxlY3Rpb25FbnRyeS5jbGVhclJlc291cmNlcyhpc1N1YlRhYkNoYW5nZSlcblx0XHQpO1xuXG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zLmNsZWFyKCk7XG5cdH1cblxuXHR1cGRhdGVTaW5nbGVJdGVtcyAoY29udmVyc2lvbk1hcCkge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBvbGRJdGVtSWQgaW4gY29udmVyc2lvbk1hcFtpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtcy5nZXQoaXRlbVR5cGUsIG9sZEl0ZW1JZCk7XG5cblx0XHRcdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHRoaXMuaXRlbXMudXBkYXRlSXRlbUlkKGl0ZW1FbnRyeSwgb2xkSXRlbUlkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyByZXNvdXJjZXMgd2lsbCBiZSBjbGVhcmVkIGxhdGVyIChjbGVhciBmdW5jdGlvbilcblx0cmV2ZXJ0Q2hhbmdlcyAoKSB7XG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKFxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkucmVzZXRNb2RpZmllZCgpXG5cdFx0KTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbnMuZm9yRWFjaChcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5yZXNldENvbGxlY3Rpb24oY29sbGVjdGlvbkVudHJ5KVxuXHRcdCk7XG5cblx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmlzTG9ja2FibGUoKSA/XG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmRlbGV0ZUxvY2sodGhpcy5yb290SXRlbSkgOlxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cdH1cblxuXHRyZXNldENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogdm9pZCB7XG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzKVxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJldmVydENoYW5nZXMoKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyeS5pdGVtcylcblx0XHRcdFx0aXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKTtcblx0XHR9XG5cdH1cblxuXHRkZXRlY3RDaGFuZ2VzICgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5oYXNDaGFuZ2VzKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLml0ZW1zLnNvbWUoXG5cdFx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKVxuXHRcdFx0KVxuXHRcdClcblx0XHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuaGFzQ2hhbmdlcyA9IHRoaXMuY29sbGVjdGlvbnMuc29tZShcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5jb2xsZWN0aW9uSGFzQ2hhbmdlcyhjb2xsZWN0aW9uRW50cnkpXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdGlvbkhhc0NoYW5nZXMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSB7XG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzICYmIChjb2xsZWN0aW9uRW50cnkuaGFzQWRkZWRJdGVtcygpIHx8IGNvbGxlY3Rpb25FbnRyeS5oYXNSZW1vdmVkSXRlbXMoKSkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMgJiYgY29sbGVjdGlvbkVudHJ5Lmhhc1VwZGF0ZWRJdGVtcygpO1xuXHR9XG5cblx0aXNMb2NrYWJsZSAoKSB7XG5cdFx0aWYgKHRoaXMucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLnJvb3RJdGVtLmlzTG9ja2FibGUoKTtcblx0fVxuXG5cdHNhdmUgKFxuXHRcdGNsb3NlVGFiID0gZmFsc2UsXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHt9LFxuXHRcdGJyZWFrVXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KSB7XG5cdFx0dGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblxuXHRcdHJldHVybiAodGhpcy5pc0xvY2thYmxlKCkgPyB0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayg8SXRlbUVudHJ5PiB0aGlzLnJvb3RJdGVtKSA6IHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tFdmVudCh0aGlzLmNhbGxiYWNrcy5vbkJlZm9yZVNhdmUsIGNhbGxiYWNrID0+IGNhbGxiYWNrKHRoaXMpLCBjbG9zZVRhYik7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0UGFyYW1ldGVycyA9IGV4dGVuZCh7fSwgdGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycywgcGFyYW1ldGVycyk7XG5cblx0XHRcdFx0dGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLmV4ZWN1dGUoXG5cdFx0XHRcdFx0dGhpcy5pdGVtcy50b0FycmF5KCksXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9ucy50b0FycmF5KCksXG5cdFx0XHRcdFx0cmVxdWVzdFBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YnJlYWtVcEJ5UGFyZW50LFxuXHRcdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFja1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdGNvbnZlcnNpb25NYXAgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xvY2thYmxlKCkpXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5jbGVhckxvY2soPEl0ZW1FbnRyeT4gdGhpcy5yb290SXRlbSk7XG5cblx0XHRcdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0XHRcdFx0aWYgKCFjbG9zZVRhYilcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZVNpbmdsZUl0ZW1zKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja0V2ZW50KFxuXHRcdFx0XHRcdHRoaXMuY2FsbGJhY2tzLm9uU2F2ZVN1Y2Nlc3MsXG5cdFx0XHRcdFx0Y2FsbGJhY2sgPT4gY2FsbGJhY2sodGhpcywgY29udmVyc2lvbk1hcCksXG5cdFx0XHRcdFx0Y2xvc2VUYWJcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICghY2xvc2VUYWIpXG5cdFx0XHRcdFx0XHRcdHRoaXMuZW5hYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0b25CZWZvcmVTYXZlIChcblx0XHRrZXk6IHN0cmluZyxcblx0XHRjYWxsYmFjazogKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpID0+IGFueSxcblx0XHRjb25kaXRpb246IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiA9IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5BbHdheXNcblx0KTogKCkgPT4gdm9pZCB7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3Mub25CZWZvcmVTYXZlW2NvbmRpdGlvbl07XG5cblx0XHRjYWxsYmFja3Nba2V5XSA9IGNhbGxiYWNrO1xuXG5cdFx0cmV0dXJuICgpID0+IGRlbGV0ZSBjYWxsYmFja3Nba2V5XTtcblx0fVxuXG5cdG9uU2F2ZVN1Y2Nlc3MgKFxuXHRcdGtleTogc3RyaW5nLFxuXHRcdGNhbGxiYWNrOiBPblNhdmVDYWxsYmFjayxcblx0XHRjb25kaXRpb246IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiA9IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5BbHdheXNcblx0KTogKCkgPT4gdm9pZCB7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3Mub25TYXZlU3VjY2Vzc1tjb25kaXRpb25dO1xuXG5cdFx0Y2FsbGJhY2tzW2tleV0gPSBjYWxsYmFjaztcblxuXHRcdHJldHVybiAoKSA9PiBkZWxldGUgY2FsbGJhY2tzW2tleV07XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDYWxsYmFja0V2ZW50PFQ+IChcblx0XHRjYWxsYmFja3M6IExvY2FsQ2FjaGVDYWxsYmFja3M8VD4sXG5cdFx0ZXhlY3V0ZTogKGNhbGxiYWNrOiBUKSA9PiBhbnksXG5cdFx0Y2xvc2VUYWI6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxhbnk+IHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tzKGNhbGxiYWNrc1tMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uQWx3YXlzXSwgZXhlY3V0ZSkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcyhcblx0XHRcdFx0XHRjYWxsYmFja3NbY2xvc2VUYWIgPyBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uT25DbG9zZSA6IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5Ta2lwT25DbG9zZV0sXG5cdFx0XHRcdFx0ZXhlY3V0ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDYWxsYmFja3M8VD4gKGNhbGxiYWNrczoge1trZXk6IHN0cmluZ106IFR9LCBleGVjdXRlOiAoY2FsbGJhY2s6IFQpID0+IGFueSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gY2FsbGJhY2tzKVxuXHRcdFx0cmVzdWx0W2tleV0gPSBleGVjdXRlKGNhbGxiYWNrc1trZXldKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXN1bHQpO1xuXHR9XG5cblx0ZW5hYmxlQ2hhbmdlc1dhdGNoZXIgKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdDaGFuZ2VzIHdhdGNoZXIgYWxyZWFkeSBydW5uaW5nIScsIHRoaXMpO1xuXHRcdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblx0XHR9XG5cblx0XHR0aGlzLmNoYW5nZXNJbnRlcnZhbCA9IHNldEludGVydmFsKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuZGV0ZWN0Q2hhbmdlcygpKVxuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayg8SXRlbUVudHJ5PiB0aGlzLnJvb3RJdGVtKTtcblx0XHRcdH0sXG5cdFx0XHQzMDAwXG5cdFx0KTtcblx0fVxuXG5cdGRpc2FibGVDaGFuZ2VzV2F0Y2hlciAoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsID09PSBudWxsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLmNoYW5nZXNJbnRlcnZhbCk7XG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBudWxsO1xuXHR9XG5cblx0b25EZWFjdGl2YXRlSXRlbSAoaXRlbUVudHJ5KSB7XG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtRW50cnkpO1xuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG5cdH1cblxuXHRvbkFjdGl2YXRlSXRlbSAoaXRlbUVudHJ5KSB7XG5cdFx0dGhpcy5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcblx0XHQvLyB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIExvY2tTZXJ2aWNlIHtcblx0bG9ja0l0ZW1zID0ge307XG5cdHByb21pc2VzID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cblx0fVxuXG5cdGdldFZhbHVlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgbWFwKSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXHR9XG5cblx0c2V0VmFsdWUgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCB2YWx1ZSwgbWFwKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZVBhdGgoXG5cdFx0XHRtYXAsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwgdmFsdWVdXG5cdFx0KTtcblx0fVxuXG5cdGdldExvY2tzICgpIHtcblx0XHRyZXR1cm4gdGhpcy5sb2NrSXRlbXM7XG5cdH1cblxuXHRoYXNMb2NrIChsb2NrVG9rZW5JZCkge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5sb2NrSXRlbXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0XHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduICYmIGxvY2tJdGVtLmlkID09IGxvY2tUb2tlbklkKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSBmYXN0ICh3YXRjaGVkKVxuXHRpc0xvY2tlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XG5cblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ247XG5cdH1cblxuXHRnZXRNZXNzYWdlIChpdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XG5cblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWxvY2tJdGVtLmlzRm9yZWlnbilcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbG9ja0l0ZW0ubWVzc2FnZTtcblx0fVxuXG5cdC8vIGRvZXMgbm90IHJlamVjdCB3aGVuIGEgZm9yZWlnbiBsb2NrIGlzIGVuY291bnRlcmVkXG5cdC8vIGlzIGFsc28gdXNlZCBieSBkZWxldGVMb2NrXG5cdGZldGNoQ2FjaGVkTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcblxuXHRcdGlmIChsb2NrICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGxvY2spO1xuXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLnByb21pc2VzKTtcblxuXHRcdGlmIChwcm9taXNlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcHJvbWlzZTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdGZldGNoTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKGxvY2tJdGVtID0+IHtcblx0XHRcdFx0aWYgKGxvY2tJdGVtICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlcXVlc3RMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGxvY2tJdGVtID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbiA/XG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGxvY2tJdGVtLm1lc3NhZ2UpIDpcblx0XHRcdFx0XHRsb2NrSXRlbS50b2tlbjtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShcblx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdHtpdGVtdHlwZTogaXRlbVR5cGUsIGl0ZW06IGl0ZW1JZH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxuXHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChcblx0XHRcdFx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3MuTG9ja3Rva2VuWzBdXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSwgZXJyb3IgPT4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0XHRpZiAoZXJyb3IuY29kZSA9PT0gMzAxKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlzRm9yZWlnbjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogZXJyb3IubWVzc2FnZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShpdGVtRW50cnksIHByb21pc2UsIHRoaXMucHJvbWlzZXMpO1xuXHR9XG5cblx0ZGVsZXRlTG9jayAoaXRlbUVudHJ5KSB7XG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihjYWNoZWRMb2NrID0+IHtcblx0XHRcdFx0Ly8gdW5kZWZpbmVkOiBub3QgcmVxdWVzdGVkIHlldFxuXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrLmlzRm9yZWlnbikge1xuXHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKCdMb2NrdG9rZW4nLCBjYWNoZWRMb2NrLmlkKVxuXHRcdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTG9jayhpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyTG9jayAoaXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRpZiAodGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmltcG9ydCB7IGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xuXG5jb25zdCBFTVBUWV9FTlRSWSA9IHt9O1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIHtcblx0cGFyZW50TWFwOiBhbnkgPSB7fTtcblx0ZGVzdGluYXRpb246IGFueSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHJvb3RJdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRwcml2YXRlIHNpbmdsZUl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcblx0KSB7XG5cdH1cblxuXHRwcm9jZXNzICgpIHtcblx0XHR0aGlzLnBhcmVudE1hcCA9IHRoaXMuY3JlYXRlUGFyZW50TWFwKHRoaXMuc2luZ2xlSXRlbUNhY2hlKTtcblx0XHR0aGlzLnByb2Nlc3NJdGVtcyh0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsIFt0aGlzLnJvb3RJdGVtRW50cnldLCB7fSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdGl0ZW1JZDogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdGl0ZW1zOiB0aGlzLmRlc3RpbmF0aW9uXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlUGFyZW50TWFwIChpdGVtQ2FjaGUpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGl0ZW1DYWNoZS5mb3JFYWNoKFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbCkgLy8gd2UgZG9uJ3QgY2FyZSBmb3IgaXRlbXMgdGhhdCBhcmUgbm90IGxpbmtlZCB0byB0aGUgcm9vdCBpdGVtXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IHBhcmVudFR5cGUgPSBwYXJlbnQuaXRlbVR5cGU7XG5cdFx0XHRcdGNvbnN0IHBhcmVudElkID0gcGFyZW50Lml0ZW1JZDtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3BhcmVudFR5cGVdID0ge307XG5cblx0XHRcdFx0bGV0IG1hcEVudHJ5ID0gcmVzdWx0W3BhcmVudFR5cGVdO1xuXG5cdFx0XHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRtYXBFbnRyeVtwYXJlbnRJZF0gPSB7fTtcblxuXHRcdFx0XHRtYXBFbnRyeSA9IG1hcEVudHJ5W3BhcmVudElkXTtcblxuXHRcdFx0XHRpZiAobWFwRW50cnlbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0bWFwRW50cnlbaXRlbVR5cGVdID0gW107XG5cblx0XHRcdFx0bWFwRW50cnlbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW1zIChpdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBsaW5rQWNjdW11bGF0b3IpIHtcblx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdID0ge307XG5cblx0XHRpZiAobGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRcdC8vIGVhY2ggaXRlbSBvbmx5IGhhcyBhIHNpbmdsZSBwYXJlbnQsIHNvIHdlIGNhbiBzYWZlbHkgZG8gdGhpc1xuXHRcdFx0aWYgKHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0ucHVzaChpdGVtSWQpO1xuXG5cdFx0XHR0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXVtpdGVtSWRdID0gdGhpcy5wcm9jZXNzSXRlbShpdGVtRW50cnkpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW0gKGl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgY2hpbGRJdGVtcyA9IHRoaXMuZ2V0SXRlbXNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHRjb25zdCBjaGlsZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGUuZ2V0Q29sbGVjdGlvbnNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHRjb25zdCB2YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xuXHRcdGNvbnN0IGxpbmtzID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkVHlwZSBpbiBjaGlsZEl0ZW1zKVxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY2hpbGRUeXBlLCBjaGlsZEl0ZW1zW2NoaWxkVHlwZV0sIGxpbmtzKTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNoaWxkQ29sbGVjdGlvbnMpIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5xdWVyeSAhPT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMucHJvY2Vzc0l0ZW1zKGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5Lml0ZW1zLCBsaW5rcyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGFzVmFsdWVzID0gaGFzUHJvcGVydGllcyh2YWx1ZXMpO1xuXHRcdGNvbnN0IGhhc0xpbmtzID0gaGFzUHJvcGVydGllcyhsaW5rcyk7XG5cblx0XHRpZiAoaGFzVmFsdWVzICYmIGhhc0xpbmtzKVxuXHRcdFx0cmV0dXJuIHt2YWx1ZXM6IHZhbHVlcywgbGlua3M6IGxpbmtzfTtcblxuXHRcdGlmIChoYXNWYWx1ZXMpXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzfTtcblxuXHRcdGlmIChoYXNMaW5rcylcblx0XHRcdHJldHVybiB7bGlua3M6IGxpbmtzfTtcblxuXHRcdHJldHVybiBFTVBUWV9FTlRSWTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0SXRlbXNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcblx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMucGFyZW50TWFwW3BhcmVudFR5cGVdO1xuXG5cdFx0aWYgKG1hcEVudHJ5ID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRpZiAobWFwRW50cnlbcGFyZW50SWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRyZXR1cm4gbWFwRW50cnlbcGFyZW50SWRdO1xuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XG5cbmNvbnN0IE1BWUJFID0gJ21heWJlJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cHVibGljIGZpZWxkczogRmllbGRNYXAsXG5cdFx0cHVibGljIHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbFxuXHQpIHtcblxuXHR9XG5cblx0cHJpdmF0ZSBjb21wYXJlVmFsdWVzICh2YWx1ZSwgcXVlcnlWYWx1ZSkge1xuXHRcdGlmIChtb21lbnQuaXNNb21lbnQocXVlcnlWYWx1ZSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZU1vbWVudE9iamVjdHMocXVlcnlWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHF1ZXJ5VmFsdWUpKVxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVEdXJhdGlvbnMocXVlcnlWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcblx0XHRyZXR1cm4gcXVlcnlWYWx1ZSA9PSB2YWx1ZTtcblx0fVxuXG5cdG1hdGNoUXVlcnkgKHF1ZXJ5OiBhbnkpOiBib29sZWFuIHwgc3RyaW5nIHtcblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoTGlua2VkVG9RdWVyeShxdWVyeSk7XG5cblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hDb21wbGV4UXVlcnkocXVlcnkpO1xuXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hTaW1wbGVRdWVyeSh0aGlzLmZpZWxkc1txdWVyeS5rZXldLCBxdWVyeSk7XG5cblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgcXVlcnkhIFBhcnNlZD8nKTtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hMaW5rZWRUb1F1ZXJ5IChxdWVyeSkge1xuXHRcdGlmIChxdWVyeS5yZXZlcnNlKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cdFx0bGV0IG1hdGNoO1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdG1hdGNoID0gZmFsc2U7XG5cdFx0ZWxzZSBpZiAocXVlcnkubGlua2VkVG8gIT09IHBhcmVudC5pdGVtVHlwZSlcblx0XHRcdG1hdGNoID0gZmFsc2U7XG5cdFx0ZWxzZVxuXHRcdFx0bWF0Y2ggPSB0aGlzLm1hdGNoU2ltcGxlUXVlcnkocGFyZW50Lml0ZW1JZCwgcXVlcnkucXVlcnkpO1xuXG5cdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdHJldHVybiBxdWVyeS5ub3QgPyAhbWF0Y2ggOiBtYXRjaDtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hDb21wbGV4UXVlcnkgKHF1ZXJ5KSB7XG5cdFx0Y29uc3QgY29uZGl0aW9ucyA9IHF1ZXJ5LmNvbmRpdGlvbnM7XG5cblx0XHRsZXQgcmVzdWx0O1xuXHRcdGxldCB0ZXJtaW5hbDtcblxuXHRcdHN3aXRjaCAocXVlcnkub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgJ0FORCc6XG5cdFx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdHRlcm1pbmFsID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnT1InOlxuXHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcblx0XHRcdFx0dGVybWluYWwgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBvcGVyYXRvcicpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpIHtcblx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaFF1ZXJ5KGNvbmRpdGlvbik7XG5cblx0XHRcdGlmIChtYXRjaCA9PT0gdGVybWluYWwpXG5cdFx0XHRcdHJldHVybiB0ZXJtaW5hbDtcblxuXHRcdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcblx0XHRcdFx0cmVzdWx0ID0gTUFZQkU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hTaW1wbGVRdWVyeSAodmFsdWUsIHF1ZXJ5KSB7XG5cdFx0Y29uc3Qga2V5ID0gcXVlcnkua2V5O1xuXHRcdGxldCBxdWVyeVZhbHVlID0gcXVlcnkudmFsdWU7XG5cblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKSAvLyBDb3VsZCBiZSBsaW5rZWRUbyBhbiBlbXB0eSBvYmplY3Rcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignUmVxdWlyZWQgZmllbGQnLCBrZXksICdub3QgZm91bmQgZm9yJywgdGhpcy5pdGVtVHlwZSk7XG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cdFx0fVxuXG5cdFx0aWYgKHF1ZXJ5VmFsdWUgPT09ICdOT1cnKVxuXHRcdFx0cXVlcnlWYWx1ZSA9IG1vbWVudCgpO1xuXG5cdFx0c3dpdGNoIChxdWVyeS5jb21wYXJhdG9yKSB7XG5cdFx0XHRjYXNlICc9Jzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZVZhbHVlcyh2YWx1ZSwgcXVlcnlWYWx1ZSk7XG5cdFx0XHRjYXNlICchPSc6XG5cdFx0XHRcdHJldHVybiAhdGhpcy5jb21wYXJlVmFsdWVzKHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGNhc2UgJzwnOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPCBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnPD0nOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPD0gcXVlcnlWYWx1ZTtcblx0XHRcdGNhc2UgJz4nOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPiBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnPj0nOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPj0gcXVlcnlWYWx1ZTtcblx0XHRcdGNhc2UgJ0lOJzpcblx0XHRcdFx0cmV0dXJuIGluQXJyYXkodmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0Y2FzZSAnTk9UIElOJzpcblx0XHRcdFx0cmV0dXJuICFpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBjb21wYXJhdG9yOiAnICsgcXVlcnkuY29tcGFyYXRvciArICcgaW4gcXVlcnkgJyArIHF1ZXJ5KTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5IH0gZnJvbSAnLi9VdGlsJztcblxuZW51bSBDT05TVEFOVFMge1xuXHRPQkogPSAwLFxuXHRTVFIgPSAxLFxuXHRTRVAgPSAnOidcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyIHtcblx0cXVlcnk6IGFueTtcblx0cGFyYW1ldGVyczogYW55O1xuXG5cdGNvbnN0cnVjdG9yIChxdWVyeSwgcGFyYW1ldGVycz8pIHtcblx0XHR0aGlzLnF1ZXJ5ID0gcXVlcnk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1ZhbHVlICh2YWx1ZSkge1xuXHRcdC8vIGFsZ29yaXRobSBpcyBub3QgaW1wb3J0YW50LCBhcyBsb25nIGFzIGFsbCBhcnJheXMgYXJlIHNvcnRlZCB0aGUgc2FtZSB3YXlcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG5cdFx0XHRyZXR1cm4gdmFsdWUuc2xpY2UoKS5zb3J0KCk7XG5cblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcblx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xuXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHZhbHVlKSlcblx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUpO1xuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0cHJpdmF0ZSBjb21wYXJlUGFyc2VkUXVlcmllcyAoYSwgYikge1xuXHRcdGlmIChhW0NPTlNUQU5UUy5TVFJdID09PSBiW0NPTlNUQU5UUy5TVFJdKVxuXHRcdFx0cmV0dXJuIDA7XG5cblx0XHRyZXR1cm4gYVtDT05TVEFOVFMuU1RSXSA+IGJbQ09OU1RBTlRTLlNUUl0gPyAxIDogLTE7XG5cdH1cblxuXHRwYXJzZSAocXVlcnkgPSB0aGlzLnF1ZXJ5KSB7XG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUxpbmtlZFRvUXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmxpbmtlZFRvLFxuXHRcdFx0XHRxdWVyeS5xdWVyeSxcblx0XHRcdFx0cXVlcnkucmV2ZXJzZSxcblx0XHRcdFx0cXVlcnkubm90XG5cdFx0XHQpO1xuXG5cdFx0aWYgKHF1ZXJ5Lm5vdCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogXCJOb3RcIiBub3Qgc3VwcG9ydGVkJyk7XG5cblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUN1c3RvbVF1ZXJ5KFxuXHRcdFx0XHRxdWVyeS5jdXN0b20sXG5cdFx0XHRcdHF1ZXJ5LnBhcmFtZXRlcnNcblx0XHRcdCk7XG5cblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNlYXJjaFF1ZXJ5KHF1ZXJ5LnNlYXJjaCk7XG5cblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDb21wbGV4UXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmNvbmRpdGlvbnMsXG5cdFx0XHRcdHF1ZXJ5Lm9wZXJhdG9yXG5cdFx0XHQpO1xuXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShcblx0XHRcdFx0cXVlcnkua2V5LFxuXHRcdFx0XHRxdWVyeS52YWx1ZSxcblx0XHRcdFx0cXVlcnkuY29tcGFyYXRvclxuXHRcdFx0KTtcblxuXHRcdGNvbnN0IGtleSA9IGdldEZpcnN0UHJvcGVydHkocXVlcnkpO1xuXG5cdFx0aWYgKGtleSA9PT0gbnVsbClcblx0XHRcdHJldHVybiBbe30sICd7fSddO1xuXG5cdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShrZXksIHF1ZXJ5W2tleV0pO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZVNlYXJjaFF1ZXJ5ICh2YWx1ZSkge1xuXHRcdHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e3NlYXJjaDogdmFsdWVbQ09OU1RBTlRTLk9CSl19LFxuXHRcdFx0J1snICsgJ3NlYXJjaCcgKyBDT05TVEFOVFMuU0VQICsgdmFsdWVbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUN1c3RvbVF1ZXJ5IChjdXN0b20sIHBhcmFtZXRlcnMpIHtcblx0XHRpZiAocGFyYW1ldGVycyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0e2N1c3RvbTogY3VzdG9tfSxcblx0XHRcdFx0J1snICsgY3VzdG9tICsgJ10nXG5cdFx0XHRdO1xuXG5cdFx0Y29uc3QgcGFyc2VkUGFyYW1ldGVycyA9IHRoaXMucGFyc2VDdXN0b21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtjdXN0b206IGN1c3RvbSwgcGFyYW1ldGVyczogcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuT0JKXX0sXG5cdFx0XHQnWycgKyBjdXN0b20gKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUGFyYW1ldGVycyAocGFyYW1ldGVycykge1xuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5zb3J0KCk7XG5cblx0XHRjb25zdCBxdWVyeSA9IHt9O1xuXHRcdGxldCBzdHJpbmcgPSAnJztcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qga2V5ID0ga2V5c1tpXTtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShwYXJhbWV0ZXJzW2tleV0pO1xuXG5cdFx0XHRxdWVyeVtrZXldID0gdmFsdWVbQ09OU1RBTlRTLk9CSl07XG5cblx0XHRcdGlmIChpID4gMClcblx0XHRcdFx0c3RyaW5nICs9IENPTlNUQU5UUy5TRVA7XG5cblx0XHRcdHN0cmluZyArPSB2YWx1ZVtDT05TVEFOVFMuU1RSXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gW3F1ZXJ5LCBzdHJpbmddO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZVNpbXBsZVF1ZXJ5IChrZXksIHZhbHVlLCBjb21wYXJhdG9yPykge1xuXHRcdHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XG5cblx0XHRpZiAoY29tcGFyYXRvciA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y29tcGFyYXRvciA9IEFycmF5LmlzQXJyYXkodmFsdWVbQ09OU1RBTlRTLk9CSl0pID8gJ0lOJyA6ICc9JztcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7a2V5OiBrZXksIHZhbHVlOiB2YWx1ZVtDT05TVEFOVFMuT0JKXSwgY29tcGFyYXRvcjogY29tcGFyYXRvcn0sXG5cdFx0XHQnWycgKyBjb21wYXJhdG9yICsgQ09OU1RBTlRTLlNFUCArIGtleSArIENPTlNUQU5UUy5TRVAgKyB2YWx1ZVtDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlTGlua2VkVG9RdWVyeSAobGlua2VkVG8sIHF1ZXJ5LCByZXZlcnNlLCBub3QpIHtcblx0XHRpZiAocXVlcnkgPT09IHVuZGVmaW5lZClcblx0XHRcdHF1ZXJ5ID0ge307XG5cblx0XHRpZiAocmV2ZXJzZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV2ZXJzZSA9IGZhbHNlO1xuXG5cdFx0aWYgKG5vdCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0bm90ID0gZmFsc2U7XG5cblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucGFyc2UocXVlcnkpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtsaW5rZWRUbzogbGlua2VkVG8sIHF1ZXJ5OiBwYXJzZWRRdWVyeVtDT05TVEFOVFMuT0JKXSwgcmV2ZXJzZTogcmV2ZXJzZSwgbm90OiBub3R9LFxuXHRcdFx0J1snICsgJ2xpbmtlZFRvJyArIENPTlNUQU5UUy5TRVAgKyBsaW5rZWRUbyArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRRdWVyeVtDT05TVEFOVFMuU1RSXSArIENPTlNUQU5UUy5TRVAgKyByZXZlcnNlICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ29tcGxleFF1ZXJ5IChjb25kaXRpb25zLCBvcGVyYXRvcikge1xuXHRcdGlmIChvcGVyYXRvciA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b3BlcmF0b3IgPSAnQU5EJztcblx0XHRlbHNlXG5cdFx0XHRvcGVyYXRvciA9IG9wZXJhdG9yLnRvVXBwZXJDYXNlKCk7XG5cblx0XHRjb25zdCBwYXJzZWRDb25kaXRpb25zID0gdGhpcy5wYXJzZUNvbmRpdGlvbnMoY29uZGl0aW9ucyk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2NvbmRpdGlvbnM6IHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLk9CSl0sIG9wZXJhdG9yOiBvcGVyYXRvcn0sXG5cdFx0XHQnWycgKyBvcGVyYXRvciArIHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUNvbmRpdGlvbnMgKGNvbmRpdGlvbnMpIHtcblx0XHRsZXQgcGFyc2VkQ29uZGl0aW9uczogb2JqZWN0W10gPSBbXTtcblx0XHRjb25zdCBxdWVyeTogb2JqZWN0W10gPSBbXTtcblx0XHRsZXQgc3RyaW5nID0gJyc7XG5cblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKVxuXHRcdFx0cGFyc2VkQ29uZGl0aW9ucy5wdXNoKHRoaXMucGFyc2UoY29uZGl0aW9uKSk7XG5cblx0XHRwYXJzZWRDb25kaXRpb25zID0gcGFyc2VkQ29uZGl0aW9ucy5zb3J0KChhLCBiKSA9PiB0aGlzLmNvbXBhcmVQYXJzZWRRdWVyaWVzKGEsIGIpKTtcblxuXHRcdGZvciAoY29uc3QgcGFyc2VkQ29uZGl0aW9uIG9mIHBhcnNlZENvbmRpdGlvbnMpIHtcblx0XHRcdHF1ZXJ5LnB1c2gocGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5PQkpdKTtcblx0XHRcdHN0cmluZyArPSBwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLlNUUl07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcblx0fVxuXG5cdHByaXZhdGUgZm9ybWF0VmFsdWUgKHZhbHVlKSB7XG5cdFx0bGV0IHByb2Nlc3NlZFZhbHVlO1xuXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuY2hhckF0KDApID09PSAnJicpIHtcblx0XHRcdGNvbnN0IGtleSA9IHZhbHVlLnN1YnN0cmluZygxKTtcblxuXHRcdFx0dmFsdWUgPSB0aGlzLnBhcmFtZXRlcnNba2V5XTtcblxuXHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlQYXJzZXI6IFVuZGVmaW5lZCB0ZW1wbGF0ZSBwYXJhbWV0ZXIgXFwnJyArIGtleSArICdcXCcnKTtcblxuXHRcdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XG5cblx0XHRcdHJldHVybiBbcHJvY2Vzc2VkVmFsdWUsIGtleSArICc+JyArIHZhbHVlXTtcblx0XHR9XG5cblx0XHRwcm9jZXNzZWRWYWx1ZSA9IHRoaXMucHJvY2Vzc1ZhbHVlKHZhbHVlKTtcblxuXHRcdHJldHVybiBbcHJvY2Vzc2VkVmFsdWUsICcnICsgcHJvY2Vzc2VkVmFsdWVdO1xuXHR9XG59XG4iLCJleHBvcnQgY2xhc3MgUXVlcnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKCkge1xuXHR9XG5cblx0YWRkQW5kQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcblx0XHRcdHJldHVybiB7Y29uZGl0aW9uczogW3F1ZXJ5LCBjb25kaXRpb25dfTtcblxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcblx0fVxuXG5cdGFkZE9yQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XG5cdFx0aWYgKHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcblxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl0sIG9wZXJhdG9yOiAnb3InfTtcblx0fVxuXG5cdGFkZFBhcmVudENvbmRpdGlvbiAocXVlcnksIHBhcmVudCkge1xuXHRcdGxldCBsaW5rZWRUb1F1ZXJ5O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBxdWVyeTtcblxuXHRcdGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHBhcmVudC5pdGVtSWR9O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID8gbGlua2VkVG9RdWVyeSA6IHRoaXMuYWRkQW5kQ29uZGl0aW9uKHF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcblx0fVxuXG5cdGNyZWF0ZU5vdEluIChpZEFycmF5KSB7XG5cdFx0cmV0dXJuIHtjb21wYXJhdG9yOiAnTk9UIElOJywga2V5OiAnaWQnLCB2YWx1ZTogaWRBcnJheX07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuL0NvbHVtblV0aWwnO1xuXG5leHBvcnQgY2xhc3MgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB7XG5cdHByaXZhdGUgY29sdW1ucyA9IHt9O1xuXHRwcml2YXRlIGNvbHVtbkluZm9JZE1hcCA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRleHBhbmQgKGNvbHVtbkluZm8pIHtcblx0XHRpZiAodGhpcy5jb2x1bW5JbmZvSWRNYXBbY29sdW1uSW5mby5pZF0pXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtbkluZm8uaXRlbVR5cGU7XG5cblx0XHRpZiAodGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0dGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSA9IHRoaXMuY29sdW1uVXRpbFxuXHRcdFx0Lm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSwgY29sdW1uSW5mby5yZXF1ZXN0KVxuXHRcdFx0Lm1lcmdlZDtcblxuXHRcdHRoaXMuY29sdW1uSW5mb0lkTWFwW2NvbHVtbkluZm8uaWRdID0gdHJ1ZTtcblx0fVxuXG5cdGdldCAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1ucztcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2xsZWN0aW9uSGFuZGxlciwgSXRlbUhhbmRsZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdENvbHVtblNldEZhY3RvcnksXG5cdEl0ZW1FbnRyeUZhY3RvcnksXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoUmVzdWx0LCBGaWVsZE1hcCwgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgU29ja2V0TWVzc2FnZUhhbmRsZXIge1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdG9uTWVzc2FnZVJlY2VpdmVkIChtZXNzYWdlOiBhbnkpOiBhbnkge1xuXHRcdHN3aXRjaCAobWVzc2FnZS5ib2R5LmV2ZW50VHlwZSkge1xuXHRcdFx0Y2FzZSAndXBkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlVXBkYXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnY3JlYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQ3JlYXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnZGVsZXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlRGVsZXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnbGlua1RvJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlTGlua01vdmUoLyogbWVzc2FnZSAqLyk7XG5cdFx0fVxuXHR9XG5cblx0Zm9ybWF0TWVzc2FnZVZhbHVlcyAodmFsdWVzLCBjb2x1bW5zKTogRmllbGRNYXAge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxuXHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uc1tjb2x1bW5JZF0udHlwZSwgdmFsdWVzW2NvbHVtbklkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y3JlYXRlQ29sbGVjdGlvbk1hcCAoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSB7XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2l0ZW1JZDogbnVtYmVyXTogQ29sbGVjdGlvbk1hdGNoUmVzdWx0fSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSBpdGVtc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbS5wYXJlbnQgIT09IG51bGwgPyBpdGVtLnBhcmVudCA6IHt9O1xuXG5cdFx0XHRyZXN1bHRbaXRlbUlkXSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUZpdHRpbmdJdGVtKFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0dGhpcy5mb3JtYXRNZXNzYWdlVmFsdWVzKGl0ZW0udmFsdWVzLCBjb2x1bW5zKSxcblx0XHRcdFx0cGFyZW50XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRncm91cEJ5Q29sbGVjdGlvbklkIChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XG5cblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1tzdGF0dXNdKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcblxuXHRcdFx0XHRcdGlmIChyZXN1bHRbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF0gPSB7XG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdGZpdHRpbmc6IFtdLFxuXHRcdFx0XHRcdFx0XHRub3RmaXR0aW5nOiBbXSxcblx0XHRcdFx0XHRcdFx0bWF5YmU6IFtdXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF1bc3RhdHVzXS5wdXNoKFxuXHRcdFx0XHRcdFx0c3RhdHVzID09PSAnZml0dGluZycgPyB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpIDogaXRlbUlkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZXF1ZXN0Q29sdW1ucyAoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApIHtcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XG5cdFx0XHRjb25zdCBmaXR0aW5nQ29sbGVjdGlvbnMgPSBjb2xsZWN0aW9ucy5maXR0aW5nO1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nQ29sbGVjdGlvbiBvZiBmaXR0aW5nQ29sbGVjdGlvbnMpXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoZml0dGluZ0NvbGxlY3Rpb24uY29sdW1ucyk7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcblx0fVxuXG5cdGRlZmVyRW50cnkgKGl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gaXRlbUVudHJ5LmRlZmVycmVkO1xuXG5cdFx0aWYgKGRlZmVycmVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVyKCk7XG5cblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZS50aGVuKFxuXHRcdFx0dGhpcy5kZWZlckVudHJ5LmJpbmQodGhpcyksXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJvY2Vzc01lc3NhZ2UgKGJvZHkpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGJvZHkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtVHlwZSwgYm9keS5pdGVtc1tpdGVtVHlwZV0sIGJvZHkuY29sdW1uc1tpdGVtVHlwZV0pO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1ucyhpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRcdGNvbnN0IHJlcXVlc3RJZHM6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZFN0cmluZyBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWRTdHJpbmcpO1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gK2l0ZW1JZFN0cmluZztcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShpdGVtRW50cnkpKTtcblx0XHRcdFx0cmVxdWVzdElkcy5wdXNoKGl0ZW1JZCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtpdGVtSWRdLmZpdHRpbmcubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgZmFsc2UpXG5cdFx0XHQpO1xuXG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkpOyAvLyBjb2xsZWN0aW9uTWFwIG1pZ2h0IGNvbnRhaW4gJ21heWJlJyBtYXRjaGVzXG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiByZXF1ZXN0SWRzfSwgcmVxdWVzdENvbHVtbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2UoaXRlbVR5cGUsIHJlcXVlc3RJZHMsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgcmVzcG9uc2UsIGNvbGxlY3Rpb25NYXApO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZSAoYm9keSkge1xuXHRcdGNvbnN0IGl0ZW1zID0gYm9keS5pdGVtcy5GdW5jdGlvbkNoYW5nZXNSZXNvbHZlO1xuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcblx0XHRjb25zdCByZXF1ZXN0SWRzOiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcblx0XHRcdGNvbnN0IGZ1bmN0aW9uSWQgPSBpdGVtc1tpdGVtSWRdLnBhcmVudC5pdGVtSWQ7XG5cdFx0XHRjb25zdCBmdW5jdGlvbkVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldCgnRnVuY3RpZScsIGZ1bmN0aW9uSWQpO1xuXG5cdFx0XHRpZiAoZnVuY3Rpb25FbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGZ1bmN0aW9uRW50cnkuY29sdW1ucy5yZXNwb25zZS5GdW5jdGllLm5ld2NoYW5nZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShmdW5jdGlvbkVudHJ5KSk7XG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goZnVuY3Rpb25JZCk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoJ0Z1bmN0aWUnLCB7aWQ6IHJlcXVlc3RJZHN9LCB7RnVuY3RpZTogWyduZXdjaGFuZ2VzJ119KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRzID0gcmVzcG9uc2UubGlua3MuRnVuY3RpZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXNwb25zZUlkcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IDxJdGVtRW50cnk+IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBpdGVtSWQpO1xuXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxuXHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5tYWluXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCByZXNwb25zZVZhbHVlID0gcmVzcG9uc2UuZmV0Y2hWYWx1ZSgnRnVuY3RpZScsIGl0ZW1JZCwgJ25ld2NoYW5nZXMnKTtcblxuXHRcdFx0XHRcdGlmIChyZXNwb25zZVZhbHVlID09PSBwcmV2aW91cy5uZXdjaGFuZ2VzKVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdFx0aXRlbUVudHJ5XG5cdFx0XHRcdFx0XHQuc2V0SW5pdGlhbCh7bmV3Y2hhbmdlczogcmVzcG9uc2VWYWx1ZX0sIHRydWUpXG5cdFx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKVxuXHRcdFx0XHRcdFx0LnJlc29sdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xuXHR9XG5cblx0aGFuZGxlUmVzcG9uc2UgKGl0ZW1UeXBlLCByZXF1ZXN0SWRzLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UsIGNvbGxlY3Rpb25NYXApIHtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXF1ZXN0SWRzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSA8SXRlbUVudHJ5PiB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdFx0Y29uc3QgaXNOZXcgPSBpdGVtRW50cnkuaW5pdGlhbCA9PT0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChmaWVsZHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XG5cblx0XHRcdFx0aWYgKGlzTmV3KVxuXHRcdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xuXG5cdFx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBkZXJpdmVkID0gcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbkluZm8ucm9vdCk7XG5cblx0XHRcdGlmIChpc05ldylcblx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChmaWVsZHMsIGRlcml2ZWQsIGNvbHVtbkluZm8pO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxuXHRcdFx0XHRcdHt9LFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsKVxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoZmllbGRzLCBkZXJpdmVkLCBleHBhbnNpb25SZXN1bHQpO1xuXG5cdFx0XHRcdGl0ZW1FbnRyeVxuXHRcdFx0XHRcdC51cGRhdGVGaWVsZHMoZmllbGRzLCBkZXJpdmVkLCBmYWxzZSlcblx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKVxuXHRcdFx0XHRcdC5yZXNvbHZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XG5cdH1cblxuXHRoYW5kbGVDcmVhdGUgKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBib2R5ID0gbWVzc2FnZS5ib2R5O1xuXG5cdFx0aWYgKGJvZHkuaXRlbVR5cGUgPT09ICdGdW5jdGlvbkNoYW5nZXNSZXNvbHZlJylcblx0XHRcdHJldHVybiB0aGlzLnByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlKGJvZHkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UoYm9keSkudGhlbihcblx0XHRcdGNvbGxlY3Rpb25NYXAgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5hZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xuXHR9XG5cblx0aGFuZGxlVXBkYXRlIChtZXNzYWdlKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UobWVzc2FnZS5ib2R5KS50aGVuKFxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xuXHR9XG5cblx0aGFuZGxlRGVsZXRlIChtZXNzYWdlKSB7XG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBib2R5Lml0ZW1zKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUNvbnRhaW5pbmdJdGVtKGJvZHkuaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uSWQgPSBjb2xsZWN0aW9uLmlkO1xuXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbiwgaXRlbXM6IFtdfTtcblxuXHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0uaXRlbXMucHVzaChpdGVtSWQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0bWFwRW50cnkuY29sbGVjdGlvbi5yZW1vdmVJdGVtcyhtYXBFbnRyeS5pdGVtcywgbnVsbCwgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHR9XG5cblx0Ly8gVE9ETyFcblx0aGFuZGxlTGlua01vdmUgKCkge31cblxuLypcdGhhbmRsZUxpbmtNb3ZlIChtZXNzYWdlKSB7XG5cdFx0cHJvY2Vzc01lc3NhZ2UoXG5cdFx0XHRtZXNzYWdlLFxuXHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdC8vIGZpdHMgaW4gdGhpcyBjb2xsZWN0aW9uLCB0b2RvOiBnZXQgdGhlIG9sZCBjb2xsZWN0aW9uIGl0IGJlbG9uZ2VkIHRvXG5cdFx0XHRcdGNvbGxlY3Rpb24ubW92ZUl0ZW1zKGl0ZW1FbnRyaWVzLCBudWxsLCB0cnVlKTtcblx0XHRcdH0sXG5cdFx0XHRmdW5jdGlvbiAoY29sbGVjdGlvbiwgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0Ly8gbWF5YmUgZml0c1xuXHRcdFx0XHQvLyB0b2RvOiBhbHNvIHJlbW92ZSB0aGVtIGZyb20gdGhlIG9sZCBjb2xsZWN0aW9uXG5cdFx0XHRcdGNvbGxlY3Rpb24uZXh0ZW5kKGFuZ3VsYXIuaWRlbnRpdHksIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHR9LFxuXHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGlkcykge1xuXHRcdFx0XHQvLyBub3QgZml0dGluZyBpbiB0aGlzIGNvbGxlY3Rpb24sIHJlbW92ZSBpdCA/XG5cdFx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoaWRzLCBudWxsLCBtZXNzYWdlKTtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG4qL1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9BcGlGb3JtYXR0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXF1ZXN0U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlUHJvY2Vzc29yJztcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXMnO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzUHJvY2Vzc29yJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25IYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbk1hdGNoZXInO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5IYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSW5mbyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblNldCc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9DcmVhdGVSZXF1ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUFkbWluaXN0cmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnlTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVxdWVzdFNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vS2V5U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Mb2NrU2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlcic7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyJztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbic7XG5leHBvcnQgKiBmcm9tICcuL1NvY2tldE1lc3NhZ2VIYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vVXRpbCc7XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5cbmV4cG9ydCBjbGFzcyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAocHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcikge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKHJlc3BvbnNlOiBhbnkpIHtcblx0XHRyZXR1cm4gbmV3IEFwaVJlc3BvbnNlUHJvY2Vzc29yKHRoaXMuYXBpRm9ybWF0dGVyLCByZXNwb25zZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEJhdGNoU3RhdHVzIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQmF0Y2hTdGF0dXNGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChnZXRJdGVtSWQ6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gSXRlbUlkLCBnZXRQcm9taXNlOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IFByb21pc2U8SXRlbUVudHJ5Pik6IEJhdGNoU3RhdHVzIHtcblx0XHRyZXR1cm4gbmV3IEJhdGNoU3RhdHVzKFxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcblx0XHRcdGdldEl0ZW1JZCxcblx0XHRcdGdldFByb21pc2Vcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDaGFuZ2VzQ29tcGlsYXRpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcblxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4vJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5XG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXSk6IENoYW5nZXNDb21waWxhdGlvbiB7XG5cdFx0cmV0dXJuIG5ldyBDaGFuZ2VzQ29tcGlsYXRpb24oXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHRzaW5nbGVJdGVtcyxcblx0XHRcdGNvbGxlY3Rpb25zXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRDaGFuZ2VzUHJvY2Vzc29yLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0SXRlbUhhbmRsZXJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IENoYW5nZXNQcm9jZXNzb3Ige1xuXHRcdHJldHVybiBuZXcgQ2hhbmdlc1Byb2Nlc3Nvcihcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Vcblx0XHQpO1xuXHR9XG5cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoKSB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uQ2FjaGUoXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5FeHBhbnNpb24sIENvbHVtbkluZm8sIENvbHVtblNldCwgaW5BcnJheSwgSXRlbUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0RW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbnNcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5sZXQgY3VycmVudElkID0gMDtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeSB7XG5cdGlkOiBudW1iZXIgPSBjdXJyZW50SWQrKztcblx0cXVlcnk6IGFueTtcblx0Y29sdW1uczogQ29sdW1uU2V0O1xuXHR0ZW1wbGF0ZUNvbHVtbnM6IENvbHVtblNldCB8IG51bGwgPSBudWxsO1xuXG5cdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbDtcblxuXHRpbml0aWFsOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRpdGVtczogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRyZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XG5cdGRlZmVycmVkOiBhbnk7XG5cdHByb21pc2U6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5Pjtcblx0cmVsb2FkUXVldWVkOiBib29sZWFuID0gZmFsc2U7XG5cblx0aGFzRWRpdFJlc291cmNlcyA9IGZhbHNlO1xuXHRoYXNJdGVtRWRpdFJlc291cmNlcyA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRwdWJsaWMgb3B0aW9uczogYW55XG5cdCkge1xuXHRcdHRoaXMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cdFx0dGhpcy5xdWVyeSA9IGZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0XHR0aGlzLmNvbHVtbnMgPSBmYWN0b3J5LmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdHRoaXMuZGVmZXIoKTtcblx0fVxuXG5cdGRlZmVyICgpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5pc0RlZmVycmVkKCkpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2UuZGVmZXIoKTtcblx0XHR0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnByb21pc2UgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9yZXNvbHZlICgpOiB0aGlzIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XG5cblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcblx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xuXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmVzb2x2ZSAoaXRlbUVudHJ5Q29tcG91bmQ6IHtjb2x1bW5zOiBDb2x1bW5TZXQsIGl0ZW1zOiBJdGVtRW50cnlbXX0pOiB0aGlzIHtcblx0XHR0aGlzLmNvbHVtbnMgPSBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zO1xuXHRcdHRoaXMuaW5pdGlhbCA9IGl0ZW1FbnRyeUNvbXBvdW5kLml0ZW1zO1xuXHRcdHRoaXMuaXRlbXMgPSBpdGVtRW50cnlDb21wb3VuZC5pdGVtcy5zbGljZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3Jlc29sdmUoKTtcblx0fVxuXG5cdGlzTG9jYWwgKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3Rvcnkua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XG5cdH1cblxuXHRtYXRjaFBhcmVudCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0cmV0dXJuIHBhcmVudC5pdGVtVHlwZSA9PT0gaXRlbVR5cGUgJiYgcGFyZW50Lml0ZW1JZCA9PSBpdGVtSWQ7XG5cdH1cblxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBtb2Qgb2YgbW9kaWZpZWQpXG5cdFx0XHRjYWxsYmFjayhtb2QpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5SWQgKGl0ZW1JZCk6IEl0ZW1FbnRyeSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmIChpdGVtRW50cnkuaXRlbUlkID09PSBpdGVtSWQpXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGdldElkQXJyYXkgKGFjY3VtdWxhdG9yOiBJdGVtSWRbXSA9IFtdKTogSXRlbUlkW10ge1xuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5nZXRJZEFycmF5KHRoaXMuaXRlbXMsIGFjY3VtdWxhdG9yKTtcblx0fVxuXG5cdC8vIHNodWxkIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCByZXNvbHZlRGVyaXZlZFxuXHRjcmVhdGVJdGVtcyAodmFsdWVzQXJyYXk6IEZpZWxkTWFwW10pOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBjb2x1bW5TZXQgPSB0aGlzLmNvbHVtbnM7XG5cdFx0bGV0IHRlbXBsYXRlO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuaXRlbUhhbmRsZXIuZmV0Y2hUZW1wbGF0ZSh0aGlzLml0ZW1UeXBlKS50aGVuKFxuXHRcdFx0dGVtcGxhdGVJbnN0YW5jZSA9PiB7XG5cdFx0XHRcdHRlbXBsYXRlID0gdGVtcGxhdGVJbnN0YW5jZTtcblxuXHRcdFx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRcdFx0aWYgKHRoaXMudGVtcGxhdGVDb2x1bW5zID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZUNvbHVtbnMgPSB0ZW1wbGF0ZS5jb2x1bW5zLmV4cGFuZChcblx0XHRcdFx0XHRcdGNvbHVtblNldC5yZXF1ZXN0LFxuXHRcdFx0XHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZSxcblx0XHRcdFx0XHRcdGNvbHVtblNldC5yZXNwb25zZVxuXHRcdFx0XHRcdCkubWVyZ2VkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZXMgb2YgdmFsdWVzQXJyYXkpIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChcblx0XHRcdFx0XHRcdGZhY3RvcnkuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3RMb2NhbChcblx0XHRcdFx0XHRcdFx0ZmFjdG9yeS5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdFx0XHRcdFx0dGVtcGxhdGUsXG5cdFx0XHRcdFx0XHRcdHZhbHVlcyxcblx0XHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHRcdHRoaXMucGFyZW50LFxuXHRcdFx0XHRcdFx0XHQ8Q29sdW1uU2V0PiB0aGlzLnRlbXBsYXRlQ29sdW1uc1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0XHR9LFxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVEZXJpdmVkVmFsdWVzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5pdGVtSGFuZGxlci5yZXNvbHZlRGVyaXZlZFZhbHVlcyhpdGVtRW50cmllcywgdGhpcy5jb2x1bW5zLnJvb3QsIGxvY2FsSXRlbUNhY2hlKTtcblx0fVxuXG5cdGFkZEl0ZW1zIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4gPSBmYWxzZSxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxuXHQpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xuXHRcdC8vIGxvY2FsIGVudHJ5IG1pZ2h0IGJlIGFkZGVkIG11bHRpcGxlIHRpbWVzIChleHRlbmQ/KVxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cdFx0Y29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5jb2x1bW5zLmxpbms7XG5cdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Jbml0aWFsOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRcdGNvbnN0IGVudHJpZXNBZGRlZFRvTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRpZiAodXBkYXRlSW5pdGlhbCkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0Ly8gd2hlbiBzYXZpbmcsIGl0ZW1zIHRoYXQgbWlnaHQgYWxyZWFkeSBiZSBpbiBtb2RpZmllZCBhcmUgYWRkZWQgdG8gaW5pdGlhbFxuXHRcdFx0XHRpZiAoaW5pdGlhbC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKSB7XG5cdFx0XHRcdFx0aW5pdGlhbC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRpZiAobW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSkge1xuXHRcdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblxuXHRcdFx0XHRcdGlmIChwYXJlbnRDb2x1bW4gIT09IG51bGwgJiYgaXRlbUVudHJ5Lm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkubW9kaWZpZWRbcGFyZW50Q29sdW1uLmlkXSA9IHBhcmVudC5pdGVtSWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrcyhcblx0XHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbCxcblx0XHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQsXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcblx0XHRcdGNhbGxPbkFkZCxcblx0XHRcdGNhbGxPbkFjdGl2YXRlXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzIChcblx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdLFxuXHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCxcblx0XHRjYWxsT25BZGQ6IGJvb2xlYW4gPSB0cnVlLFxuXHRcdGNhbGxPbkFjdGl2YXRlOiBib29sZWFuID0gdHJ1ZVxuXHQpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblxuXHRcdGlmIChlbnRyaWVzQWRkZWRUb0luaXRpYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLm9wdGlvbnMub25BZGRJbml0aWFsKGVudHJpZXNBZGRlZFRvSW5pdGlhbCwgdGhpcyk7XG5cdFx0fVxuXG5cdFx0aWYgKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xuXG5cdFx0aWYgKGNhbGxPbkFjdGl2YXRlICYmIGNvbGxlY3Rpb25SZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbG9jYWxDYWNoZSA9IGNvbGxlY3Rpb25SZXNvdXJjZXNbMF0ubG9jYWxDYWNoZTtcblxuXHRcdFx0Zm9yIChjb25zdCBhZGRlZEl0ZW1FbnRyeSBvZiBlbnRyaWVzQWRkZWRUb01vZGlmaWVkKVxuXHRcdFx0XHRsb2NhbENhY2hlLm9uQWN0aXZhdGVJdGVtKGFkZGVkSXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcykge1xuXHRcdFx0Y29uc3QgYWRkZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuYWRkSXRlbVJlc291cmNlcyhlbnRyaWVzQWRkZWRUb01vZGlmaWVkKTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcblx0XHRcdFx0cmVzdWx0ID0gYWRkZWRSZXNvdXJjZXM7XG5cblx0XHRcdFx0aWYgKGNhbGxPbkFkZClcblx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVtb3ZlSXRlbXMgKFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCB7XG5cdFx0aWYgKGlkQXJyYXkubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuICFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIGlkQXJyYXkpO1xuXHRcdFx0fSxcblx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcblx0XHRcdGNhbGxPblJlbW92ZVxuXHRcdCk7XG5cdH1cblxuXHRjbGVhciAoXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0Y2FsbE9uUmVtb3ZlXG5cdFx0KTtcblx0fVxuXG5cdGhhbmRsZVJlbW92ZWRJdGVtcyAoXG5cdFx0ZmlsdGVyRnVuY3Rpb246IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbixcblx0XHRyZXN1bHRSZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbDogYm9vbGVhbiA9IGZhbHNlLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IHJlbW92ZWRGcm9tTW9kaWZpZWQgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaXRlbXMsIGZpbHRlckZ1bmN0aW9uKTtcblx0XHRsZXQgcmVtb3ZlZEZyb21Jbml0aWFsO1xuXG5cdFx0aWYgKHVwZGF0ZUluaXRpYWwpXG5cdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaW5pdGlhbCwgZmlsdGVyRnVuY3Rpb24pO1xuXHRcdGVsc2Uge1xuXHRcdFx0Ly8gcmVtb3ZlIGFsbCAqbG9jYWwqIGl0ZW1zIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSBtb2RpZmllZCBmcm9tIGluaXRpYWwsIHRvb1xuXHRcdFx0Y29uc3QgbG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHJlbW92ZWRFbnRyeSBvZiByZW1vdmVkRnJvbU1vZGlmaWVkKSB7XG5cdFx0XHRcdGlmIChyZW1vdmVkRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRcdGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZC5wdXNoKHJlbW92ZWRFbnRyeSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KFxuXHRcdFx0XHRcdHRoaXMuaW5pdGlhbCxcblx0XHRcdFx0XHRpdGVtRW50cnkgPT4gbG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTFcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyhyZW1vdmVkRnJvbUluaXRpYWwsIHJlbW92ZWRGcm9tTW9kaWZpZWQsIHJlc3VsdFJlc291cmNlLCBjYWxsT25SZW1vdmUpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyAoXG5cdFx0cmVtb3ZlZEZyb21Jbml0aWFsOiBJdGVtRW50cnlbXSxcblx0XHRyZW1vdmVkRnJvbU1vZGlmaWVkOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwsXG5cdFx0Y2FsbE9uUmVtb3ZlOiBib29sZWFuID0gdHJ1ZVxuXHQpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblxuXHRcdGlmIChyZW1vdmVkRnJvbUluaXRpYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLm9wdGlvbnMub25SZW1vdmVJbml0aWFsKHJlbW92ZWRGcm9tSW5pdGlhbCwgdGhpcyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbW92ZWRGcm9tTW9kaWZpZWQubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xuXG5cdFx0bGV0IHJlc3VsdDogSXRlbVJlc291cmNlW10gfCBudWxsID0gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgcmVtb3ZlZEVudHJ5IG9mIHJlbW92ZWRGcm9tTW9kaWZpZWQpXG5cdFx0XHRyZW1vdmVkRW50cnkuZGVhY3RpdmF0ZVJlc291cmNlcygpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcykge1xuXHRcdFx0Y29uc3QgcmVtb3ZlZFJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5yZW1vdmVJdGVtUmVzb3VyY2VzKHJlbW92ZWRGcm9tTW9kaWZpZWQpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlID09PSByZXN1bHRSZXNvdXJjZSkge1xuXHRcdFx0XHRyZXN1bHQgPSByZW1vdmVkUmVzb3VyY2VzO1xuXG5cdFx0XHRcdGlmIChjYWxsT25SZW1vdmUpXG5cdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uUmVtb3ZlKHJlbW92ZWRSZXNvdXJjZXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRleHBhbmQgKG5ld0NvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKTogUHJvbWlzZTx0aGlzPiB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XG5cblx0XHRpZiAobmV3Q29sdW1ucyAhPT0gdHJ1ZSAmJiBuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBmYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4odGhpcyk7XG5cblx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKHRoaXMsIHVuZGVmaW5lZCwgbmV3Q29sdW1ucykudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJdGVtcyA9IHJlc3BvbnNlLml0ZW1zW2l0ZW1UeXBlXTtcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0V4cGFuc2lvbihcblx0XHRcdFx0XHRuZXdDb2x1bW5zLFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdHRoaXMuaXRlbXNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcyhcblx0XHRcdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF0gIT09IHVuZGVmaW5lZCB8fCBpdGVtRW50cnkuaXNMb2NhbCgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblxuXHRcdFx0XHR0aGlzLmV4cGFuZENvbHVtbnMoY29sdW1uRXhwYW5zaW9uKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0ZXh0ZW5kUXVlcnkgKGNhbGxiYWNrKSB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucXVlcnk7XG5cblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gY2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5xdWVyeSA9IHRoaXMuZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHR9XG5cblx0ZXh0ZW5kIChxdWVyeUNhbGxiYWNrLCBjb2xsZWN0aW9uUmVzb3VyY2UsIGNhbGxPbkFkZD8sIHVwZGF0ZUluaXRpYWw/KSB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSBmYWN0b3J5LmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCBleHRlbmRlZFF1ZXJ5ID0gdGhpcy5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKS5vYmplY3Q7XG5cdFx0Y29uc3QgZnVsbFF1ZXJ5ID0gZmFjdG9yeS5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxuXHRcdFx0ZXh0ZW5kZWRRdWVyeSxcblx0XHRcdGZhY3RvcnkucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKHRoaXMuZ2V0SWRBcnJheSgpKVxuXHRcdCk7XG5cblx0XHQvLyB0b2RvOiBhbHNvIGRvIHRoZSBsaW1pdCBjaGVjayBpbiBiYXRjaEV4dGVuZFxuXHRcdGNvbnN0IHByb21pc2UgPSBmYWN0b3J5Lml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoXG5cdFx0XHR0aGlzLFxuXHRcdFx0Ly8gV2hlbiB0aGVyZSdzIGEgbGltaXQgd2Ugd2FudCB0byBmZXRjaCBhbGwgaXRlbXMgYmVjYXVzZSB3ZSB3aWxsIGRvIHNvcnRpbmcgYW5kIHNwbGljaW5nIG9mIHRoZSBleGNlc3MgaXRlbXNcblx0XHRcdHRoaXMub3B0aW9ucy5saW1pdCAhPT0gbnVsbCA/XG5cdFx0XHRcdGV4dGVuZGVkUXVlcnkgOlxuXHRcdFx0XHRmdWxsUXVlcnlcblx0XHQpLnRoZW4ocmVzcG9uc2UgPT4ge1xuXHRcdFx0XHQvLyByZW1vdmVBYnNlbnRJdGVtcyhyZXNwb25zZSk7IFRPRE86IHdlIGNhbiBvbmx5IGRvIHRoaXMgd2hlbiB3ZSByZXF1ZXN0ICphbGwqIHRoZSBpdGVtc1xuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW3RoaXMuaXRlbVR5cGVdLFxuXHRcdFx0XHRcdHRoaXMucGFyZW50LFxuXHRcdFx0XHRcdHRoaXMuY29sdW1uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oaXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBjb2xsZWN0aW9uUmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwsIGNhbGxPbkFkZCwgZmFsc2UpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0dGhpcy5wcm9taXNlID0gcHJvbWlzZS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdHJldHVybiBwcm9taXNlO1xuXHR9XG5cblx0cXVldWVSZWxvYWQgKCk6IHZvaWQge1xuXHRcdHRoaXMucmVsb2FkUXVldWVkID0gdHJ1ZTtcblx0fVxuXG5cdGV4cGFuZENvbHVtbnMgKGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uKSB7XG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bih0aGlzLmNvbHVtbnMpO1xuXG5cdFx0aWYgKGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbClcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XG5cdFx0dGhpcy50ZW1wbGF0ZUNvbHVtbnMgPSBudWxsO1xuXHRcdHRoaXMub3B0aW9ucy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJlcXVlc3Q7XG5cdH1cblxuXHRleHBhbmRSZXF1ZXN0Q29sdW1ucyAocmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0dGhpcy5jb2x1bW5zLmV4cGFuZFJlcXVlc3RDb2x1bW5zKHJlcXVlc3RDb2x1bW5zKTtcblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5yZXF1ZXN0O1xuXHR9XG5cblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkcyA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnkgfCBJdGVtSWQ+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcblx0XHRcdFx0cmVzdWx0LnB1c2gocmV0dXJuSXRlbUlkcyA/IGl0ZW1FbnRyeS5pdGVtSWQgOiBpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZW1vdmVkSXRlbXMgKHJldHVybkl0ZW1JZHMgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5IHwgSXRlbUlkPiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaW5pdGlhbCkge1xuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0VXBkYXRlZEl0ZW1zICgpIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSAmJiBpdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRoYXNBZGRlZEl0ZW1zICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiB0aGlzLmluaXRpYWwubGVuZ3RoO1xuXHR9XG5cblx0aGFzUmVtb3ZlZEl0ZW1zICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsLmxlbmd0aCA+IHRoaXMuaXRlbXMubGVuZ3RoO1xuXHR9XG5cblx0aGFzVXBkYXRlZEl0ZW1zICgpIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IG1vZGlmaWVkSXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAobW9kaWZpZWRJdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRnZXRDdXJyZW50UmVzb3VyY2UgKCkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0cmV0dXJuIHJlc291cmNlc1tyZXNvdXJjZXMubGVuZ3RoIC0gMV07XG5cdH1cblxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJ0YWJDaGFuZ2UgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gdGhpcy5pdGVtczsgLy8gVE9ETzogaW5pdGlhbFxuXHRcdGNvbnN0IGN1cnJlbnRSZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRjb25zdCBuZXdSZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XG5cblx0XHQvLyB3ZSdsbCBhZGQgdGhlIGl0ZW0gcmVzb3VyY2VzIGJhY2sgaW4gbGF0ZXJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY3VycmVudFJlc291cmNlcykge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zW2lzU3VidGFiQ2hhbmdlID8gJ2NsZWFyT25TdWJUYWJDaGFuZ2UnIDogJ2NsZWFyT25UYWJDaGFuZ2UnXSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdG5ld1Jlc291cmNlcy5wdXNoKGNvbGxlY3Rpb25SZXNvdXJjZSk7XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcylcblx0XHRcdFx0aXRlbVJlc291cmNlLmVudHJ5LnJlc291cmNlcy5wdXNoKGl0ZW1SZXNvdXJjZSk7IC8vIHJlc291cmNlcyBzaG91bGQgYmUgZW1wdHkgYnkgbm93IDotKVxuXHRcdH1cblxuXHRcdHRoaXMucmVzb3VyY2VzID0gbmV3UmVzb3VyY2VzO1xuXHR9XG5cblx0Ly8gdGhpcyBkb2Vzbid0IHJldmVydCB1cGRhdGVzXG5cdHJldmVydENoYW5nZXMgKCkge1xuXHRcdC8vIHNhdmUgdGhlc2UgYmVmb3JlIHJlc2V0dGluZyB0aGUgaXRlbXMgcHJvcGVydHlcblx0XHRjb25zdCBhZGRlZEl0ZW1zID0gPEl0ZW1FbnRyeVtdPiB0aGlzLmdldEFkZGVkSXRlbXMoKTtcblx0XHRjb25zdCByZW1vdmVkSXRlbXMgPSA8SXRlbUVudHJ5W10+IHRoaXMuZ2V0UmVtb3ZlZEl0ZW1zKCk7XG5cblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pbml0aWFsLnNsaWNlKCk7XG5cblx0XHR0aGlzLmhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrcyhbXSwgcmVtb3ZlZEl0ZW1zKTtcblx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzKFtdLCBhZGRlZEl0ZW1zKTtcblx0fVxuXG5cdG9uSXRlbXNDcmVhdGVkIChjb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuXHRcdFx0cmVzb3VyY2UucmVidWlsZE1hcCgpO1xuXHRcdFx0cmVzb3VyY2Uub3B0aW9ucy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwKTtcblx0XHR9XG5cdH1cblxuXHRnZXRVcGRhdGVkSXRlbUNvbHVtbnMgKGNvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xuXHRcdGNvbnN0IHJlc3VsdDoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGl0ZW1Db2x1bW5zKSB7XG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtjb2x1bW4uYXBpQ29sdW1uLml0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHRbY29sdW1uLmlkXSA9IGNvbHVtbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y2xvbmUgKHBhcmVudCwgY29udmVyc2lvbk1hcD86IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGNsb25lZEl0ZW1FbnRyaWVzID0gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmJhdGNoQ2xvbmUodGhpcy5pdGVtcywgY29udmVyc2lvbk1hcCk7XG5cblx0XHRmb3IgKGNvbnN0IGNsb25lZEl0ZW1FbnRyeSBvZiBjbG9uZWRJdGVtRW50cmllcylcblx0XHRcdGNsb25lZEl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRyZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxuXHRcdFx0ZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNsb25lT3B0aW9ucyh0aGlzLm9wdGlvbnMsIHBhcmVudClcblx0XHQpXG5cdFx0XHQucmVzb2x2ZShcblx0XHRcdFx0e2NvbHVtbnM6IHRoaXMuY29sdW1ucywgaXRlbXM6IGNsb25lZEl0ZW1FbnRyaWVzfVxuXHRcdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgZmlsdGVyQXJyYXkgfSBmcm9tICcuLi9jbGFzc2VzL1V0aWwnO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VJdGVtSWRNYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdGl0ZW1zOiBJdGVtUmVzb3VyY2VbXTtcblx0aXRlbUlkTWFwOiBJdGVtUmVzb3VyY2VJdGVtSWRNYXAgPSB7fTtcblx0Y29sdW1ucztcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHB1YmxpYyBlbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHB1YmxpYyBvcHRpb25zLFxuXHRcdHB1YmxpYyBsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCkge1xuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2U7XG5cdFx0dGhpcy5pdGVtSWRNYXAgPSB7fTtcblx0XHR0aGlzLml0ZW1zID0gW107XG5cblx0XHRlbnRyeS5yZXNvdXJjZXMucHVzaCh0aGlzKTtcblxuXHRcdHRoaXMuYWRkSXRlbVJlc291cmNlcyhlbnRyeS5pdGVtcyk7XG5cdH1cblxuXHRnZXRJdGVtQnlJZCAoaXRlbUlkOiBudW1iZXIpOiBJdGVtUmVzb3VyY2Uge1xuXHRcdHJldHVybiB0aGlzLml0ZW1JZE1hcFtpdGVtSWRdO1xuXHR9XG5cblx0cmVidWlsZE1hcCAoKTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgaXRlbUlkTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XG5cdFx0XHRpdGVtSWRNYXBbaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5pdGVtSWRNYXAgPSBpdGVtSWRNYXA7XG5cdH1cblxuXHRhZGRJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiBJdGVtUmVzb3VyY2VbXSB7IC8vIHNob3VsZCBiZSBmYXN0XG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXHRcdGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB0aGlzLml0ZW1JZE1hcDtcblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3Rvcihcblx0XHRcdHtcblx0XHRcdFx0ZWRpdDogb3B0aW9ucy5lZGl0SXRlbXMsXG5cdFx0XHRcdG9uQ2hhbmdlOiBvcHRpb25zLm9uQ2hhbmdlLFxuXHRcdFx0XHRvbkRlYWN0aXZhdGU6IGl0ZW1FbnRyeSA9PiB0aGlzLmxvY2FsQ2FjaGUub25EZWFjdGl2YXRlSXRlbShpdGVtRW50cnkpXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXG5cdFx0XHRsZXQgaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2U7XG5cblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGNvbnN0cnVjdG9yKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdGl0ZW1zLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdFx0aXRlbUlkTWFwW2l0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0aXRlbVJlc291cmNlID0gaXRlbUlkTWFwW2l0ZW1JZF07XG5cblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gaXRlbUVudHJpZXNcblx0ICogQHJldHVybnMge0l0ZW1SZXNvdXJjZVtdfVxuXHQgKlxuXHQgKiBSZXR1cm5zIHRoZSBJdGVtcmVzb3VyY2VzIHRoYXQgd2hlcmUgcmVtb3ZlZCBDb2xsZWN0aW9uLlxuXHQgKiBGaWx0ZXJzIG9uIEl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gSXRlbUVudHJ5XG5cdCAqL1xuXHRyZW1vdmVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiBJdGVtUmVzb3VyY2VbXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0ZmlsdGVyQXJyYXkoXG5cdFx0XHR0aGlzLml0ZW1zLFxuXHRcdFx0aXRlbVJlc291cmNlID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHRpZiAoaXRlbVJlc291cmNlLmVudHJ5ID09PSBpdGVtRW50cnkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0XHRcdFx0XHRkZWxldGUgdGhpcy5pdGVtSWRNYXBbaXRlbUVudHJ5Lml0ZW1JZF07XG5cblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNhbGxPbkFkZCAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pOiB2b2lkIHtcblx0XHR0aGlzLm9wdGlvbnMub25BZGQoaXRlbVJlc291cmNlcywgdGhpcyk7XG5cdH1cblxuXHRjYWxsT25SZW1vdmUgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKTogdm9pZCB7XG5cdFx0dGhpcy5vcHRpb25zLm9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMsIHRoaXMpO1xuXHR9XG5cblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSk7XG5cdH1cblxuXHRmaWx0ZXIgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2VbXSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZpcnN0IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBib29sZWFuKTogSXRlbVJlc291cmNlIHwgbnVsbCB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbVJlc291cmNlKSlcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5maXJzdChjYWxsYmFjaykgIT09IG51bGw7XG5cdH1cblxuXHRncm91cEJ5IChhcmd1bWVudDogc3RyaW5nIHwgKChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gc3RyaW5nIHwgbnVsbCkpOiB7W2tleTogc3RyaW5nXTogSXRlbVJlc291cmNlW119IHtcblx0XHRjb25zdCBpdGVtc1Jlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpdGVtUmVzb3VyY2UuZmllbGRzW2FyZ3VtZW50XTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFt2YWx1ZV0gPSBbXTtcblxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZSk7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xuXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtYXA8VD4gKGFyZ3VtZW50OiBzdHJpbmcgfCAoKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBUKSk6IFRbXSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgbGVuZ3RoID0gaXRlbVJlc291cmNlcy5sZW5ndGg7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdFx0cmVzdWx0W2ldID0gaXRlbVJlc291cmNlc1tpXS5maWVsZHNbYXJndW1lbnRdO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZXNbaV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZWR1Y2U8VD4gKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsIHZhbHVlOiBUKSA9PiBULCB2YWx1ZTogVCk6IFQge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdHZhbHVlID0gY2FsbGJhY2soaXRlbVJlc291cmNlLCB2YWx1ZSk7XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRleHRlbmQgKHF1ZXJ5Q2FsbGJhY2ssIHJldHVybkFsbEl0ZW1zOiBib29sZWFuID0gZmFsc2UsIGNhbGxPbkFkZD86IGJvb2xlYW4pOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuZXh0ZW5kKHF1ZXJ5Q2FsbGJhY2ssIHRoaXMsIGNhbGxPbkFkZCwgdHJ1ZSkudGhlbihcblx0XHRcdGl0ZW1SZXNvdXJjZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gcmV0dXJuQWxsSXRlbXMgPyB0aGlzLml0ZW1zIDogaXRlbVJlc291cmNlcztcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0ZGVhY3RpdmF0ZSAoKTogdm9pZCB7XG5cdFx0dGhpcy5sb2NhbENhY2hlLmNsZWFyQ29sbGVjdGlvbih0aGlzKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2UgKCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBpbmRleCA9IGNvbGxlY3Rpb25SZXNvdXJjZXMuaW5kZXhPZih0aGlzKTtcblxuXHRcdGlmIChpbmRleCAhPT0gLTEpXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0aXRlbVJlc291cmNlLmNsZWFyUmVzb3VyY2UoKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uVmlld1Jlc291cmNlIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9ucyxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCkge1xuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucywgbG9jYWxDYWNoZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRWRpdFJlc291cmNlIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KSB7XG5cdFx0c3VwZXIoZmFjdG9yeS5pdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMsIGxvY2FsQ2FjaGUpO1xuXHR9XG5cblx0c2F2ZSAoKTogUHJvbWlzZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuZW5hYmxlU2F2ZSlcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogU2F2aW5nIGRpc2FibGVkJyk7XG5cblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cnk7XG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwgJiYgZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKSlcblx0XHRcdHJldHVybiBmYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblxuXHRcdHJldHVybiBmYWN0b3J5LmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLmV4ZWN1dGUoW10sIFtjb2xsZWN0aW9uRW50cnldKTtcblx0fVxuXG5cdC8vIFRPRE86IHVzZSBjYWxsYmFjayBmdW5jdGlvblxuXHRtb3ZlSXRlbXMgKGlkQXJyYXk6IEl0ZW1JZFtdLCBkZXN0aW5hdGlvbjogQ29sbGVjdGlvblJlc291cmNlLCBlbmFibGVDYWxsYmFja3M/OiBib29sZWFuKTogSXRlbVJlc291cmNlW10ge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cnk7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdGlmIChvcHRpb25zLmVuYWJsZVNhdmUgfHwgb3B0aW9ucy5tb2RJbnN0YW50KVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogc2F2aW5nIGVuYWJsZWQnKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUgIT09IGRlc3RpbmF0aW9uLmVudHJ5Lml0ZW1UeXBlKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogaXRlbVR5cGUgbWlzbWF0Y2gnKTtcblxuXHRcdGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2VzID0gPEl0ZW1SZXNvdXJjZVtdPiBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2Ugb2YgcmVtb3ZlZEl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRpdGVtRW50cmllcy5wdXNoKHJlbW92ZWRJdGVtUmVzb3VyY2UuZW50cnkpO1xuXG5cdFx0ZGVzdGluYXRpb24uZW50cnkuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGRlc3RpbmF0aW9uLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblxuXHRcdHJldHVybiByZW1vdmVkSXRlbVJlc291cmNlcztcblx0fVxuXG5cdHJlbW92ZUl0ZW1zIChpZEFycmF5OiBJdGVtSWRbXSwgY2FsbE9uUmVtb3ZlOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcblx0XHQvLyBjYWxsT25SZW1vdmUgc2hvdWxkIGJlIGZhbHNlIGhlcmUgdG8gcHJldmVudCBvblJlbW92ZSBmcm9tIGJlaW5nIGNhbGxlZCB0d2ljZVxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSA8SXRlbVJlc291cmNlW10+IHRoaXMuZW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGZhbHNlKTtcblxuXHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudClcblx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGNhbGxPblJlbW92ZSlcblx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cblx0XHRpZiAoY2FsbE9uUmVtb3ZlKVxuXHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbVJlc291cmNlcyk7XG5cdH1cblxuXHRyZW1vdmVJdGVtIChpdGVtSWQ6IEl0ZW1JZCwgY2FsbE9uUmVtb3ZlPzogYm9vbGVhbik6IFByb21pc2U8SXRlbVJlc291cmNlPiB7XG5cdFx0cmV0dXJuIHRoaXMucmVtb3ZlSXRlbXMoW2l0ZW1JZF0sIGNhbGxPblJlbW92ZSkudGhlbihcblx0XHRcdGl0ZW1SZXNvdXJjZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlc1swXTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRhZGRJdGVtcyAodmFsdWVzQXJyYXk6IEZpZWxkTWFwW10sIGNhbGxPbkFkZDogYm9vbGVhbiA9IHRydWUsIGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhbik6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IG1vZEluc3RhbnQgPSB0aGlzLm9wdGlvbnMubW9kSW5zdGFudDtcblxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmNyZWF0ZUl0ZW1zKHZhbHVlc0FycmF5KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRpZiAobW9kSW5zdGFudClcblx0XHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZW50cnkucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIHRoaXMubG9jYWxDYWNoZS5pdGVtcyk7XG5cdFx0XHR9XG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gPEl0ZW1SZXNvdXJjZVtdPiB0aGlzLmVudHJ5LmFkZEl0ZW1zKFxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0Y2FsbE9uQWN0aXZhdGVcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAobW9kSW5zdGFudCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKFxuXHRcdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoY2FsbE9uQWRkKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY2FsbE9uQWRkKVxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0fSxcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRhZGRJdGVtICh2YWx1ZXM6IEZpZWxkTWFwLCBjYWxsT25BZGQ/OiBib29sZWFuLCBjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW4pOiBQcm9taXNlPEl0ZW1SZXNvdXJjZT4ge1xuXHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKFt2YWx1ZXNdLCBjYWxsT25BZGQsIGNhbGxPbkFjdGl2YXRlKS50aGVuKFxuXHRcdFx0aXRlbVJlc291cmNlcyA9PiB7XG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyIChlbmFibGVDYWxsYmFja3MpIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5jbGVhcih0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uSW5mbywgQ29sdW1uU2V0IH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRDb2x1bW5FeHBhbnNpb25SZXN1bHQsIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsXG5cdFJlc3BvbnNlQ29sdW1uXG59IGZyb20gJy4uL3R5cGVzJztcblxubGV0IGN1cnJlbnRJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBJdGVtRW50cnkge1xuXHRpZDogbnVtYmVyID0gKytjdXJyZW50SWQ7XG5cblx0cmVsb2FkUXVldWVkOiBib29sZWFuID0gZmFsc2U7XG5cdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRkZWZlcnJlZDtcblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xuXG5cdGluaXRpYWw6IEZpZWxkTWFwO1xuXHRtb2RpZmllZDogRmllbGRNYXA7XG5cdGRlcml2ZWQ6IEZpZWxkTWFwO1xuXG5cdHJlc291cmNlczogSXRlbVJlc291cmNlW10gPSBbXTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogc3RyaW5nLFxuXHRcdHB1YmxpYyBpdGVtSWQ6IEl0ZW1JZCxcblx0XHRwdWJsaWMgY29sdW1uczogQ29sdW1uU2V0XG5cdCkge1xuXHR9XG5cblx0cXVldWVSZWxvYWQgKCk6IHRoaXMge1xuXHRcdHRoaXMucmVsb2FkUXVldWVkID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGVmZXIgKGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlKTogdGhpcyB7XG5cdFx0dGhpcy5kZWZlcnJlZCA9IHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS5kZWZlcigpO1xuXHRcdHRoaXMuZGVmZXJSZXF1ZXN0ID0gZGVmZXJSZXF1ZXN0O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyZXNvbHZlICgpOiB0aGlzIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XG5cblx0XHQvLyB0aGUgcmVzb2x2ZSBmdW5jdGlvbiBtaWdodCBkZWZlciB0aGUgaXRlbSBhZ2Fpbiwgc28gZGVsZXRlIHRoZSBwcm9wZXJ0aWVzIGZpcnN0XG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xuXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmVzb2x2ZURlZmVycmVkIChpbml0aWFsLCBkZXJpdmVkLCBjb2x1bW5zKTogdGhpcyB7XG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1ucztcblx0XHR0aGlzLnNldEZpZWxkcyhpbml0aWFsLCBkZXJpdmVkKTtcblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmUoKTtcblx0fVxuXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmRlZmVycmVkICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHRyZWplY3QgKGVycm9yPyk6IHRoaXMge1xuXHRcdC8vIHRvZG86IHRyYW5zbGF0ZWQgZXJyb3Jcblx0XHR0aGlzLmRlZmVycmVkLnJlamVjdChlcnJvcik7XG5cblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcblx0XHRkZWxldGUgdGhpcy5kZWZlclJlcXVlc3Q7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZpZWxkcyAoaW5pdGlhbDogRmllbGRNYXAsIGRlcml2ZWQ6IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBmb3JtYXR0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZvcm1hdHRlZDtcblxuXHRcdHRoaXMuaW5pdGlhbCA9IGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShpbml0aWFsLCBmb3JtYXR0ZWRDb2x1bW5zLm1haW4pO1xuXHRcdHRoaXMuZGVyaXZlZCA9IGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShkZXJpdmVkLCBmb3JtYXR0ZWRDb2x1bW5zLmRlcml2ZWQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvLyBXZSBzaG91bGQgY3JlYXRlIGEgY29weSBvZiBpbml0aWFsIGhlcmUsIGJlY2F1c2UgaW4gbW9zdCBpbnN0YW5jZXMgaXQgd2lsbCBiZSBhIHRlbXBsYXRlLlxuXHRzZXRMb2NhbEZpZWxkcyAoXG5cdFx0aW5pdGlhbFZhbHVlczogRmllbGRNYXAsXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCxcblx0XHRjb2x1bW5zOiBDb2x1bW5TZXQgPSB0aGlzLmNvbHVtbnNcblx0KTogdGhpcyB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBpbml0aWFsID0gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmdldExvY2FsRGVmYXVsdFZhbHVlcygpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucy5tYWluKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblxuXHRcdFx0aW5pdGlhbFtjb2x1bW5JZF0gPSBpbml0aWFsVmFsdWVzW2NvbHVtbklkXTtcblx0XHR9XG5cblx0XHR0aGlzLmluaXRpYWwgPSBmYWN0b3J5LmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShpbml0aWFsLCBjb2x1bW5zLmZvcm1hdHRlZC5tYWluKTtcblx0XHR0aGlzLmRlcml2ZWQgPSB7J2NyZWF0b3I+ZGlzcGxheW5hbWUnOiBmYWN0b3J5LmF1dGhJbnRlcmZhY2UuZ2V0VXNlckRpc3BsYXluYW1lKCl9O1xuXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcblx0fVxuXG5cdGNsb25lIChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge30pOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U2VydmljZSA9IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZTtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXHRcdGNvbnN0IG5ld0l0ZW1JZCA9IGl0ZW1FbnRyeVNlcnZpY2UuZXhwYW5kQ29udmVyc2lvbk1hcCh0aGlzLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdC8vIHdlJ2xsIGNvcHkgbW9kaWZpZWQgdG8gcmVzdWx0LmluaXRpYWwgKGluaXRpYWwgbWF5IGJlIGEgdGVtcGxhdGUpXG5cdFx0Y29uc3QgY2xvbmVkRW50cnkgPSBmYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdG5ld0l0ZW1JZCxcblx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuZ2V0RmllbGRzKCksIHt9LCBjb2x1bW5zLm1haW4pLFxuXHRcdFx0YXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5kZXJpdmVkLCB7fSwgY29sdW1ucy5kZXJpdmVkKSxcblx0XHRcdGNvbHVtbnNcblx0XHQpO1xuXG5cdFx0Y2xvbmVkRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcblxuXHRcdGNsb25lZEVudHJ5Lm1vZGlmaWVkID0gYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoY2xvbmVkRW50cnkuaW5pdGlhbCwge30sIGNvbHVtbnMubWFpbik7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xuXG5cdFx0Y29uc3QgcGFyZW50SWQgPSBpdGVtRW50cnlTZXJ2aWNlLmdldENvbnZlcnNpb25WYWx1ZSh0aGlzLml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdGNsb25lZEVudHJ5LnNldFBhcmVudChcblx0XHRcdHBhcmVudC5pdGVtVHlwZSxcblx0XHRcdHBhcmVudElkID09PSB1bmRlZmluZWQgPyBwYXJlbnQuaXRlbUlkIDogcGFyZW50SWRcblx0XHQpO1xuXG5cdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xuXHR9XG5cblx0cmVzZXREZXJpdmVkIChjb2x1bW5JZHMpOiB0aGlzIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHJvb3RDb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJvb3Q7XG5cdFx0Y29uc3QgZmlsdGVyZWRDb2x1bW5zOiBDb2x1bW5JbmZvW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XG5cdFx0XHRpZiAoY29sdW1uSWRzLmluZGV4T2YoY29sdW1uLmlkKSAhPT0gLTEpXG5cdFx0XHRcdGZpbHRlcmVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0fVxuXG5cdFx0cmVzZXREZXJpdmVkUmVjdXJzaXZlbHkoZmlsdGVyZWRDb2x1bW5zKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdFx0ZnVuY3Rpb24gcmVzZXREZXJpdmVkUmVjdXJzaXZlbHkgKGNvbHVtbnMpIHtcblx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdFx0aWYgKCFjb2x1bW4uaXNMZWFmKVxuXHRcdFx0XHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbik7XG5cblx0XHRcdFx0ZGVsZXRlIHNlbGYuZGVyaXZlZFtjb2x1bW4ucGF0aF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJSZXNvdXJjZXMgKCk6IHRoaXMge1xuXHRcdHRoaXMucmVzb3VyY2VzID0gW107XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRlYWN0aXZhdGVSZXNvdXJjZXMgKCk6IHRoaXMge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzOyAvLyBvbiBvZiB0aGUgZGVhY3RpdmF0ZSBjYWxsYmFja3MgbWlnaHQgY2FsbCBjbGVhclJlc291cmNlc1xuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXG5cdFx0XHRyZXNvdXJjZS5kZWFjdGl2YXRlKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldEZpZWxkcyAoKTogRmllbGRNYXAge1xuXHRcdGlmICh0aGlzLm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tb2RpZmllZDtcblxuXHRcdHJldHVybiB0aGlzLmluaXRpYWw7XG5cdH1cblxuXHQvLyBzaG91bGQgYmUgZmFzdFxuXHQvLyB0b2RvOiB0eXBlIGNvbHVtbkV4cGFuc2lvblJlc3VsdFxuXHRleHBhbmQgKG1haW46IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCwgY29sdW1uRXhwYW5zaW9uUmVzdWx0OiBDb2x1bW5FeHBhbnNpb25SZXN1bHQpOiB0aGlzIHtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZTtcblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQubWVyZ2VkO1xuXG5cdFx0YXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxuXHRcdFx0dGhpcy5pbml0aWFsLFxuXHRcdFx0bWFpbixcblx0XHRcdGRpZmZlcmVuY2UubWFpblxuXHRcdCk7XG5cblx0XHRhcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UoXG5cdFx0XHR0aGlzLmRlcml2ZWQsXG5cdFx0XHRkZXJpdmVkLFxuXHRcdFx0ZGlmZmVyZW5jZS5kZXJpdmVkXG5cdFx0KTtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZShcblx0XHRcdHRoaXMubW9kaWZpZWQsXG5cdFx0XHRtYWluLFxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgaW5pdGlhbCwgbW9kaWZpZWQsIGRlcml2ZWQgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBzZXQuIEl0IHdpbGwgdXBkYXRlIHRoZSB2YWx1ZXNcblx0ICogdGhlbXNlbHZlcyB0byBwcmVzZXJ2ZSByZWZlcmVuY2VzIGluIGV4aXN0aW5nIGl0ZW0gcmVzb3VyY2VzLlxuXHQgKi9cblx0dXBkYXRlRmllbGRzIChmaWVsZHM6IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCB8IG51bGwgPSBudWxsLCBvdmVyd3JpdGU6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xuXG5cdFx0Ly8gZm9yIHNvbWUgd2VpcmQgcmVhc29uIHRoaXMgZnVuY3Rpb24gaXMgbm90IGF0b21pYywgc28gb3ZlcndyaXRlIHRoZSB2YWx1ZXMgd2l0aCB0aGVpciBmb3JtYXR0ZWQgY291bnRlcnBhcnRzXG5cdFx0Ly8gaW1tZWRpYXRlbHlcblx0XHRpZiAobW9kaWZpZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcblx0XHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRcdGNvbnN0IGNvbHVtblR5cGUgPSBjb2x1bW4uYXBpQ29sdW1uLnR5cGU7XG5cblx0XHRcdFx0aWYgKG92ZXJ3cml0ZSB8fCBhcGlGb3JtYXR0ZXIuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcblx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW5UeXBlLCBmaWVsZHNbY29sdW1uSWRdKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBtYWluQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdGluaXRpYWxbY29sdW1uSWRdID0gYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRpZiAoZGVyaXZlZCAhPT0gbnVsbClcblx0XHRcdHRoaXMuc2V0RGVyaXZlZChkZXJpdmVkKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dXBkYXRlSXRlbVZhbHVlIChmaWVsZHM6IEZpZWxkTWFwLCBhcGlDb2x1bW46IFJlc3BvbnNlQ29sdW1uLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKTogdGhpcyB7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBhcGlDb2x1bW4uaWQ7XG5cdFx0Y29uc3QgY3VycmVudFZhbHVlID0gZmllbGRzW2NvbHVtbklkXTtcblxuXHRcdGxldCBuZXdWYWx1ZTtcblxuXHRcdGlmIChhcGlDb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdG5ld1ZhbHVlID0gdGhpcy5wYXJlbnQuaXRlbUlkO1xuXHRcdH0gZWxzZVxuXHRcdFx0bmV3VmFsdWUgPSB0aGlzLmZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUoYXBpQ29sdW1uLml0ZW1UeXBlLCBjdXJyZW50VmFsdWUsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0aWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gbmV3VmFsdWU7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHVwZGF0ZUl0ZW1GaWVsZHMgKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsIGNvbHVtbnM6IENvbHVtblNldCA9IHRoaXMuY29sdW1ucyk6IHRoaXMge1xuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gY29sdW1ucy5pdGVtO1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdHRoaXMudXBkYXRlSXRlbVZhbHVlKGluaXRpYWwsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdGlmIChtb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUobW9kaWZpZWQsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0ICgpOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xuXG5cdFx0aWYgKHRoaXMuaXNMb2NhbCgpKVxuXHRcdFx0cmV0dXJuIGFwaUZvcm1hdHRlci5mb3JtYXRSZXF1ZXN0TG9jYWwodGhpcy5nZXRGaWVsZHMoKSwgbWFpbkNvbHVtbnMpO1xuXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdHJldHVybiBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVxdWVzdCh0aGlzLmluaXRpYWwsIHRoaXMubW9kaWZpZWQsIG1haW5Db2x1bW5zKTtcblx0fVxuXG5cdHNldERpc3BsYXlOYW1lICgpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdldERpc3BsYXlOYW1lKCk7XG5cblx0XHRpZiAocmVzdWx0KVxuXHRcdFx0dGhpcy5tb2RpZmllZC5kaXNwbGF5bmFtZSA9IHJlc3VsdDtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0RGlzcGxheU5hbWUgKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XG5cblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0XHRyZXR1cm4gZmllbGRzLnR5cGUgPT09ICdiZWRyaWpmJyA/XG5cdFx0XHRcdFx0ZmllbGRzLmJlZHJpamYgOiBpdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxuXHRcdFx0XHRcdFx0ZmllbGRzLnZvb3JuYWFtLFxuXHRcdFx0XHRcdFx0ZmllbGRzLnR1c3NlbnZvZWdzZWwsXG5cdFx0XHRcdFx0XHRmaWVsZHMubmFhbVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcblx0XHRcdGNhc2UgJ1BlcnNvbic6XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxuXHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcblx0XHRcdFx0XHRmaWVsZHMudHVzc2Vudm9lZ3NlbCxcblx0XHRcdFx0XHRmaWVsZHMuYWNodGVybmFhbVxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSAnUmVwYXJhdGllJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZGVyaXZlZFsnbWF0ZXJpYWFsPm5hYW0nXTsgLy8gVE9ETyFcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmaWVsZHNbaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKHRoaXMuaXRlbVR5cGUpXTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtCb29sZWFufSByZXR1cm5BbGwgUmV0dXJucyBhbGwgaW5pdGlhbCB2YWx1ZXMgaWYgdHJ1ZVxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKi9cblx0Z2V0Q2hhbmdlcyAocmV0dXJuQWxsOiBib29sZWFuID0gZmFsc2UpIHtcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkICYmICFyZXR1cm5BbGwpXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5nZXRDaGFuZ2VzKFxuXHRcdFx0dGhpcy5pbml0aWFsLFxuXHRcdFx0cmV0dXJuQWxsID8ge30gOiB0aGlzLm1vZGlmaWVkLFxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cblx0XHQpO1xuXHR9XG5cblx0aXNMb2NhbCAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZCh0aGlzLml0ZW1JZCk7XG5cdH1cblxuXHRpc0xvY2thYmxlICgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5pc0xvY2FsKCkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcic6XG5cdFx0XHRjYXNlICdWb2VydHVpZyc6XG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGhhc0NoYW5nZXMgKCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5oYXNDaGFuZ2VzKFxuXHRcdFx0dGhpcy5pbml0aWFsLFxuXHRcdFx0dGhpcy5tb2RpZmllZCxcblx0XHRcdHRoaXMuY29sdW1ucy5tYWluXG5cdFx0KTtcblx0fVxuXG5cdHJlc2V0TW9kaWZpZWQgKCk6IHRoaXMge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uLmlkXSA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY2xvbmUoXG5cdFx0XHRcdGNvbHVtbi5hcGlDb2x1bW4udHlwZSxcblx0XHRcdFx0dGhpcy5pbml0aWFsW2NvbHVtbi5pZF1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRJbml0aWFsICh2YWx1ZXM6IEZpZWxkTWFwLCBlbmFibGVDYWxsYmFja3M6IGJvb2xlYW4gPSBmYWxzZSk6IHRoaXMge1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0bGV0IHByZXZpb3VzO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXG5cdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXG5cdFx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuaW5pdGlhbCwge30sIHRoaXMuY29sdW1ucy5tYWluKSk7XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHByZXZpb3VzID0gYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5tb2RpZmllZCwge30sIHRoaXMuY29sdW1ucy5tYWluKTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERvZXMgYSBzaGFsbG93IGNvcHkgb2YgdmFsdWVzIVxuXHQgKi9cblx0c2V0TW9kaWZpZWQgKHZhbHVlcz86IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSBmYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IGNvbHVtbnMucmVzcG9uc2VbdGhpcy5pdGVtVHlwZV07XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQgPSB0aGlzLmlzTG9jYWwoKSA/IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5nZXRMb2NhbERlZmF1bHRWYWx1ZXMoKSA6IHt9O1xuXG5cdFx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGFwaUZvcm1hdHRlci5zaGFsbG93Q29weUZpZWxkcyh2YWx1ZXMsIGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKSB7XG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly8gdG9kbzogZGV2IG1vZGUgY29uc3RhbnRcblx0XHRcdFx0XHRcdC8vIGlmIChERVZfTU9ERSlcblx0XHRcdFx0XHRcdC8vIFx0Y29uc29sZS53YXJuKCdzZXRNb2RpZmllZDogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcblxuXHRcdFx0XHRcdFx0bW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXG5cdFx0XHRcdHJlc291cmNlLmZpZWxkcyA9IG1vZGlmaWVkO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXREZXJpdmVkICh2YWx1ZXM6IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5kZXJpdmVkW2tleV0gPSB2YWx1ZXNba2V5XTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCk6IHRoaXMge1xuXHRcdHRoaXMucGFyZW50ID0ge1xuXHRcdFx0aXRlbVR5cGU6IHBhcmVudFR5cGUsXG5cdFx0XHRpdGVtSWQ6IHBhcmVudElkXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91czogRmllbGRNYXApOiB0aGlzIHtcblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMucmVzb3VyY2VzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgaXRlbVJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbaV07XG5cblx0XHRcdGlmIChpdGVtUmVzb3VyY2UgIT09IG51bGwpXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5vcHRpb25zLm9uQ2hhbmdlKGl0ZW1SZXNvdXJjZSwgcHJldmlvdXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgRmllbGRNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlIHtcblx0Y29sdW1uczoge1tjb2x1bW5JZDogc3RyaW5nXTogUmVzcG9uc2VDb2x1bW59O1xuXHRmaWVsZHM6IEZpZWxkTWFwO1xuXHRkZXJpdmVkOiBGaWVsZE1hcDtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGVudHJ5OiBJdGVtRW50cnksXG5cdFx0cHVibGljIG9wdGlvbnMsXG5cdFx0cHJvdGVjdGVkIHJlYWRvbmx5IF9pc05ldzogYm9vbGVhbiA9IGZhbHNlXG5cdCkge1xuXHRcdHRoaXMuZGVyaXZlZCA9IGVudHJ5LmRlcml2ZWQ7XG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZVtlbnRyeS5jb2x1bW5zLml0ZW1UeXBlXTtcblxuXHRcdGVudHJ5LnJlc291cmNlcy5wdXNoKHRoaXMpO1xuXHR9XG5cblx0aXNOZXcgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9pc05ldztcblx0fVxuXG5cdGlzTG9jYWwgKCkge1xuXHRcdHJldHVybiB0aGlzLmVudHJ5LmlzTG9jYWwoKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2UgKCkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMuZW50cnkucmVzb3VyY2VzO1xuXHRcdGNvbnN0IGluZGV4ID0gcmVzb3VyY2VzLmluZGV4T2YodGhpcyk7XG5cblx0XHRpZiAoaW5kZXggIT09IC0xKVxuXHRcdFx0cmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cdH1cblxuXHRkZWFjdGl2YXRlICgpIHtcblx0XHR0aGlzLm9wdGlvbnMub25EZWFjdGl2YXRlKHRoaXMuZW50cnkpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBWaWV3UmVzb3VyY2UgZXh0ZW5kcyBJdGVtUmVzb3VyY2Uge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpIHtcblx0XHRzdXBlcihlbnRyeSwgb3B0aW9ucywgaXNOZXcpO1xuXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkID9cblx0XHRcdGVudHJ5LmluaXRpYWwgOiBlbnRyeS5tb2RpZmllZDtcblx0fVxufVxuIiwiaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBGaWVsZE1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLyc7XG5cbmV4cG9ydCBjbGFzcyBFZGl0UmVzb3VyY2UgZXh0ZW5kcyBJdGVtUmVzb3VyY2Uge1xuXHRsb2NhbENvcGllczogRmllbGRNYXBbXSA9IFtdO1xuXHR0cmFuc2FjdGlvbnM6IG51bWJlciA9IDA7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRlbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnMsXG5cdFx0aXNOZXc/OiBib29sZWFuXG5cdCkge1xuXHRcdHN1cGVyKGVudHJ5LCBvcHRpb25zLCBpc05ldyk7XG5cblx0XHRlbnRyeS5zZXRNb2RpZmllZCgpO1xuXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZDtcblx0fVxuXG5cdGlzTmV3ICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5faXNOZXcgJiYgdGhpcy50cmFuc2FjdGlvbnMgPT09IDA7XG5cdH1cblxuXHRzdGFydCAoKTogdGhpcyB7XG5cdFx0aWYgKHRoaXMubG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMubG9jYWxDb3BpZXMgPSBbXTtcblxuXHRcdHRoaXMubG9jYWxDb3BpZXMucHVzaCh0aGlzLmNvcHlGaWVsZHMoKSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJvbGxiYWNrICgpOiB0aGlzIHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xuXG5cdFx0dGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKDxGaWVsZE1hcD4gdGhpcy5sb2NhbENvcGllcy5wb3AoKSwgaXRlbUVudHJ5Lm1vZGlmaWVkLCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcblxuXHRcdGlmICh0aGlzLmlzTmV3KCkgJiYgdGhpcy5sb2NhbENvcGllcy5sZW5ndGggPT09IDApXG5cdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29tbWl0IChjYWxsT25DaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XG5cdFx0Y29uc3QgcHJldmlvdXMgPSA8RmllbGRNYXA+IHRoaXMubG9jYWxDb3BpZXMucG9wKCk7XG5cblx0XHRpZiAoY2FsbE9uQ2hhbmdlKVxuXHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xuXG5cdFx0dGhpcy50cmFuc2FjdGlvbnMrKzsgLy8gY29tcGxldGVkIHRyYW5zYWN0aW9uc1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRnZXRMb2NhbENvcHkgKCk6IEZpZWxkTWFwIHwgbnVsbCB7XG5cdFx0Y29uc3QgbG9jYWxDb3BpZXMgPSB0aGlzLmxvY2FsQ29waWVzO1xuXG5cdFx0aWYgKGxvY2FsQ29waWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGlmIChsb2NhbENvcGllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiBsb2NhbENvcGllc1tsb2NhbENvcGllcy5sZW5ndGggLSAxXTtcblx0fVxuXG5cdGNvcHlGaWVsZHMgKGRlc3RpbmF0aW9uOiBGaWVsZE1hcCA9IHt9KTogRmllbGRNYXAge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5tb2RpZmllZCwgZGVzdGluYXRpb24sIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xuXHR9XG5cblx0c2V0RmllbGRzICh2YWx1ZXM6IEZpZWxkTWFwLCBjYWxsT25DaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcblx0XHRjb25zdCBmaWVsZHMgPSB0aGlzLmZpZWxkcztcblx0XHRsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdGxldCBwcmV2aW91cztcblxuXHRcdGlmIChjYWxsT25DaGFuZ2UpXG5cdFx0XHRwcmV2aW91cyA9IHRoaXMuY29weUZpZWxkcygpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbY29sdW1uSWRdO1xuXG5cdFx0XHRpZiAoY29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdzZXRGaWVsZHM6IG5vIGNvbHVtbiBmb3VuZCBmb3InLCBjb2x1bW5JZCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uSWRdLCB2YWx1ZXNbY29sdW1uSWRdKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGZpZWxkc1tjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXHRcdFx0aGFzQ2hhbmdlcyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSAmJiBoYXNDaGFuZ2VzKVxuXHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjYWxsT25DaGFuZ2UgKHByZXZpb3VzOiBGaWVsZE1hcCk6IHRoaXMge1xuXHRcdHRoaXMuZW50cnkuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2F2ZSAocGFyYW1ldGVycz8pOiBQcm9taXNlPHRoaXM+IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XG5cdFx0Y29uc3QgcGFyYW1ldGVyTWFwID0ge307XG5cblx0XHRpZiAocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0XHRwYXJhbWV0ZXJNYXAsXG5cdFx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0XHRbe30sIHBhcmFtZXRlcnNdXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHRpdGVtRW50cnkuaXNMb2NrYWJsZSgpID9cblx0XHRcdFx0ZmFjdG9yeS5sb2NrU2VydmljZS5mZXRjaExvY2soaXRlbUVudHJ5KSA6XG5cdFx0XHRcdGZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbigpXG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHQvLyBhZGRUb0NvbGxlY3Rpb25zIGlzIGNhbGxlZCBpbiBjaGFuZ2VzUHJvY2Vzc29yXG5cdFx0XHRcdHJldHVybiBmYWN0b3J5LmNoYW5nZXNQcm9jZXNzb3IuZXhlY3V0ZShbaXRlbUVudHJ5XSwgW10sIHBhcmFtZXRlck1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5TZXQgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFRlbXBsYXRlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgRmllbGRNYXAsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlIHtcblx0ZmllbGRzOiBGaWVsZE1hcDtcblx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcDtcblx0Y29sdW1uczogQ29sdW1uU2V0OyAvLyBUT0RPOiByZW5hbWUgdG8gY29sdW1uU2V0XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdGZhY3Rvcnk6IFRlbXBsYXRlRmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHB1YmxpYyByZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0YWRkaXRpb25hbENvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCkge1xuXHRcdHRoaXMuZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXSk7XG5cblx0XHR0aGlzLnJlc3BvbnNlQ29sdW1ucyA9IGZhY3RvcnkuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSwgYWRkaXRpb25hbENvbHVtbnMpLm1lcmdlZDtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGZhY3RvcnkuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHRydWUsIHRoaXMucmVzcG9uc2VDb2x1bW5zKTtcblx0fVxufVxuIiwiLy8gc2hvdWxkIGJlIG9yZGVyZWQgYnkgZGVwZW5kZW5jeSFcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblZpZXdSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnknO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9WaWV3UmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9FZGl0UmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9UZW1wbGF0ZSc7XG4iLCJpbXBvcnQge1xuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLCBJdGVtRW50cnlTZXJ2aWNlLCBJdGVtSGFuZGxlciwgSXRlbVJlcXVlc3RTZXJ2aWNlLCBLZXlTZXJ2aWNlLCBRdWVyeVNlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzLyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHB1YmxpYyBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHB1YmxpYyBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHVibGljIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zKTogQ29sbGVjdGlvbkVudHJ5IHtcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FbnRyeShcblx0XHRcdHRoaXMsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbk1hdGNoZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkNhY2hlczogQ29sbGVjdGlvbkNhY2hlW10sIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sIGNhbGxPbkFjdGl2YXRlOiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uTWF0Y2hlcihcblx0XHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0XHRcdGNvbGxlY3Rpb25DYWNoZXMsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0Y2FsbE9uQWN0aXZhdGVcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLCBLZXlTZXJ2aWNlLCBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FZGl0UmVzb3VyY2UsIENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBDb2xsZWN0aW9uVmlld1Jlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHB1YmxpYyBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0cHVibGljIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zLCBsb2NhbENhY2hlOiBMb2NhbENhY2hlKTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXG5cdFx0aWYgKG9wdGlvbnMuZWRpdEl0ZW1zKVxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzID0gdHJ1ZTtcblxuXHRcdGlmIChvcHRpb25zLmVkaXRDb2xsZWN0aW9uKSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcyA9IHRydWU7XG5cblx0XHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSh0aGlzLCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMsIGxvY2FsQ2FjaGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSh0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucywgbG9jYWxDYWNoZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkV4cGFuc2lvbiwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IHN0cmluZywgcmVxdWVzdENvbHVtbnM6IGFueSB8IGJvb2xlYW4sIHJlc3BvbnNlQ29sdW1uczogYW55KSB7XG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5FeHBhbnNpb24oXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uSW5mbyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5JbmZvRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yICgpIHt9XG5cblx0Y29uc3RydWN0IChhcGlDb2x1bW46IFJlc3BvbnNlQ29sdW1uLCBwYXJlbnQ6IENvbHVtbkluZm8pIHtcblx0XHRyZXR1cm4gbmV3IENvbHVtbkluZm8oYXBpQ29sdW1uLCBwYXJlbnQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEl0ZW1UeXBlLCBSZXF1ZXN0Q29sdW1ucywgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXRGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3RTdHViIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uU2V0KFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLFxuXHRcdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSxcblx0XHRcdHRoaXMsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0cnVjdCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLFxuXHRcdGVuYWJsZUNhY2hpbmc/LFxuXHRcdGluY2x1ZGVJZENvbHVtbj9cblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnJlc29sdmUocmVzcG9uc2VDb2x1bW5zLCBlbmFibGVDYWNoaW5nLCBpbmNsdWRlSWRDb2x1bW4pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciwgQ3JlYXRlUmVxdWVzdCwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVSZXF1ZXN0RmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChjb21waWxhdGlvbiwgY29sbGVjdGlvbkVudHJpZXMsIHBhcmFtZXRlck1hcCwgYnJlYWt1cEJ5UGFyZW50Pykge1xuXHRcdHJldHVybiBuZXcgQ3JlYXRlUmVxdWVzdChcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHRjb21waWxhdGlvbixcblx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzLFxuXHRcdFx0cGFyYW1ldGVyTWFwLFxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSXRlbUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1DYWNoZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0ICgpOiBJdGVtQ2FjaGUge1xuXHRcdHJldHVybiBuZXcgSXRlbUNhY2hlKHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ29sdW1uU2V0LCBJdGVtRW50cnlTZXJ2aWNlLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEF1dGhJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2V9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5LCBUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlLCBSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHVibGljIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdFN0dWIgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGNvbHVtblNldFN0dWI6IENvbHVtblNldCkge1xuXHRcdHJldHVybiBuZXcgSXRlbUVudHJ5KHRoaXMsIGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldFN0dWIpO1xuXHR9XG5cblx0Y29uc3RydWN0TG9jYWxMaW5rZWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRpbml0aWFsOiBGaWVsZE1hcCxcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldCk7XG5cblx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5zZXRMb2NhbEZpZWxkcyhpbml0aWFsLCBjb252ZXJzaW9uTWFwKTtcblx0fVxuXG5cdGNvbnN0cnVjdExvY2FsIChcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGUsXG5cdFx0bW9kaWZpZWQ6IEZpZWxkTWFwLFxuXHRcdGRlcml2ZWQ6IEZpZWxkTWFwLFxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbCxcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCA9IHRlbXBsYXRlLmNvbHVtbnMsXG5cdFx0Y29udmVyc2lvbk1hcD9cblx0KTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRlbXBsYXRlLmNvbHVtbnMuaXRlbVR5cGU7XG5cblx0XHRpZiAoY29udmVyc2lvbk1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y29udmVyc2lvbk1hcCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgdGVtcGxhdGUucmVzcG9uc2UpO1xuXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldCk7XG5cblx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeVxuXHRcdFx0LnNldExvY2FsRmllbGRzKHRlbXBsYXRlLmZpZWxkcywgY29udmVyc2lvbk1hcCwgdGVtcGxhdGUuY29sdW1ucylcblx0XHRcdC5zZXRNb2RpZmllZChtb2RpZmllZClcblx0XHRcdC5zZXREZXJpdmVkKGRlcml2ZWQpO1xuXHR9XG5cblx0Y29uc3RydWN0RGVmZXJyZWQgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsXG5cdFx0ZGVmZXJSZXF1ZXN0OiBib29sZWFuXG5cdCk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U3R1YiA9IHRoaXMuY29uc3RydWN0U3R1Yihcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdFN0dWIoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdFx0KVxuXHRcdCk7XG5cblx0XHRpdGVtRW50cnlTdHViLmRlZmVyKGRlZmVyUmVxdWVzdCk7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5U3R1Yjtcblx0fVxuXG5cdGNvbnN0cnVjdCAoXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0aW5pdGlhbDogRmllbGRNYXAsXG5cdFx0ZGVyaXZlZDogRmllbGRNYXAsXG5cdFx0Y29sdW1uSW5mbzogQ29sdW1uU2V0XG5cdCk6IEl0ZW1FbnRyeSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1Yihcblx0XHRcdGNvbHVtbkluZm8uaXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsIC8vIGluaXRpYWwuaWQgKHdoZW4gaW5pdGlhbCBpcyBub3QgYSB0ZW1wbGF0ZSlcblx0XHRcdGNvbHVtbkluZm8sXG5cdFx0KS5zZXRGaWVsZHMoXG5cdFx0XHRpbml0aWFsLCAvLyBjYW4gYWxzbyBiZSBhIHRlbXBsYXRlXG5cdFx0XHRkZXJpdmVkLFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ2hhbmdlc1Byb2Nlc3NvciwgSXRlbVJlc291cmNlU2VydmljZSwgTG9ja1NlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRWRpdFJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgVmlld1Jlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1PcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHVibGljIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwdWJsaWMgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRwdWJsaWMgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0Z2V0Q29uc3RydWN0b3IgKG9wdGlvbnM6IEl0ZW1PcHRpb25zKTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBJdGVtUmVzb3VyY2Uge1xuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5ID0+IHtcblx0XHRcdHJldHVybiBvcHRpb25zLmVkaXQgP1xuXHRcdFx0XHRuZXcgRWRpdFJlc291cmNlKHRoaXMsIGl0ZW1FbnRyeSwgb3B0aW9ucykgOlxuXHRcdFx0XHRuZXcgVmlld1Jlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucyk7XG5cdFx0fTtcblx0fVxuXG5cdGNvbnN0cnVjdCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IEl0ZW1PcHRpb25zLCBpc05ldz86IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2Uge1xuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gb3B0aW9ucy5lZGl0ID9cblx0XHRcdG5ldyBFZGl0UmVzb3VyY2UodGhpcywgaXRlbUVudHJ5LCBvcHRpb25zLCBpc05ldykgOlxuXHRcdFx0bmV3IFZpZXdSZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMsIGlzTmV3KTtcblx0fVxufVxuIiwiaW1wb3J0IHtcblx0SXRlbVJlc291cmNlU2VydmljZSxcblx0TG9jYWxDYWNoZSxcblx0TG9ja1NlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0Q29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbVJlc291cmNlRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChpZD86IHN0cmluZykge1xuXHRcdHJldHVybiBuZXcgTG9jYWxDYWNoZShcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxuXHRcdFx0aWRcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSwgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdCAocm9vdEl0ZW06IEl0ZW1FbnRyeSwgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlKSB7XG5cdFx0cmV0dXJuIG5ldyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24ocm9vdEl0ZW0sIHNpbmdsZUl0ZW1DYWNoZSwgY29sbGVjdGlvbkNhY2hlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBRdWVyeU1hdGNoZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlNYXRjaGVyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpOiBRdWVyeU1hdGNoZXIge1xuXHRcdHJldHVybiBuZXcgUXVlcnlNYXRjaGVyKFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGZpZWxkcyxcblx0XHRcdHBhcmVudFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IFF1ZXJ5UGFyc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeVBhcnNlckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKHF1ZXJ5LCBwYXJhbWV0ZXJzPyk6IFF1ZXJ5UGFyc2VyIHtcblx0XHRyZXR1cm4gbmV3IFF1ZXJ5UGFyc2VyKHF1ZXJ5LCBwYXJhbWV0ZXJzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xuXG5leHBvcnQgY2xhc3MgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0ICgpIHtcblx0XHRyZXR1cm4gbmV3IFJlcXVlc3RDb2x1bW5FeHBhbnNpb24oXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHVibGljIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7fVxuXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXNwb25zZTogQXBpUmVzcG9uc2UsIGFkZGl0aW9uYWxDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCkge1xuXHRcdHJldHVybiBuZXcgVGVtcGxhdGUodGhpcywgaXRlbVR5cGUsIHJlc3BvbnNlLCBhZGRpdGlvbmFsQ29sdW1ucyk7XG5cdH1cbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXNGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uTWF0Y2hlckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkluZm9GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0RmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3RGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUNhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxDYWNoZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlNYXRjaGVyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vVGVtcGxhdGVGYWN0b3J5JztcbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0QXBpUmVxdWVzdFNlcnZpY2UsXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRDb2x1bW5DYWNoZSxcblx0Q29sdW1uSGFuZGxlcixcblx0Q29sdW1uVXRpbCxcblx0SXRlbUFkbWluaXN0cmF0b3IsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1IYW5kbGVyLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEl0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdExvY2tTZXJ2aWNlLFxuXHRRdWVyeVNlcnZpY2UsXG5cdFNvY2tldE1lc3NhZ2VIYW5kbGVyXG59IGZyb20gJy4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnksXG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0Q29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0Q29sdW1uSW5mb0ZhY3RvcnksXG5cdENvbHVtblNldEZhY3RvcnksXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtRW50cnlGYWN0b3J5LFxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRMb2NhbENhY2hlRmFjdG9yeSxcblx0TW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0UXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0UXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgVGVtcGxhdGVGYWN0b3J5XG59IGZyb20gJy4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRBdXRoSW50ZXJmYWNlLFxuXHRFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBSbUNvcmUge1xuXHR2ZXJzaW9uOiBzdHJpbmc7XG5cdG5vb3AgPSBub29wO1xuXG5cdGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyO1xuXHRhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2U7XG5cdGFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTogQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5O1xuXHRiYXRjaFN0YXR1c0ZhY3Rvcnk6IEJhdGNoU3RhdHVzRmFjdG9yeTtcblx0Y2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTtcblx0Y2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5O1xuXHRjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5O1xuXHRjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5O1xuXHRjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XG5cdGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5O1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5O1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlO1xuXHRjb2x1bW5DYWNoZTogQ29sdW1uQ2FjaGU7XG5cdGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XG5cdGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXI7XG5cdGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeTtcblx0Y29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeTtcblx0Y29sdW1uVXRpbDogQ29sdW1uVXRpbDtcblx0Y3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5O1xuXHRpdGVtQWRtaW5pc3RyYXRvcjogSXRlbUFkbWluaXN0cmF0b3I7XG5cdGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3Rvcnk7XG5cdGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3Rvcnk7XG5cdGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2U7XG5cdGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcjtcblx0aXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2U7XG5cdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3Rvcnk7XG5cdGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2U7XG5cdGtleVNlcnZpY2U6IEtleVNlcnZpY2U7XG5cdGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeTtcblx0bG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlO1xuXHRtb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xuXHRxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5O1xuXHRxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeTtcblx0cXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2U7XG5cdHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTtcblx0c29ja2V0TWVzc2FnZUhhbmRsZXI6IFNvY2tldE1lc3NhZ2VIYW5kbGVyO1xuXHR0ZW1wbGF0ZUZhY3Rvcnk6IFRlbXBsYXRlRmFjdG9yeTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblx0XHR0aGlzLnZlcnNpb24gPSAnMS4yLjcnO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIgPSBuZXcgQXBpRm9ybWF0dGVyKCk7XG5cdFx0dGhpcy5rZXlTZXJ2aWNlID0gbmV3IEtleVNlcnZpY2UoKTtcblx0XHR0aGlzLnF1ZXJ5U2VydmljZSA9IG5ldyBRdWVyeVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbHVtblV0aWwgPSBuZXcgQ29sdW1uVXRpbCgpO1xuXG5cdFx0dGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgPSBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblxuXHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UgPSBuZXcgQXBpUmVxdWVzdFNlcnZpY2UoZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZSwgdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlID0gbmV3IEl0ZW1FbnRyeVNlcnZpY2UoYXV0aEludGVyZmFjZSwgdGhpcy5rZXlTZXJ2aWNlKTtcblx0XHR0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UgPSBuZXcgSXRlbVJlc291cmNlU2VydmljZSgpO1xuXG5cdFx0dGhpcy5sb2NrU2VydmljZSA9IG5ldyBMb2NrU2VydmljZShcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkgPSBuZXcgUXVlcnlNYXRjaGVyRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XG5cdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5ID0gbmV3IEl0ZW1DYWNoZUZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSA9IG5ldyBCYXRjaFN0YXR1c0ZhY3RvcnkocHJvbWlzZUludGVyZmFjZSk7XG5cblx0XHR0aGlzLmNvbHVtbkNhY2hlID0gbmV3IENvbHVtbkNhY2hlKHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jb2x1bW5IYW5kbGVyID0gbmV3IENvbHVtbkhhbmRsZXIoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sdW1uQ2FjaGUsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSA9IG5ldyBDb2x1bW5JbmZvRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSA9IG5ldyBDb2x1bW5TZXRGYWN0b3J5KHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jb2x1bW5VdGlsLCB0aGlzLmNvbHVtbkluZm9GYWN0b3J5KTtcblx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkgPSBuZXcgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblV0aWwpO1xuXG5cdFx0dGhpcy50ZW1wbGF0ZUZhY3RvcnkgPSBuZXcgVGVtcGxhdGVGYWN0b3J5KHRoaXMuY29sdW1uU2V0RmFjdG9yeSwgdGhpcy5jb2x1bW5VdGlsKTtcblxuXHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSA9IG5ldyBJdGVtRW50cnlGYWN0b3J5KFxuXHRcdFx0YXV0aEludGVyZmFjZSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5pdGVtSGFuZGxlciA9IG5ldyBJdGVtSGFuZGxlcihcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMudGVtcGxhdGVGYWN0b3J5XG5cdFx0KTtcblx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSA9IG5ldyBJdGVtUmVxdWVzdFNlcnZpY2UodGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXG5cdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnkgPSBuZXcgUXVlcnlQYXJzZXJGYWN0b3J5KCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UodGhpcy5xdWVyeVBhcnNlckZhY3RvcnksIHRoaXMucXVlcnlTZXJ2aWNlKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIgPSBuZXcgQ29sbGVjdGlvbkhhbmRsZXIoXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0XHQpO1xuXG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblV0aWwpO1xuXHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkgPSBuZXcgQ3JlYXRlUmVxdWVzdEZhY3RvcnkoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdFx0KTtcblx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkgPSBuZXcgQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSh0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkpO1xuXHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkgPSBuZXcgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkodGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSA9IG5ldyBJdGVtUmVzb3VyY2VGYWN0b3J5KHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeShcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlXG5cdFx0KTtcblxuXHRcdHRoaXMubG9jYWxDYWNoZUZhY3RvcnkgPSBuZXcgTG9jYWxDYWNoZUZhY3RvcnkoZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkgPSBuZXcgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSgpO1xuXG5cdFx0dGhpcy5pdGVtQWRtaW5pc3RyYXRvciA9IG5ldyBJdGVtQWRtaW5pc3RyYXRvcihcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRhdXRoSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSxcblx0XHRcdGxvY2FsQ2FjaGVNYW5hZ2VyLFxuXHRcdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblxuXHRcdHRoaXMuc29ja2V0TWVzc2FnZUhhbmRsZXIgPSBuZXcgU29ja2V0TWVzc2FnZUhhbmRsZXIocHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AgKCkge1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vbWFpbic7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzJztcbmV4cG9ydCAqIGZyb20gJy4vZmFjdG9yaWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
7290
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1BZG1pbmlzdHJhdG9yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1SZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVzb3VyY2VTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0tleVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL3R5cGVzL0l0ZW1UeXBlc0NvbGxlY3Rpb24udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL3R5cGVzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2FsQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9ja1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5TWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVBhcnNlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVkaXRSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0l0ZW1FbnRyeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0l0ZW1SZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL1ZpZXdSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0VkaXRSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL1RlbXBsYXRlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5JbmZvRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DcmVhdGVSZXF1ZXN0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0xvY2FsQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5TWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1RlbXBsYXRlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tYWluLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7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Q0FBQyxZQUFZLEVBQ2pCLHFCQUFxQixDQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUNGLGFBQUM7QUFBRCxDQUFDOztBQUVLO0FBQ04sQ0FBQztBQUVLLGtCQUFvQixLQUFLO0lBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDZCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDblNzQjtBQUNLO0FBQ0g7QUFFQztBQUNFO0FBQ0oiLCJmaWxlIjoicm0tY29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJtb21lbnRcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUm1Db3JlXCJdID0gZmFjdG9yeShyZXF1aXJlKFwibW9tZW50XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSbUNvcmVcIl0gPSBmYWN0b3J5KHJvb3RbXCJtb21lbnRcIl0pO1xufSkod2luZG93LCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXzsiLCJleHBvcnQgZnVuY3Rpb24gc2hhbGxvd01lcmdlIChvYmplY3QsIGRlZmF1bHRzKSB7XG5cdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcblx0XHRyZXR1cm4gZGVmYXVsdHM7XG5cblx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdHMpIHtcblx0XHRyZXN1bHRba2V5XSA9IG9iamVjdFtrZXldID09PSB1bmRlZmluZWQgP1xuXHRcdFx0ZGVmYXVsdHNba2V5XSA6IG9iamVjdFtrZXldO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Byb3BlcnRpZXMgKG9iamVjdCkge1xuXHQvLyBAdHMtaWdub3JlXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXJzdFByb3BlcnR5IChvYmplY3QpIHtcblx0aWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKVxuXHRcdHJldHVybiBudWxsO1xuXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcblx0XHRyZXR1cm4ga2V5O1xuXG5cdHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5BcnJheSAobmVlZGxlLCBoYXlzdGFjaykge1xuXHRmb3IgKGNvbnN0IGhheSBvZiBoYXlzdGFjaykge1xuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0aWYgKG5lZWRsZSA9PSBoYXkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFycmF5PFQ+IChzb3VyY2U6IFRbXSwgY2FsbGJhY2s6IChUKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG5cdGNvbnN0IGZpbHRlcmVkOiBUW10gPSBbXTtcblxuXHRmb3IgKGNvbnN0IHNyYyBvZiBzb3VyY2UpIHtcblx0XHRpZiAoY2FsbGJhY2soc3JjKSlcblx0XHRcdGZpbHRlcmVkLnB1c2goc3JjKTtcblx0fVxuXG5cdGlmIChmaWx0ZXJlZC5sZW5ndGggPT09IHNvdXJjZS5sZW5ndGgpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdGVtcHR5QXJyYXkoc291cmNlKTtcblxuXHRmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJlZClcblx0XHRzb3VyY2UucHVzaChmaWx0ZXIpO1xuXG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlBcnJheSAoYXJyYXkpOiB2b2lkIHtcblx0YXJyYXkuc3BsaWNlKDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEV4aXN0cyAoc291cmNlLCBwYXRoKSB7XG5cdGlmICh0eXBlb2Ygc291cmNlID09PSAndW5kZWZpbmVkJylcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0Zm9yIChjb25zdCBwIG9mIHBhdGgpIHtcblx0XHRpZiAodHlwZW9mIHNvdXJjZVtwXSA9PT0gJ3VuZGVmaW5lZCcpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzb3VyY2UgPSBzb3VyY2VbcF07XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGggKG9iamVjdCwgcGF0aCwgZGVmYXVsdHMpIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBwYXRoW2ldO1xuXG5cdFx0aWYgKG9iamVjdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdG9iamVjdFt2YWx1ZV0gPSBkZWZhdWx0c1tpXTtcblxuXHRcdG9iamVjdCA9IG9iamVjdFt2YWx1ZV07XG5cdH1cblxuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aCAob2JqZWN0LCBwYXRoLCBjcmVhdGUgPSBmYWxzZSkge1xuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xuXHRcdG9iamVjdCA9IG9iamVjdFtwXTsgLy8gd29uJ3QgYWx0ZXIgdGhlIGNhbGxlcidzIHZhclxuXG5cdFx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkICYmICFjcmVhdGUpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLy8gVGFrZW4gZnJvbSBBbmd1bGFySlMsIGFkZGVkIGNvbW1lbnRzIHRvIGlnbm9yZSBUeXBlU2NyaXB0IGVycm9yc1xuZnVuY3Rpb24gYmFzZUV4dGVuZCAoZHN0LCBvYmpzLCBkZWVwKSB7XG5cdGZvciAobGV0IGkgPSAwLCBpaSA9IG9ianMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuXHRcdGNvbnN0IG9iaiA9IG9ianNbaV07XG5cblx0XHRpZiAoIWlzT2JqZWN0KG9iaikgJiYgIWlzRnVuY3Rpb24ob2JqKSlcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG5cblx0XHRmb3IgKGxldCBqID0gMCwgamogPSBrZXlzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbal07XG5cdFx0XHRjb25zdCBzcmMgPSBvYmpba2V5XTtcblxuXHRcdFx0aWYgKGRlZXAgJiYgaXNPYmplY3Qoc3JjKSkge1xuXHRcdFx0XHRpZiAoaXNEYXRlKHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBEYXRlKHNyYy52YWx1ZU9mKCkpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBSZWdFeHAoc3JjKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzcmMubm9kZU5hbWUpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNFbGVtZW50KHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICghaXNPYmplY3QoZHN0W2tleV0pKVxuXHRcdFx0XHRcdFx0ZHN0W2tleV0gPSBpc0FycmF5KHNyYykgPyBbXSA6IHt9O1xuXG5cdFx0XHRcdFx0YmFzZUV4dGVuZChkc3Rba2V5XSwgW3NyY10sIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkc3Rba2V5XSA9IHNyYztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZHN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kIChkc3QsIC4uLmFyZ3MpIHtcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSAoZHN0LCAuLi5hcmdzKSB7XG5cdHJldHVybiBiYXNlRXh0ZW5kKGRzdCwgYXJncywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCAodmFsdWUpIHtcblx0Ly8gaHR0cDovL2pzcGVyZi5jb20vaXNvYmplY3Q0XG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua09iamVjdCAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIU9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlciAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGUgKHZhbHVlKSB7XG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWdFeHAgKHZhbHVlKSB7XG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4gKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudCAobm9kZSkge1xuXHRyZXR1cm4gISEobm9kZSAmJlxuXHRcdChcblx0XHRcdG5vZGUubm9kZU5hbWUgIC8vIFdlIGFyZSBhIGRpcmVjdCBlbGVtZW50LlxuXHRcdFx0fHwgKG5vZGUucHJvcCAmJiBub2RlLmF0dHIgJiYgbm9kZS5maW5kKVxuXHRcdClcblx0KTsgIC8vIFdlIGhhdmUgYW4gb24gYW5kIGZpbmQgbWV0aG9kIHBhcnQgb2YgalF1ZXJ5IEFQSS5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2luZG93IChvYmopIHtcblx0cmV0dXJuIG9iaiAmJiBvYmoud2luZG93ID09PSBvYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluZWQgKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzIChvMSwgbzIpIHtcblx0aWYgKG8xID09PSBvMilcblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRpZiAobzEgPT09IG51bGwgfHwgbzIgPT09IG51bGwpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcblx0aWYgKG8xICE9PSBvMSAmJiBvMiAhPT0gbzIpXG5cdFx0cmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXG5cblx0Y29uc3QgdDEgPSB0eXBlb2YgbzE7XG5cdGNvbnN0IHQyID0gdHlwZW9mIG8yO1xuXG5cdGxldCBsZW5ndGg7XG5cdGxldCBrZXk7XG5cdGxldCBrZXlTZXQ7XG5cblx0aWYgKHQxID09PSB0MiAmJiB0MSA9PT0gJ29iamVjdCcpIHtcblx0XHRpZiAoaXNBcnJheShvMSkpIHtcblx0XHRcdGlmICghaXNBcnJheShvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0bGVuZ3RoID0gbzEubGVuZ3RoO1xuXG5cdFx0XHRpZiAobzEubGVuZ3RoID09PSBvMi5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChrZXkgPSAwOyBrZXkgPCBsZW5ndGg7IGtleSsrKSB7XG5cdFx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzRGF0ZShvMSkpIHtcblx0XHRcdGlmICghaXNEYXRlKG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gc2ltcGxlQ29tcGFyZShvMS5nZXRUaW1lKCksIG8yLmdldFRpbWUoKSk7XG5cdFx0fSBlbHNlIGlmIChpc1JlZ0V4cChvMSkpIHtcblx0XHRcdGlmICghaXNSZWdFeHAobzIpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdHJldHVybiBvMS50b1N0cmluZygpID09PSBvMi50b1N0cmluZygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoaXNXaW5kb3cobzEpIHx8IGlzV2luZG93KG8yKSB8fCBpc0FycmF5KG8yKSB8fCBpc0RhdGUobzIpIHx8IGlzUmVnRXhwKG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRrZXlTZXQgPSBjcmVhdGVNYXAoKTtcblx0XHRcdGZvciAoa2V5IGluIG8xKSB7XG5cdFx0XHRcdGlmIChpc0Z1bmN0aW9uKG8xW2tleV0pKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0XHRrZXlTZXRba2V5XSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoa2V5IGluIG8yKSB7XG5cdFx0XHRcdGlmICghKGtleSBpbiBrZXlTZXQpICYmIGlzRGVmaW5lZChvMltrZXldKSAmJiAhaXNGdW5jdGlvbihvMltrZXldKSlcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWFwICgpIHtcblx0cmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbmZ1bmN0aW9uIHNpbXBsZUNvbXBhcmUgKGEsIGIpIHtcblx0cmV0dXJuIGEgPT09IGIgfHwgKGEgIT09IGEgJiYgYiAhPT0gYik7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRPYmplY3RNYXhEZXB0aCAobWF4RGVwdGgpIHtcblx0cmV0dXJuIGlzTnVtYmVyKG1heERlcHRoKSAmJiBtYXhEZXB0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChzb3VyY2UsIGRlc3RpbmF0aW9uPywgbWF4RGVwdGg/KSB7XG5cdGNvbnN0IHN0YWNrU291cmNlID0gW107XG5cdGNvbnN0IHN0YWNrRGVzdCA9IFtdO1xuXG5cdG1heERlcHRoID0gaXNWYWxpZE9iamVjdE1heERlcHRoKG1heERlcHRoKSA/IG1heERlcHRoIDogTmFOO1xuXG5cdGlmIChkZXN0aW5hdGlvbikge1xuXHRcdGlmIChzb3VyY2UgPT09IGRlc3RpbmF0aW9uKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgaWRlbnRpY2FsLicpO1xuXHRcdH1cblxuXHRcdC8vIEVtcHR5IHRoZSBkZXN0aW5hdGlvbiBvYmplY3Rcblx0XHRpZiAoaXNBcnJheShkZXN0aW5hdGlvbikpIHtcblx0XHRcdGRlc3RpbmF0aW9uLmxlbmd0aCA9IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGRlc3RpbmF0aW9uKVxuXHRcdFx0XHRkZWxldGUgZGVzdGluYXRpb25ba2V5XTtcblx0XHR9XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0c3RhY2tTb3VyY2UucHVzaChzb3VyY2UpO1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGFja0Rlc3QucHVzaChkZXN0aW5hdGlvbik7XG5cblx0XHRyZXR1cm4gY29weVJlY3Vyc2Uoc291cmNlLCBkZXN0aW5hdGlvbiwgbWF4RGVwdGgpO1xuXHR9XG5cblx0cmV0dXJuIGNvcHlFbGVtZW50KHNvdXJjZSwgbWF4RGVwdGgpO1xuXG5cdGZ1bmN0aW9uIGNvcHlSZWN1cnNlIChfc291cmNlLCBfZGVzdGluYXRpb24sIF9tYXhEZXB0aCkge1xuXHRcdF9tYXhEZXB0aC0tO1xuXG5cdFx0aWYgKF9tYXhEZXB0aCA8IDApXG5cdFx0XHRyZXR1cm4gJy4uLic7XG5cblx0XHRpZiAoaXNBcnJheShfc291cmNlKSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlpID0gX3NvdXJjZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG5cdFx0XHRcdF9kZXN0aW5hdGlvbi5wdXNoKGNvcHlFbGVtZW50KF9zb3VyY2VbaV0sIF9tYXhEZXB0aCkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNCbGFua09iamVjdChfc291cmNlKSkge1xuXHRcdFx0Ly8gY3JlYXRlTWFwKCkgZmFzdCBwYXRoIC0tLSBTYWZlIHRvIGF2b2lkIGhhc093blByb3BlcnR5IGNoZWNrIGJlY2F1c2UgcHJvdG90eXBlIGNoYWluIGlzIGVtcHR5XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XG5cdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoX3NvdXJjZSAmJiB0eXBlb2YgX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gU2xvdyBwYXRoLCB3aGljaCBtdXN0IHJlbHkgb24gaGFzT3duUHJvcGVydHlcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0aWYgKF9zb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFNsb3dlc3QgcGF0aCAtLS0gaGFzT3duUHJvcGVydHkgY2FuJ3QgYmUgY2FsbGVkIGFzIGEgbWV0aG9kXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XG5cdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX3NvdXJjZSwga2V5KSkge1xuXHRcdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIF9kZXN0aW5hdGlvbjtcblx0fVxuXG5cdGZ1bmN0aW9uIGNvcHlFbGVtZW50IChfc291cmNlLCBfbWF4RGVwdGggPSA1KSB7XG5cdFx0Ly8gU2ltcGxlIHZhbHVlc1xuXHRcdGlmICghaXNPYmplY3QoX3NvdXJjZSkpXG5cdFx0XHRyZXR1cm4gX3NvdXJjZTtcblxuXHRcdC8vIEFscmVhZHkgY29waWVkIHZhbHVlc1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCBpbmRleCA9IHN0YWNrU291cmNlLmluZGV4T2YoX3NvdXJjZSk7XG5cblx0XHRpZiAoaW5kZXggIT09IC0xKVxuXHRcdFx0cmV0dXJuIHN0YWNrRGVzdFtpbmRleF07XG5cblx0XHRpZiAoaXNXaW5kb3coX3NvdXJjZSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBNYWtpbmcgY29waWVzIG9mIFdpbmRvdyBpbnN0YW5jZXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcblx0XHR9XG5cblx0XHRsZXQgbmVlZHNSZWN1cnNlID0gZmFsc2U7XG5cdFx0bGV0IF9kZXN0aW5hdGlvbiA9IGNvcHlUeXBlKF9zb3VyY2UpO1xuXG5cdFx0aWYgKF9kZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRfZGVzdGluYXRpb24gPSBpc0FycmF5KF9zb3VyY2UpID8gW10gOiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihfc291cmNlKSk7XG5cdFx0XHRuZWVkc1JlY3Vyc2UgPSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGFja1NvdXJjZS5wdXNoKF9zb3VyY2UpO1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGFja0Rlc3QucHVzaChfZGVzdGluYXRpb24pO1xuXG5cdFx0cmV0dXJuIG5lZWRzUmVjdXJzZVxuXHRcdFx0PyBjb3B5UmVjdXJzZShfc291cmNlLCBfZGVzdGluYXRpb24sIF9tYXhEZXB0aClcblx0XHRcdDogX2Rlc3RpbmF0aW9uO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29weVR5cGUgKF9zb3VyY2UpIHtcblx0XHRzd2l0Y2ggKHRvU3RyaW5nLmNhbGwoX3NvdXJjZSkpIHtcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50OEFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDE2QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MzJBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBGbG9hdDMyQXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQ4QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDE2QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDMyQXJyYXldJzpcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKGNvcHlFbGVtZW50KF9zb3VyY2UuYnVmZmVyKSwgX3NvdXJjZS5ieXRlT2Zmc2V0LCBfc291cmNlLmxlbmd0aCk7XG5cblx0XHRcdGNhc2UgJ1tvYmplY3QgQXJyYXlCdWZmZXJdJzpcblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUxMFxuXHRcdFx0XHRpZiAoIV9zb3VyY2Uuc2xpY2UpIHtcblx0XHRcdFx0XHQvLyBJZiB3ZSdyZSBpbiB0aGlzIGNhc2Ugd2Uga25vdyB0aGUgZW52aXJvbm1lbnQgc3VwcG9ydHMgQXJyYXlCdWZmZXJcblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuXHRcdFx0XHRcdGNvbnN0IGNvcGllZCA9IG5ldyBBcnJheUJ1ZmZlcihfc291cmNlLmJ5dGVMZW5ndGgpO1xuXHRcdFx0XHRcdG5ldyBVaW50OEFycmF5KGNvcGllZCkuc2V0KG5ldyBVaW50OEFycmF5KF9zb3VyY2UpKTtcblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlICovXG5cdFx0XHRcdFx0cmV0dXJuIGNvcGllZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gX3NvdXJjZS5zbGljZSgwKTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBTdHJpbmddJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoX3NvdXJjZS52YWx1ZU9mKCkpO1xuXG5cdFx0XHRjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuXHRcdFx0XHRjb25zdCByZSA9IG5ldyBSZWdFeHAoX3NvdXJjZS5fc291cmNlLCBfc291cmNlLnRvU3RyaW5nKCkubWF0Y2goL1teL10qJC8pWzBdKTtcblxuXHRcdFx0XHRyZS5sYXN0SW5kZXggPSBfc291cmNlLmxhc3RJbmRleDtcblxuXHRcdFx0XHRyZXR1cm4gcmU7XG5cblx0XHRcdGNhc2UgJ1tvYmplY3QgQmxvYl0nOlxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoW19zb3VyY2VdLCB7dHlwZTogX3NvdXJjZS50eXBlfSk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzRnVuY3Rpb24oX3NvdXJjZS5jbG9uZU5vZGUpKSB7XG5cdFx0XHRyZXR1cm4gX3NvdXJjZS5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEZpZWxkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mbyB9IGZyb20gJy4vQ29sdW1uSW5mbyc7XG5cbmltcG9ydCB7IGNvcHksIGVxdWFscyB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBBcGlGb3JtYXR0ZXIge1xuXHRNT01FTlRfSU5WQUxJRCA9ICdJbnZhbGlkIGRhdGUnO1xuXHRTRVJWRVJfREFURVRJTUVfRk9STUFUID0gJ1lZWVktTU0tRERbVF1ISDptbTpzc1onO1xuXHRTRVJWRVJfVElNRV9GT1JNQVQgPSAnSEg6bW06c3MnO1xuXHRTRVJWRVJfREFURV9GT1JNQVQgPSAnWVlZWS1NTS1ERCc7XG5cblx0Y29uc3RydWN0b3IgKCkge1xuXG5cdH1cblxuXHRmb3JtYXRSZXNwb25zZSAoZmllbGRzOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogRmllbGRNYXAge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXG5cdFx0XHRmaWVsZHNbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbi5wYXRoXSk7XG5cblx0XHRyZXR1cm4gZmllbGRzO1xuXHR9XG5cblx0ZXhwYW5kUmVzcG9uc2UgKGN1cnJlbnQ6IEZpZWxkTWFwLCBleHBhbmRlZDogRmllbGRNYXAsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IEZpZWxkTWFwIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKVxuXHRcdFx0Y3VycmVudFtjb2x1bW4ucGF0aF0gPSB0aGlzLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBleHBhbmRlZFtjb2x1bW4ucGF0aF0pO1xuXG5cdFx0cmV0dXJuIGN1cnJlbnQ7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0IChpbml0aWFsOiBGaWVsZE1hcCwgbW9kaWZpZWQ6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cdFx0XHRjb25zdCBjb2x1bW5UeXBlID0gYXBpQ29sdW1uLnR5cGU7XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcblx0XHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuZm9ybWF0UmVxdWVzdFZhbHVlKGNvbHVtblR5cGUsIG1vZGlmaWVkW2NvbHVtbklkXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3RMb2NhbCAoZmllbGRzOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogRmllbGRNYXAge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuZm9ybWF0UmVxdWVzdFZhbHVlKGFwaUNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0aGFzQ2hhbmdlcyAoaW5pdGlhbDogRmllbGRNYXAsIG1vZGlmaWVkOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogYm9vbGVhbiB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRnZXRDaGFuZ2VzIChpbml0aWFsOiBGaWVsZE1hcCwgbW9kaWZpZWQ6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0OiBvYmplY3RbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG9sZFZhbHVlOiBpbml0aWFsW2NvbHVtbklkXSxcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBtb2RpZmllZFtjb2x1bW5JZF0sXG5cdFx0XHRcdFx0XHRjb2x1bW46IGNvbHVtbi5hcGlDb2x1bW5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNvcHlGaWVsZHMgKHNvdXJjZTogRmllbGRNYXAsIGRlc3RpbmF0aW9uOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uSW5mb1tdKTogRmllbGRNYXAge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW4ucGF0aDtcblxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uUGF0aF0gPSB0aGlzLmNsb25lKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgc291cmNlW2NvbHVtblBhdGhdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRzaGFsbG93Q29weUZpZWxkcyAoXG5cdFx0c2hhbGxvd1NvdXJjZTogRmllbGRNYXAsXG5cdFx0ZGVlcFNvdXJjZTogRmllbGRNYXAsXG5cdFx0ZGVzdGluYXRpb246IEZpZWxkTWFwLFxuXHRcdGNvbHVtbnM6IENvbHVtbkluZm9bXVxuXHQpOiBGaWVsZE1hcCB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbi5wYXRoO1xuXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gOlxuXHRcdFx0XHR0aGlzLmNsb25lKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZGVlcFNvdXJjZVtjb2x1bW5QYXRoXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0c2V0RGVmYXVsdFZhbHVlcyAoZGVzdGluYXRpb246IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5JbmZvW10pOiBGaWVsZE1hcCB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbi5pZF0gPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0Y29tcGFyZUZpZWxkczxUPiAoY29sdW1uVHlwZTogc3RyaW5nLCBmaXJzdDogVCwgc2Vjb25kOiBUKTogYm9vbGVhbiB7XG5cdFx0aWYgKGZpcnN0ID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gc2Vjb25kID09PSB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2Vjb25kID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVNb21lbnRPYmplY3RzKGZpcnN0LCBzZWNvbmQpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRHVyYXRpb25zKGZpcnN0LCBzZWNvbmQpO1xuXHRcdFx0Y2FzZSAnaWQnOiAvLyBpZCB0eXBlc1xuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdsaW5rJzpcblx0XHRcdGNhc2UgJ2NoaWxkJzpcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdFx0XHRyZXR1cm4gZmlyc3QgPT0gc2Vjb25kOyAvLyB1c2Ugbm9uLXN0cmljdCBjb21wYXJpc29uXG5cdFx0XHRjYXNlICdjdXJyZW50Jzpcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XG5cdFx0XHRjYXNlICdkb3VibGUnOiAvLyBmbG9hdGluZyBwb2ludCB0eXBlc1xuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ3F1YW50aXR5Jzpcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZsb2F0cyhmaXJzdCwgc2Vjb25kKTtcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcblx0XHRcdGNhc2UgJ2Jvb2wnOiAvLyBib29sZWFuIHR5cGVzXG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdGNhc2UgJ2VtYWlsJzogLy8gc3RyaW5nIHR5cGVzXG5cdFx0XHRjYXNlICdwaG9uZSc6XG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PT0gc2Vjb25kO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGVxdWFscyhmaXJzdCwgc2Vjb25kKTtcblx0XHR9XG5cdH1cblxuXHRjb21wYXJlRmxvYXRzIChhLCBiKSB7XG5cdFx0Y29uc3QgYWJzQSA9IE1hdGguYWJzKGEpO1xuXHRcdGNvbnN0IGFic0IgPSBNYXRoLmFicyhiKTtcblx0XHRjb25zdCBkaWZmID0gTWF0aC5hYnMoYSAtIGIpO1xuXG5cdFx0Y29uc3QgRVBTSUxPTiA9IDEuMTllLTA3O1xuXG5cdFx0Ly8gc2hvcnRjdXQsIGhhbmRsZXMgaW5maW5pdGllc1xuXHRcdGlmIChhID09PSBiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKGEgPT09IDAgfHwgYiA9PT0gMCB8fCBkaWZmIDwgTnVtYmVyLk1JTl9WQUxVRSkge1xuXHRcdFx0Ly8gYSBvciBiIGlzIHplcm8gb3IgYm90aCBhcmUgZXh0cmVtZWx5IGNsb3NlIHRvIGl0XG5cdFx0XHQvLyByZWxhdGl2ZSBlcnJvciBpcyBsZXNzIG1lYW5pbmdmdWwgaGVyZVxuXHRcdFx0cmV0dXJuIGRpZmYgPCAoRVBTSUxPTiAqIE51bWJlci5NSU5fVkFMVUUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyB1c2UgcmVsYXRpdmUgZXJyb3Jcblx0XHRcdHJldHVybiBkaWZmIC8gTWF0aC5taW4oKGFic0EgKyBhYnNCKSwgTnVtYmVyLk1BWF9WQUxVRSkgPCBFUFNJTE9OO1xuXHRcdH1cblx0fVxuXG5cdGNvbXBhcmVNb21lbnRPYmplY3RzIChmaXJzdCwgc2Vjb25kKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFmaXJzdC5pc1ZhbGlkKCkpXG5cdFx0XHRyZXR1cm4gIXNlY29uZC5pc1ZhbGlkKCk7XG5cblx0XHRpZiAoIXNlY29uZC5pc1ZhbGlkKCkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGZpcnN0IElTIHZhbGlkXG5cblx0XHRyZXR1cm4gZmlyc3QuaXNTYW1lKHNlY29uZCk7XG5cdH1cblxuXHRjb21wYXJlRHVyYXRpb25zIChmaXJzdCwgc2Vjb25kKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZpcnN0LmFzTWlsbGlzZWNvbmRzKCkgPT09IHNlY29uZC5hc01pbGxpc2Vjb25kcygpO1xuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2VWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZURhdGUodmFsdWUpO1xuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUNvbG9yKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEdXJhdGlvbih2YWx1ZSk7XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcnID8gSlNPTi5wYXJzZSh2YWx1ZSkgOiB2YWx1ZTtcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZTtcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIC8gMTAwMDAwMDtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0VmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlVGltZSh2YWx1ZSk7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGUodmFsdWUpO1xuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0Q29sb3IodmFsdWUpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RHVyYXRpb24odmFsdWUpO1xuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlRGF0ZSAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBtb21lbnQuaW52YWxpZCgpIDogbW9tZW50KHZhbHVlKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlRHVyYXRpb24gKHZhbHVlKSB7XG5cdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbih2YWx1ZSA9PT0gbnVsbCA/IDAgOiB2YWx1ZSwgJ3NlY29uZHMnKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlQ29sb3IgKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUgOiAnIycgKyB2YWx1ZTtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3REYXRlVGltZSAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCkgOiBudWxsO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdERhdGUgKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlLmZvcm1hdCh0aGlzLlNFUlZFUl9EQVRFX0ZPUk1BVCkgOiBudWxsO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdER1cmF0aW9uICh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZS5hc1NlY29uZHMoKTtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3RDb2xvciAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUuY2hhckF0KDApID09PSAnIycgPyB2YWx1ZS5zdWJzdHJpbmcoMSkgOiB2YWx1ZTtcblx0fVxuXG5cdGdldERlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZSkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnaW50Jzpcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxuXHRcdFx0Y2FzZSAnc2libGluZyc6XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0XHRyZXR1cm4gJzAnO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5pbnZhbGlkKCk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oKTtcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiAnIzAwMDAwMCc7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHQvLyBcdFx0XHRcdFx0ZW1haWxcblx0XHRcdC8vIFx0XHRcdFx0XHR1cmxcblx0XHRcdC8vIFx0XHRcdFx0XHRodG1sXG5cdFx0XHQvLyBcdFx0XHRcdFx0anNvblxuXHRcdFx0Ly8gXHRcdFx0XHRcdGRhdGFcblx0XHR9XG5cdH1cblxuXHRpc0RlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIHZhbHVlLCB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW5UeXBlKSk7XG5cdH1cblxuXHRjbG9uZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbih2YWx1ZSk7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdFx0cmV0dXJuIGNvcHkodmFsdWUpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGdldENsb25lRnVuY3Rpb24gKGNvbHVtblR5cGUpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbjtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZURhdGU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZGVudGl0eTtcblx0XHR9XG5cdH1cblxuXHRjbG9uZUR1cmF0aW9uIChkdXJhdGlvbikge1xuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oZHVyYXRpb24pO1xuXHR9XG5cblx0Y2xvbmVEYXRlIChkYXRlKSB7XG5cdFx0cmV0dXJuIGRhdGUuY2xvbmUoKTtcblx0fVxuXG5cdGlkZW50aXR5IChpbnB1dCkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEFwaVJlcXVlc3RTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0dGVtcGxhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcGFyYW1zOiBhbnkpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgcGFyYW1zKSk7XG5cdH1cblxuXHRjcmVhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIHZhbHVlczogYW55LCBwYXJlbnRUeXBlPzogSXRlbVR5cGUsIHBhcmVudElkPzogSXRlbUlkKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY3JlYXRlKGl0ZW1UeXBlLCBpdGVtSWQsIHZhbHVlcywgcGFyZW50VHlwZSwgcGFyZW50SWQpKTtcblx0fVxuXG5cdGRlbGV0ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWRzOiBJdGVtSWRbXSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaXRlbUlkcykpO1xuXHR9XG5cblx0dXBkYXRlSXRlbXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbXM6IG9iamVjdCwgY29sdW1uczogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSk7XG5cdH1cblxuXHRyZXF1ZXN0U2tlbGV0b24gKHBhcmFtczogYW55LCByZXF1ZXN0Q2FuY2VsZXI/OiBQcm9taXNlPGFueT4pOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocGFyYW1zLCByZXF1ZXN0Q2FuY2VsZXIpKTtcblx0fVxuXG5cdG1vdmVJdGVtcyAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1zOiBvYmplY3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1zKSk7XG5cdH1cblxuXHRjb2x1bW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbnM6IG9iamVjdCwgcGFyYW1zPzogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zKSk7XG5cdH1cblxuXHRxdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogb2JqZWN0LCBjb2x1bW5zOiBvYmplY3QsIGxpbWl0Pzogb2JqZWN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zLCBsaW1pdCkpO1xuXHR9XG5cblx0cHJvY2Vzc1Jlc3BvbnNlIChyZXF1ZXN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiByZXF1ZXN0LnRoZW4ocmVzcG9uc2UgPT4gdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KHJlc3BvbnNlKSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVR5cGVNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3Ige1xuXHRjb2x1bW5zOiBJdGVtVHlwZU1hcDtcblx0aXRlbXM6IEl0ZW1UeXBlTWFwO1xuXHRsaW5rczogSXRlbVR5cGVNYXA7XG5cdGNhY2hlYWJsZTogYm9vbGVhbjtcblx0bWFwOiBhbnk7XG5cblx0Y29sdW1uSW5kZXhNYXA6IGFueSA9IHt9O1xuXHRjb2x1bW5NYXA6IGFueSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHVibGljIHJlc3BvbnNlOiBhbnlcblx0KSB7XG5cdFx0dGhpcy5jb2x1bW5zID0gcmVzcG9uc2UuY29sdW1ucztcblx0XHR0aGlzLml0ZW1zID0gcmVzcG9uc2UuaXRlbXM7XG5cdFx0dGhpcy5saW5rcyA9IHJlc3BvbnNlLmxpbmtzO1xuXHRcdHRoaXMuY2FjaGVhYmxlID0gcmVzcG9uc2UuY2FjaGVhYmxlO1xuXHRcdHRoaXMubWFwID0gcmVzcG9uc2UubWFwO1xuXG5cdFx0dGhpcy5jcmVhdGVDb2x1bW5NYXBzKCk7XG5cdH1cblxuXHRjcmVhdGVDb2x1bW5NYXBzICgpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtblR5cGUgaW4gdGhpcy5jb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdID0ge307XG5cdFx0XHR0aGlzLmNvbHVtbk1hcFtjb2x1bW5UeXBlXSA9IHt9O1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbY29sdW1uVHlwZV1baV07XG5cdFx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGk7XG5cdFx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBjb2x1bW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZmV0Y2hWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSWQpIHtcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGFbdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdXTtcblx0fVxuXG5cdGZldGNoRGVyaXZlZE9iamVjdCAoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhcblx0XHRcdFx0dGhpcy5mZXRjaFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbi5pZCksXG5cdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0cmVzdWx0XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaERlcml2ZWRWYWx1ZXMgKHZhbHVlLCBjb2x1bW4sIGRlc3RpbmF0aW9uKSB7XG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcblx0XHRcdGxldCBjaGlsZFZhbHVlO1xuXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IG51bGw7XG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0RGVmYXVsdFZhbHVlKGNoaWxkQ29sdW1uLmFwaUNvbHVtbi50eXBlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNoaWxkVmFsdWUgPSB0aGlzLmZldGNoVmFsdWUoY29sdW1uLml0ZW1UeXBlLCB2YWx1ZSwgY2hpbGRDb2x1bW4uaWQpO1xuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IGNoaWxkVmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjaGlsZENvbHVtbi5pc0xlYWYpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhjaGlsZFZhbHVlLCBjaGlsZENvbHVtbiwgZGVzdGluYXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdGZldGNoT2JqZWN0IChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3M6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG5cdFx0aWYgKHRoaXMuaXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgaXRlbSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGE7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0cmVzdWx0W3RoaXMuY29sdW1uc1tpdGVtVHlwZV1baV0uaWRdID0gZGF0YVtpXTtcblx0XHR9XG5cblx0XHRpZiAoaW5jbHVkZUxpbmtzKSB7XG5cdFx0XHRjb25zdCBsaW5rcyA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0ubGlua3M7XG5cdFx0XHRyZXN1bHQuX19saW5rcyA9IHt9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtUeXBlIGluIGxpbmtzKVxuXHRcdFx0XHRyZXN1bHQuX19saW5rc1tsaW5rVHlwZV0gPVxuXHRcdFx0XHRcdHRoaXMuZmV0Y2hPYmplY3RBcnJheShsaW5rVHlwZSwgaW5jbHVkZUxpbmtzLCBsaW5rc1tsaW5rVHlwZV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaE9iamVjdEFycmF5IChpdGVtVHlwZSwgaW5jbHVkZUxpbmtzLCBpZEFycmF5KSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSBbXTtcblxuXHRcdGlmIChpZEFycmF5ID09PSBudWxsKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRpZiAoaWRBcnJheSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0aWRBcnJheSA9IHRoaXMubGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaWRBcnJheSlcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hPYmplY3RNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCwgaW5jbHVkZUxpbmtzLCByZXR1cm5LZXlzKSB7XG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuXHRcdGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRjb25zdCBrZXkgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0uZGF0YVtjb2x1bW5JbmRleF07XG5cdFx0XHRrZXlzLnB1c2goa2V5KTtcblx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaWQsIGluY2x1ZGVMaW5rcyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJldHVybktleXMpXG5cdFx0XHRyZXR1cm4ge3Jlc3VsdDogcmVzdWx0LCBrZXlzOiBrZXlzfTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hGaWVsZE1hcCAoaXRlbVR5cGUsIGNvbHVtbklkKSB7XG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxuXHRcdFx0cmVzdWx0W2lkXSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5kYXRhW2luZGV4XTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaENvbHVtbkFycmF5IChpdGVtVHlwZSkge1xuXHRcdGNvbnN0IHJlc3VsdDogUmVzcG9uc2VDb2x1bW5bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBhcGlDb2x1bW4gb2YgdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSlcblx0XHRcdHJlc3VsdC5wdXNoKGFwaUNvbHVtbik7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hDb2x1bW5PYmplY3QgKGl0ZW1UeXBlKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwW2l0ZW1UeXBlXTtcblx0fVxuXG5cdGZldGNoQ29sdW1uc09iamVjdCAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwO1xuXHR9XG5cblx0Y3JlYXRlUmVzb3VyY2UgKGl0ZW1UeXBlLCBpZCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRvYmplY3Q6IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkKSxcblx0XHRcdGxpbmtzOiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0ubGlua3Ncblx0XHR9O1xuXHR9XG5cblx0aGFzSXRlbXMgKGl0ZW1UeXBlKSB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRnZXRJZEFycmF5IChpdGVtVHlwZSkge1xuXHRcdGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRyZXN1bHQucHVzaChpdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImV4cG9ydCBlbnVtIEVOVFJZX1NUQVRVUyB7XG5cdENBQ0hFRCA9ICdjYWNoZWQnLFxuXHRQUk9NSVNFRCA9ICdwcm9taXNlZCcsXG5cdEVYUEFORCA9ICdleHBhbmQnLFxuXHRQUk9NSVNFRF9FWFBBTkQgPSAncHJvbWlzZWQtZXhwYW5kJyxcblx0UkVTT0xWRSA9ICdyZXNvbHZlJyxcblx0UkVTT0xWRV9WQUxVRVMgPSAncmVzb2x2ZS12YWx1ZXMnLFxuXHRMT0NBTCA9ICdsb2NhbCdcbn1cblxuZXhwb3J0IGNvbnN0IEFMTF9QRVJNSVNTSU9OUyA9ICc3JztcblxuZXhwb3J0IGNvbnN0IENPTFVNTl9TRVBFUkFUT1IgPSAnPic7XG5leHBvcnQgY29uc3QgUkVOREVSX0FTX1NFUEVSQVRPUiA9ICc6JztcblxuZXhwb3J0IGNvbnN0IE5FV19QUkVGSVg6IHN0cmluZyA9ICctMSc7XG5leHBvcnQgY29uc3QgRFVQTElDQVRFX1BSRUZJWDogc3RyaW5nID0gJy0yJztcblxuZXhwb3J0IGNvbnN0IE5FV19LRVlXT1JEOiBzdHJpbmcgPSAnbmV3LSc7XG5leHBvcnQgY29uc3QgRFVQTElDQVRFX0tFWVdPUkQ6IHN0cmluZyA9ICdkdXAtJztcbiIsImltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgRW50cnlTdGF0dXMsIEl0ZW1FbnRyeUVudHJ5U3RhdHVzTWFwLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1cyB7XG5cdHJlYWRvbmx5IHJlcXVlc3RTdGF0dXNBcnJheSA9IFtcblx0XHRFTlRSWV9TVEFUVVMuUkVTT0xWRSxcblx0XHRFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVMsXG5cdFx0RU5UUllfU1RBVFVTLkVYUEFORCxcblx0XHRFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXG5cdF07XG5cblx0ZW50cmllczogSXRlbUVudHJ5RW50cnlTdGF0dXNNYXAgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRwdWJsaWMgZ2V0SXRlbUlkOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IEl0ZW1JZCxcblx0XHRwdWJsaWMgZ2V0UHJvbWlzZTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBQcm9taXNlPEl0ZW1FbnRyeT4gLy8gdG9kbzogcHJvbWlzZSByZXR1cm4gdHlwZVxuXHQpIHtcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBFTlRSWV9TVEFUVVMpXG5cdFx0XHR0aGlzLmVudHJpZXNbRU5UUllfU1RBVFVTW3N0YXR1c11dID0gW107XG5cdH1cblxuXHRhZGQgKGVudHJ5U3RhdHVzOiBFbnRyeVN0YXR1czxJdGVtRW50cnk+KTogdm9pZCB7XG5cdFx0Y29uc3Qgc3RhdHVzID0gZW50cnlTdGF0dXMuc3RhdHVzO1xuXG5cdFx0aWYgKHRoaXMuZW50cmllc1tzdGF0dXNdID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLmVudHJpZXNbc3RhdHVzXSA9IFtdO1xuXG5cdFx0dGhpcy5lbnRyaWVzW3N0YXR1c10ucHVzaChlbnRyeVN0YXR1cy5lbnRyeSk7XG5cdH1cblxuXHRoYXNFbnRyaWVzIChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10pOiBib29sZWFuIHtcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBvZiBzdGF0dXNBcnJheSkge1xuXHRcdFx0aWYgKHRoaXMuZW50cmllc1tzdGF0dXNdLmxlbmd0aCA+IDApXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGhhc1JlcXVlc3RzICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5oYXNFbnRyaWVzKHRoaXMucmVxdWVzdFN0YXR1c0FycmF5KTtcblx0fVxuXG5cdGZvckVhY2hFbnRyeSAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdLCBjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKSB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0UHJvbWlzZXMgKCk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBwcm9taXNlczogQXJyYXk8UHJvbWlzZTxJdGVtRW50cnk+PiA9IFtdO1xuXG5cdFx0dGhpcy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLlBST01JU0VELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cHJvbWlzZXMucHVzaCh0aGlzLmdldFByb21pc2UoZW50cnkpKTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKTtcblx0fVxuXG5cdGdldFJlcXVlc3RJZHMgKCkge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkW10gPSBbXTtcblxuXHRcdHRoaXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0dGhpcy5yZXF1ZXN0U3RhdHVzQXJyYXksXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZ2V0SXRlbUlkKGVudHJ5KSk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRBcnJheSAoKTogSXRlbUVudHJ5W10ge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIHRoaXMuZW50cmllcykge1xuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IHRoaXMuZW50cmllc1tzdGF0dXNdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1c0VudHJ5IG9mIHN0YXR1c0VudHJpZXMpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHN0YXR1c0VudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgRW50cnlQYXJlbnQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ2hhbmdlc0NvbXBpbGF0aW9uIHtcblx0Y29tcGlsYXRpb24gPSB7XG5cdFx0Y3JlYXRlOiB7fSxcblx0XHRkZWxldGU6IHt9LFxuXHRcdHVwZGF0ZToge30sXG5cdFx0bW92ZToge31cblx0fTtcblxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXG5cdHByaXZhdGUgbW92ZUFycmF5OiBJdGVtRW50cnlbXSA9IFtdO1xuXHRwcml2YXRlIGRlbGV0ZU1hcCA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0cHVibGljIHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSxcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W11cblx0KSB7XG5cdFx0dGhpcy5jb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblxuXHRcdHRoaXMucHJvY2Vzc1NpbmdsZUl0ZW1zKCk7XG5cdFx0dGhpcy5wcm9jZXNzQ29sbGVjdGlvbnMoY29sbGVjdGlvbkVudHJpZXMpO1xuXHRcdHRoaXMucG9zdFByb2Nlc3MoKTtcblx0fVxuXG5cdGdldERlZmF1bHRQYXJlbnQgKCk6IEVudHJ5UGFyZW50IHtcblx0XHRyZXR1cm4ge2l0ZW1UeXBlOiAnVm9pZCcsIGl0ZW1JZDogMH07XG5cdH1cblxuXHRhZGRNb3ZlRW50cnkgKGl0ZW1FbnRyeSkge1xuXHRcdHRoaXMubW92ZUFycmF5LnB1c2goaXRlbUVudHJ5KTtcblx0fVxuXG5cdGFkZERlbGV0ZUVudHJ5IChpdGVtRW50cnksIHBhcmVudElkLCBwYXJlbnRUeXBlKSB7XG5cdFx0Y3JlYXRlUGF0aChcblx0XHRcdHRoaXMuZGVsZXRlTWFwLFxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHtwYXJlbnRJZDogcGFyZW50SWQsIGl0ZW06IGl0ZW1FbnRyeSwgcGFyZW50VHlwZTogcGFyZW50VHlwZX1dXG5cdFx0KTtcblx0fVxuXG5cdGFkZFVwZGF0ZUVudHJ5IChpdGVtRW50cnkpIHtcblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi51cGRhdGUsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRhZGRDcmVhdGVFbnRyeSAoaXRlbUVudHJ5KSB7XG5cdFx0bGV0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cGFyZW50ID0gdGhpcy5nZXREZWZhdWx0UGFyZW50KCk7XG5cblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi5jcmVhdGUsXG5cdFx0XHRbcGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0W3t9LCB7fSwge30sIGl0ZW1FbnRyeV1cblx0XHQpO1xuXHR9XG5cblx0cG9zdFByb2Nlc3MgKCkge1xuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHRoaXMubW92ZUFycmF5KSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdFx0Y29uc3QgZGVsZXRlRW50cnkgPSB0aGlzLmRlbGV0ZU1hcFtpdGVtRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0XHRpZiAoZGVsZXRlRW50cnkgPT09IHVuZGVmaW5lZCB8fCBkZWxldGVFbnRyeVtpdGVtSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHQvLyBhc3N1bWUgdGhlIGl0ZW1FbnRyeSBoYXMgYSBwYXJlbnQgKG9yIHNvbWV0aGluZyB3ZW50IHNlcmlvdXNseSB3cm9uZylcblx0XHRcdGNvbnN0IHBhcmVudCA9IDxFbnRyeVBhcmVudD4gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0Y29uc3QgZGVzdGluYXRpb24gPSBjcmVhdGVQYXRoKFxuXHRcdFx0XHR0aGlzLmNvbXBpbGF0aW9uLm1vdmUsXG5cdFx0XHRcdFtwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWRdLFxuXHRcdFx0XHRbe30sIFtdXVxuXHRcdFx0KTtcblxuXHRcdFx0ZGVzdGluYXRpb24ucHVzaChkZWxldGVFbnRyeVtpdGVtSWRdKTtcblxuXHRcdFx0ZGVsZXRlIGRlbGV0ZUVudHJ5W2l0ZW1JZF07XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmRlbGV0ZU1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5kZWxldGVNYXBbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gdGhpcy5kZWxldGVNYXBbaXRlbVR5cGVdW2l0ZW1JZF0uaXRlbTtcblx0XHRcdFx0Y29uc3QgZGVzdGluYXRpb24gPSB0aGlzLmNvbXBpbGF0aW9uLmRlbGV0ZTtcblxuXHRcdFx0XHRpZiAoZGVzdGluYXRpb25baXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0ZGVzdGluYXRpb25baXRlbVR5cGVdID0gW107XG5cblx0XHRcdFx0ZGVzdGluYXRpb25baXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NTaW5nbGVJdGVtcyAoKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5zaW5nbGVJdGVtcykge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdHRoaXMuYWRkQ3JlYXRlRW50cnkoaXRlbUVudHJ5KTtcblx0XHRcdGVsc2UgaWYgKGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXG5cdFx0XHRcdHRoaXMuYWRkVXBkYXRlRW50cnkoaXRlbUVudHJ5KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NDb2xsZWN0aW9ucyAoY29sbGVjdGlvbkVudHJpZXMpIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcykge1xuXHRcdFx0dGhpcy5jb2xsZWN0aW9ucy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHQvLyBhZGQgdGhlIGNvbGxlY3Rpb24gcGFyZW50IGlkIHRvIHRoZSBkZWxldGUgZW50cnkgKGluIGNhc2UgdGhlIGl0ZW0gaGFzIGJlZW4gbW92ZWQpXG5cdFx0XHRsZXQgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcblxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdFx0cGFyZW50ID0gdGhpcy5nZXREZWZhdWx0UGFyZW50KCk7XG5cblx0XHRcdGxldCBhZGRlZEl0ZW1zO1xuXHRcdFx0bGV0IHJlbW92ZWRJdGVtcztcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpIHtcblx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtcztcblx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gW107XG5cdFx0XHR9IGVsc2UgaWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzKSB7XG5cdFx0XHRcdGFkZGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0QWRkZWRJdGVtcygpO1xuXHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0UmVtb3ZlZEl0ZW1zKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRlZEl0ZW1zID0gW107XG5cdFx0XHRcdHJlbW92ZWRJdGVtcyA9IFtdO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbSBvZiBhZGRlZEl0ZW1zKSB7IC8vIGl0IGlzIHBvc3NpYmxlIHRvIG1vdmUgYW4gZXhpc3RpbmcgaXRlbSB0byBhIG5ldyBjb2xsZWN0aW9uXG5cdFx0XHRcdGlmIChhZGRlZEl0ZW0uaXNMb2NhbCgpKVxuXHRcdFx0XHRcdHRoaXMuYWRkQ3JlYXRlRW50cnkoYWRkZWRJdGVtKTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRoaXMuYWRkTW92ZUVudHJ5KGFkZGVkSXRlbSk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW0gb2YgcmVtb3ZlZEl0ZW1zKVxuXHRcdFx0XHR0aGlzLmFkZERlbGV0ZUVudHJ5KHJlbW92ZWRJdGVtLCBwYXJlbnQuaXRlbUlkLCBwYXJlbnQuaXRlbVR5cGUpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzKSB7XG5cdFx0XHRcdGNvbnN0IHVwZGF0ZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRVcGRhdGVkSXRlbXMoKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHVwZGF0ZWRJdGVtIG9mIHVwZGF0ZWRJdGVtcylcblx0XHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KHVwZGF0ZWRJdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0Q2hhbmdlc0NvbXBpbGF0aW9uLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sdW1uSW5mbyxcblx0SXRlbUhhbmRsZXJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlc3BvbnNlLCBDcmVhdGVSZXF1ZXN0RW50cnksIENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsIEVudHJ5UGFyZW50LCBJdGVtSWQsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXBcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBjcmVhdGVQYXRoLCBnZXRQYXRoLCBoYXNQcm9wZXJ0aWVzLCBpbkFycmF5IH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3Ige1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHQvLyBUT0RPOiB3ZSBjYW4gcmVtb3ZlIHRoZXNlIG9uY2UgdGhlIGRvY3VtZW50IGNyZWF0aW9uIGhhcyBiZWVuIHVwZGF0ZWRcblx0Z2V0SXRlbVR5cGVVcGRhdGVQcmlvcml0eSAoaXRlbVR5cGUpIHtcblx0XHRzd2l0Y2ggKGl0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdGYWN0dXVycmVnZWxiZWRyYWcnOlxuXHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdGNhc2UgJ0ZhY3R1dXJyZWdlbCc6XG5cdFx0XHRjYXNlICdNaW5mYWN0dXVyJzpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHR9XG5cdH1cblxuXHRpc0RvY3VtZW50SXRlbVR5cGUgKGl0ZW1UeXBlKSB7XG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xuXHRcdFx0Y2FzZSAnQm9uJzpcblx0XHRcdGNhc2UgJ09mZmVydGUnOlxuXHRcdFx0Y2FzZSAnQ29udHJhY3QnOlxuXHRcdFx0Y2FzZSAnRmFjdHV1cic6XG5cdFx0XHRjYXNlICdNYXRlcmlhYWxib24nOlxuXHRcdFx0Y2FzZSAnQ29udGFjdGJvbic6XG5cdFx0XHRjYXNlICdJbmh1dXJib24nOlxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcmJvbic6XG5cdFx0XHRjYXNlICdSZXBhcmF0aWVib24nOlxuXHRcdFx0Y2FzZSAnVm9lcnR1aWdib24nOlxuXHRcdFx0Y2FzZSAnQWFubWFuaW5nJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aXNEb2N1bWVudFVwZGF0ZSAoY29tcGlsYXRpb24pIHtcblx0XHRjb25zdCB1cGRhdGVDb21waWxhdGlvbiA9IGNvbXBpbGF0aW9uLnVwZGF0ZTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdXBkYXRlQ29tcGlsYXRpb24pIHtcblx0XHRcdGlmICh0aGlzLmlzRG9jdW1lbnRJdGVtVHlwZShpdGVtVHlwZSkpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGJ1aWxkTW92ZVJlcXVlc3QgKGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gY29tcGlsYXRpb25FbnRyeS5pdGVtO1xuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRcdGlmIChyZXN1bHRbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc3VsdFtpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0cmVzdWx0W2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRNYXBWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XG5cdFx0aWYgKG1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3RzIChcblx0XHRjaGFuZ2VzQ29tcGlsYXRpb246IENoYW5nZXNDb21waWxhdGlvbixcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhbixcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxuXHQpIHtcblx0XHRjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uLmNyZWF0ZSxcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbi5jb2xsZWN0aW9ucyxcblx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcblx0XHQpLnJ1bigpO1xuXHRcdGNvbnN0IHJlc3BvbnNlczogQXJyYXk8UHJvbWlzZTxhbnk+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKVxuXHRcdFx0cmVzcG9uc2VzLnB1c2godGhpcy5leGVjdXRlQ3JlYXRlUmVxdWVzdChyZXF1ZXN0LCBjb252ZXJzaW9uTWFwKS50aGVuKG5vdGlmeSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3BvbnNlcykudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdGZ1bmN0aW9uIG5vdGlmeSAocmVzdWx0KSB7XG5cdFx0XHRpZiAob25BZnRlckNyZWF0ZUNhbGxiYWNrICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDcmVhdGVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2U6IENyZWF0ZVJlcXVlc3RFbnRyeSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VNYXAgPSByZXNwb25zZS5tYXA7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5pdGVtcztcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1uc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3SXRlbUlkOiBJdGVtSWQgPSB0aGlzLmdldE1hcFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIHJlc3BvbnNlTWFwKTtcblxuXHRcdFx0XHRcdFx0aWYgKG5ld0l0ZW1JZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignQ3JlYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCk7XG5cdFx0XHRcdFx0XHRjb25zdCBleHBhbmRSZXNvdXJjZSA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkID0gbmV3SXRlbUlkO1xuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUZpZWxkcyhcblx0XHRcdFx0XHRcdFx0ZmllbGRzLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCwgaXRlbUVudHJ5LmNvbHVtbnMucm9vdCksXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcblx0XHRcdFx0XHRcdFx0XHRmaWVsZHMsXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQsIGV4cGFuZFJlc291cmNlLmRpZmZlcmVuY2Uucm9vdCksXG5cdFx0XHRcdFx0XHRcdFx0ZXhwYW5kUmVzb3VyY2Vcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlcXVlc3RSZXNvdXJjZS5jb2xsZWN0aW9ucy5hZGRUb0NvbGxlY3Rpb25zKCk7XG5cblx0XHRcdFx0Ly8gZXh0ZW5kIGNvbnZlcnNpb24gbWFwXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gcmVzcG9uc2VNYXApIHtcblx0XHRcdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiByZXNwb25zZU1hcFtpdGVtVHlwZV0pXG5cdFx0XHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVtpdGVtSWRdID0gcmVzcG9uc2VNYXBbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBwcmlvcml0aXplVXBkYXRlUmVxdWVzdHMgKGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgcHJpb3JpdGl6ZWRJdGVtVHlwZXM6IHN0cmluZ1tdW10gPSBbW10sIFtdLCBbXV07XG5cdFx0bGV0IHJlcXVlc3RDaGFpbiA9IHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbilcblx0XHRcdHByaW9yaXRpemVkSXRlbVR5cGVzW3RoaXMuZ2V0SXRlbVR5cGVVcGRhdGVQcmlvcml0eShpdGVtVHlwZSldLnB1c2goaXRlbVR5cGUpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZXMgb2YgcHJpb3JpdGl6ZWRJdGVtVHlwZXMpIHtcblx0XHRcdGlmIChpdGVtVHlwZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0cmVxdWVzdENoYWluID0gcmVxdWVzdENoYWluLnRoZW4oXG5cdFx0XHRcdHRoaXMuZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzKGl0ZW1UeXBlcywgY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpLFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlcXVlc3RDaGFpbjtcblx0fVxuXG5cdC8vIGNvbnN0cnVjdCBhIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzIChpdGVtVHlwZXMsIGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSB7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlPEFwaVJlc3BvbnNlPj4gPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBvZiBpdGVtVHlwZXMpXG5cdFx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdLCBwYXJhbWV0ZXJzKSk7XG5cblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3QgKGl0ZW1UeXBlLCBpdGVtRW50cmllcywgcGFyYW1ldGVyTWFwKSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IHt9O1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoKTtcblxuXHRcdHJlcXVlc3RbaXRlbVR5cGVdID0ge307XG5cblx0XHQvLyB3ZSBuZWVkIHRvIGRvIHRoZSBmb3JtYXRSZXF1ZXN0IGNhbGwgaGVyZSAoZmllbGRzIG1pZ2h0IGhhdmUgYmVlbiB1cGRhdGVkKVxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xuXHRcdFx0Ly8gUk1Db3JlIHRvZG86IHR5cGVcblx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0W2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aChwYXJhbWV0ZXJNYXAsIFtpdGVtVHlwZSwgaXRlbUlkXSk7XG5cblx0XHRcdGl0ZW1SZXF1ZXN0LnZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XG5cblx0XHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zID0gY29sbGVjdGlvbk1hdGNoZXIuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKVxuXHRcdFx0cmVxdWVzdENvbHVtbnMuZXhwYW5kKGNvbGxlY3Rpb24uY29sdW1ucyk7XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS51cGRhdGVJdGVtcyhpdGVtVHlwZSwgcmVxdWVzdCwgcmVxdWVzdENvbHVtbnMuZ2V0KCkpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMuZ2V0KCksXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XG5cdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignVXBkYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5pbml0aWFsLCB7fSwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cblx0XHRcdFx0XHRpdGVtRW50cnlcblx0XHRcdFx0XHRcdC51cGRhdGVGaWVsZHMoZmllbGRzLCByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaXRlbUVudHJ5LmNvbHVtbnMucm9vdCkpXG5cdFx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdFx0XHRcdGNvbnN0IGV4cGFuZFJlc291cmNlID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XG5cblx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgPT09IG51bGwpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXG5cdFx0XHRcdFx0XHRmaWVsZHMsXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZURlbGV0ZVJlcXVlc3RzIChjb21waWxhdGlvbikge1xuXHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlPEFwaVJlc3BvbnNlPj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pIC8vIGNsZWFyaW5nIG5vdCBuZWNlc3Nhcnlcblx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdCAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xuXHRcdGNvbnN0IGlkQXJyYXk6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGlkQXJyYXkucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaWRBcnJheSkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJZEFycmF5ID0gcmVzcG9uc2UuaXRlbXM7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5nZXRDb2xsZWN0aW9uTWF0Y2hlcigpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0aWYgKCFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIHJlc3BvbnNlSWRBcnJheSkpXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ0RlbGV0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZU1vdmVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIGNvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZTxBcGlSZXNwb25zZT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY29tcGlsYXRpb24pIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29tcGlsYXRpb25bcGFyZW50VHlwZV0pXG5cdFx0XHRcdGV4ZWN1dGVNb3ZlUmVxdWVzdChwYXJlbnRUeXBlLCBwYXJlbnRJZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcblxuXHRcdGZ1bmN0aW9uIGV4ZWN1dGVNb3ZlUmVxdWVzdCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcblx0XHRcdC8vIG9ubHkgdGhlIHBhcmVudCBpZCBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZFxuXHRcdFx0Y29uc3QgY29tcGlsYXRpb25FbnRyaWVzID0gY29tcGlsYXRpb25bcGFyZW50VHlwZV1bcGFyZW50SWRdO1xuXHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSBzZWxmLmdldE1hcFZhbHVlKHBhcmVudFR5cGUsIHBhcmVudElkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0cmVxdWVzdHMucHVzaChcblx0XHRcdFx0c2VsZi5hcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMoXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkID8gbmV3UGFyZW50SWQgOiBwYXJlbnRJZCxcblx0XHRcdFx0XHRzZWxmLmJ1aWxkTW92ZVJlcXVlc3QoY29tcGlsYXRpb25FbnRyaWVzKVxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0c2VsZi5wcm9jZXNzTW92ZVJlc3BvbnNlKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllcyk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzZWxmLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NNb3ZlUmVzcG9uc2UgKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdC8vIFRPRE86IHByb2Nlc3MgcmVzcG9uc2VcblxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRcdGNvbnN0IHJlbW92ZUNvbGxlY3Rpb25NYXAgPSB7fTtcblx0XHRjb25zdCBhZGRDb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbXBpbGF0aW9uRW50cnkgb2YgY29tcGlsYXRpb25FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGNvbXBpbGF0aW9uRW50cnkuaXRlbTtcblxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXG5cdFx0XHRcdHJlbW92ZUNvbGxlY3Rpb25NYXAsXG5cdFx0XHRcdGNvbXBpbGF0aW9uRW50cnkucGFyZW50SWQsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZFxuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXG5cdFx0XHRcdGFkZENvbGxlY3Rpb25NYXAsXG5cdFx0XHRcdCg8RW50cnlQYXJlbnQ+IGl0ZW1FbnRyeS5wYXJlbnQpLml0ZW1JZCxcblx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRpdGVtRW50cnlcblx0XHRcdCk7XG5cblx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKHJlbW92ZUNvbGxlY3Rpb25NYXAsICdyZW1vdmVJdGVtcycpO1xuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb24oYWRkQ29sbGVjdGlvbk1hcCwgJ2FkZEl0ZW1zJyk7XG5cdH1cblxuXHRwcml2YXRlIGFkZENvbGxlY3Rpb25NYXBFbnRyeSAoY29sbGVjdGlvbk1hcCwgcGFyZW50SWQsIGl0ZW1FbnRyeSwgdmFsdWUpIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwRW50cnkgPSBjcmVhdGVQYXRoKFxuXHRcdFx0Y29sbGVjdGlvbk1hcCxcblx0XHRcdFtpdGVtRW50cnkucGFyZW50Lml0ZW1UeXBlLCBwYXJlbnRJZCwgaXRlbUVudHJ5Lml0ZW1UeXBlXSxcblx0XHRcdFt7fSwge30sIFtdXVxuXHRcdCk7XG5cblx0XHRjb2xsZWN0aW9uTWFwRW50cnkucHVzaCh2YWx1ZSk7XG5cdH1cblxuXHRwcml2YXRlIGZvckVhY2hDb2xsZWN0aW9uIChjb2xsZWN0aW9uTWFwLCBtZXRob2QpIHtcblx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF0pIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTtcblxuXHRcdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeVttZXRob2RdKFxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdLFxuXHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gbm90ZTogd2l0aCB0aGUgbmV3IGl0ZW0gc3RydWN0dXJlLCAqYWxsKiBsb2NhbCBpdGVtcyBhcmUgaW4gdGhlIHNpbmdsZSBpdGVtIGNhY2hlXG5cdHByaXZhdGUgb25JdGVtc0NyZWF0ZWQgKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSwgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdKSB7XG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbnZlcnNpb25NYXApKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbnMpIHtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XG5cdFx0XHRjb25zdCB1cGRhdGVkQ29sdW1uczoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1Db2x1bW5zKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5xdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShjb2xsZWN0aW9uRW50cnkub3B0aW9ucyk7XG5cblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHVwZGF0ZWRDb2x1bW5zKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICh1cGRhdGVkQ29sdW1ucy5pZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcFtjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdKTtcblxuXHRcdFx0Ly8gd2hlbiB1cGRhdGluZyBhbiBpdGVtIHRvIHJlZmVyIHRvIGEgbmV3bHkgY3JlYXRlZCBpdGVtLCB0aGUgdXBkYXRlZCBpdGVtIHdpbGwgKm5vdCogYmUgYWRkZWQgdG9cblx0XHRcdC8vIHNpbmdsZSBpdGVtcyAoZS5nLiBtb3ZpbmcgYSBmdW5jdGlvbiB0byBhIG5ld2x5IGNyZWF0ZWQgZnVuY3Rpb24gZ3JvdXApXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXG5cdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHNpbmdsZUl0ZW1zKSB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0XHRpdGVtRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHRoaXMuZ2V0TWFwVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcHJvcGVyIG9yZGVyOiBjcmVhdGUgLSBtb3ZlIC0gZGVsZXRlIC0gdXBkYXRlXG5cdGV4ZWN1dGUgKFxuXHRcdHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSxcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10sXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHt9LFxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KTogUHJvbWlzZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgY2hhbmdlc0NvbXBpbGF0aW9uID0gdGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xuXHRcdGNvbnN0IGNvbXBpbGF0aW9uID0gY2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uO1xuXHRcdGNvbnN0IGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fTtcblxuXHRcdGxldCBwcm9taXNlQ2hhaW4gPSB0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyhcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbixcblx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRjb252ZXJzaW9uTWFwLFxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50LFxuXHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHR0aGlzLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZU1vdmVSZXF1ZXN0cyhjb21waWxhdGlvbi5tb3ZlLCBjb252ZXJzaW9uTWFwKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcblxuXHRcdFx0XHRyZXR1cm4gZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGlmICh0aGlzLmlzRG9jdW1lbnRVcGRhdGUoY29tcGlsYXRpb24pKSB7XG5cdFx0XHRwcm9taXNlQ2hhaW4gPSBwcm9taXNlQ2hhaW4udGhlbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVEZWxldGVSZXF1ZXN0cyhjb21waWxhdGlvbi5kZWxldGUpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpLnRoZW4oXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5wcmlvcml0aXplVXBkYXRlUmVxdWVzdHMoY29tcGlsYXRpb24udXBkYXRlLCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvbWlzZUNoYWluID0gcHJvbWlzZUNoYWluLnRoZW4oXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5wcmlvcml0aXplVXBkYXRlUmVxdWVzdHMoY29tcGlsYXRpb24udXBkYXRlLCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KS50aGVuKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLmRlbGV0ZSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb21pc2VDaGFpbi50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5lbnVtIENPTlNUQU5UUyB7XG5cdE1BWUJFID0gJ21heWJlJ1xufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlIHtcblx0ZW50cmllczoge1xuXHRcdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFx0W2NvbGxlY3Rpb25FbnRyeUlkOiBudW1iZXJdOiBDb2xsZWN0aW9uRW50cnlcblx0XHR9XG5cdH0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXG5cdH1cblxuXHRjb250YWlucyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV07XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGVudHJpZXNbY29sbGVjdGlvbkVudHJ5LmlkXSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0c29tZSAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGlmIChjYWxsYmFjayhlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSkpXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCBpbiB1c2Vcblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRjYWxsYmFjayhlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSk7XG5cdFx0fVxuXHR9XG5cblx0dG9BcnJheSAoKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0cmVzdWx0LnB1c2goZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGQgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogQ29sbGVjdGlvbkVudHJ5IHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKGVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRlbnRyaWVzW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0cmV0dXJuIGVudHJpZXNbaXRlbVR5cGVdW2NvbGxlY3Rpb25FbnRyeS5pZF0gPSBjb2xsZWN0aW9uRW50cnk7XG5cdH1cblxuXHRjbGVhciAoY29sbGVjdGlvbkVudHJ5PzogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGNvbGxlY3Rpb25FbnRyeSkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMuZW50cmllc1tjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdW2NvbGxlY3Rpb25FbnRyeS5pZF07XG5cdH1cblxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbZW50cnlJZF0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdG1hdGNoUGFyZW50IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHQvLyA9PSB0byBjb21wYXJlIGl0ZW1JZHNcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xuXHR9XG5cblx0Ly8gVE9ETzogdGhpbmsgb2YgYmV0dGVyIG5hbWVcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk6IENvbGxlY3Rpb25FbnRyeSB8IG51bGwge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGlmICh0aGlzLm1hdGNoUGFyZW50KGVudHJpZXNbZW50cnlJZF0sIHBhcmVudFR5cGUsIHBhcmVudElkKSlcblx0XHRcdFx0cmV0dXJuIGVudHJpZXNbZW50cnlJZF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXRSZXNvdXJjZUJ5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmdldEJ5UGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LmdldEN1cnJlbnRSZXNvdXJjZSgpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbnNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdO1xuXG5cdFx0XHRcdGlmICh0aGlzLm1hdGNoUGFyZW50KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50VHlwZSwgcGFyZW50SWQpKVxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBPbmx5IHJlc291cmNlc1xuXHQgKiBAcGFyYW0ge1N0cmluZ30gaXRlbVR5cGVcblx0ICogQHBhcmFtIHtTdHJpbmd8SW50ZWdlcn0gaXRlbUlkXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IEFycmF5IG9mIGNvbGxlY3Rpb25zLlxuXHQgKi9cblx0Z2V0QnlDb250YWluaW5nSXRlbSAoaXRlbVR5cGUsIGl0ZW1JZCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuZ2V0SXRlbUJ5SWQoaXRlbUlkKSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBhcnJheSBvZiBjb2xsZWN0aW9ucyB0aGUgaXRlbSAnYmVsb25ncycgaW4uXG5cdCAqL1xuXHRnZXRCeUZpdHRpbmdJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGZpZWxkczogRmllbGRNYXAsIHBhcmVudDogRW50cnlQYXJlbnROdWxsKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQgPSB7Zml0dGluZzogW10sIG5vdGZpdHRpbmc6IFtdLCBtYXliZTogW119O1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHQvLyBjb25zb2xlLnRpbWUoJ2dldEJ5Rml0dGluZ0l0ZW0nKTtcblxuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGZpZWxkcywgcGFyZW50KTtcblxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2VudHJ5SWRdO1xuXHRcdFx0Y29uc3QgbWF0Y2hSZXN1bHQgPSBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0KTtcblxuXHRcdFx0Ly8gVE9ETzogbWF5YmU/XG5cdFx0XHRpZiAobWF0Y2hSZXN1bHQgPT09IHRydWUpIC8vIG1pZ2h0IGFsc28gcmV0dXJuICdtYXliZSdcblx0XHRcdFx0cmVzdWx0LmZpdHRpbmcucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdFx0ZWxzZSBpZiAobWF0Y2hSZXN1bHQgPT09IENPTlNUQU5UUy5NQVlCRSlcblx0XHRcdFx0cmVzdWx0Lm1heWJlLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0cmVzdWx0Lm5vdGZpdHRpbmcucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH1cblxuXHRcdC8vIGNvbnNvbGUudGltZUVuZCgnZ2V0QnlGaXR0aW5nSXRlbScpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlLCBxdWVyeSk6IENvbGxlY3Rpb25FbnRyeSB8IG51bGwge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkucXVlcnkuc3RyaW5nID09PSBxdWVyeS5zdHJpbmcpXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXRCeUtleSAoaXRlbVR5cGUsIGVudHJ5S2V5KSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmVudHJ5S2V5ID09PSBlbnRyeUtleSlcblx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0UmVzb3VyY2VCeUtleSAoaXRlbVR5cGUsIHJlc291cmNlS2V5KSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VzID0gZW50cmllc1tlbnRyeUlkXS5yZXNvdXJjZXM7XG5cblx0XHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG5cdFx0XHRcdGlmIChyZXNvdXJjZS5vcHRpb25zLnJlc291cmNlS2V5ID09PSByZXNvdXJjZUtleSlcblx0XHRcdFx0XHRyZXN1bHQucHVzaChyZXNvdXJjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IFF1ZXJ5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlQYXJzZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0Ly8gbm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgY29sdW1ucyBwcm9wZXJ0eSwgaXQgd2lsbCBiZSByZXBsYWNlZCBpbiB3aGVuIGNvbHVtbnMgYXJlIGV4cGFuZGVkXG5cdGNsb25lT3B0aW9ucyAob3B0aW9ucywgcGFyZW50KSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTsgLy8gZG9lcyBhIHNoYWxsb3cgY29weVxuXG5cdFx0cmVzdWx0LnF1ZXJ5UGFyYW1zID0gdGhpcy5jbG9uZVF1ZXJ5UGFyYW1zKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXHRcdHJlc3VsdC5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y2xvbmVRdWVyeVBhcmFtcyAocGFyYW1ldGVycykge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcGFyYW1ldGVycykge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBwYXJhbWV0ZXJzW2tleV07XG5cdFx0XHRsZXQgY2xvbmU7XG5cblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZS5zbGljZSgpOyAvLyB3ZSdyZSBvbmx5IHVzaW5nIHByaW1pdGl2ZSBhcnJheXNcblx0XHRcdGVsc2UgaWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpXG5cdFx0XHRcdGNsb25lID0gdmFsdWUuY2xvbmUoKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZTtcblxuXHRcdFx0cmVzdWx0W2tleV0gPSBjbG9uZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdHtcblx0XHRcdFx0Y29sdW1uczogW10sXG5cdFx0XHRcdHF1ZXJ5OiBudWxsLFxuXHRcdFx0XHRxdWVyeUl0ZW1UeXBlOiBudWxsLFxuXHRcdFx0XHRxdWVyeVBhcmFtczoge30sXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZSxcblx0XHRcdFx0bGltaXQ6IG51bGwsXG5cdFx0XHRcdGVudHJ5S2V5OiAnJ1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRjcmVhdGVRdWVyeSAob3B0aW9ucykge1xuXHRcdGNvbnN0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0bGV0IHF1ZXJ5O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeTtcblx0XHRlbHNlIHtcblx0XHRcdGNvbnN0IGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHtpZDogJyZwYXJlbnRJZCd9fTtcblx0XHRcdG9wdGlvbnMucXVlcnlQYXJhbXMucGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xuXG5cdFx0XHRxdWVyeSA9IG9wdGlvbnMucXVlcnkgPT09IG51bGwgP1xuXHRcdFx0XHRsaW5rZWRUb1F1ZXJ5IDpcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKG9wdGlvbnMucXVlcnksIGxpbmtlZFRvUXVlcnkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KHF1ZXJ5LCBvcHRpb25zLnF1ZXJ5UGFyYW1zKS5wYXJzZSgpO1xuXG5cdFx0cmV0dXJuIHtvYmplY3Q6IHBhcnNlZFF1ZXJ5WzBdLCBzdHJpbmc6IHBhcnNlZFF1ZXJ5WzFdfTtcblx0fVxuXG5cdGdldElkQXJyYXkgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgYWNjdW11bGF0b3IpOiBJdGVtSWRbXSB7XG5cdFx0aWYgKGFjY3VtdWxhdG9yID09PSB1bmRlZmluZWQpXG5cdFx0XHRhY2N1bXVsYXRvciA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRhY2N1bXVsYXRvci5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXG5cdFx0cmV0dXJuIGFjY3VtdWxhdG9yO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7SXRlbUVudHJ5W119IGl0ZW1FbnRyaWVzXG5cdCAqIEBwYXJhbSB7KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFufSBjYWxsYmFja1xuXHQgKiBAcmV0dXJucyB7SXRlbUVudHJ5W119XG5cdCAqXG5cdCAqIGZpbHRlciBhbiBhcnJheSBhY2NvcmRpbmcgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBSZXR1cm4gdGhlIGVudHJpZXMgdGhhdCBmYWlsZWQgdGhlIGNvbmRpdGlvblxuXHQgKiBSZXBsYWNlIHRoZSBnaXZlbiBhcnJheSB3aXRoIHRoZSBlbnRyaWVzIHRoYXQgZGlkbid0IGZhaWwgdGhlIGNvbmRpdGlvbi5cblx0ICovXG5cdGZpbHRlckFycmF5IChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pIHtcblx0XHRjb25zdCBmaWx0ZXJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cdFx0Y29uc3QgcmVtb3ZlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdChjYWxsYmFjayhpdGVtRW50cnkpID8gZmlsdGVyZWRFbnRyaWVzIDogcmVtb3ZlZEVudHJpZXMpLnB1c2goaXRlbUVudHJ5KTtcblxuXHRcdGlmIChyZW1vdmVkRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XG5cblx0XHRpdGVtRW50cmllcy5sZW5ndGggPSBmaWx0ZXJlZEVudHJpZXMubGVuZ3RoO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtRW50cmllcy5sZW5ndGg7IGkrKylcblx0XHRcdGl0ZW1FbnRyaWVzW2ldID0gZmlsdGVyZWRFbnRyaWVzW2ldO1xuXG5cdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uLyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uQ2FjaGUsXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25NYXRjaGVyLFxuXHRDb2x1bW5FeHBhbnNpb24sXG5cdENvbHVtbkhhbmRsZXIsXG5cdENvbHVtblNldCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdFF1ZXJ5U2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LCBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIFF1ZXJ5UGFyc2VyRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXAsXG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRFbnRyeVBhcmVudCxcblx0RW50cnlTdGF0dXMsXG5cdEl0ZW1FbnRyeVBhcmVudElkTWFwLFxuXHRJdGVtSWQsXG5cdEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCxcblx0SXRlbVR5cGUsXG5cdFJlcXVlc3RDb2x1bW5cbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25IYW5kbGVyIHtcblx0ZW50cmllczogQ29sbGVjdGlvbkNhY2hlO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0XHR0aGlzLmVudHJpZXMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdH1cblxuXHRnZXRQcm9taXNlcyAoc3RhdHVzUmVzb3VyY2U6IENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwKSB7XG5cdFx0Y29uc3QgcHJvbWlzZWQgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUFJPTUlTRURdO1xuXHRcdGNvbnN0IHByb21pc2VkRXhwYW5kID0gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwcm9taXNlZClcblx0XHRcdHJlc3VsdC5wdXNoKHByb21pc2VkW3BhcmVudElkXSk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHByb21pc2VkRXhwYW5kKVxuXHRcdFx0cmVzdWx0LnB1c2gocHJvbWlzZWRFeHBhbmRbcGFyZW50SWRdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZXF1ZXN0SWRzIChzdGF0dXNSZXNvdXJjZSkge1xuXHRcdGNvbnN0IHJlc29sdmUgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUkVTT0xWRV07XG5cdFx0Y29uc3QgZXhwYW5kID0gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLkVYUEFORF07XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiByZXNvbHZlKVxuXHRcdFx0cmVzdWx0LnB1c2gocmVzb2x2ZVtwYXJlbnRJZF0ucGFyZW50Lml0ZW1JZCk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGV4cGFuZClcblx0XHRcdHJlc3VsdC5wdXNoKGV4cGFuZFtwYXJlbnRJZF0ucGFyZW50Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XG5cdCAqL1xuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8pIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeSA9IGVudHJ5LmNvbGxlY3Rpb247XG5cblx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoZW50cnkubm90Zml0dGluZywgbnVsbCwgdHJ1ZSk7XG5cdFx0XHRjb2xsZWN0aW9uLmFkZEl0ZW1zKGVudHJ5LmZpdHRpbmcsIG51bGwsIHRydWUpOyAvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxuXG5cdFx0XHRpZiAoZW50cnkubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblx0fVxuXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyICgpOiBDb2xsZWN0aW9uTWF0Y2hlciB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbdGhpcy5lbnRyaWVzXSwgdHJ1ZSwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0ICovXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8sIHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGZpdHRpbmcgPSBtYXBFbnRyeS5maXR0aW5nO1xuXHRcdFx0Y29uc3QgbWF5YmUgPSBtYXBFbnRyeS5tYXliZTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblx0XHRcdGNvbnN0IGlkQXJyYXk6IEl0ZW1JZFtdID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgZml0dGluZ0l0ZW0gb2YgZml0dGluZylcblx0XHRcdFx0aWRBcnJheS5wdXNoKGZpdHRpbmdJdGVtLml0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgbWF5YmVJdGVtIG9mIG1heWJlKVxuXHRcdFx0XHRpZEFycmF5LnB1c2gobWF5YmVJdGVtKTtcblxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCBudWxsLCB1cGRhdGVJbml0aWFsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Ly8gVE9ETzogbWF5YmUsIGJvb2xlYW4gaW5zdGVhZCBvZiBtZXNzYWdlXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxuXHQgKi9cblx0YWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbDogYm9vbGVhbiwgcmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKTogSXRlbVJlc291cmNlW10ge1xuXHRcdGxldCByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCBudWxsLCB1cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0aWYgKHVwZGF0ZUluaXRpYWwgJiYgbWFwRW50cnkubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGJhdGNoRXhwYW5kIChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZVtdLFxuXHRcdG5ld0NvbHVtbnM6IFJlcXVlc3RDb2x1bW5bXVxuXHQpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZVtdPiB7XG5cdFx0aWYgKG5ld0NvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjb2xsZWN0aW9ucyk7XG5cblx0XHRjb25zdCBwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXHRcdGxldCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdC8vIFRPRE86IGZpbHRlciBsb2NhbCBpdGVtcz9cblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbnMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeTtcblxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmRlZmVyKCk7XG5cblx0XHRcdHBhcmVudElkQXJyYXkucHVzaCgoPEVudHJ5UGFyZW50PiBjb2xsZWN0aW9uRW50cnkucGFyZW50KS5pdGVtSWQpO1xuXHRcdFx0aXRlbUVudHJpZXMgPSBpdGVtRW50cmllcy5jb25jYXQoY29sbGVjdGlvbkVudHJ5Lml0ZW1zKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRudWxsLFxuXHRcdFx0bmV3Q29sdW1uc1xuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0V4cGFuc2lvbihcblx0XHRcdFx0XHRuZXdDb2x1bW5zLFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xuXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4cGFuZENvbHVtbnMoY29sdW1uRXhwYW5zaW9uKTtcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuX3Jlc29sdmUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9ucztcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0YmF0Y2hFeHRlbmQgKFxuXHRcdHBhcmVudFR5cGU6IHN0cmluZyxcblx0XHRpdGVtVHlwZTogc3RyaW5nLFxuXHRcdG9wdGlvbnMsXG5cdFx0cXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvblJlc291cmNlW10sXG5cdFx0cmV0dXJuQWxsSXRlbXMgPSBmYWxzZVxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcD4ge1xuXHRcdGlmICghaGFzUHJvcGVydGllcyhjb2xsZWN0aW9ucykpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHt9KTtcblxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdID0gW107XG5cdFx0bGV0IGl0ZW1JZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IHF1ZXJ5Q2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKTtcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaCgoPEVudHJ5UGFyZW50PiBjb2xsZWN0aW9uRW50cnkucGFyZW50KS5pdGVtSWQpO1xuXG5cdFx0XHRpdGVtSWRBcnJheSA9IGl0ZW1JZEFycmF5LmNvbmNhdChjb2xsZWN0aW9uRW50cnkuZ2V0SWRBcnJheSgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKS5vYmplY3QsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKGl0ZW1JZEFycmF5KVxuXHRcdFx0KSxcblx0XHRcdG9wdGlvbnMuY29sdW1uc1xuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRwYXJlbnRJZEFycmF5LFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXTtcblx0XHRcdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmVudHJ5LmFkZEl0ZW1zKCAvLyBzaG91bGQgZ28gZmlyc3Rcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gcmV0dXJuQWxsSXRlbXMgPyBjb2xsZWN0aW9uUmVzb3VyY2UuaXRlbXMgOiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0YmF0Y2hGZXRjaCAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnMsXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA+IHtcblx0XHRjb25zdCByZXNvdXJjZSA9IHRoaXMuY3JlYXRlU3RhdHVzUmVzb3VyY2UocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIG9wdGlvbnMsIGxvY2FsQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwodGhpcy5nZXRQcm9taXNlcyhyZXNvdXJjZSkpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RJZHMgPSB0aGlzLmdldFJlcXVlc3RJZHMocmVzb3VyY2UpO1xuXG5cdFx0XHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRvcHRpb25zLnF1ZXJ5ID09PSBudWxsID9cblx0XHRcdFx0XHRcdFx0bnVsbCA6XG5cdFx0XHRcdFx0XHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LmNvbnN0cnVjdChvcHRpb25zLnF1ZXJ5LCBvcHRpb25zLnF1ZXJ5UGFyYW1zKS5wYXJzZSgpWzBdLFxuXHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zXG5cdFx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0xpbmtSZXNwb25zZShcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdHJlcXVlc3RJZHMsXG5cdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShyZXNvdXJjZSwgaXRlbUVudHJ5UmVzb3VyY2UsIGl0ZW1DYWNoZSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChoYXNQcm9wZXJ0aWVzKHJlc291cmNlW0VOVFJZX1NUQVRVUy5MT0NBTF0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKS50aGVuKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRpdGVtQ2FjaGVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc291cmNlW0VOVFJZX1NUQVRVUy5DQUNIRURdO1xuXG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZVN0YXR1c1Jlc291cmNlIChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0b3B0aW9ucyxcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcblx0KTogQ29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXAge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBzdGF0dXNJZCBpbiBFTlRSWV9TVEFUVVMpXG5cdFx0XHRyZXN1bHRbRU5UUllfU1RBVFVTW3N0YXR1c0lkXV0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNsb25lT3B0aW9ucyhcblx0XHRcdFx0b3B0aW9ucyxcblx0XHRcdFx0e2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfVxuXHRcdFx0KTtcblxuXHRcdFx0Y29uc3Qgc3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0ZW50cnlPcHRpb25zLFxuXHRcdFx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZSxcblx0XHRcdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGVcblx0XHRcdCk7XG5cblx0XHRcdHJlc3VsdFtzdGF0dXNSZXNvdXJjZS5zdGF0dXNdW3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLmVudHJ5O1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnMsXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3Qgc3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBsb2NhbENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xuXHRcdGNvbnN0IGVudHJ5ID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XG5cblx0XHRzd2l0Y2ggKHN0YXR1c1Jlc291cmNlLnN0YXR1cykge1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGVudHJ5KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORDpcblx0XHRcdFx0cmV0dXJuIGVudHJ5LmV4cGFuZChvcHRpb25zLmNvbHVtbnMpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4gZW50cnkuX3Jlc29sdmUoKSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4gZW50cnkuZGVmZXIoKS5leHBhbmQob3B0aW9ucy5jb2x1bW5zKSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiBlbnRyeS5fcmVzb2x2ZSgpLFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkxPQ0FMOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoZW50cnksIGl0ZW1DYWNoZSk7XG5cdFx0XHRkZWZhdWx0OiAvLyBjYXNlIEVOVFJZX1NUQVRVUy5SRVNPTFZFOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlUmVtb3RlKGVudHJ5LCBpdGVtQ2FjaGUpO1xuXHRcdH1cblx0fVxuXG5cdGdldENhY2hlZEVudHJ5U3RhdHVzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IEVOVFJZX1NUQVRVUyB7XG5cdFx0aWYgKCFjb2xsZWN0aW9uRW50cnkuY29sdW1ucy5pc1N1cGVyc2V0T2Yob3B0aW9ucy5jb2x1bW5zKSkge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5FWFBBTkQ7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlBST01JU0VEO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQpIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQgPSBmYWxzZTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xuXHRcdH1cblxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXHR9XG5cblx0Z2V0RGVmZXJyZWRFbnRyeVN0YXR1cyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnMsXG5cdFx0cXVlcnksXG5cdFx0ZGVmZXJyZWRFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGVcblx0KToge2VudHJ5OiBDb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGJvb2xlYW59IHtcblx0XHRsZXQgY29sbGVjdGlvbkVudHJ5O1xuXG5cdFx0aWYgKCFvcHRpb25zLmRlZmVyUmVxdWVzdCkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucyk7XG5cblx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogZmFsc2V9O1xuXHRcdH1cblxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IGRlZmVycmVkRW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kUmVxdWVzdENvbHVtbnMob3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBmYWxzZX07XG5cdFx0fVxuXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucyk7XG5cblx0XHRyZXR1cm4ge2VudHJ5OiBkZWZlcnJlZEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSksIGlzRGVmZXJyZWQ6IHRydWV9O1xuXHR9XG5cblx0Z2V0RW50cnlTdGF0dXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zLFxuXHRcdGxvY2FsRW50cmllczogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdGRlZmVycmVkRW50cmllczogQ29sbGVjdGlvbkNhY2hlXG5cdCk6IEVudHJ5U3RhdHVzPENvbGxlY3Rpb25FbnRyeT4ge1xuXHRcdGNvbnN0IHF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHRcdGxldCBjb2xsZWN0aW9uRW50cnk7XG5cdFx0bGV0IGlzRGVmZXJyZWQ7XG5cblx0XHRpZiAodGhpcy5pc0xvY2FsKG9wdGlvbnMpKSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPSBsb2NhbEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKVxuXHRcdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpfTtcblxuXHRcdFx0KHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkfSA9IHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgcXVlcnksIGRlZmVycmVkRW50cmllcykpO1xuXG5cdFx0XHRpZiAoaXNEZWZlcnJlZClcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRH07XG5cblx0XHRcdC8vIG5ldyBsb2NhbCBlbnRyeSBjcmVhdGVkLCBzaG91bGQgYmUgYWRkZWQgdG8gbG9jYWwgY2FjaGUgb25seVxuXHRcdFx0cmV0dXJuIHtlbnRyeTogbG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5MT0NBTH07XG5cdFx0fVxuXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcblxuXHRcdC8vIGVudHJ5IGFscmVhZHkgZXhpc3RzIGluIGdsb2JhbCBjYWNoZSwgYWRkIHRvIGxvY2FsIGNhY2hlXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGVudHJ5OiBsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSksXG5cdFx0XHRcdHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpXG5cdFx0XHR9O1xuXG5cdFx0KHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkfSA9IHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgcXVlcnksIGRlZmVycmVkRW50cmllcykpO1xuXG5cdFx0aWYgKGlzRGVmZXJyZWQpXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlBST01JU0VEfTtcblxuXHRcdC8vIG5ldyBnbG9iYWwgZW50cnkgY3JlYXRlZCwgYWRkIHRvIGJvdGggbG9jYWwgYW5kIGdsb2JhbCBjYWNoZVxuXHRcdGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblx0XHR0aGlzLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cblx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlJFU09MVkV9O1xuXHR9XG5cblx0aGFuZGxlQmF0Y2hSZXNwb25zZSAoXG5cdFx0c3RhdHVzUmVzb3VyY2UsXG5cdFx0aXRlbUVudHJ5Q29tcG91bmQ6IHtcblx0XHRcdGNvbHVtbnM6IENvbHVtblNldCxcblx0XHRcdGNvbHVtbkV4cGFuc2lvbj86IENvbHVtbkV4cGFuc2lvbixcblx0XHRcdGl0ZW1zPzogSXRlbUVudHJ5UGFyZW50SWRNYXBcblx0XHR9LFxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UuY2FjaGVkKVxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLmNhY2hlZFtwYXJlbnRJZF07XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLnJlc29sdmUpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHN0YXR1c1Jlc291cmNlLnJlc29sdmVbcGFyZW50SWRdO1xuXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpdGVtczogKDxJdGVtRW50cnlQYXJlbnRJZE1hcD4gaXRlbUVudHJ5Q29tcG91bmQuaXRlbXMpW3BhcmVudElkXVxuXHRcdFx0XHRcdFx0LmNvbmNhdChpdGVtQ2FjaGUuZ2V0TG9jYWxCeVF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSksXG5cdFx0XHRcdFx0Y29sdW1uczogaXRlbUVudHJ5Q29tcG91bmQuY29sdW1uc1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UuZXhwYW5kKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IHN0YXR1c1Jlc291cmNlLmV4cGFuZFtwYXJlbnRJZF07XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHBhbmRDb2x1bW5zKDxDb2x1bW5FeHBhbnNpb24+IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbkV4cGFuc2lvbik7XG5cblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnkuX3Jlc29sdmUoKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLmxvY2FsKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IHN0YXR1c1Jlc291cmNlLmxvY2FsW3BhcmVudElkXTtcblxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aXRlbXM6IGl0ZW1DYWNoZS5nZXRCeVF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSxcblx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zXG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJlc29sdmVMb2NhbCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnM7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykudGhlbihcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpdGVtczogaXRlbUNhY2hlLmdldEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zLCBmYWxzZSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVSZW1vdGUgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XG5cblx0XHRsZXQgY29sdW1uU2V0O1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhjb2xsZWN0aW9uRW50cnkpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1ucyxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQsXG5cdFx0XHRcdFx0Y29sdW1uU2V0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aXRlbXM6IGl0ZW1FbnRyaWVzLmNvbmNhdChpdGVtQ2FjaGUuZ2V0TG9jYWxCeVF1ZXJ5KGl0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkucXVlcnkpKSxcblx0XHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtblNldFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0aXNMb2NhbCAob3B0aW9ucykge1xuXHRcdGNvbnN0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBpZGVudGl0eSwgSXRlbUlkIH0gZnJvbSAnLi4vJztcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcy8nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25NYXRjaGVyIHtcblx0bWFwOiB7XG5cdFx0W2NvbGxlY3Rpb25FbnRyeUlkOiBudW1iZXJdOiB7XG5cdFx0XHRjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnlcblx0XHRcdG1hdGNoZXM6IHtcblx0XHRcdFx0W2l0ZW1JZDogbnVtYmVyXTogeyBpdGVtOiBJdGVtRW50cnksIGlzTWF0Y2g6IGJvb2xlYW4gfVxuXHRcdFx0fVxuXHRcdH1cblx0fSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVzOiBDb2xsZWN0aW9uQ2FjaGVbXSxcblx0XHRwcml2YXRlIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sXG5cdFx0cHJpdmF0ZSBjYWxsT25BY3RpdmF0ZTogYm9vbGVhblxuXHQpIHtcblxuXHR9XG5cblx0ZXhwYW5kIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgcXVlcnlNYXRjaGVyID0gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnRcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uQ2FjaGUgb2YgdGhpcy5jb2xsZWN0aW9uQ2FjaGVzKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cmllcyA9IGNvbGxlY3Rpb25DYWNoZS5nZXRCeUl0ZW1UeXBlKGl0ZW1FbnRyeS5pdGVtVHlwZSk7XG5cblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5ICBvZiBjb2xsZWN0aW9uRW50cmllcykge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnlJZCA9IGNvbGxlY3Rpb25FbnRyeS5pZDtcblx0XHRcdFx0bGV0IG1hdGNoZXM7XG5cblx0XHRcdFx0aWYgKHRoaXMubWFwW2NvbGxlY3Rpb25FbnRyeUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHRoaXMubWFwW2NvbGxlY3Rpb25FbnRyeUlkXSA9IHsgY29sbGVjdGlvbjogY29sbGVjdGlvbkVudHJ5LCBtYXRjaGVzOiB7fSB9O1xuXG5cdFx0XHRcdG1hdGNoZXMgPSB0aGlzLm1hcFtjb2xsZWN0aW9uRW50cnlJZF0ubWF0Y2hlcztcblxuXHRcdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0bWF0Y2hlc1tpdGVtSWRdID0ge1xuXHRcdFx0XHRcdGl0ZW06IGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRpc01hdGNoOiBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0KVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zICgpIHtcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xuXG5cdFx0XHRpZiAodGhpcy5oYXNGaXR0aW5nSXRlbXMobWFwRW50cnkubWF0Y2hlcykpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKG1hcEVudHJ5LmNvbGxlY3Rpb24pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGRUb0NvbGxlY3Rpb25zIChyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpIHtcblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XG5cdFx0XHRjb25zdCBmaXR0aW5nSXRlbUVudHJpZXMgPSBncm91cGVkSXRlbUVudHJpZXMuZml0dGluZztcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSkge1xuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0XHRcdHRoaXMudXBkYXRlSW5pdGlhbCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWN0aXZhdGVcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhcblx0XHRcdFx0XHRmaXR0aW5nSXRlbUVudHJpZXMsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUluaXRpYWwsXG5cdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFjdGl2YXRlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnVwZGF0ZUluaXRpYWwgJiYgZ3JvdXBlZEl0ZW1FbnRyaWVzLm1heWJlLmxlbmd0aCA+IDApXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHRoaXMudXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAocmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKSB7XG5cdFx0bGV0IHJlc3VsdDogSXRlbVJlc291cmNlW10gfCBudWxsID0gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xuXHRcdFx0Y29uc3QgZml0dGluZ0l0ZW1JZHMgPSB0aGlzLmdyb3VwSXRlbUlkcyhtYXBFbnRyeS5tYXRjaGVzKS5maXR0aW5nO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgPT09IG51bGwgfHwgY29sbGVjdGlvbkVudHJ5ICE9PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCByZXN1bHRSZXNvdXJjZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoKSB7XG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhncm91cGVkSXRlbUVudHJpZXMubm90Rml0dGluZywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0Ly8gZG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIGluaXRpYWxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhncm91cGVkSXRlbUVudHJpZXMuZml0dGluZywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0aWYgKGdyb3VwZWRJdGVtRW50cmllcy5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ3JvdXBJdGVtRW50cmllcyAobWF0Y2hlcykge1xuXHRcdGNvbnN0IGZpdHRpbmc6IEl0ZW1FbnRyeVtdID0gW107XG5cdFx0Y29uc3Qgbm90Rml0dGluZzogSXRlbUlkW10gPSBbXTtcblx0XHRjb25zdCBtYXliZTogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcblx0XHRcdGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gbWF0Y2guaXRlbTtcblx0XHRcdGNvbnN0IGlzTWF0Y2ggPSBtYXRjaC5pc01hdGNoO1xuXG5cdFx0XHRpZiAoaXNNYXRjaCA9PT0gdHJ1ZSlcblx0XHRcdFx0Zml0dGluZy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRlbHNlIGlmIChpc01hdGNoID09PSBmYWxzZSlcblx0XHRcdFx0bm90Rml0dGluZy5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRtYXliZS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgZml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZywgbWF5YmU6IG1heWJlIH07XG5cdH1cblxuXHRwcml2YXRlIGdyb3VwSXRlbUlkcyAobWF0Y2hlcykge1xuXHRcdC8vIGFsc28gaW5jbHVkZXMgJ21heWJlJztcblx0XHRjb25zdCBmaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xuXHRcdGNvbnN0IG5vdEZpdHRpbmc6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcblxuXHRcdFx0KG1hdGNoLmlzTWF0Y2ggPT09IGZhbHNlID8gbm90Rml0dGluZyA6IGZpdHRpbmcpLnB1c2gobWF0Y2guaXRlbS5pdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7IGZpdHRpbmc6IGZpdHRpbmcsIG5vdEZpdHRpbmc6IG5vdEZpdHRpbmcgfTtcblx0fVxuXG5cdHByaXZhdGUgaGFzRml0dGluZ0l0ZW1zIChtYXRjaGVzKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xuXHRcdFx0aWYgKG1hdGNoZXNbaXRlbUlkXS5pc01hdGNoID09PSB0cnVlKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8nO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2Uge1xuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXG5cdFx0XHRvcHRpb25zLFxuXHRcdFx0e1xuXHRcdFx0XHRlZGl0SXRlbXM6IGZhbHNlLFxuXHRcdFx0XHRlZGl0Q29sbGVjdGlvbjogZmFsc2UsXG5cdFx0XHRcdG1vZEluc3RhbnQ6IGZhbHNlLFxuXHRcdFx0XHRlbmFibGVTYXZlOiB0cnVlLFxuXHRcdFx0XHRvbkl0ZW1zQ3JlYXRlZDogbm9vcCxcblx0XHRcdFx0b25DaGFuZ2U6IG5vb3AsIC8vIG5lZWRlZCBmb3IgY29tcGFyaXNvblxuXHRcdFx0XHRvbkFkZDogbm9vcCxcblx0XHRcdFx0b25SZW1vdmU6IG5vb3AsXG5cdFx0XHRcdG9uQWRkSW5pdGlhbDogbm9vcCxcblx0XHRcdFx0b25SZW1vdmVJbml0aWFsOiBub29wLFxuXHRcdFx0XHRyZXNvdXJjZUtleTogbnVsbCwgLy8gVE9ETzogcmVtb3ZlXG5cdFx0XHRcdGNsZWFyT25UYWJDaGFuZ2U6IHRydWUsXG5cdFx0XHRcdGNsZWFyT25TdWJUYWJDaGFuZ2U6IHRydWUsXG5cdFx0XHRcdGN1c3RvbTogbnVsbFxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRnZXRJZEFycmF5IChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSkge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1UeXBlLCBSZXF1ZXN0Q29sdW1uLCBSZXF1ZXN0Q29sdW1ucywgUmVzcG9uc2VDb2x1bW4sIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uQ2FjaGUge1xuXHRjYWNoZTogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblx0YWxsQ29sdW1uczoge1tpdGVtVHlwZTogc3RyaW5nXTogYm9vbGVhbn0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0c2V0Q29sdW1uIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uOiBSZXNwb25zZUNvbHVtbikge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRcdGlmIChjYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGNhY2hlW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0Y29uc3QgZW50cnkgPSBjYWNoZVtpdGVtVHlwZV07XG5cdFx0Y29uc3QgY29sdW1uSWQgPSByZXNwb25zZUNvbHVtbi5pZDtcblxuXHRcdGlmIChlbnRyeVtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdGVudHJ5W2NvbHVtbklkXSA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0cmV0dXJuIGVudHJ5W2NvbHVtbklkXTtcblx0fVxuXG5cdHNldENvbHVtbnMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiBSZXNwb25zZUNvbHVtbk1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHJlc3BvbnNlVHlwZSBpbiByZXNwb25zZUNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbnMgPSByZXNwb25zZUNvbHVtbnNbcmVzcG9uc2VUeXBlXTtcblxuXHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxuXHRcdFx0XHRyZXN1bHRbcmVzcG9uc2VUeXBlXVtjb2x1bW5JZF0gPSB0aGlzLnNldENvbHVtbihyZXNwb25zZVR5cGUsIGNvbHVtbnNbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpXG5cdFx0XHR0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID0gdHJ1ZTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZXRyaWV2ZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1uc1xuXHQpOiB7Y2FjaGVkOiBSZXNwb25zZUNvbHVtbk1hcCwgbWlzc2luZzogUmVxdWVzdENvbHVtbnN9IHtcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcblx0XHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHRoaXMuZ2V0Q29sdW1ucyhpdGVtVHlwZSksIG1pc3Npbmc6IFtdfTtcblxuXHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHt9LCBtaXNzaW5nOiB0cnVlfTtcblx0XHR9XG5cblx0XHRjb25zdCByZXNwb25zZUFjY3VtdWxhdG9yID0ge307XG5cdFx0Y29uc3QgcmVxdWVzdEFjY3VtdWxhdG9yID0gW107XG5cblx0XHR0aGlzLnJldHJpZXZlQ29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cblx0XHRyZXR1cm4ge2NhY2hlZDogcmVzcG9uc2VBY2N1bXVsYXRvciwgbWlzc2luZzogcmVxdWVzdEFjY3VtdWxhdG9yfTtcblx0fVxuXG5cdGNvbnRhaW5zQWxsIChpdGVtVHlwZTogSXRlbVR5cGUpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9PT0gdHJ1ZTtcblx0fVxuXG5cdGdldENvbHVtbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IFJlc3BvbnNlQ29sdW1uTWFwIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0XHRyZXR1cm4ge1tpdGVtVHlwZV06IGNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkID8gW10gOiBjYWNoZVtpdGVtVHlwZV19O1xuXHR9XG5cblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbnMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbltdLFxuXHRcdHJlcXVlc3RBY2N1bXVsYXRvcjogUmVxdWVzdENvbHVtbltdLFxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IHZvaWQge1xuXHRcdC8vIGFsd2F5cyByZXRyaWV2ZSB0aGUgaWQgY29sdW1uXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgJ2lkJywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucylcblx0XHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW4sIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cdH1cblxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1uIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbjogUmVxdWVzdENvbHVtbixcblx0XHRyZXF1ZXN0QWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uW10sXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcjogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5VdGlsLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uKGl0ZW1UeXBlLCBjb2x1bW4uaWQpO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKHJlcXVlc3RDb2x1bW4pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdW2NvbHVtbi5pZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y29uc3QgbWlzc2luZ0Rlcml2ZWQgPSBbXTtcblxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW5zKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjb2x1bW4uY2hpbGRyZW4sIG1pc3NpbmdEZXJpdmVkLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblxuXHRcdGlmIChtaXNzaW5nRGVyaXZlZC5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHRyZXF1ZXN0QWNjdW11bGF0b3IucHVzaCh7W2NvbHVtbi5pZF06IG1pc3NpbmdEZXJpdmVkfSk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbHVtbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5JZDogc3RyaW5nKTogUmVzcG9uc2VDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZVtpdGVtVHlwZV07XG5cblx0XHRpZiAoY2FjaGUgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdHJldHVybiBjYWNoZVtjb2x1bW5JZF07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblNldCwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uUmVzdWx0LCBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbiwgUmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uIHtcblx0ZXhwYW5zaW9uTWFwOiB7W2NvbHVtblNldElkOiBudW1iZXJdOiBDb2x1bW5FeHBhbnNpb25SZXN1bHR9ID0ge307XG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcblx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5bXTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLFxuXHRcdHB1YmxpYyByZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCkge1xuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gcmVxdWVzdENvbHVtbnMgc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheSwgd2hlbiBpdCBpcyB0cnVlIGRlcml2ZWQgY29sdW1uIGluZm9ybWF0aW9uIHdpbGwgYmUgbG9zdFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0cnVlO1xuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMucHVzaChjb2x1bW5JZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gZmFsc2U7XG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zID0gcmVxdWVzdENvbHVtbnM7XG5cdFx0fVxuXHR9XG5cblx0cnVuIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IENvbHVtbkV4cGFuc2lvblJlc3VsdCB8IG51bGwge1xuXHRcdGNvbnN0IGNvbHVtblNldElkID0gY29sdW1uU2V0LmlkO1xuXG5cdFx0aWYgKHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXTtcblxuXHRcdGNvbnN0IGlzQ29sdW1uU3Vic2V0ID0gdGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyxcblx0XHRcdGNvbHVtblNldC5yZXF1ZXN0LFxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZVxuXHRcdCk7XG5cblx0XHRpZiAoaXNDb2x1bW5TdWJzZXQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSA9IGNvbHVtblNldC5leHBhbmQoXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUsXG5cdFx0XHR0aGlzLnJlc3BvbnNlQ29sdW1uc1xuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5leHBhbnNpb25NYXBbY29sdW1uU2V0SWRdO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5DYWNoZSwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zLCBSZXNwb25zZUNvbHVtbiwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5IYW5kbGVyIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGNhY2hlOiBDb2x1bW5DYWNoZSxcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRzZXRDb2x1bW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogUmVzcG9uc2VDb2x1bW4ge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbihpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pO1xuXHR9XG5cblx0c2V0Q29sdW1ucyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IFJlc3BvbnNlQ29sdW1uTWFwIHtcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0fVxuXG5cdGZldGNoSXRlbVR5cGVUcmFuc2xhdGlvbnMgKGl0ZW1UeXBlczogSXRlbVR5cGVbXSk6IFByb21pc2U8e1tpdGVtVHlwZTogc3RyaW5nXTogc3RyaW5nfT4ge1xuXHRcdGNvbnN0IHByb21pc2VzOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBQcm9taXNlPFJlc3BvbnNlQ29sdW1uTWFwPn0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKVxuXHRcdFx0cHJvbWlzZXNbaXRlbVR5cGVdID0gdGhpcy5mZXRjaChpdGVtVHlwZSwgWydpZCddKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcylcblx0XHRcdC50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHJlc3BvbnNlKVxuXHRcdFx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHJlc3BvbnNlW2l0ZW1UeXBlXVtpdGVtVHlwZV0uaWQubmFtZTtcblxuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0fVxuXG5cdHJlcXVlc3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sdW1uczogUmVxdWVzdENvbHVtbnMsIHBhcmFtcyA9IHtmaWx0ZXI6IGZhbHNlfSk6IFByb21pc2U8UmVzcG9uc2VDb2x1bW5NYXA+IHtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtbaXRlbVR5cGVdOiBjb2x1bW5zfTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCBwYXJhbXMpLnRoZW4oXG5cdFx0XHRjb2x1bW5SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0Y29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsIHBhcmFtcz8pOiBQcm9taXNlPFJlc3BvbnNlQ29sdW1uTWFwPiB7XG5cdFx0Y29uc3QgY29sdW1uUmVzb3VyY2UgPSB0aGlzLmNhY2hlLnJldHJpZXZlKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk7XG5cblx0XHRpZiAoY29sdW1uUmVzb3VyY2UubWlzc2luZyAhPT0gdHJ1ZSAmJiBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sdW1uUmVzb3VyY2UuY2FjaGVkKTtcblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIGNvbHVtblJlc291cmNlLm1pc3NpbmcsIHBhcmFtcykudGhlbihcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMoXG5cdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0XHRcdGNvbHVtblJlc291cmNlLmNhY2hlZFxuXHRcdFx0XHQpLm1lcmdlZDtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0ZmV0Y2hBbGwgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IFByb21pc2U8UmVzcG9uc2VDb2x1bW5NYXA+IHtcblx0XHRpZiAodGhpcy5jYWNoZS5jb250YWluc0FsbChpdGVtVHlwZSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMuY2FjaGUuZ2V0Q29sdW1ucyhpdGVtVHlwZSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdChpdGVtVHlwZSwgdHJ1ZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENPTFVNTl9TRVBFUkFUT1IgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mbyB7XG5cdGlkOiBzdHJpbmc7XG5cdGxldmVsOiBudW1iZXI7XG5cdHBhdGg6IHN0cmluZztcblx0dGFpbFBhdGg6IHN0cmluZztcblx0aXRlbVR5cGU6IHN0cmluZyA9ICcnO1xuXHRjaGlsZHJlbjogQ29sdW1uSW5mb1tdID0gW107XG5cdGlzTGVhZjogYm9vbGVhbiA9IHRydWU7XG5cblx0Y29uc3RydWN0b3IgKHJlYWRvbmx5IGFwaUNvbHVtbjogYW55LCByZWFkb25seSBwYXJlbnQ6IENvbHVtbkluZm8gfCBudWxsID0gbnVsbCkge1xuXHRcdGNvbnN0IGNvbHVtbklkID0gYXBpQ29sdW1uLmlkO1xuXG5cdFx0dGhpcy5pZCA9IGNvbHVtbklkO1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy5sZXZlbCA9IDA7XG5cdFx0XHR0aGlzLnBhdGggPSBjb2x1bW5JZDtcblx0XHRcdHRoaXMudGFpbFBhdGggPSAnJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5sZXZlbCA9IHBhcmVudC5sZXZlbCArIDE7XG5cdFx0XHR0aGlzLnBhdGggPSBwYXJlbnQucGF0aCArIENPTFVNTl9TRVBFUkFUT1IgKyBjb2x1bW5JZDtcblx0XHRcdHRoaXMudGFpbFBhdGggPSBwYXJlbnQubGV2ZWwgPT09IDAgP1xuXHRcdFx0XHRjb2x1bW5JZCA6XG5cdFx0XHRcdHBhcmVudC50YWlsUGF0aCArIENPTFVNTl9TRVBFUkFUT1IgKyBjb2x1bW5JZDtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkhhbmRsZXIsIENvbHVtbkluZm8sIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvblJlc3VsdCwgUmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBlbXB0eU9iamVjdCA9IHt9O1xubGV0IGN1cnJlbnRJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXQge1xuXHRpZCA9ICsrY3VycmVudElkO1xuXG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcblx0cmVzcG9uc2U6IFJlc3BvbnNlQ29sdW1uTWFwID0gZW1wdHlPYmplY3Q7XG5cblx0bGluazogQ29sdW1uSW5mbyB8IG51bGwgPSBudWxsO1xuXHRtYWluOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0ZGVyaXZlZDogQ29sdW1uSW5mb1tdID0gW107XG5cdHJvb3Q6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRsZWFmOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0Zm9ybWF0dGVkOiB7IG1haW46IENvbHVtbkluZm9bXSwgZGVyaXZlZDogQ29sdW1uSW5mb1tdIH0gPSB7IG1haW46IFtdLCBkZXJpdmVkOiBbXSB9O1xuXHRmaWx0ZXJlZDogQ29sdW1uSW5mb1tdID0gW107XG5cdGN1c3RvbTogQ29sdW1uSW5mb1tdID0gW107XG5cdHNlYXJjaGFibGU6IENvbHVtbkluZm9bXSA9IFtdO1xuXHRpdGVtOiBDb2x1bW5JbmZvW10gPSBbXTtcblx0bm90SXRlbTogQ29sdW1uSW5mb1tdID0gW107XG5cblx0ZW5hYmxlQ2FjaGluZzogYm9vbGVhbjtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHVibGljIGl0ZW1UeXBlLFxuXHRcdHB1YmxpYyByZXF1ZXN0OiBSZXF1ZXN0Q29sdW1ucyxcblx0KSB7XG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0aGlzLnJlcXVlc3QgPT09IHRydWU7XG5cdH1cblxuXHR0b0pTT04gKCkge1xuXHRcdGNvbnN0IHBhcnNlQ29sdW1ucyA9IChjb2x1bW5zOiBDb2x1bW5JbmZvW10pID0+IGNvbHVtbnMubWFwKGMgPT4gYy5pZCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bWFpbjogcGFyc2VDb2x1bW5zKHRoaXMubWFpbiksXG5cdFx0XHRkZXJpdmVkOiBwYXJzZUNvbHVtbnModGhpcy5kZXJpdmVkKVxuXHRcdH07XG5cdH1cblxuXHRyZXNvbHZlIChyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLCBlbmFibGVDYWNoaW5nID0gdHJ1ZSwgaW5jbHVkZUlkQ29sdW1uID0gdHJ1ZSk6IHRoaXMge1xuXHRcdHRoaXMuZW5hYmxlQ2FjaGluZyA9IGVuYWJsZUNhY2hpbmc7XG5cblx0XHRpZiAodGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUpXG5cdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZUNvbHVtbnMocmVzcG9uc2VDb2x1bW5zKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLnByb2Nlc3NSZXF1ZXN0Q29sdW1ucyhyZXNwb25zZUNvbHVtbnMsIGluY2x1ZGVJZENvbHVtbik7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGV4cGFuZFJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xuXHRcdGNvbnN0IG1lcmdlZFJlcXVlc3RDb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5yZXF1ZXN0LCBjb2x1bW5zKS5tZXJnZWQ7XG5cblx0XHR0aGlzLnJlcXVlc3QgPSBtZXJnZWRSZXF1ZXN0Q29sdW1ucztcblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IG1lcmdlZFJlcXVlc3RDb2x1bW5zID09PSB0cnVlO1xuXHR9XG5cblx0aXNTdXBlcnNldE9mIChjb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwuaXNDb2x1bW5TdWJzZXQoY29sdW1ucywgdGhpcy5yZXF1ZXN0LCB0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSk7XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NSZXNwb25zZUNvbHVtbnMgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXApIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XG5cblx0XHR0aGlzLnJlcXVlc3QgPSBbXTtcblx0XHR0aGlzLnJlc3BvbnNlID0gdGhpcy5lbmFibGVDYWNoaW5nID9cblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5zZXRDb2x1bW5zKHRoaXMuaXRlbVR5cGUsIHRydWUsIHJlc3BvbnNlQ29sdW1ucykgOlxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdKSB7XG5cdFx0XHR0aGlzLm1haW4ucHVzaCh0aGlzLmdldENvbHVtbkluZm8oY29sdW1uSWQsIGl0ZW1UeXBlLCBbXSwgbnVsbCwgcmVzcG9uc2VDb2x1bW5zKSk7XG5cdFx0XHR0aGlzLnJlcXVlc3QucHVzaChjb2x1bW5JZCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzUmVxdWVzdENvbHVtbnMgKHJlc3BvbnNlQ29sdW1ucywgaW5jbHVkZUlkQ29sdW1uKSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gPG9iamVjdFtdPiB0aGlzLnJlcXVlc3Q7IC8vIHdlIGNhbiBhc3N1bWUgcmVxdWVzdENvbHVtbnMgaXMgYW4gYXJyYXkgaGVyZVxuXG5cdFx0dGhpcy5yZXNwb25zZSA9IHt9O1xuXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8ocmVxdWVzdENvbHVtbiwgaXRlbVR5cGUsIG51bGwsIHJlc3BvbnNlQ29sdW1ucyk7XG5cblx0XHRcdGlmIChjb2x1bW5JbmZvID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5tYWluLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRcdGlmICghY29sdW1uSW5mby5pc0xlYWYpXG5cdFx0XHRcdHRoaXMucm9vdC5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblxuXHRcdGlmIChpbmNsdWRlSWRDb2x1bW4gJiYgdGhpcy5yZXNwb25zZVtpdGVtVHlwZV0uaWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8oJ2lkJywgaXRlbVR5cGUsIG51bGwsIHJlc3BvbnNlQ29sdW1ucyk7XG5cblx0XHRcdGlmIChjb2x1bW5JbmZvICE9PSBudWxsKVxuXHRcdFx0XHR0aGlzLm1haW4ucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldFJlcXVlc3RDb2x1bW5JbmZvIChyZXF1ZXN0Q29sdW1uLCBpdGVtVHlwZSwgcGFyZW50LCByZXNwb25zZUNvbHVtbnMpIHtcblx0XHRjb25zdCBwYXJzZWRDb2x1bW4gPSB0aGlzLmNvbHVtblV0aWwucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IGNvbHVtbklkID0gcGFyc2VkQ29sdW1uLmlkO1xuXG5cdFx0bGV0IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cblx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdObyBhcGkgY29sdW1uIGZvciByZXF1ZXN0IGNvbHVtbicsIGNvbHVtbklkLCAnZm9yIGl0ZW1UeXBlJywgaXRlbVR5cGUpO1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5lbmFibGVDYWNoaW5nKVxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSB0aGlzLmNvbHVtbkhhbmRsZXIuc2V0Q29sdW1uKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbik7XG5cblx0XHRjb25zdCByZXN1bHRSZXNwb25zZSA9IHRoaXMucmVzcG9uc2U7XG5cblx0XHRpZiAocmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGlmIChyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV1bY29sdW1uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV1bY29sdW1uSWRdID0gcmVzcG9uc2VDb2x1bW47XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRDb2x1bW5JbmZvKGNvbHVtbklkLCBpdGVtVHlwZSwgcGFyc2VkQ29sdW1uLmNoaWxkcmVuLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbHVtbkluZm8gKGNvbHVtbklkLCBpdGVtVHlwZSwgY2hpbGRyZW4sIHBhcmVudCwgcmVzcG9uc2VDb2x1bW5zKTogQ29sdW1uSW5mbyB7XG5cdFx0Y29uc3QgY29sdW1uVXRpbCA9IHRoaXMuY29sdW1uVXRpbDtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbiA9IHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV1bY29sdW1uSWRdO1xuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtbkluZm9GYWN0b3J5LmNvbnN0cnVjdChyZXNwb25zZUNvbHVtbiwgcGFyZW50KTtcblx0XHRjb25zdCBpc0Rlcml2ZWQgPSBwYXJlbnQgIT09IG51bGw7XG5cblx0XHRpZiAoaXNEZXJpdmVkKVxuXHRcdFx0dGhpcy5kZXJpdmVkLnB1c2goY29sdW1uSW5mbyk7XG5cdFx0ZWxzZSAvLyB3ZSBjb3VsZCBwb3NzaWJseSBhZGQgZGVyaXZlZCBjb2x1bW5zIHRvICdub3RJdGVtJ1xuXHRcdFx0dGhpc1tjb2x1bW5VdGlsLmlzSXRlbUNvbHVtbihyZXNwb25zZUNvbHVtbikgPyAnaXRlbScgOiAnbm90SXRlbSddLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAoY29sdW1uVXRpbC5pc0Zvcm1hdHRlZENvbHVtbihyZXNwb25zZUNvbHVtbikpXG5cdFx0XHR0aGlzLmZvcm1hdHRlZFtpc0Rlcml2ZWQgPyAnZGVyaXZlZCcgOiAnbWFpbiddLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAoY29sdW1uVXRpbC5pc0ZpbHRlcmVkQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuZmlsdGVyZWQucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzU2VhcmNoYWJsZUNvbHVtbihyZXNwb25zZUNvbHVtbikpXG5cdFx0XHR0aGlzLnNlYXJjaGFibGUucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzQ3VzdG9tQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuY3VzdG9tLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRpZiAocmVzcG9uc2VDb2x1bW4udHlwZSA9PT0gJ2xpbmsnKVxuXHRcdFx0dGhpcy5saW5rID0gY29sdW1uSW5mbztcblxuXHRcdGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMubGVhZi5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0XHRyZXR1cm4gY29sdW1uSW5mbztcblx0XHR9XG5cblx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlID0gcmVzcG9uc2VDb2x1bW4uaXRlbVR5cGU7XG5cdFx0Y29sdW1uSW5mby5jaGlsZHJlbiA9IFtdO1xuXHRcdGNvbHVtbkluZm8uaXNMZWFmID0gZmFsc2U7XG5cblx0XHQvLyBjb2x1bW5zIGlzICpub3QqIHRydWVcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uSWQgb2YgY2hpbGRyZW4pIHtcblx0XHRcdGNvbnN0IGNoaWxkSW5mbyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8oXG5cdFx0XHRcdGNoaWxkQ29sdW1uSWQsXG5cdFx0XHRcdHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLFxuXHRcdFx0XHRjb2x1bW5JbmZvLFxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcblx0XHRcdCk7XG5cblx0XHRcdGlmIChjaGlsZEluZm8gPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2x1bW5JbmZvLmNoaWxkcmVuLnB1c2goY2hpbGRJbmZvKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uSW5mbztcblx0fVxuXG5cdGV4cGFuZCAoXG5cdFx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbixcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IENvbHVtbkV4cGFuc2lvblJlc3VsdCB7XG5cdFx0Y29uc3QgcmVxdWVzdE1lcmdlUmVzdWx0ID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5yZXF1ZXN0LCByZXF1ZXN0Q29sdW1ucyk7XG5cdFx0Y29uc3QgbWVyZ2VkUmVzcG9uc2VDb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsXG5cdFx0XHQubWVyZ2VSZXNwb25zZUNvbHVtbnModGhpcy5yZXNwb25zZSwgcmVzcG9uc2VDb2x1bW5zKVxuXHRcdFx0Lm1lcmdlZDtcblxuXHRcdGNvbnN0IG1lcmdlZCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdE1lcmdlUmVzdWx0Lm1lcmdlZCxcblx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1uc1xuXHRcdCk7XG5cblx0XHRjb25zdCBkaWZmZXJlbmNlID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRyZXF1ZXN0TWVyZ2VSZXN1bHQuZGlmZmVyZW5jZSxcblx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1ucywgLy8gd2UgbmVlZCB0byBiZSBhYmxlIHRvIGxvb2sgdXAgdGhlIHBhcmVudCBvZiBkZXJpdmVkIGNvbHVtbnNcblx0XHRcdGZhbHNlLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXG5cdFx0bWVyZ2VkLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRoaXMucmVxdWVzdENvbHVtbnNUcnVlIHx8IHJlcXVlc3RDb2x1bW5zVHJ1ZTtcblxuXHRcdHJldHVybiB7IG1lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlIH07XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SLCBSRU5ERVJfQVNfU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IExvY2FsQ29sdW1uLCBSZXF1ZXN0Q29sdW1uLCBSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgZXh0ZW5kLCBnZXRGaXJzdFByb3BlcnR5LCBpc0RlZmluZWQgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uVXRpbCB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGdldENvbHVtblBhdGggKGNvbHVtbnMsIHJlbmRlckFzKSB7XG5cdFx0bGV0IHNlcGFyYXRvciA9ICcnO1xuXHRcdGxldCByZXN1bHQgPSAnJztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdHJlc3VsdCArPSBzZXBhcmF0b3IgKyBjb2x1bW4uaWQ7XG5cdFx0XHRzZXBhcmF0b3IgPSBDT0xVTU5fU0VQRVJBVE9SO1xuXHRcdH1cblxuXHRcdGlmIChyZW5kZXJBcyAhPT0gbnVsbClcblx0XHRcdHJlc3VsdCArPSBSRU5ERVJfQVNfU0VQRVJBVE9SICsgcmVuZGVyQXM7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0RGF0ZUZvcm1hdE9wdGlvbnMgKGNvbHVtblR5cGUpIHtcblx0XHRjb25zdCBub3cgPSBtb21lbnQoKTtcblxuXHRcdGNvbnN0IGZvcm1hdHMgPSB7XG5cdFx0XHQnSi1NLVknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZJyksXG5cdFx0XHQnSi1NJzogbm93LmZvcm1hdCgnREQtTU0nKSxcblx0XHRcdCdqK0YrWSc6IG5vdy5mb3JtYXQoJ0QgTU1NIFlZWVknKSxcblx0XHRcdCdEK2orRitZJzogbm93LmZvcm1hdCgnZGRkZCBEIE1NTSBZWVlZJyksXG5cdFx0XHQnRic6IG5vdy5mb3JtYXQoJ01NTScpLFxuXHRcdFx0J2YnOiBub3cuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHQnRCc6IG5vdy5mb3JtYXQoJ2RkZGQnKSxcblx0XHRcdCdkJzogbm93LmZvcm1hdCgnZGRkJylcblx0XHR9O1xuXG5cdFx0aWYgKGNvbHVtblR5cGUgPT09ICdkYXRldGltZScpXG5cdFx0XHRleHRlbmQoZm9ybWF0cywge1xuXHRcdFx0XHQnSi1NLVkrSDppJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWSBISDptbScpLFxuXHRcdFx0XHQnSi1NK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NIEhIOm1tJyksXG5cdFx0XHRcdCdqK0YrWStIOmknOiBub3cuZm9ybWF0KCdERCBNTU1NIFkgSEg6bW0nKSxcblx0XHRcdFx0J0QraitGK1krSDppJzogbm93LmZvcm1hdCgnZGRkZCBERCBNTU0gWSBISDptbScpLFxuXHRcdFx0XHQnSDppJzogbm93LmZvcm1hdCgnSEg6bW0nKSxcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIGZvcm1hdHM7XG5cdH1cblxuXHRpc1N0cmluZ0NvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAncGhvbmUnOlxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0XHQvLyBjYXNlICdodG1sJzogLy8gVE9ETzogc29ydCBvbiBmaWx0ZXJlZCB2YWx1ZVxuXHRcdFx0XHQvLyBjYXNlICdlbnVtJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGbG9hdENvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZG91YmxlJzogLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXNcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzSW50Q29sdW1uIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdpbnQnOiAvLyBpbnRlZ2VyIHR5cGVzXG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc051bWJlckNvbHVtbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXNGbG9hdENvbHVtbihjb2x1bW4pIHx8IHRoaXMuaXNJbnRDb2x1bW4oY29sdW1uKTtcblx0fVxuXG5cdGlzQ3VzdG9tQ29sdW1uIChjb2x1bW4pIHtcblx0XHRyZXR1cm4gY29sdW1uLmZpZWxkdHlwZSA9PT0gJ2N1c3RvbWZpZWxkJztcblx0fVxuXG5cdGlzSXRlbUNvbHVtbiAoY29sdW1uLCBpbmNsdWRlSWQgPSB0cnVlKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnaWQnOlxuXHRcdFx0XHRyZXR1cm4gaW5jbHVkZUlkO1xuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdjaGlsZCc6XG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0RhdGVDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc1JlbmRlcmVkQ29sdW1uIChjb2x1bW4pIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGaWx0ZXJlZENvbHVtbiAoY29sdW1uKSB7XG5cdFx0Ly8gdWdseSBoYWNrIDotKFxuXHRcdGlmIChjb2x1bW4uaWQgPT09ICdzdGFmZmVsJylcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKGNvbHVtbi5nZW5lcmF0b3IgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3F1YW50aXR5Jzpcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3VybCc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0Y2FzZSAnaHRtbCc6XG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGb3JtYXR0ZWRDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzU2VsZWN0YWJsZUNvbHVtbiAoY29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnYmxvYic6XG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcblx0XHRcdGNhc2UgJ2ZvcmNldXBkYXRlJzpcblx0XHRcdGNhc2UgJ2lkJzpcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0Y2FzZSAnb3JkZXInOlxuXHRcdFx0Y2FzZSAncGFyZW50aWQnOlxuXHRcdFx0Y2FzZSAncGFyZW50dHlwZSc6XG5cdFx0XHRjYXNlICdwYXNzd29yZCc6XG5cdFx0XHRjYXNlICd0b2tlbic6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGhhc0xvY2F0aW9uUHJvcGVydHkgKGNvbHVtbiwgbG9jYXRpb24pIHtcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuXHRcdHJldHVybiAobG9jYXRpb24gJiBjb2x1bW4ubG9jYXRpb24pICE9PSAwO1xuXHR9XG5cblx0aXNFZGl0YWJsZUNvbHVtbiAoY29sdW1uKSB7XG5cdFx0aWYgKGNvbHVtbi5yZWFkT25seSlcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpc1NlYXJjaGFibGVDb2x1bW4gKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2VtYWlsJzpcblx0XHRcdGNhc2UgJ3Bob25lJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAnaHRtbCc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGdldERlZmF1bHRXZWlnaHQgKGNvbHVtbikge1xuXHRcdC8vIFx0XHRcdGNvbnNvbGUubG9nKCdnZXREZWZhdWx0V2VpZ2h0JywgY29sdW1uKTtcblxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdib29sJzpcblx0XHRcdGNhc2UgJ2ludCc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdwb3dlcic6XG5cdFx0XHRjYXNlICdjdXJyZW50Jzpcblx0XHRcdFx0cmV0dXJuIDAuNTtcblxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0XHRyZXR1cm4gMS41O1xuXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdodG1sJzpcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q29tcGFyYXRvcnMgKGNvbHVtbikge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAncHJpY2UnOlxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJz4nLCAnPCddO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIFsnPicsICc8J107XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJyE9J107XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmV0dXJucyB3aGV0aGVyIHRoZSBmaXJzdCBjb2x1bW4gc2V0IGlzIGEgc3Vic2V0IG9mIHRoZSBzZWNvbmRcblx0aXNDb2x1bW5TdWJzZXQgKGZpcnN0LCBzZWNvbmQsIHNlY29uZFRydWUpIHtcblx0XHRpZiAoZmlyc3QgPT09IHRydWUpIC8vID09PSBvcGVyYXRvciBuZWVkZWQgaGVyZVxuXHRcdFx0cmV0dXJuIHNlY29uZFRydWU7XG5cblx0XHQvLyB3aGVuIHNlY29uZFRydWUgaXMgdGhlIGNhc2Ugd2UgbmVlZCB0byBjaGVjayBmb3IgZGVyaXZlZCBjb2x1bW5zXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgZmlyc3QpIHtcblx0XHRcdGlmICghdGhpcy5jb250YWluc0NvbHVtbihjb2x1bW4sIHNlY29uZCkpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNvbnRhaW5zQ29sdW1uIChyZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbikge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xuXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSlcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhdGhpcy5jb250YWluc0NvbHVtbihcblx0XHRcdFx0XHRjaGlsZENvbHVtbixcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uLmlkXVxuXHRcdFx0XHQpXG5cdFx0XHQpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZSAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbk1hcCkge1xuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xuXHRcdFx0Y29uc3QgcGFyc2VkQ29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IHBhcnNlZENvbHVtbi5jaGlsZHJlbjtcblx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uTWFwW2l0ZW1UeXBlXTtcblx0XHRcdGxldCByZXNwb25zZUNvbHVtbjtcblxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW3BhcnNlZENvbHVtbi5pZF07XG5cblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdGlmIChjaGlsZHJlbi5sZW5ndGggPiAwICYmICF0aGlzLnJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZShyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY2hpbGRyZW4sIHJlc3BvbnNlQ29sdW1uTWFwKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29weVJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyk6IFJlcXVlc3RDb2x1bW5zIHtcblx0XHRpZiAoY29sdW1ucyA9PT0gdHJ1ZSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0Y29uc3QgcmVzdWx0OiBSZXF1ZXN0Q29sdW1uW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmNvcHlSZXF1ZXN0Q29sdW1uKGNvbHVtbikpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNvcHlSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uOiBSZXF1ZXN0Q29sdW1uKTogUmVxdWVzdENvbHVtbiB7XG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBjb2x1bW4uaWQ7XG5cblx0XHRjb25zdCBjaGlsZHJlbjogUmVxdWVzdENvbHVtbltdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbilcblx0XHRcdGNoaWxkcmVuLnB1c2godGhpcy5jb3B5UmVxdWVzdENvbHVtbihjaGlsZENvbHVtbikpO1xuXG5cdFx0cmV0dXJuIHtbY29sdW1uLmlkXTogY2hpbGRyZW59O1xuXHR9XG5cblx0LyoqXG5cdCAqIERpZmZlcmVuY2U6IGNvbHVtbnMgdGhhdCBhcmUgaW4gc2Vjb25kLCBidXQgbm90IGluIGZpcnN0XG5cdCAqIEBwYXJhbSB7QXJyYXl9IGZpcnN0XG5cdCAqIEBwYXJhbSB7QXJyYXl9IHNlY29uZFxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyAnbWVyZ2VkJyBhbmQgJ2RpZmZlcmVuY2UnIHByb3BlcnRpZXNcblx0ICovXG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0OiBSZXF1ZXN0Q29sdW1ucywgc2Vjb25kOiBSZXF1ZXN0Q29sdW1ucyk6IHttZXJnZWQ6IFJlcXVlc3RDb2x1bW5zLCBkaWZmZXJlbmNlOiBSZXF1ZXN0Q29sdW1uc30ge1xuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXG5cdFx0XHRyZXR1cm4ge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogW119O1xuXG5cdFx0aWYgKHNlY29uZCA9PT0gdHJ1ZSlcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiB0cnVlfTtcblxuXHRcdGNvbnN0IG1lcmdlZDogUmVxdWVzdENvbHVtbnMgPSB0aGlzLmNvcHlSZXF1ZXN0Q29sdW1ucyhmaXJzdCk7XG5cdFx0Y29uc3QgZGlmZmVyZW5jZTogUmVxdWVzdENvbHVtbnMgPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHNlY29uZCkge1xuXHRcdFx0Y29uc3QgYWRkZWRDb2x1bW4gPSB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbihjb2x1bW4sIG1lcmdlZCk7XG5cblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcblx0XHRcdFx0ZGlmZmVyZW5jZS5wdXNoKGFkZGVkQ29sdW1uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcblx0fVxuXG5cdG1lcmdlUmVxdWVzdENvbHVtbiAocmVxdWVzdENvbHVtbiwgZGVzdGluYXRpb24pIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2gocmVxdWVzdENvbHVtbik7XG5cdFx0XHRyZXR1cm4gcmVxdWVzdENvbHVtbjtcblx0XHR9XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0aWYgKHR5cGVvZiBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPSB7XG5cdFx0XHRcdFtjb2x1bW4uaWRdOiBbXVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRjb25zdCBhZGRlZENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgYWRkZWRDb2x1bW4gPSB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbihcblx0XHRcdFx0Y2hpbGRDb2x1bW4sXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXG5cdFx0XHRcdGFkZGVkQ29sdW1ucy5wdXNoKGFkZGVkQ29sdW1uKTtcblx0XHR9XG5cblx0XHRpZiAoYWRkZWRDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdFtjb2x1bW4uaWRdOiBhZGRlZENvbHVtbnNcblx0XHR9O1xuXHR9XG5cblx0cGFyc2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uKToge2lkOiBzdHJpbmcsIGNoaWxkcmVuOiBSZXF1ZXN0Q29sdW1uW119IHtcblx0XHRjb25zdCBpc0xlYWYgPSB0eXBlb2YgcmVxdWVzdENvbHVtbiA9PT0gJ3N0cmluZyc7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBpc0xlYWYgPyByZXF1ZXN0Q29sdW1uIDogZ2V0Rmlyc3RQcm9wZXJ0eShyZXF1ZXN0Q29sdW1uKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRpZDogY29sdW1uSWQsXG5cdFx0XHRjaGlsZHJlbjogaXNMZWFmID8gW10gOiByZXF1ZXN0Q29sdW1uW2NvbHVtbklkXVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogTWVyZ2VzIHR3byBzZXRzIG9mIHJlc3BvbnNlIGNvbHVtbnMuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBmaXJzdFxuXHQgKiBAcGFyYW0ge29iamVjdH0gc2Vjb25kXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIGEgJ21lcmdlZCcgYW5kIGEgJ2RpZmZlcmVuY2UnIHByb3BlcnR5LlxuXHQgKi9cblx0bWVyZ2VSZXNwb25zZUNvbHVtbnMgKGZpcnN0LCBzZWNvbmQpIHtcblx0XHRjb25zdCBtZXJnZWQgPSB7fTtcblx0XHRjb25zdCBkaWZmZXJlbmNlID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGZpcnN0KSB7XG5cdFx0XHRpZiAoc2Vjb25kW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBmaXJzdFtpdGVtVHlwZV07XG5cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG1lcmdlUmVzdWx0ID0gdGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1uTWFwKFxuXHRcdFx0XHRmaXJzdFtpdGVtVHlwZV0sXG5cdFx0XHRcdHNlY29uZFtpdGVtVHlwZV1cblx0XHRcdCk7XG5cblx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBtZXJnZVJlc3VsdC5tZXJnZWQ7XG5cdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0LmRpZmZlcmVuY2U7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBzZWNvbmQpIHtcblx0XHRcdGlmIChmaXJzdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gc2Vjb25kW2l0ZW1UeXBlXTtcblx0XHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7YXJyYXl9IGZpcnN0XG5cdCAqIEBwYXJhbSB7YXJyYXl9IHNlY29uZFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBkaWZmZXJlbmNlOiB0aGUgY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3QuXG5cdCAqL1xuXHRtZXJnZVJlc3BvbnNlQ29sdW1uTWFwIChmaXJzdCwgc2Vjb25kKSB7XG5cdFx0Y29uc3QgbWVyZ2VkID0ge307XG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBmaXJzdClcblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBmaXJzdFtjb2x1bW5JZF07XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHNlY29uZCkge1xuXHRcdFx0aWYgKGlzRGVmaW5lZChmaXJzdFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bWVyZ2VkW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XG5cdFx0XHRkaWZmZXJlbmNlW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHRpc0xvY2FsQ29sdW1uSWQgKGNvbHVtbklkKSB7XG5cdFx0cmV0dXJuIGNvbHVtbklkLnN1YnN0cmluZygwLCAyKSA9PT0gJ19fJztcblx0fVxuXG5cdHByb2Nlc3NDb25maWdDb2x1bW5zIChjb2x1bW5zKSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0aWYgKHRoaXMuaXNMb2NhbENvbHVtbklkKGNvbHVtbikpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4odGhpcy5wYXJzZUNvbmZpZ0NvbHVtbihjb2x1bW4pLCByZXF1ZXN0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVxdWVzdDtcblx0fVxuXG5cdHByb2Nlc3NMb2NhbENvbmZpZ0NvbHVtbnMgKGNvbmZpZ0NvbHVtbnMsIGxvY2FsQ29sdW1ucywgcmVtb3RlQ29sdW1uQ2FsbGJhY2ssIGxvY2FsQ29sdW1uQ2FsbGJhY2spIHtcblx0XHRjb25zdCBsb2NhbENvbHVtbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBsb2NhbENvbHVtbiBvZiBsb2NhbENvbHVtbnMpXG5cdFx0XHRsb2NhbENvbHVtbk1hcFtsb2NhbENvbHVtbi5pZF0gPSBsb2NhbENvbHVtbjtcblxuXHRcdGZvciAoY29uc3QgY29uZmlnSWQgb2YgY29uZmlnQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgcGFyc2VkQ29uZmlnSWQgPSBjb25maWdJZC5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKTtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gcGFyc2VkQ29uZmlnSWRbMF07XG5cblx0XHRcdGlmICghdGhpcy5pc0xvY2FsQ29sdW1uSWQoY29sdW1uSWQpKSB7XG5cdFx0XHRcdHJlbW90ZUNvbHVtbkNhbGxiYWNrKGNvbmZpZ0lkLCBjb2x1bW5JZCwgcGFyc2VkQ29uZmlnSWRbMV0pO1xuXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBjb2x1bW4gbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBpbiBsb2NhbENvbHVtbnNcblx0XHRcdGlmIChsb2NhbENvbHVtbk1hcFtjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGxvY2FsQ29sdW1uQ2FsbGJhY2soY29uZmlnSWQsIGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXSk7XG5cdFx0XHRkZWxldGUgbG9jYWxDb2x1bW5NYXBbY29sdW1uSWRdO1xuXHRcdH1cblx0fVxuXG5cdC8vIFRPRE86IG1vdmUgdG8gZnJvbnQtZW5kXG5cdGNvbnNvbGlkYXRlQ29sdW1ucyAoXG5cdFx0Y29uZmlnQ29sdW1ucyxcblx0XHRsb2NhbENvbHVtbnMsXG5cdFx0YWRkUmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5bXVxuXHQpIHtcblx0XHRjb25zdCBmaWx0ZXJlZExvY2FsQ29sdW1uczogTG9jYWxDb2x1bW5bXSA9IFtdO1xuXHRcdGxldCByZXF1ZXN0Q29sdW1ucyA9IDxSZXF1ZXN0Q29sdW1uW10+IHRoaXMuY29weVJlcXVlc3RDb2x1bW5zKGFkZFJlcXVlc3RDb2x1bW5zKTtcblxuXHRcdHRoaXMucHJvY2Vzc0xvY2FsQ29uZmlnQ29sdW1ucyhcblx0XHRcdGNvbmZpZ0NvbHVtbnMsXG5cdFx0XHRsb2NhbENvbHVtbnMsXG5cdFx0XHQoXywgY29sdW1uSWQpID0+IHtcblx0XHRcdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKGNvbHVtbklkLnNwbGl0KENPTFVNTl9TRVBFUkFUT1IpLCByZXF1ZXN0Q29sdW1ucyk7XG5cdFx0XHR9LFxuXHRcdFx0KF8sIGxvY2FsQ29sdW1uKSA9PiB7XG5cdFx0XHRcdGZpbHRlcmVkTG9jYWxDb2x1bW5zLnB1c2gobG9jYWxDb2x1bW4pO1xuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyA9IDxSZXF1ZXN0Q29sdW1uW10+IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1ucyhcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0XHRsb2NhbENvbHVtbi52YWx1ZU9wdGlvbnMucmVxdWVzdENvbHVtbnNcblx0XHRcdFx0KS5tZXJnZWQ7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiB7cmVxdWVzdDogcmVxdWVzdENvbHVtbnMsIGxvY2FsOiBmaWx0ZXJlZExvY2FsQ29sdW1uc307XG5cdH1cblxuXHRwYXJzZUNvbmZpZ0NvbHVtbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIGNvbHVtbi5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKVswXS5zcGxpdChDT0xVTU5fU0VQRVJBVE9SKTtcblx0fVxuXG5cdHByb2Nlc3NDb25maWdDb2x1bW4gKGNvbHVtbkFycmF5LCBkZXN0aW5hdGlvbikge1xuXHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uQXJyYXlbMF07XG5cdFx0Y29uc3QgaXNMZWFmID0gY29sdW1uQXJyYXkubGVuZ3RoID09PSAxO1xuXG5cdFx0aWYgKGlzTGVhZikge1xuXHRcdFx0aWYgKGRlc3RpbmF0aW9uLmluZGV4T2YoY29sdW1uSWQpID09PSAtMSlcblx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaChjb2x1bW5JZCk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRDb2x1bW5PYmplY3QoY29sdW1uSWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcblx0XHRcdGNvbHVtbkluZGV4ID0gZGVzdGluYXRpb24ucHVzaCh7XG5cdFx0XHRcdFtjb2x1bW5JZF06IFtdXG5cdFx0XHR9KSAtIDE7XG5cdFx0fVxuXG5cdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKFxuXHRcdFx0Y29sdW1uQXJyYXkuc2xpY2UoMSksXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uSWRdXG5cdFx0KTtcblx0fVxuXG5cdGZpbmRDb2x1bW5PYmplY3QgKGNvbHVtbklkLCBhcnJheSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChnZXRGaXJzdFByb3BlcnR5KGFycmF5W2ldKSA9PT0gY29sdW1uSWQpXG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdH1cblxuXHRcdHJldHVybiAtMTtcblx0fVxuXG5cdGZpbmRDb2x1bW4gKGNvbHVtbklkLCBhcnJheSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IGFycmF5W2ldO1xuXG5cdFx0XHRpZiAodHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0aWYgKGNvbHVtbiA9PT0gY29sdW1uSWQpXG5cdFx0XHRcdFx0cmV0dXJuIGk7XG5cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChnZXRGaXJzdFByb3BlcnR5KGNvbHVtbikgPT09IGNvbHVtbklkKVxuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cblx0XHRyZXR1cm4gLTE7XG5cdH1cbn1cbiIsImltcG9ydCB7IENoYW5nZXNDb21waWxhdGlvbiwgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDcmVhdGVSZXF1ZXN0RW50cnksIENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdCB7XG5cdHJlcXVlc3RzOiBDcmVhdGVSZXF1ZXN0RW50cnlbXSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbXBpbGF0aW9uOiBDaGFuZ2VzQ29tcGlsYXRpb24sXG5cdFx0cHJpdmF0ZSBsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdHByaXZhdGUgcGFyYW1ldGVyTWFwOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRcdHByaXZhdGUgYnJlYWt1cEJ5UGFyZW50ID0gZmFsc2Vcblx0KSB7XG5cdH1cblxuXHRmaW5hbGl6ZVJlcXVlc3QgKHJlcXVlc3RSZXNvdXJjZTogQ3JlYXRlUmVxdWVzdEVudHJ5KSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSByZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gcmVxdWVzdFJlc291cmNlLmNvbHVtbnM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcylcblx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoY29sbGVjdGlvbkVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcblxuXHRcdHJldHVybiByZXF1ZXN0UmVzb3VyY2U7XG5cdH1cblxuXHRzZXRSZXF1ZXN0UGFyZW50IChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpIHtcblx0XHRjb25zdCByZXF1ZXN0ID0gcmVxdWVzdFJlc291cmNlLnJlcXVlc3Q7XG5cblx0XHRpZiAocGFyZW50VHlwZSA9PT0gJ1ZvaWQnKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmVxdWVzdC5wYXJlbnRUeXBlID0gcGFyZW50VHlwZTtcblx0XHRyZXF1ZXN0LnBhcmVudElkID0ge307XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJ1biAoKSB7XG5cdFx0aWYgKHRoaXMuYnJlYWt1cEJ5UGFyZW50KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gdGhpcy5jb21waWxhdGlvbikge1xuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSB0aGlzLmNvbXBpbGF0aW9uW3BhcmVudFR5cGVdO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcGFyZW50TWFwKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50SWQpKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XG5cblx0XHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoXG5cdFx0XHRcdFx0XHRwYXJlbnRNYXBbcGFyZW50SWRdLFxuXHRcdFx0XHRcdFx0dGhpcy5zZXRSZXF1ZXN0UGFyZW50KHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSkgPyBwYXJlbnRJZCA6IG51bGwsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2Vcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0cy5wdXNoKHRoaXMuZmluYWxpemVSZXF1ZXN0KHJlcXVlc3RSZXNvdXJjZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiB0aGlzLmNvbXBpbGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudE1hcCA9IHRoaXMuY29tcGlsYXRpb25bcGFyZW50VHlwZV07XG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RSZXNvdXJjZSA9IHRoaXMuaW5pdGlhbGl6ZVJlcXVlc3QoKTtcblx0XHRcdFx0Y29uc3QgaGFzUGFyZW50ID0gdGhpcy5zZXRSZXF1ZXN0UGFyZW50KHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSk7XG5cblx0XHRcdFx0bGV0IHZhbGlkUmVxdWVzdCA9IGZhbHNlO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcGFyZW50TWFwKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50SWQpKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoXG5cdFx0XHRcdFx0XHRwYXJlbnRNYXBbcGFyZW50SWRdLFxuXHRcdFx0XHRcdFx0aGFzUGFyZW50ID8gcGFyZW50SWQgOiBudWxsLFxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHZhbGlkUmVxdWVzdCA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodmFsaWRSZXF1ZXN0KVxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0cztcblx0fVxuXG5cdGluaXRpYWxpemVSZXF1ZXN0ICgpOiBDcmVhdGVSZXF1ZXN0RW50cnkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRyZXF1ZXN0OiB7XG5cdFx0XHRcdHJlcXVlc3RUeXBlOiAnY3JlYXRlJyxcblx0XHRcdFx0aXRlbXM6IHt9LFxuXHRcdFx0XHRjb2x1bW5zOiB7fVxuXHRcdFx0fSxcblx0XHRcdGNvbHVtbnM6IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCksXG5cdFx0XHRpdGVtczoge30sXG5cdFx0XHRjb2xsZWN0aW9uczogdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRbdGhpcy5sb2NhbENvbGxlY3Rpb25DYWNoZSwgdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzXSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdClcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBleHRlbmRSZXF1ZXN0IChpdGVtRW50cmllcywgcmVxdWVzdFBhcmVudElkLCBkZXN0aW5hdGlvbikge1xuXHRcdGNvbnN0IHJlcXVlc3QgPSBkZXN0aW5hdGlvbi5yZXF1ZXN0O1xuXHRcdGNvbnN0IGl0ZW1FbnRyeU1hcCA9IGRlc3RpbmF0aW9uLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKHJlcXVlc3QuaXRlbVR5cGUgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmVxdWVzdC5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSB7fTtcblx0XHRcdFx0cmVxdWVzdC5pdGVtc1tpdGVtVHlwZV0gPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0XHRjb25zdCBjaGlsZEVudHJpZXMgPSBnZXRQYXRoKHRoaXMuY29tcGlsYXRpb24sIFtpdGVtVHlwZSwgaXRlbUlkXSk7XG5cdFx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXRoKHRoaXMucGFyYW1ldGVyTWFwLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXG5cdFx0XHRcdGxldCBsaW5rcztcblxuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmVudElkICE9PSBudWxsKVxuXHRcdFx0XHRcdHJlcXVlc3QucGFyZW50SWRbaXRlbUlkXSA9IHJlcXVlc3RQYXJlbnRJZDtcblxuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XG5cdFx0XHRcdGRlc3RpbmF0aW9uLmNvbGxlY3Rpb25zLmV4cGFuZChpdGVtRW50cnkpO1xuXG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV1baXRlbUlkXSA9IGl0ZW1FbnRyeTtcblxuXHRcdFx0XHRpdGVtUmVxdWVzdC52YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblxuXHRcdFx0XHRpZiAoY2hpbGRFbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0bGlua3MgPSBpdGVtUmVxdWVzdC5saW5rcyA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkRW50cmllcykge1xuXHRcdFx0XHRcdGxpbmtzW2NoaWxkVHlwZV0gPSBbXTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgY2hpbGRJZCBpbiBjaGlsZEVudHJpZXNbY2hpbGRUeXBlXSlcblx0XHRcdFx0XHRcdGxpbmtzW2NoaWxkVHlwZV0ucHVzaChjaGlsZElkKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChjaGlsZEVudHJpZXMsIG51bGwsIGRlc3RpbmF0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25DYWNoZSxcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdENvbGxlY3Rpb25NYXRjaGVyLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRJdGVtQ2FjaGUsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1IYW5kbGVyLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdExvY2FsQ2FjaGUsXG5cdFF1ZXJ5U2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgTG9jYWxDYWNoZUZhY3RvcnksIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRBdXRoSW50ZXJmYWNlLFxuXHRFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCxcblx0Q3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0SXRlbUlkLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtT3B0aW9ucyxcblx0SXRlbVJlc291cmNlSXRlbVR5cGVNYXAsXG5cdEl0ZW1UeXBlLFxuXHRMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24sXG5cdE9uU2F2ZUNhbGxiYWNrLFxuXHRTdGF0ZUtleVR5cGUsXG5cdFRlbXBsYXRlSXRlbUVudHJ5TWFwLFxuXHRUZW1wbGF0ZUxpbmtlZEl0ZW1FbnRyeU1hcFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUFkbWluaXN0cmF0b3Ige1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBtb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgcHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHRpbnZhbGlkYXRlQ2FjaGUgKCk6IHZvaWQge1xuXHRcdC8vIHRoZSBpdGVtSGFuZGxlciBjYWNoZSBvbmx5IGNvbnRhaW5zIHJlbW90ZSBlbnRyaWVzXG5cdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmZvckVhY2goXG5cdFx0XHRpdGVtRW50cnkgPT4gaXRlbUVudHJ5LnF1ZXVlUmVsb2FkKClcblx0XHQpO1xuXG5cdFx0Ly8gcXVldWVSZWxvYWQgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIGVhY2ggaW5kaXZpZHVhbCBpdGVtXG5cdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmZvckVhY2goXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPT4gY29sbGVjdGlvbkVudHJ5LnF1ZXVlUmVsb2FkKClcblx0XHQpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbk1hdGNoZXIgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgYWRkVG9UYWI6IGJvb2xlYW4pOiBDb2xsZWN0aW9uTWF0Y2hlciB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFtsb2NhbENhY2hlLmNvbGxlY3Rpb25zXSwgZmFsc2UsIHRydWUpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdC8vIHRoaXMgaXMgb25seSByZWxldmFudCBpZiB0aGVyZSBhcmUgbm8gY29sbGVjdGlvbnMgdG8gYWRkIHRoZSBpdGVtIHRvLCBidXQgd2Ugc3RpbGwgd2FudCB0byBzYXZlIHRoZSBpdGVtXG5cdFx0XHRpZiAoYWRkVG9UYWIpXG5cdFx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMuYWRkKGl0ZW1FbnRyeSk7XG5cblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2xsZWN0aW9uTWF0Y2hlcjtcblx0fVxuXG5cdGZldGNoVGl0bGUgKGl0ZW1UeXBlLCBpdGVtSWQsIGRlZmVyUmVxdWVzdCkge1xuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoVGl0bGUoaXRlbVR5cGUsIGl0ZW1JZCwgZGVmZXJSZXF1ZXN0LCB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcyk7XG5cdH1cblxuXHRnZXRJdGVtQnlJZCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgb3B0aW9uczogSXRlbU9wdGlvbnMsIGlzUm9vdD86IGJvb2xlYW4pOiBQcm9taXNlPEl0ZW1SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zLCBpc1Jvb3QpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZHM6IG51bWJlcltdLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtcyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5UXVlcnkgKGl0ZW1UeXBlOiBzdHJpbmcsIHF1ZXJ5OiBhbnksIG9wdGlvbnM6IGFueSk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge307XG5cblx0XHRyZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0gPSBlbnRyeU9wdGlvbnMuY29sdW1ucztcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRQYXJlbnRDb25kaXRpb24ocXVlcnksIGVudHJ5T3B0aW9ucy5wYXJlbnQpLFxuXHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQsXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZW50cnlPcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cmllczogSXRlbUVudHJ5W10pID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGRlcGVuZGVkIG9uIHRoZSByZXR1cm4gbGlua3MgYm9vbGVhbi4gdHJ1ZSByZXR1cm5zIHRoZSBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwLlxuXHQgKiBUaGUgdHlwZSBoYXMgdG8gYmUgYXNzZXJ0ZWQgYXQgdXNlIHNpbmNlIHlvdSBvbmx5IGtub3cgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1UeXBlXG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gcmV0dXJuTGlua3Ncblx0ICogQHBhcmFtIHtib29sZWFufSBpc1Jvb3Rcblx0ICogQHJldHVybnMge1Byb21pc2U8SXRlbVJlc291cmNlIHwgVGVtcGxhdGVJdGVtRW50cnlNYXA+fVxuXHQgKi9cblx0Z2V0TmV3UmVzb3VyY2UgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9ucyA9IHt9LFxuXHRcdHJldHVybkxpbmtzOiBib29sZWFuID0gZmFsc2UsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZSB8IFRlbXBsYXRlSXRlbUVudHJ5TWFwPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0b3B0aW9ucy5lZGl0ID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoTmV3SXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cnlSZXNvdXJjZTogVGVtcGxhdGVJdGVtRW50cnlNYXApID0+IHtcblx0XHRcdFx0Y29uc3QgbWFpbiA9IGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeVJlc291cmNlLm1haW4sIG9wdGlvbnMsIGlzUm9vdCwgdHJ1ZSk7XG5cdFx0XHRcdGNvbnN0IGxpbmtlZCA9IHRoaXMucHJvY2Vzc0xpbmtlZEl0ZW1zKGl0ZW1FbnRyeVJlc291cmNlLmxpbmtlZCwgb3B0aW9ucywgdHJ1ZSk7IC8vIGRvIHRoaXMgYmVmb3JlaGFuZFxuXG5cdFx0XHRcdHJldHVybiByZXR1cm5MaW5rcyA/IHttYWluOiBtYWluLCBsaW5rZWQ6IGxpbmtlZH0gOiBtYWluO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXREdXBsaWNhdGVCeUlkIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0ZHVwbGljYXRlSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9ucyA9IHt9LFxuXHRcdHJldHVybkxpbmtzPzogYm9vbGVhbixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2U8SXRlbVJlc291cmNlIHwgVGVtcGxhdGVJdGVtRW50cnlNYXA+IHtcblx0XHRvcHRpb25zLmlzRHVwbGljYXRlID0gdHJ1ZTtcblxuXHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPSB7fTtcblxuXHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID0gZHVwbGljYXRlSWQ7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXROZXdSZXNvdXJjZShpdGVtVHlwZSwgb3B0aW9ucywgcmV0dXJuTGlua3MsIGlzUm9vdCk7XG5cdH1cblxuXHQvLyBzdGF0ZUtleSBjYW4gYmUgYSBrZXl3b3JkIG9yIGEgbG9jYWwgaWQgKGluIGNhc2Ugb2YgYSByZWZyZXNoKVxuXHRnZXRJdGVtQnlTdGF0ZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHN0YXRlS2V5OiBJdGVtSWQgfCBzdHJpbmcsXG5cdFx0b3B0aW9ucz86IEl0ZW1PcHRpb25zLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZTxJdGVtUmVzb3VyY2U+IHtcblx0XHRjb25zdCBwYXJzZWRTdGF0ZUtleSA9IHRoaXMua2V5U2VydmljZS5wYXJzZVN0YXRlS2V5KDxzdHJpbmc+IHN0YXRlS2V5KTtcblxuXHRcdGlmIChwYXJzZWRTdGF0ZUtleSA9PT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gPEl0ZW1JZD4gc3RhdGVLZXk7XG5cblx0XHRcdGlmICghdGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChpdGVtSWQpIHx8IHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zLmNvbnRhaW5zKGl0ZW1UeXBlLCBpdGVtSWQpKVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRJdGVtQnlJZChpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLCBpc1Jvb3QpO1xuXHRcdH0gZWxzZSBpZiAocGFyc2VkU3RhdGVLZXkudHlwZSA9PT0gU3RhdGVLZXlUeXBlLkR1cGxpY2F0ZSkge1xuXHRcdFx0cmV0dXJuIDxQcm9taXNlPEl0ZW1SZXNvdXJjZT4+IHRoaXMuZ2V0RHVwbGljYXRlQnlJZChcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdDxJdGVtSWQ+IHBhcnNlZFN0YXRlS2V5Lml0ZW1JZCxcblx0XHRcdFx0b3B0aW9ucyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGlzUm9vdFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gPFByb21pc2U8SXRlbVJlc291cmNlPj4gdGhpcy5nZXROZXdSZXNvdXJjZShpdGVtVHlwZSwgb3B0aW9ucywgZmFsc2UsIGlzUm9vdCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uRGVmIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRlbnRyeTogdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLCAvLyB3ZSBuZWVkIHRoZSBkZWZhdWx0IGNvbHVtbiB2YWx1ZVxuXHRcdFx0XHRyZXNvdXJjZTogdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uc0RlZiAobGlua1R5cGU6IHN0cmluZywgbGlua0lkQXJyYXk6IG51bWJlcltdLCBpdGVtVHlwZTogc3RyaW5nLCBsaW5rRmllbGQ6IHN0cmluZywgb3B0aW9uczogYW55KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdGxpbmtUeXBlOiBsaW5rVHlwZSxcblx0XHRcdGxpbmtJZEFycmF5OiBsaW5rSWRBcnJheSxcblx0XHRcdGxpbmtGaWVsZDogbGlua0ZpZWxkLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRlbnRyeTogdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0XHRyZXNvdXJjZTogdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb24gKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0ZW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoXG5cdFx0XHRcdFx0ZW50cnksXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25Gcm9tRGVmIChkZWZpbml0aW9uOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcblx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5lbnRyeSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0ZW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoZW50cnksIGRlZmluaXRpb24ub3B0aW9ucy5yZXNvdXJjZSk7XG5cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgYHBhcmVudGAgaW4gb3B0aW9uc1xuXHQgKi9cblx0Z2V0TGlua0NvbGxlY3Rpb24gKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZDogbnVtYmVyLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRlbnRyeU9wdGlvbnMucGFyZW50ID0ge2l0ZW1UeXBlOiBsaW5rVHlwZSwgaXRlbUlkOiBsaW5rSWR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGVudHJ5T3B0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKFxuXHRcdFx0XHRcdGVudHJ5LFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnMgKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZEFycmF5OiBudW1iZXJbXSwgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxuXHRcdFx0bGlua1R5cGUsXG5cdFx0XHRsaW5rSWRBcnJheSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHQoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMoXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uc0Zyb21EZWYgKGRlZmluaXRpb246IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxuXHRcdFx0ZGVmaW5pdGlvbi5saW5rVHlwZSxcblx0XHRcdGRlZmluaXRpb24ubGlua0lkQXJyYXksXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHQoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMoXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldEFsbExpbmtDb2xsZWN0aW9ucyAobGlua1R5cGU6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcD4ge1xuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGxpbmtUeXBlLCB7fSwge30pXG5cdFx0XHQudGhlbihcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmdldExpbmtDb2xsZWN0aW9ucyhcblx0XHRcdFx0XHRcdGxpbmtUeXBlLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbbGlua1R5cGVdLFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpO1xuXHR9XG5cblx0Y2xvbmVJdGVtIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSwgb3B0aW9uczogYW55KTogSXRlbVJlc291cmNlIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1SZXNvdXJjZS5lbnRyeS5jbG9uZSgpLCBvcHRpb25zLCBmYWxzZSk7XG5cdH1cblxuXHRjbG9uZUNvbGxlY3Rpb24gKGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlLCBvcHRpb25zOiBhbnksIGNvbnZlcnNpb25NYXA6IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0bGV0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cGFyZW50ID0gbnVsbDtcblxuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuY2xvbmUocGFyZW50LCBjb252ZXJzaW9uTWFwKSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0c2F2ZUN1cnJlbnRMb2NhbENhY2hlIChcblx0XHRjbG9zZVRhYj86IGJvb2xlYW4sXG5cdFx0cGFyYW1ldGVycz86IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhbixcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuc2F2ZShjbG9zZVRhYiwgcGFyYW1ldGVycywgYnJlYWt1cEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spO1xuXHR9XG5cblx0Z2V0Q3VycmVudENvbGxlY3Rpb25zICgpOiBDb2xsZWN0aW9uQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5jb2xsZWN0aW9ucztcblx0fVxuXG5cdGdldEN1cnJlbnRJdGVtcyAoKTogSXRlbUNhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXM7XG5cdH1cblxuXHRnZXRNb2R1bGVDaGFuZ2VzIChsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCkpIHtcblx0XHRpZiAobG9jYWxDYWNoZS5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpdGVtQWRtaW5pc3RyYXRvcjogTm8gcm9vdCBpdGVtIGZvciBsb2NhbCBjYWNoZSAnICsgbG9jYWxDYWNoZS5pZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGxvY2FsQ2FjaGUucm9vdEl0ZW0sXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9uc1xuXHRcdCkucHJvY2VzcygpO1xuXHR9XG5cblx0YWRkU2luZ2xlSXRlbSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnMsXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKClcblx0KTogSXRlbVJlc291cmNlIHtcblx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UobG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KSwgb3B0aW9ucywgaXNSb290KTtcblx0fVxuXG5cdGFkZFNpbmdsZUl0ZW1zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnM6IEl0ZW1PcHRpb25zKSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgZmFsc2UsIGxvY2FsQ2FjaGUpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGRDb2xsZWN0aW9uIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9uczogYW55KTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkNhY2hlID0gbG9jYWxDYWNoZS5jb2xsZWN0aW9ucztcblxuXHRcdGNvbGxlY3Rpb25DYWNoZS5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblxuXHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzTGlua2VkSXRlbXMgKFxuXHRcdGxpbmtlZEVudHJpZXM6IFRlbXBsYXRlTGlua2VkSXRlbUVudHJ5TWFwW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnMsXG5cdFx0YWRkVG9Db2xsZWN0aW9uczogYm9vbGVhblxuXHQpOiBJdGVtUmVzb3VyY2VJdGVtVHlwZU1hcCB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBlbnRyeS5pdGVtVHlwZTtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gZW50cnkuaXRlbUVudHJpZXM7XG5cdFx0XHRsZXQgY29sbGVjdGlvbk1hdGNoZXI7XG5cblx0XHRcdGlmIChhZGRUb0NvbGxlY3Rpb25zKVxuXHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbbG9jYWxDYWNoZS5jb2xsZWN0aW9uc10sIGZhbHNlLCBmYWxzZSk7XG5cblx0XHRcdGl0ZW1SZXNvdXJjZXNbaXRlbVR5cGVdID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZXNbaXRlbVR5cGVdLnB1c2gobG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zKSk7XG5cblx0XHRcdFx0aWYgKGFkZFRvQ29sbGVjdGlvbnMpXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0aWYgKGl0ZW1UeXBlID09PSAnUHJvamVjdG5vdGl0aWUnKSB7XG5cdFx0XHRcdFx0Y3JlYXRlUGF0aChcblx0XHRcdFx0XHRcdGxvY2FsQ2FjaGUudGFiUmVxdWVzdFBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFx0XHRcdFt7fSwge25vX25vdGlmaWNhdGlvbjogdHJ1ZX1dXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyB0aGUgaXRlbUVudHJpZXMgYXJlIGluIHRvcC1kb3duIG9yZGVyLCBzbyBjYWxsIGZvciBlYWNoIGl0ZW0gdHlwZSBzZXBhcmF0ZWx5XG5cdFx0XHRpZiAoYWRkVG9Db2xsZWN0aW9ucylcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuYWRkVG9Db2xsZWN0aW9ucygpO1xuXHRcdH1cblxuXHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHR9XG5cblx0Z2V0TG9jYWxDYWNoZSAoKTogTG9jYWxDYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMubG9jYWxDYWNoZU1hbmFnZXIuZ2V0Q3VycmVudExvY2FsQ2FjaGUodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpKTtcblx0fVxuXG5cdHJlc2V0TG9jYWxDYWNoZSAoKSB7XG5cdFx0Y29uc3Qgb2xkTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXG5cdFx0b2xkTG9jYWxDYWNoZS5jbGVhclJlc291cmNlcygpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlTWFuYWdlci5zZXRDdXJyZW50TG9jYWxDYWNoZSh0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VW5pcXVlVXNlcklkKCksIGxvY2FsQ2FjaGUpO1xuXHR9XG5cblx0YWRkVG9Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCByZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihpdGVtRW50cmllcywgdHJ1ZSlcblx0XHRcdC5hZGRUb0NvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XG5cdH1cblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgcmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoaXRlbUVudHJpZXMsIGZhbHNlKVxuXHRcdFx0LnJlbW92ZUZyb21Db2xsZWN0aW9ucyhyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpO1xuXHR9XG5cblx0c2F2ZUxvY2FsIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1SZXNvdXJjZS5lbnRyeTtcblxuXHRcdGl0ZW1FbnRyeS5zZXREaXNwbGF5TmFtZSgpO1xuXHRcdHRoaXMuYWRkVG9Db2xsZWN0aW9ucyhbaXRlbUVudHJ5XSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlSW50ZXJmYWNlLndoZW4oaXRlbVJlc291cmNlKTtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1JZE1hcCAoY29sbGVjdGlvbk1hcDogYW55LCBjb252ZXJzaW9uTWFwKSB7XG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3Qgb2xkSWQgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Y29uc3QgbmV3SWQgPSBjb252ZXJzaW9uTWFwW29sZElkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbb2xkSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2xsZWN0aW9uTWFwW25ld0lkXSA9IGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9uczogYW55LCBwcm9jZXNzT3B0aW9ucyA9IHRydWUpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXG5cdFx0XHRjb2xsZWN0aW9uRW50cnksXG5cdFx0XHRwcm9jZXNzT3B0aW9ucyA/IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhyZXNvdXJjZU9wdGlvbnMpIDogcmVzb3VyY2VPcHRpb25zXG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IGFueSwgaXNSb290OiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGlzUm9vdCk7XG5cdH1cblxuXHRvbkJlZm9yZVNhdmUgKGtleTogc3RyaW5nLCBjYWxsYmFjazogKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpID0+IGFueSwgY29uZGl0aW9uPzogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLm9uQmVmb3JlU2F2ZShrZXksIGNhbGxiYWNrLCBjb25kaXRpb24pO1xuXHR9XG5cblx0b25TYXZlU3VjY2VzcyAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrOiBPblNhdmVDYWxsYmFjaywgY29uZGl0aW9uPzogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLm9uU2F2ZVN1Y2Nlc3Moa2V5LCBjYWxsYmFjaywgY29uZGl0aW9uKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1DYWNoZSB7XG5cdGVudHJpZXM6IHtcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IEl0ZW1FbnRyeVxuXHRcdH1cblx0fSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRzb21lIChjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0aWYgKGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldEJ5SXRlbVR5cGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbUlkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICh0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBxdWVyeSkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldExvY2FsQnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xuXG5cdFx0XHRpZiAoIWl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRCeVBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1UeXBlOiBJdGVtVHlwZSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0XHRpZiAocGFyZW50VHlwZSA9PT0gcGFyZW50Lml0ZW1UeXBlICYmIHBhcmVudElkID09IHBhcmVudC5pdGVtSWQpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcblx0XHRcdFx0Y2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSk7XG5cdFx0fVxuXHR9XG5cblx0dG9BcnJheSAoKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YWRkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IEl0ZW1FbnRyeSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmIChlbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW50cmllc1tpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJldHVybiBlbnRyaWVzW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXSA9IGl0ZW1FbnRyeTtcblx0fVxuXG5cdGdldCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cdH1cblxuXHQvLyBzaG91bGQgYmUgZmFzdFxuXHRjb250YWlucyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHR1cGRhdGVJdGVtSWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvbGRJdGVtSWQpIHtcblx0XHRjb25zdCBlbnRyeU1hcCA9IHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0ZGVsZXRlIGVudHJ5TWFwW29sZEl0ZW1JZF07XG5cdFx0cmV0dXJuIGVudHJ5TWFwW2l0ZW1FbnRyeS5pdGVtSWRdID0gaXRlbUVudHJ5O1xuXHR9XG5cblx0Y2xlYXIgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogYm9vbGVhbiB7XG5cdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbUVudHJ5Lml0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGRlbGV0ZSB0aGlzLmVudHJpZXNbaXRlbUVudHJ5Lml0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcblx0fVxuXG5cdG1hdGNoUXVlcnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBxdWVyeSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudFxuXHRcdCkubWF0Y2hRdWVyeShxdWVyeS5vYmplY3QpID09PSB0cnVlOyAvLyBUT0RPOiBtYXliZT9cblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFMTF9QRVJNSVNTSU9OUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBdXRoSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5U2VydmljZSB7XG5cdC8vIHRvZG86IHRyYW5zbGF0ZVxuXHR1bmRlZmluZWRJdGVtRXJyb3IgPSAnVGhlIHJlcXVlc3RlZCBpdGVtIGNvdWxkIG5vdCBiZSBmb3VuZCAvIHlvdXIgY3VycmVudCBwZXJtaXNzaW9ucyBhcmUgbm90IHN1ZmZpY2llbnQnO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucz8pIHtcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdHtcblx0XHRcdFx0Y29sdW1uczogdHJ1ZSxcblx0XHRcdFx0cGFyZW50OiBudWxsLFxuXHRcdFx0XHR0ZW1wbGF0ZU9wdGlvbnM6IHt9LFxuXHRcdFx0XHR0ZW1wbGF0ZUNvbHVtbnM6IHt9LFxuXHRcdFx0XHRkZWZlclJlcXVlc3Q6IGZhbHNlLFxuXHRcdFx0XHRpc0R1cGxpY2F0ZTogZmFsc2Vcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0Y3JlYXRlVW5mb3VuZExvY2FsSXRlbUVycm9yIChpdGVtVHlwZTogSXRlbVR5cGUpIHtcblx0XHRyZXR1cm4ge21lc3NhZ2U6ICdBIGxvY2FsIGl0ZW0gb2YgdHlwZSAnICsgaXRlbVR5cGUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCd9O1xuXHR9XG5cblx0Y3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBkb0V4dGVuZCA9IGZhbHNlLCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpIHtcblx0XHRjb25zdCBhcGlJdGVtSWQgPSBhcGlSZXNwb25zZS5saW5rc1tpdGVtVHlwZV1bMF07XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge307XG5cblx0XHRyZXN1bHRbaXRlbVR5cGVdID0ge307XG5cdFx0cmVzdWx0W2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gaXRlbUlkO1xuXG5cdFx0aWYgKGRvRXh0ZW5kKVxuXHRcdFx0dGhpcy5leHBhbmRMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGFwaUl0ZW1JZCwgYXBpUmVzcG9uc2UsIHJlc3VsdCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwIChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgbGlua3MgPSBhcGlSZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXVtwYXJlbnRJZF0ubGlua3M7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxpbmtzKSB7XG5cdFx0XHRjb25zdCBpZEFycmF5ID0gbGlua3NbaXRlbVR5cGVdO1xuXG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgaWRBcnJheSkge1xuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcblxuXHRcdFx0XHR0aGlzLmV4cGFuZExvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgYXBpSXRlbUlkLCBhcGlSZXNwb25zZSwgY29udmVyc2lvbk1hcCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZXhwYW5kQ29udmVyc2lvbk1hcCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsIG5ld0l0ZW1JZD86IEl0ZW1JZCkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRsZXQgY29udmVyc2lvbk1hcEVudHJ5O1xuXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0Y29udmVyc2lvbk1hcEVudHJ5ID0gY29udmVyc2lvbk1hcFtpdGVtVHlwZV07XG5cblx0XHRpZiAoY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXTtcblxuXHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZClcblx0XHRcdG5ld0l0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XG5cblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gPSBuZXdJdGVtSWQ7XG5cdH1cblxuXHRiYXRjaEV4cGFuZENvbnZlcnNpb25NYXAgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0dGhpcy5leHBhbmRDb252ZXJzaW9uTWFwKGl0ZW1FbnRyeSwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0fVxuXG5cdGdldENvbnZlcnNpb25WYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHR9XG5cblx0YmF0Y2hDbG9uZSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge30pIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHQvLyB0aGUgdGhlIGl0ZW1zIG1pZ2h0IHJlZmVyZW5jZSBlYWNoIG90aGVyLCBzbyB1cGRhdGUgdGhlIGNvbnZlcnNpb24gbWFwIGZpcnN0XG5cdFx0dGhpcy5iYXRjaEV4cGFuZENvbnZlcnNpb25NYXAoaXRlbUVudHJpZXMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkuY2xvbmUoY29udmVyc2lvbk1hcCkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldEZ1bGxOYW1lIChmaXJzdE5hbWUsIGluZml4LCBsYXN0TmFtZSkge1xuXHRcdHJldHVybiBmaXJzdE5hbWUudHJpbSgpXG5cdFx0XHQuY29uY2F0KCcgJywgaW5maXgpLnRyaW0oKSAvLyBpbmZpeCBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nXG5cdFx0XHQuY29uY2F0KCcgJywgbGFzdE5hbWUpO1xuXHR9XG5cblx0Z2V0VGl0bGVGaWVsZCAoaXRlbVR5cGUpIHtcblx0XHRzd2l0Y2ggKGl0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdFeGVtcGxhYXInOlxuXHRcdFx0XHRyZXR1cm4gJ3NlcmllbnVtbWVyJztcblx0XHRcdGNhc2UgJ0ZhY3R1dXInOlxuXHRcdFx0XHRyZXR1cm4gJ251bW1lcic7XG5cdFx0XHRjYXNlICdGaWxlcyc6XG5cdFx0XHRcdHJldHVybiAnZnJpZW5kbHluYW1lJztcblx0XHRcdGNhc2UgJ0Z1bmN0aWUnOlxuXHRcdFx0Y2FzZSAnU3RhbmRhYXJkZnVuY3RpZSc6XG5cdFx0XHRcdHJldHVybiAnbmFhbWludGVybic7XG5cdFx0XHRjYXNlICdWb29ycmFhZG11dGF0aWUnOlxuXHRcdFx0XHRyZXR1cm4gJ29tc2NocmlqdmluZyc7XG5cdFx0XHRjYXNlICdCYXJjb2RlJzpcblx0XHRcdFx0cmV0dXJuICdjb2RlJztcblx0XHRcdGNhc2UgJ0JldGFhbG1pZGRlbCc6XG5cdFx0XHRjYXNlICdCZXRhbGluZ3Njb25kaXRpZSc6XG5cdFx0XHRjYXNlICdCcmllZnBhcGllcic6XG5cdFx0XHRjYXNlICdUYXhDbGFzcyc6XG5cdFx0XHRjYXNlICdUYXhTY2hlbWEnOlxuXHRcdFx0Y2FzZSAnQ29uZGl0aW9uJzpcblx0XHRcdGNhc2UgJ0ZhY3R1dXJtb21lbnQnOlxuXHRcdFx0Y2FzZSAnRnVuY3RpZWdyb2VwJzpcblx0XHRcdGNhc2UgJ0dyb290Ym9layc6XG5cdFx0XHRjYXNlICdJbmh1dXInOlxuXHRcdFx0Y2FzZSAnSW5odXVyZ3JvZXAnOlxuXHRcdFx0Y2FzZSAnSW5odXVybWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdNYXRlcmlhYWxDYXQnOlxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcnRhcmllZic6XG5cdFx0XHRjYXNlICdOb3RpdGllJzpcblx0XHRcdGNhc2UgJ1BsYW5uaW5nbWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxuXHRcdFx0Y2FzZSAnU3RhZmZlbGdyb2VwJzpcblx0XHRcdGNhc2UgJ1N1YnByb2plY3QnOlxuXHRcdFx0Y2FzZSAnVGFhayc6XG5cdFx0XHRjYXNlICdUYWcnOlxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxuXHRcdFx0Y2FzZSAnVGlqZCc6XG5cdFx0XHRjYXNlICdUaXRlbCc6XG5cdFx0XHRjYXNlICdUeXBlJzpcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcblx0XHRcdFx0cmV0dXJuICduYWFtJztcblx0XHRcdC8vIGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0Ly8gY2FzZSAnTWVkZXdlcmtlcic6XG5cdFx0XHQvLyBjYXNlICdQZXJzb24nOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gb25seSB1c2UgZGlzcGxheW5hbWUgZm9yIGl0ZW1zIHRoYXQgZG9udCd0IGhhdmUgYSBzaW1wbGUsIHdyaXRhYmxlIG5hbWUgZmllbGRcblx0XHRcdFx0Ly8gdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgZm9yIHRlbXBsYXRlZCBpdGVtc1xuXHRcdFx0XHRyZXR1cm4gJ2Rpc3BsYXluYW1lJztcblx0XHR9XG5cdH1cblxuXHRnZXRMb2NhbERlZmF1bHRWYWx1ZXMgKCk6IEZpZWxkTWFwIHtcblx0XHRjb25zdCBhdXRoSW50ZXJmYWNlID0gdGhpcy5hdXRoSW50ZXJmYWNlO1xuXG5cdFx0cmV0dXJuIHtwZXJtaXNzaW9uczogQUxMX1BFUk1JU1NJT05TLCBjcmVhdG9yOiBhdXRoSW50ZXJmYWNlLmdldFVzZXJJZCgpLCBjcmVhdGVkOiBtb21lbnQoKX07XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3IsXG5cdEJhdGNoU3RhdHVzLFxuXHRDb2x1bW5FeHBhbnNpb24sXG5cdENvbHVtbkhhbmRsZXIsXG5cdENvbHVtbkluZm8sXG5cdENvbHVtblNldCxcblx0Q29sdW1uVXRpbCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0Q29sdW1uU2V0RmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbUVudHJ5RmFjdG9yeSxcblx0VGVtcGxhdGVGYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIFRlbXBsYXRlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlc3BvbnNlLFxuXHRFbnRyeVN0YXR1cyxcblx0RmllbGRNYXAsXG5cdEl0ZW1JZCxcblx0SXRlbUlkQ29udmVyc2lvbk1hcCxcblx0SXRlbU9wdGlvbnMsXG5cdEl0ZW1UeXBlLFxuXHRSZXF1ZXN0Q29sdW1ucyxcblx0VGVtcGxhdGVJdGVtRW50cnlNYXAsXG5cdFRlbXBsYXRlTGlua2VkSXRlbUVudHJ5TWFwXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSwgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XG5cbi8vIHRvZG8gbWFrZSBjbGFzc1xuXG5leHBvcnQgY2xhc3MgSXRlbUhhbmRsZXIge1xuXHRlbnRyaWVzOiBJdGVtQ2FjaGU7XG5cdHRlbXBsYXRlczogeyBbaXRlbVR5cGU6IHN0cmluZ106IFRlbXBsYXRlIH0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgdGVtcGxhdGVGYWN0b3J5OiBUZW1wbGF0ZUZhY3Rvcnlcblx0KSB7XG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0ZmV0Y2hJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBvcHRpb25zOiBhbnksIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlPEl0ZW1FbnRyeT4ge1xuXHRcdGNvbnN0IGVudHJ5U3RhdHVzID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLCBsb2NhbEl0ZW1DYWNoZSk7XG5cblx0XHRpZiAoZW50cnlTdGF0dXMgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVVbmZvdW5kTG9jYWxJdGVtRXJyb3IoaXRlbVR5cGUpKTtcblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoZW50cnlTdGF0dXMuZW50cnksIGVudHJ5U3RhdHVzLnN0YXR1cywgb3B0aW9ucyk7XG5cdH1cblxuXHRmZXRjaE5ld0l0ZW0gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2U8VGVtcGxhdGVJdGVtRW50cnlNYXA+IHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSBsb2NhbEl0ZW1DYWNoZS5hZGQoXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRvcHRpb25zLmlzRHVwbGljYXRlID8gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsRHVwbGljYXRlSWQoKSA6IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoVGVtcGxhdGUoaXRlbVR5cGUsIG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLCBvcHRpb25zLnRlbXBsYXRlQ29sdW1ucykudGhlbihcblx0XHRcdHRlbXBsYXRlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUxvY2FsKGl0ZW1FbnRyeSwgb3B0aW9ucy5wYXJlbnQsIHRlbXBsYXRlLCBsb2NhbEl0ZW1DYWNoZSk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0gaXRlbUlkc1xuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxJdGVtRW50cnlbXT59XG5cdCAqXG5cdCAqIEZvciBldmVyeSBpdGVtaWQgZmluZCB0aGUgc3RhdHVzIG9mIHRoZSBJdGVtRW50cnkgYW5kIHJlc29sdmUgdGhlIHByb21pc2VzIHNvIHRoZSByZXN1bHQgaXNcblx0ICogYSB1c2FibGUgSXRlbUVudHJ5XG5cdCAqL1xuXG5cdGZldGNoSXRlbXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkczogSXRlbUlkW10sIG9wdGlvbnM6IGFueSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcblx0XHRjb25zdCBiYXRjaFN0YXR1cyA9IHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2Vcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaXRlbUlkcykge1xuXHRcdFx0Y29uc3QgZW50cnlTdGF0dXMgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlKTtcblxuXHRcdFx0aWYgKGVudHJ5U3RhdHVzID09PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0YmF0Y2hTdGF0dXMuYWRkKGVudHJ5U3RhdHVzKTtcblx0XHR9XG5cblx0XHRjb25zdCBwcm9taXNlczogeyBlbnRyaWVzOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiwgcmVxdWVzdHM/OiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB9ID1cblx0XHRcdHsgZW50cmllczogYmF0Y2hTdGF0dXMuZ2V0UHJvbWlzZXMoKSB9O1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc1JlcXVlc3RzKCkpXG5cdFx0XHRwcm9taXNlcy5yZXF1ZXN0cyA9IHRoaXMucmVxdWVzdEl0ZW1zKGl0ZW1UeXBlLCBiYXRjaFN0YXR1cy5nZXRSZXF1ZXN0SWRzKCksIG9wdGlvbnMuY29sdW1ucyk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmJhdGNoUmVzb2x2ZShcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRiYXRjaFN0YXR1cyxcblx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnMsXG5cdFx0XHRcdFx0PHsgZW50cmllczogSXRlbUVudHJ5W10sIHJlcXVlc3RzPzogQXBpUmVzcG9uc2VQcm9jZXNzb3IgfT4gcmVzb2x2ZWRcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVzb2x2ZUNhY2hlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLCBvcHRpb25zKTogUHJvbWlzZTxJdGVtRW50cnk+IHtcblx0XHRzd2l0Y2ggKHN0YXR1cykge1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1FbnRyeSk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKSxcblx0XHRcdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxuXHRcdFx0XHRjb25zdCBjb2x1bW5EaWZmZXJlbmNlID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnMoXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMucmVxdWVzdCxcblx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnNcblx0XHRcdFx0KS5kaWZmZXJlbmNlO1xuXG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW0oaXRlbUVudHJ5LCBjb2x1bW5EaWZmZXJlbmNlKS50aGVuKFxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZUV4cGFuc2lvbihcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5EaWZmZXJlbmNlLFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlJFU09MVkVfVkFMVUVTOlxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1FbnRyeSkudGhlbihcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVSZW1vdGVWYWx1ZXMoaXRlbUVudHJ5LCByZXNwb25zZSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xuXHRcdFx0ZGVmYXVsdDogLy8gY2FzZSBFTlRSWV9TVEFUVVMuUkVTT0xWRTpcblx0XHRcdFx0dGhpcy5yZXF1ZXN0SXRlbShpdGVtRW50cnkpLnRoZW4oXG5cdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5yZXNvbHZlUmVtb3RlKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLnJlc29sdmUocmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XG5cdFx0fVxuXHR9XG5cblx0cmVzb2x2ZUxvY2FsIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcGFyZW50LCB0ZW1wbGF0ZSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFRlbXBsYXRlSXRlbUVudHJ5TWFwIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IGl0ZW1JZENvbnZlcnNpb24gPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIHRlbXBsYXRlLnJlc3BvbnNlKTtcblxuXHRcdGl0ZW1FbnRyeS5jb2x1bW5zID0gdGVtcGxhdGUuY29sdW1ucztcblxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwpXG5cdFx0XHRpdGVtRW50cnkuc2V0UGFyZW50KHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCk7IC8vIGNyZWF0ZSBuZXcgb2JqZWN0XG5cblx0XHRpdGVtRW50cnkuc2V0TG9jYWxGaWVsZHModGVtcGxhdGUuZmllbGRzLCBpdGVtSWRDb252ZXJzaW9uKS5yZXNvbHZlKCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bWFpbjogaXRlbUVudHJ5LFxuXHRcdFx0bGlua2VkOiB0aGlzLmNyZWF0ZUxvY2FsRW50cmllcyhpdGVtVHlwZSwgaXRlbUlkLCB0ZW1wbGF0ZSwgaXRlbUlkQ29udmVyc2lvbiwgbG9jYWxJdGVtQ2FjaGUpXG5cdFx0fTtcblx0fVxuXG5cdHJlc29sdmVFeHBhbnNpb24gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbiwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlKTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0Ly8gQW5vdGhlciByZXF1ZXN0IGFscmVhZHkgcmVxdWVzdGVkIHRoZSBjb2x1bW5zIHdlIG5lZWQgaGVyZSwgbm8gbmVlZCB0byBleHBhbmQgdGhlIGl0ZW0gYW5kIHJlc29sdmUgaXQgKGFscmVhZHkgZG9uZSBieSBvdGhlciByZXF1ZXN0KVxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5O1xuXG5cdFx0aXRlbUVudHJ5LmV4cGFuZChcblx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLnJvb3QpLFxuXHRcdFx0ZXhwYW5zaW9uUmVzdWx0XG5cdFx0KTtcblxuXHRcdHJldHVybiBpdGVtRW50cnkucmVzb2x2ZSgpO1xuXHR9XG5cblx0cmVzb2x2ZVJlbW90ZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtblNldDogQ29sdW1uU2V0LCByZXNwb25zZTogQXBpUmVzcG9uc2UpOiBJdGVtRW50cnkgfCBudWxsIHtcblx0XHRjb25zdCByZXNwb25zZUZpZWxkcyA9IHRoaXMuZ2V0UmVzcG9uc2VGaWVsZHMoaXRlbUVudHJ5LCBjb2x1bW5TZXQsIHJlc3BvbnNlKTtcblxuXHRcdGlmIChyZXNwb25zZUZpZWxkcyA9PT0gbnVsbClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQocmVzcG9uc2VGaWVsZHMuaW5pdGlhbCwgcmVzcG9uc2VGaWVsZHMuZGVyaXZlZCwgY29sdW1uU2V0KTtcblx0fVxuXG5cdHJlc29sdmVSZW1vdGVWYWx1ZXMgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCByZXNwb25zZTogQXBpUmVzcG9uc2UpOiBJdGVtRW50cnkgfCBudWxsIHtcblx0XHRjb25zdCByZXNwb25zZUZpZWxkcyA9IHRoaXMuZ2V0UmVzcG9uc2VGaWVsZHMoaXRlbUVudHJ5LCBpdGVtRW50cnkuY29sdW1ucywgcmVzcG9uc2UpO1xuXG5cdFx0aWYgKHJlc3BvbnNlRmllbGRzID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5LnVwZGF0ZUZpZWxkcyhyZXNwb25zZUZpZWxkcy5pbml0aWFsLCByZXNwb25zZUZpZWxkcy5kZXJpdmVkLCBmYWxzZSkucmVzb2x2ZSgpO1xuXHR9XG5cblx0Z2V0UmVzcG9uc2VGaWVsZHMgKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5LFxuXHRcdGNvbHVtblNldCxcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2Vcblx0KTogeyBpbml0aWFsOiBGaWVsZE1hcCwgZGVyaXZlZDogRmllbGRNYXAgfSB8IG51bGwge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0aWYgKGluaXRpYWwgPT09IHVuZGVmaW5lZCkgeyAvLyBxdWVyeSByZXR1cm5lZCBubyByZXN1bHRzXG5cdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XG5cdFx0XHR0aGlzLmVudHJpZXMuY2xlYXIoaXRlbUVudHJ5KTtcblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGluaXRpYWw6IGluaXRpYWwsXG5cdFx0XHRkZXJpdmVkOiByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0LnJvb3QpXG5cdFx0fTtcblx0fVxuXG5cdGZldGNoVGVtcGxhdGUgKGl0ZW1UeXBlOiBzdHJpbmcsIHRlbXBsYXRlT3B0aW9uczogYW55ID0ge30sIHRlbXBsYXRlQ29sdW1uczogYW55ID0ge30pOiBQcm9taXNlPFRlbXBsYXRlPiB7XG5cdFx0Y29uc3QgaGFzVGVtcGxhdGVPcHRpb25zID0gaGFzUHJvcGVydGllcyh0ZW1wbGF0ZU9wdGlvbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkl0ZW1UeXBlID0gZ2V0Rmlyc3RQcm9wZXJ0eSh0ZW1wbGF0ZUNvbHVtbnMpOyAvLyBpdCdzIHBvc3NpYmxlIHRvIGFkZCBjb2x1bW5zIHRvIGxpbmtlZCBpdGVtc1xuXG5cdFx0aWYgKCFoYXNUZW1wbGF0ZU9wdGlvbnMpIHtcblx0XHRcdGNvbnN0IGNhY2hlZFRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXNbaXRlbVR5cGVdO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNhY2hlZFRlbXBsYXRlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0KFxuXHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5VdGlsLnJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZShcblx0XHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0dGVtcGxhdGVDb2x1bW5zW2NvbHVtbkl0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdGNhY2hlZFRlbXBsYXRlLnJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY2FjaGVkVGVtcGxhdGUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChcblx0XHRcdHtcblx0XHRcdFx0dGVtcGxhdGU6IHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHRlbXBsYXRlT3B0aW9ucyksXG5cdFx0XHRcdGFkZGl0aW9uYWxDb2x1bW5zOiBjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCA/XG5cdFx0XHRcdFx0e30gOlxuXHRcdFx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChjb2x1bW5JdGVtVHlwZSwgdGVtcGxhdGVDb2x1bW5zW2NvbHVtbkl0ZW1UeXBlXSlcblx0XHRcdH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlUmVzcG9uc2UgPSByZXNvbHZlZC50ZW1wbGF0ZTtcblxuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdGVtcGxhdGVSZXNwb25zZSwgcmVzb2x2ZWQuYWRkaXRpb25hbENvbHVtbnMpO1xuXG5cdFx0XHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zICYmIHRlbXBsYXRlUmVzcG9uc2UuY2FjaGVhYmxlKVxuXHRcdFx0XHRcdHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXSA9IHRlbXBsYXRlO1xuXG5cdFx0XHRcdHJldHVybiB0ZW1wbGF0ZTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0RW50cnlTdGF0dXMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBhbnksXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBFbnRyeVN0YXR1czxJdGVtRW50cnk+IHwgbnVsbCB7XG5cdFx0bGV0IGl0ZW1FbnRyeTtcblxuXHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKGl0ZW1JZCkpIHtcblx0XHRcdGl0ZW1FbnRyeSA9IGxvY2FsSXRlbUNhY2hlLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4geyBlbnRyeTogaXRlbUVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKSB9O1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpdGVtRW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHsgZW50cnk6IGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpLCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKSB9O1xuXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMuY29sdW1ucywgb3B0aW9ucy5kZWZlclJlcXVlc3QpO1xuXG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0aXRlbUVudHJ5LnNldFBhcmVudChwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQpO1xuXG5cdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0dGhpcy5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGVudHJ5OiBpdGVtRW50cnksXG5cdFx0XHRzdGF0dXM6IG9wdGlvbnMuZGVmZXJSZXF1ZXN0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlJFU09MVkVcblx0XHR9O1xuXHR9XG5cblx0aXNDb2x1bW5TdXBlcnNldCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5pc0xvY2FsKCkgfHwgaXRlbUVudHJ5LmNvbHVtbnMuaXNTdXBlcnNldE9mKGNvbHVtbnMpO1xuXHR9XG5cblx0Z2V0Q2FjaGVkRW50cnlTdGF0dXMgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zKTogRU5UUllfU1RBVFVTIHtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IG9wdGlvbnMuY29sdW1ucztcblxuXHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XG5cdFx0XHRpZiAoaXRlbUVudHJ5LmRlZmVyUmVxdWVzdCkge1xuXHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5leHBhbmRSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucyk7XG5cblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5pc0NvbHVtblN1cGVyc2V0KGl0ZW1FbnRyeSwgcmVxdWVzdENvbHVtbnMpID9cblx0XHRcdFx0RU5UUllfU1RBVFVTLlBST01JU0VEIDpcblx0XHRcdFx0RU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuaXNDb2x1bW5TdXBlcnNldChpdGVtRW50cnksIHJlcXVlc3RDb2x1bW5zKSkge1xuXHRcdFx0aXRlbUVudHJ5LmRlZmVyKCk7XG5cblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xuXHRcdH1cblxuXHRcdGlmIChpdGVtRW50cnkucmVsb2FkUXVldWVkKSB7XG5cdFx0XHRpdGVtRW50cnkucmVsb2FkUXVldWVkID0gZmFsc2U7XG5cblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcblxuXHRcdFx0aXRlbUVudHJ5LmRlZmVyKCk7XG5cblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGl0ZW1UeXBlXG5cdCAqIEBwYXJhbSB7QmF0Y2hTdGF0dXN9IGJhdGNoU3RhdHVzXG5cdCAqIEBwYXJhbSByZXF1ZXN0Q29sdW1uc1xuXHQgKiBAcGFyYW0gcmVzb2x2ZWRcblx0ICogQHJldHVybnMge0l0ZW1FbnRyeVtdfVxuXHQgKlxuXHQgKiBmb3IgZXZlcnkgdHlwZSBvZiBlbnRyeSBzdGF0dXMgdGhlcmUgaXMgaW4gdGhpcyBiYXRjaCByZXF1ZXN0IG1ha2Ugc3VyZSB0aGUgZW50cmllcyBnZXQgcmVzb2x2ZWQuXG5cdCAqIHRoZW4gcmV0dXJuIGEgYXJyYXkgb2YgdGhlIHJlc3VsdGluZyBJdGVtRW50cnlBcnJheVxuXHQgKi9cblx0YmF0Y2hSZXNvbHZlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0YmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNvbHZlZDogeyBlbnRyaWVzOiBJdGVtRW50cnlbXSwgcmVxdWVzdHM/OiBBcGlSZXNwb25zZVByb2Nlc3NvciB9XG5cdCk6IEl0ZW1FbnRyeVtdIHwgUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCByZXNwb25zZSA9IDxBcGlSZXNwb25zZVByb2Nlc3Nvcj4gcmVzb2x2ZWQucmVxdWVzdHM7XG5cdFx0Y29uc3QgZXhwYW5kU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdO1xuXHRcdGNvbnN0IHJlc29sdmVTdGF0dXMgPSBbRU5UUllfU1RBVFVTLlJFU09MVkVdO1xuXG5cdFx0bGV0IHN1Y2Nlc3MgPSB0cnVlO1xuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoZXhwYW5kU3RhdHVzKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0KTtcblxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0XHRleHBhbmRTdGF0dXMsXG5cdFx0XHRcdGl0ZW1FbnRyeSA9PiB0aGlzLnJlc29sdmVFeHBhbnNpb24oaXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb24sIHJlc3BvbnNlKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhyZXNvbHZlU3RhdHVzKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSk7XG5cblx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFx0cmVzb2x2ZVN0YXR1cyxcblx0XHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5yZXNvbHZlUmVtb3RlKGl0ZW1FbnRyeSwgY29sdW1uSW5mbywgcmVzcG9uc2UpID09PSBudWxsKVxuXHRcdFx0XHRcdFx0c3VjY2VzcyA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFtFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVNdLFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0aWYgKHRoaXMucmVzb2x2ZVJlbW90ZVZhbHVlcyhpdGVtRW50cnksIHJlc3BvbnNlKSA9PT0gbnVsbClcblx0XHRcdFx0XHRzdWNjZXNzID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdC8vIHRvZG86IG5vIGl0ZW0gZXJyb3IgKHttZXNzYWdlOiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UudW5kZWZpbmVkSXRlbUVycm9yfSlcblx0XHRyZXR1cm4gc3VjY2VzcyA/IGJhdGNoU3RhdHVzLmdldEFycmF5KCkgOiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoKTtcblx0fVxuXG5cdGNyZWF0ZUxvY2FsRW50cmllcyAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0bG9jYWxQYXJlbnRJZDogSXRlbUlkLFxuXHRcdHRlbXBsYXRlLFxuXHRcdGl0ZW1JZENvbnZlcnNpb246IEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRleGNsdWRlSXRlbVR5cGVzOiBJdGVtVHlwZVtdID0gW11cblx0KTogVGVtcGxhdGVMaW5rZWRJdGVtRW50cnlNYXBbXSB7XG5cdFx0Y29uc3QgYXBpUmVzcG9uc2UgPSB0ZW1wbGF0ZS5yZXNwb25zZTtcblx0XHRjb25zdCBjb2x1bW5JbmZvTWFwID0ge307XG5cdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0ge307XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTx7IGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdIH0+ID0gW107XG5cblx0XHQvLyBUT0RPOiBkaXNhYmxlIGNhY2hpbmc/XG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBhcGlSZXNwb25zZS5pdGVtcykge1xuXHRcdFx0aWYgKGl0ZW1UeXBlID09PSBwYXJlbnRUeXBlIHx8IGV4Y2x1ZGVJdGVtVHlwZXMuaW5kZXhPZihpdGVtVHlwZSkgIT09IC0xKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Y29sdW1uSW5mb01hcFtpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNyZWF0ZUVudHJpZXMgPSAocGFyZW50VHlwZTIsIGxvY2FsUGFyZW50SWQyLCBhcGlQYXJlbnRJZCkgPT4ge1xuXHRcdFx0Y29uc3QgcGFyZW50ID0geyBpdGVtVHlwZTogcGFyZW50VHlwZTIsIGl0ZW1JZDogbG9jYWxQYXJlbnRJZDIgfTtcblx0XHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZTJdW2FwaVBhcmVudElkXS5saW5rcztcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xuXHRcdFx0XHRpZiAoZXhjbHVkZUl0ZW1UeXBlcy5pbmRleE9mKGl0ZW1UeXBlKSAhPT0gLTEpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0aWYgKCFsaW5rcy5oYXNPd25Qcm9wZXJ0eShpdGVtVHlwZSkpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0Y29uc3QgaWRBcnJheSA9IGxpbmtzW2l0ZW1UeXBlXTtcblxuXHRcdFx0XHQvLyB0aGUgaXRlbSBlbnRyaWVzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVzdWx0IGluIHRvcC1kb3duIG9yZGVyXG5cdFx0XHRcdGlmIChpdGVtRW50cnlNYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goeyBpdGVtVHlwZTogaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0gW10gfSk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgaWRBcnJheSkge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsSXRlbUlkID0gaXRlbUlkQ29udmVyc2lvbltpdGVtVHlwZV1bYXBpSXRlbUlkXTtcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0TG9jYWxMaW5rZWQoXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdGxvY2FsSXRlbUlkLFxuXHRcdFx0XHRcdFx0YXBpUmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGFwaUl0ZW1JZCksXG5cdFx0XHRcdFx0XHRwYXJlbnQsXG5cdFx0XHRcdFx0XHRjb2x1bW5JbmZvTWFwW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdGl0ZW1JZENvbnZlcnNpb25cblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0aXRlbUVudHJ5TWFwW2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0XHRjcmVhdGVFbnRyaWVzKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCwgYXBpSXRlbUlkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjcmVhdGVFbnRyaWVzKHBhcmVudFR5cGUsIGxvY2FsUGFyZW50SWQsIGFwaVJlc3BvbnNlLmxpbmtzW3BhcmVudFR5cGVdWzBdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaFRpdGxlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBkZWZlclJlcXVlc3QgPSB0cnVlLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKSB7XG5cdFx0Y29uc3QgdGl0bGVGaWVsZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKGl0ZW1UeXBlKTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKHsgY29sdW1uczogW3RpdGxlRmllbGRdLCBkZWZlclJlcXVlc3Q6IGRlZmVyUmVxdWVzdCB9KSxcblx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0KS50aGVuKFxuXHRcdFx0Ly8gdG9kbzogSXRlbUVudHJ5IHwgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcFxuXHRcdFx0KGVudHJ5OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKGVudHJ5Lm1haW4gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXR1cm4gZW50cnkubWFpbi5nZXRGaWVsZHMoKVt0aXRsZUZpZWxkXTtcblxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZ2V0RmllbGRzKClbdGl0bGVGaWVsZF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVEZXJpdmVkVmFsdWVzIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0Y29sdW1uczogQ29sdW1uSW5mb1tdLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xuXHRcdGNvbnN0IHByb21pc2VzOiBBcnJheTxQcm9taXNlPHZvaWQ+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcblx0XHRcdHByb21pc2VzLnB1c2godGhpcy5mZXRjaERlcml2ZWRWYWx1ZXNCeUNvbHVtbihpdGVtRW50cmllcywgY29sdW1uLCBsb2NhbEl0ZW1DYWNoZSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKFxuXHRcdFx0KCkgPT4gaXRlbUVudHJpZXMsXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXREZWZhdWx0VmFsdWVzQnlDb2x1bW4gKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgcm9vdENvbHVtbjogQ29sdW1uSW5mbyk6IHZvaWQge1xuXHRcdGNvbnN0IGNoaWxkQ29sdW1ucyA9IHJvb3RDb2x1bW4uY2hpbGRyZW47XG5cblx0XHRpZiAoY2hpbGRDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdC8vIG5vIG5lZWQgdG8gZG8gYSByZWN1cnNpdmUgY2FsbCBoZXJlLCBmdW5jdGlvbiB3aWxsIGdldCBjYWxsZWQgbXVsdGlwbGUgdGltZXNcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjaGlsZENvbHVtbnMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0XHRpdGVtRW50cnkuZGVyaXZlZFtjb2x1bW4ucGF0aF0gPSB0aGlzLmFwaUZvcm1hdHRlci5nZXREZWZhdWx0VmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEl0ZW1JZEJ5Q29sdW1uIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29sdW1uOiBDb2x1bW5JbmZvKTogSXRlbUlkIHtcblx0XHRpZiAoY29sdW1uLmxldmVsID09PSAwKSB7XG5cdFx0XHRpZiAoY29sdW1uLmFwaUNvbHVtbi50eXBlID09PSAnbGluaycgJiYgaXRlbUVudHJ5LnBhcmVudCAhPT0gbnVsbClcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5wYXJlbnQuaXRlbUlkO1xuXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5Lm1vZGlmaWVkW2NvbHVtbi5wYXRoXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdO1xuXHR9XG5cblx0cHJpdmF0ZSBmZXRjaERlcml2ZWRWYWx1ZXNCeUNvbHVtbiAoXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxuXHRcdHJvb3RDb2x1bW46IENvbHVtbkluZm8sXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjaGlsZENvbHVtbnMgPSByb290Q29sdW1uLmNoaWxkcmVuO1xuXG5cdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0XHRjb25zdCBmaXJzdENoaWxkID0gY2hpbGRDb2x1bW5zWzBdO1xuXG5cdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPT09IDEgJiYgZmlyc3RDaGlsZC5hcGlDb2x1bW4udHlwZSA9PT0gJ2lkJykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRcdGl0ZW1FbnRyeS5kZXJpdmVkW2ZpcnN0Q2hpbGQucGF0aF0gPSB0aGlzLmdldEl0ZW1JZEJ5Q29sdW1uKGl0ZW1FbnRyeSwgcm9vdENvbHVtbik7XG5cblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0XHR9XG5cblx0XHRjb25zdCBpdGVtSWRNYXA6IHsgW2l0ZW1JZDogc3RyaW5nXTogSXRlbUVudHJ5W10gfSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkQnlDb2x1bW4oaXRlbUVudHJ5LCByb290Q29sdW1uKTtcblxuXHRcdFx0aWYgKGl0ZW1JZE1hcFtpdGVtSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdID0gW107XG5cblx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdLnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRpZiAoaXRlbUlkTWFwLm51bGwgIT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuZ2V0RGVmYXVsdFZhbHVlc0J5Q29sdW1uKGl0ZW1JZE1hcC5udWxsLCByb290Q29sdW1uKTtcblxuXHRcdGNvbnN0IGl0ZW1JZHM6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtSWRNYXApIHtcblx0XHRcdGlmIChpdGVtSWQgPT09ICdudWxsJylcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGl0ZW1JZHMucHVzaCgraXRlbUlkKTtcblx0XHR9XG5cblx0XHRpZiAoaXRlbUlkcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0XHRjb25zdCBjb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjaGlsZENvbHVtbnMpXG5cdFx0XHRjb2x1bW5JZHMucHVzaChjb2x1bW4uaWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hJdGVtcyhcblx0XHRcdHJvb3RDb2x1bW4uaXRlbVR5cGUsXG5cdFx0XHRpdGVtSWRzLFxuXHRcdFx0eyBjb2x1bW5zOiBjb2x1bW5JZHMgfSxcblx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0KS50aGVuKFxuXHRcdFx0c291cmNlSXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBzb3VyY2VJdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeUZpZWxkcyA9IGl0ZW1FbnRyeS5nZXRGaWVsZHMoKTtcblx0XHRcdFx0XHRjb25zdCBkZXN0aW5hdGlvbkl0ZW1FbnRyaWVzID0gaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBkZXN0aW5hdGlvbkl0ZW1FbnRyeSBvZiBkZXN0aW5hdGlvbkl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjaGlsZENvbHVtbnMpXG5cdFx0XHRcdFx0XHRcdGRlc3RpbmF0aW9uSXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdID0gaXRlbUVudHJ5RmllbGRzW2NvbHVtbi5pZF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIGNoaWxkQ29sdW1ucywgbG9jYWxJdGVtQ2FjaGUpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3QpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0SXRlbXMoaXRlbUVudHJ5Lml0ZW1UeXBlLCBbaXRlbUVudHJ5Lml0ZW1JZF0sIHJlcXVlc3RDb2x1bW5zKTtcblx0fVxuXG5cdHJlcXVlc3RJdGVtcyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWRzOiBJdGVtSWRbXSwgY29sdW1uczogUmVxdWVzdENvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHsgaWQ6IGl0ZW1JZHMgfSwgeyBbaXRlbVR5cGVdOiBjb2x1bW5zIH0pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciwgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5TZXQsIEl0ZW1IYW5kbGVyLCBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIEl0ZW1FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEVudHJ5UGFyZW50TnVsbCwgSXRlbUlkLCBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbnMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IHBhdGhFeGlzdHMgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlcXVlc3RTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0cmVxdWVzdEl0ZW0gKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR7aWQ6IGl0ZW1JZH0sXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbXMgKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHF1ZXJ5ID0gY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCxcblx0XHRjb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1uc1xuXHQpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xuXG5cdFx0Y29uc3QgcGFyYW1zID0ge1xuXHRcdFx0cmVxdWVzdFR5cGU6ICdxdWVyeScsXG5cdFx0XHRpdGVtVHlwZTogb3B0aW9ucy5xdWVyeUl0ZW1UeXBlID09PSBudWxsID8gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlIDogb3B0aW9ucy5xdWVyeUl0ZW1UeXBlLFxuXHRcdFx0Y29sdW1uczoge1tjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdOiBjb2x1bW5zfSxcblx0XHRcdHF1ZXJ5OiBxdWVyeSxcblx0XHRcdGxpbWl0OiBudWxsXG5cdFx0fTtcblxuXHRcdGlmIChvcHRpb25zLmxpbWl0ICE9PSBudWxsKVxuXHRcdFx0cGFyYW1zLmxpbWl0ID0gb3B0aW9ucy5saW1pdDtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMpO1xuXHR9XG5cblx0cmVxdWVzdExpbmtJdGVtcyAocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgP1xuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0e2lkOiBwYXJlbnRJZEFycmF5fSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHRcdCkgOlxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHR7bGlua2VkVG86IHBhcmVudFR5cGUsIHF1ZXJ5OiB7aWQ6IHBhcmVudElkQXJyYXl9fVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyAvLyBzaG91bGQgY29udGFpbiBhIGRlcml2ZWQgY29sdW1uIHRoYXQgcmVmZXJzIHRvIHRoZSBwYXJlbnRcblx0XHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzRXhwYW5zaW9uIChcblx0XHRyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W11cblx0KSB7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oaXRlbUVudHJ5LCByZXNwb25zZSwgY29sdW1uRXhwYW5zaW9uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uO1xuXHR9XG5cblx0cHJvY2Vzc1Jlc3BvbnNlIChcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXG5cdFx0Y29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0Y29sdW1uU2V0Lml0ZW1UeXBlLFxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZSA/IHRydWUgOiBjb2x1bW5TZXQucmVxdWVzdCxcblx0XHRcdGNvbHVtblNldC5yZXNwb25zZVxuXHRcdClcblx0KTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xuXHRcdGNvbnN0IGl0ZW1IYW5kbGVyID0gdGhpcy5pdGVtSGFuZGxlcjtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtblNldC5pdGVtVHlwZTtcblx0XHRjb25zdCByb290Q29sdW1ucyA9IGNvbHVtblNldC5yb290O1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogQXJyYXk8UHJvbWlzZTxJdGVtRW50cnk+PiA9IFtdO1xuXG5cdFx0Ly8gc2hvdWxkIGJlIGZhc3QuLi5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpZEFycmF5KSB7XG5cdFx0XHRsZXQgaXRlbUVudHJ5ID0gaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGl0ZW1JZCxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxuXHRcdFx0XHRcdGNvbHVtblNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGl0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XG5cdFx0XHRcdFx0aWYgKGl0ZW1FbnRyeS5kZWZlclJlcXVlc3QpIHtcblx0XHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQoXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5TZXRcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlKTtcblx0XHRcdFx0fSBlbHNlIGlmIChpdGVtRW50cnkucmVsb2FkUXVldWVkKSB7XG5cdFx0XHRcdFx0aXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVGaWVsZHMoXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXG5cdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShpdGVtRW50cnksIHJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb24pKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcblx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxuXHRcdFx0cmVzb2x2ZWRFbnRyaWVzID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCByZXNvbHZlZEVudHJ5IG9mIHJlc29sdmVkRW50cmllcykge1xuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oXG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkRW50cnksXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHQ8Q29sdW1uRXhwYW5zaW9uPiBjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyaWVzO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRoYW5kbGVDYWNoZWRJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbikge1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbCA/XG5cdFx0XHRpdGVtRW50cnkgOlxuXHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkKSxcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkLFxuXHRcdFx0XHRcdGV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLnJvb3Rcblx0XHRcdFx0KSxcblx0XHRcdFx0ZXhwYW5zaW9uUmVzdWx0XG5cdFx0XHQpO1xuXHR9XG5cblx0cHJvY2Vzc0xpbmtSZXNwb25zZSAoXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRvcHRpb25zXG5cdCkge1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xuXHRcdGNvbnN0IGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdFx0Y29uc3QgcGFyZW50SXRlbXMgPSByZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXTtcblx0XHRjb25zdCBwcm9taXNlczogYW55ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdHByb21pc2VzW3BhcmVudElkXSA9IHBhdGhFeGlzdHMocGFyZW50SXRlbXMsIFtwYXJlbnRJZCwgJ2xpbmtzJywgaXRlbVR5cGVdKSA/XG5cdFx0XHRcdHRoaXMucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHBhcmVudEl0ZW1zW3BhcmVudElkXS5saW5rc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0e2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfSxcblx0XHRcdFx0XHRjb2x1bW5TZXQsXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdCkgOlxuXHRcdFx0XHRbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aXRlbXM6IHJlc29sdmVkLFxuXHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtblNldCxcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb246IGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHR9O1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8nO1xuXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlU2VydmljZSB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblxuXHR9XG5cblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdHtcblx0XHRcdFx0ZWRpdDogZmFsc2UsXG5cdFx0XHRcdG9uQ2hhbmdlOiBub29wLFxuXHRcdFx0XHRvbkRlYWN0aXZhdGU6IG5vb3Bcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0Y29tcGFyZU9wdGlvbnMgKGZpcnN0LCBzZWNvbmQpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBmaXJzdCkge1xuXHRcdFx0aWYgKGZpcnN0W2tleV0gIT09IHNlY29uZFtrZXldKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cbiIsImltcG9ydCB7IERVUExJQ0FURV9LRVlXT1JELCBEVVBMSUNBVEVfUFJFRklYLCBORVdfS0VZV09SRCwgTkVXX1BSRUZJWCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBJdGVtSWQsIFN0YXRlS2V5LCBTdGF0ZUtleVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBLZXlTZXJ2aWNlIHtcblx0c2VwYXJhdG9yOiBzdHJpbmcgPSAnOic7XG5cblx0Y29uc3RydWN0b3IgKCkge31cblxuXHRnZXRTaW5nbGVLZXkgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGl0ZW1UeXBlICsgdGhpcy5zZXBhcmF0b3IgKyBpdGVtSWQ7XG5cdH1cblxuXHRnZXRDc3NLZXkgKCkge1xuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywgJ18nKTtcblx0fVxuXG5cdHBhcnNlU3RhdGVLZXkgKHN0YXRlS2V5OiBzdHJpbmcpOiBTdGF0ZUtleSB8IG51bGwge1xuXHRcdHN0YXRlS2V5ID0gc3RhdGVLZXkudG9TdHJpbmcoKTtcblxuXHRcdGlmIChzdGF0ZUtleS5zdWJzdHJpbmcoMCwgTkVXX0tFWVdPUkQubGVuZ3RoKSA9PT0gTkVXX0tFWVdPUkQpXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBTdGF0ZUtleVR5cGUuTmV3LFxuXHRcdFx0XHR0ZW1wbGF0ZTogc3RhdGVLZXkuc3Vic3RyaW5nKE5FV19LRVlXT1JELmxlbmd0aCkgLy8gVE9ETzogdGhpcyBpcyBjdXJyZW50bHkgbm90IGJlaW5nIHVzZWQsIHJlZXZhbHVhdGVcblx0XHRcdH07XG5cblx0XHRpZiAoc3RhdGVLZXkuc3Vic3RyaW5nKDAsIERVUExJQ0FURV9LRVlXT1JELmxlbmd0aCkgPT09IERVUExJQ0FURV9LRVlXT1JEKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogU3RhdGVLZXlUeXBlLkR1cGxpY2F0ZSxcblx0XHRcdFx0aXRlbUlkOiArc3RhdGVLZXkuc3Vic3RyaW5nKERVUExJQ0FURV9LRVlXT1JELmxlbmd0aClcblx0XHRcdH07XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldER1cGxpY2F0ZVN0YXRlS2V5IChpdGVtSWQ6IHN0cmluZyB8IG51bWJlcikge1xuXHRcdHJldHVybiBEVVBMSUNBVEVfS0VZV09SRCArIGl0ZW1JZDtcblx0fVxuXG5cdGdldE5ld1N0YXRlS2V5ICh0ZW1wbGF0ZVR5cGU6IHN0cmluZykge1xuXHRcdHJldHVybiBORVdfS0VZV09SRCArIHRlbXBsYXRlVHlwZTtcblx0fVxuXG5cdGdldExvY2FsSWQgKCk6IEl0ZW1JZCB7XG5cdFx0cmV0dXJuICsoTkVXX1BSRUZJWCArIHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpO1xuXHR9XG5cblx0Z2V0TG9jYWxEdXBsaWNhdGVJZCAoKTogSXRlbUlkIHtcblx0XHRyZXR1cm4gKyhEVVBMSUNBVEVfUFJFRklYICsgdGhpcy5nZXRSYW5kb21TdHJpbmcoKSk7XG5cdH1cblxuXHRnZXRSYW5kb21TdHJpbmcgKCkge1xuXHRcdHJldHVybiAoJycgKyBNYXRoLnJhbmRvbSgpKS5zcGxpdCgnLicpWzFdLnN1YnN0cigwLCA4KTtcblx0fVxuXG5cdC8vIG5vdGU6IHRoZSBjaGFuZ2VzIGNvbXBpbGVyIHVzZXMgdGhpc1xuXHQvLyBtaWdodCBiZSBjYWxsZWQgd2l0aCB1bmRlZmluZWQgKGl0ZW1IYW5kbGVyLmNyZWF0ZVJlcXVlc3QpXG5cdGlzTG9jYWxJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gaXRlbUlkICE9PSB1bmRlZmluZWQgJiYgKHRoaXMuaXNOZXdJZChpdGVtSWQpIHx8IHRoaXMuaXNEdXBsaWNhdGVJZChpdGVtSWQpKTtcblx0fVxuXG5cdGlzTmV3SWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGl0ZW1JZCA9PT0gTkVXX0tFWVdPUkQgfHwgKCcnICsgaXRlbUlkKS5zdWJzdHJpbmcoMCwgTkVXX1BSRUZJWC5sZW5ndGgpID09PSBORVdfUFJFRklYO1xuXHR9XG5cblx0aXNEdXBsaWNhdGVJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcblx0XHRyZXR1cm4gaXRlbUlkID09PSBEVVBMSUNBVEVfS0VZV09SRCB8fCAoJycgKyBpdGVtSWQpLnN1YnN0cmluZygwLCBEVVBMSUNBVEVfUFJFRklYLmxlbmd0aCkgPT09IERVUExJQ0FURV9QUkVGSVg7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yLCBDb2xsZWN0aW9uTWF0Y2hlciwgQ29sdW1uU2V0LCBMb2NhbENhY2hlLCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IHR5cGUgRW50cnlQYXJlbnQgPSB7IGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyIH07XG5cbmV4cG9ydCB0eXBlIEVudHJ5UGFyZW50TnVsbCA9IEVudHJ5UGFyZW50IHwgbnVsbDtcblxuZXhwb3J0IHR5cGUgRmllbGRNYXAgPSB7XG5cdFtrZXk6IHN0cmluZ106IGFueVxufTtcblxuZXhwb3J0IHR5cGUgSXRlbU9wdGlvbnMgPSBhbnk7IC8vIFRPRE9cbi8vIGV4cG9ydCB0eXBlIEl0ZW1FbnRyeU9wdGlvbnMgPSBhbnk7IC8vIFRPRE9cbi8vIGV4cG9ydCB0eXBlIEl0ZW1SZXNvdXJjZU9wdGlvbnMgPSBhbnk7IC8vIFRPRE9cblxuZXhwb3J0IGNvbnN0IGVudW0gU3RhdGVLZXlUeXBlIHtcblx0TmV3ID0gJ25ldycsXG5cdER1cGxpY2F0ZSA9ICdkdXBsaWNhdGUnXG59XG5cbmV4cG9ydCB0eXBlIFN0YXRlS2V5ID0ge3R5cGU6IFN0YXRlS2V5VHlwZSwgdGVtcGxhdGU/OiBzdHJpbmcsIGl0ZW1JZD86IG51bWJlcn07XG5cbmV4cG9ydCB0eXBlIE9uU2F2ZUNhbGxiYWNrID0gKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUsIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IGFueTtcblxuZXhwb3J0IGVudW0gTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uIHtcblx0QWx3YXlzID0gJ2Fsd2F5cycsXG5cdE9uQ2xvc2UgPSAnb25DbG9zZScsXG5cdFNraXBPbkNsb3NlID0gJ3NraXBPbkNsb3NlJ1xufVxuXG5leHBvcnQgdHlwZSBMb2NhbENhY2hlQ2FsbGJhY2tzPFQ+ID0ge1xuXHRhbHdheXM6IHtba2V5OiBzdHJpbmddOiBUfSxcblx0b25DbG9zZToge1trZXk6IHN0cmluZ106IFR9LFxuXHRza2lwT25DbG9zZToge1trZXk6IHN0cmluZ106IFR9XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJdGVtIHJlc291cmNlXG5cbmV4cG9ydCB0eXBlIEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCA9IHtcblx0W2l0ZW1JZDogbnVtYmVyXTogSXRlbVJlc291cmNlXG59O1xuXG5leHBvcnQgdHlwZSBJdGVtUmVzb3VyY2VJdGVtVHlwZU1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtUmVzb3VyY2Vcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEl0ZW0gRW50cnlcblxuZXhwb3J0IHR5cGUgSXRlbUlkID0gbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBJdGVtVHlwZSA9IHN0cmluZztcblxuZXhwb3J0IHR5cGUgSXRlbUVudHJ5RW50cnlTdGF0dXNNYXAgPSB7XG5cdFtlbnRyeVN0YXR1czogc3RyaW5nXTogSXRlbUVudHJ5W107XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtRW50cnlQYXJlbnRJZE1hcCA9IHtcblx0W3BhcmVudElkOiBudW1iZXJdOiBJdGVtRW50cnlbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFtpdGVtSWQ6IG51bWJlcl06IG51bWJlcjtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFtpdGVtSWQ6IG51bWJlcl06IG9iamVjdFxuXHR9O1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ29sbGVjdGlvbiBFbnRyeVxuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uRW50cnlCYXRjaFN0YXR1c01hcCA9IHtcblx0W3N0YXR1czogc3RyaW5nXTogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXBcbn07XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwID0ge1xuXHRbcGFyZW50SWQ6IG51bWJlcl06IENvbGxlY3Rpb25FbnRyeVxufTtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAgPSB7XG5cdFtwYXJlbnRJZDogbnVtYmVyXTogQ29sbGVjdGlvblJlc291cmNlXG59O1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQgPSB7XG5cdGZpdHRpbmc6IENvbGxlY3Rpb25FbnRyeVtdLFxuXHRub3RmaXR0aW5nOiBDb2xsZWN0aW9uRW50cnlbXSxcblx0bWF5YmU6IENvbGxlY3Rpb25FbnRyeVtdXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDb2x1bW5zXG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RDb2x1bW4gPSBzdHJpbmcgfCBvYmplY3Q7XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RDb2x1bW5zID0gUmVxdWVzdENvbHVtbltdIHwgdHJ1ZTtcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VDb2x1bW4gPSBhbnk7IC8vIFRPRE9cblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VDb2x1bW5NYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFtjb2x1bW5JZDogc3RyaW5nXTogUmVzcG9uc2VDb2x1bW5cblx0fVxufTtcblxuZXhwb3J0IHR5cGUgTG9jYWxDb2x1bW4gPSBvYmplY3Q7IC8vIFRPRE9cblxuZXhwb3J0IHR5cGUgQ29sdW1uRXhwYW5zaW9uUmVzdWx0ID0ge1xuXHRtZXJnZWQ6IENvbHVtblNldCxcblx0ZGlmZmVyZW5jZTogQ29sdW1uU2V0XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBcGkgcmVmZXJlbmNlXG5cbmV4cG9ydCB0eXBlIEFwaVJlc3BvbnNlID0gQXBpUmVzcG9uc2VQcm9jZXNzb3I7IC8vIFRPRE9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQXBpIHRlbXBsYXRlIHJlc3BvbnNlXG5leHBvcnQgdHlwZSBUZW1wbGF0ZUl0ZW1FbnRyeU1hcCA9IHtcblx0bWFpbjogSXRlbUVudHJ5O1xuXHRsaW5rZWQ6IFRlbXBsYXRlTGlua2VkSXRlbUVudHJ5TWFwW107XG59O1xuXG5leHBvcnQgdHlwZSBUZW1wbGF0ZUxpbmtlZEl0ZW1FbnRyeU1hcCA9IHtcblx0aXRlbVR5cGU6IHN0cmluZyxcblx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdXG59O1xuXG5leHBvcnQgdHlwZSBJdGVtVHlwZU1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBhbnk7XG59O1xuXG5leHBvcnQgdHlwZSBFbnRyeVN0YXR1czxUPiA9IHtcblx0ZW50cnk6IFQ7XG5cdHN0YXR1czogRU5UUllfU1RBVFVTO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ3JlYXRlIHJlcXVlc3RcbmV4cG9ydCB0eXBlIENyZWF0ZVJlcXVlc3RFbnRyeSA9IHtcblx0cmVxdWVzdDoge1xuXHRcdHJlcXVlc3RUeXBlOiAnY3JlYXRlJyxcblx0XHRpdGVtczoge30sXG5cdFx0Y29sdW1uczoge31cblx0fSxcblx0Y29sdW1uczogUmVxdWVzdENvbHVtbkV4cGFuc2lvbixcblx0aXRlbXM6IHtcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IEl0ZW1FbnRyeVxuXHRcdH1cblx0fSxcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25NYXRjaGVyXG59O1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JdGVtVHlwZXNDb2xsZWN0aW9uJztcbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25DYWNoZSxcblx0SXRlbUNhY2hlLFxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRMb2NrU2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbU9wdGlvbnMsIE9uU2F2ZUNhbGxiYWNrLFxuXHRMb2NhbENhY2hlQ2FsbGJhY2tzLCBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb25cbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgTG9jYWxDYWNoZSB7XG5cdGl0ZW1zOiBJdGVtQ2FjaGU7XG5cdHJvb3RJdGVtOiBJdGVtRW50cnkgfCB1bmRlZmluZWQ7XG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XG5cdGRlZmVycmVkQ29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcblx0dGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcblxuXHRwcml2YXRlIGNhbGxiYWNrczoge1xuXHRcdG9uQmVmb3JlU2F2ZTogTG9jYWxDYWNoZUNhbGxiYWNrczwobG9jYWxDYWNoZTogTG9jYWxDYWNoZSkgPT4gYW55Pixcblx0XHRvblNhdmVTdWNjZXNzOiBMb2NhbENhY2hlQ2FsbGJhY2tzPE9uU2F2ZUNhbGxiYWNrPixcblx0fSA9IHtcblx0XHRvbkJlZm9yZVNhdmU6IHthbHdheXM6IHt9LCBvbkNsb3NlOiB7fSwgc2tpcE9uQ2xvc2U6IHt9fSxcblx0XHRvblNhdmVTdWNjZXNzOiB7YWx3YXlzOiB7fSwgb25DbG9zZToge30sIHNraXBPbkNsb3NlOiB7fX1cblx0fTtcblxuXHRwcml2YXRlIGNoYW5nZXNJbnRlcnZhbDogbnVsbCB8IG51bWJlciA9IG51bGw7XG5cdGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHVibGljIGlkOiBzdHJpbmcgPSAnJ1xuXHQpIHtcblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogSXRlbU9wdGlvbnMsIGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlLCBpc05ldz86IGJvb2xlYW4pIHtcblx0XHRpZiAoaXNSb290KVxuXHRcdFx0dGhpcy5yb290SXRlbSA9IGl0ZW1FbnRyeTtcblxuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cdFx0b3B0aW9ucy5vbkRlYWN0aXZhdGUgPSAoX2l0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uRGVhY3RpdmF0ZUl0ZW0oX2l0ZW1FbnRyeSk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChpdGVtRW50cnksIG9wdGlvbnMsIGlzTmV3KTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9uczogSXRlbU9wdGlvbnMpIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucykpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucykge1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGNvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zLCB0aGlzKTtcblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMgKGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgcmVzb3VyY2VPcHRpb25zKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25FbnRyaWVzKVxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGNvbGxlY3Rpb25FbnRyaWVzW3BhcmVudElkXSwgcmVzb3VyY2VPcHRpb25zKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjbGVhckl0ZW0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSB7XG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtUmVzb3VyY2UuZW50cnkpO1xuXHR9XG5cblx0Y2xlYXJJdGVtRW50cnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XG5cdFx0dGhpcy5pdGVtcy5jbGVhcihpdGVtRW50cnkpO1xuXHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xuXHR9XG5cblx0Y2xlYXJDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbnMuY2xlYXIoY29sbGVjdGlvbkVudHJ5KTtcblx0XHRjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2VzIChpc1N1YlRhYkNoYW5nZSA9IGZhbHNlKSB7XG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKFxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKVxuXHRcdCk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IGNvbGxlY3Rpb25FbnRyeS5jbGVhclJlc291cmNlcyhpc1N1YlRhYkNoYW5nZSlcblx0XHQpO1xuXG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zLmNsZWFyKCk7XG5cdH1cblxuXHR1cGRhdGVTaW5nbGVJdGVtcyAoY29udmVyc2lvbk1hcCkge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBvbGRJdGVtSWQgaW4gY29udmVyc2lvbk1hcFtpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtcy5nZXQoaXRlbVR5cGUsIG9sZEl0ZW1JZCk7XG5cblx0XHRcdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdHRoaXMuaXRlbXMudXBkYXRlSXRlbUlkKGl0ZW1FbnRyeSwgb2xkSXRlbUlkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyByZXNvdXJjZXMgd2lsbCBiZSBjbGVhcmVkIGxhdGVyIChjbGVhciBmdW5jdGlvbilcblx0cmV2ZXJ0Q2hhbmdlcyAoKSB7XG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKFxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkucmVzZXRNb2RpZmllZCgpXG5cdFx0KTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbnMuZm9yRWFjaChcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5yZXNldENvbGxlY3Rpb24oY29sbGVjdGlvbkVudHJ5KVxuXHRcdCk7XG5cblx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmlzTG9ja2FibGUoKSA/XG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmRlbGV0ZUxvY2sodGhpcy5yb290SXRlbSkgOlxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cdH1cblxuXHRyZXNldENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogdm9pZCB7XG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzKVxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJldmVydENoYW5nZXMoKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyeS5pdGVtcylcblx0XHRcdFx0aXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKTtcblx0XHR9XG5cdH1cblxuXHRkZXRlY3RDaGFuZ2VzICgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5oYXNDaGFuZ2VzKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLml0ZW1zLnNvbWUoXG5cdFx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKVxuXHRcdFx0KVxuXHRcdClcblx0XHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuaGFzQ2hhbmdlcyA9IHRoaXMuY29sbGVjdGlvbnMuc29tZShcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5jb2xsZWN0aW9uSGFzQ2hhbmdlcyhjb2xsZWN0aW9uRW50cnkpXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdGlvbkhhc0NoYW5nZXMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSB7XG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzICYmIChjb2xsZWN0aW9uRW50cnkuaGFzQWRkZWRJdGVtcygpIHx8IGNvbGxlY3Rpb25FbnRyeS5oYXNSZW1vdmVkSXRlbXMoKSkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMgJiYgY29sbGVjdGlvbkVudHJ5Lmhhc1VwZGF0ZWRJdGVtcygpO1xuXHR9XG5cblx0aXNMb2NrYWJsZSAoKSB7XG5cdFx0aWYgKHRoaXMucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLnJvb3RJdGVtLmlzTG9ja2FibGUoKTtcblx0fVxuXG5cdHNhdmUgKFxuXHRcdGNsb3NlVGFiID0gZmFsc2UsXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHt9LFxuXHRcdGJyZWFrVXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KSB7XG5cdFx0dGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblxuXHRcdHJldHVybiAodGhpcy5pc0xvY2thYmxlKCkgPyB0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayg8SXRlbUVudHJ5PiB0aGlzLnJvb3RJdGVtKSA6IHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tFdmVudCh0aGlzLmNhbGxiYWNrcy5vbkJlZm9yZVNhdmUsIGNhbGxiYWNrID0+IGNhbGxiYWNrKHRoaXMpLCBjbG9zZVRhYik7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0UGFyYW1ldGVycyA9IGV4dGVuZCh7fSwgdGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycywgcGFyYW1ldGVycyk7XG5cblx0XHRcdFx0dGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLmV4ZWN1dGUoXG5cdFx0XHRcdFx0dGhpcy5pdGVtcy50b0FycmF5KCksXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9ucy50b0FycmF5KCksXG5cdFx0XHRcdFx0cmVxdWVzdFBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YnJlYWtVcEJ5UGFyZW50LFxuXHRcdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFja1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdGNvbnZlcnNpb25NYXAgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xvY2thYmxlKCkpXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5jbGVhckxvY2soPEl0ZW1FbnRyeT4gdGhpcy5yb290SXRlbSk7XG5cblx0XHRcdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0XHRcdFx0aWYgKCFjbG9zZVRhYilcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZVNpbmdsZUl0ZW1zKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja0V2ZW50KFxuXHRcdFx0XHRcdHRoaXMuY2FsbGJhY2tzLm9uU2F2ZVN1Y2Nlc3MsXG5cdFx0XHRcdFx0Y2FsbGJhY2sgPT4gY2FsbGJhY2sodGhpcywgY29udmVyc2lvbk1hcCksXG5cdFx0XHRcdFx0Y2xvc2VUYWJcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICghY2xvc2VUYWIpXG5cdFx0XHRcdFx0XHRcdHRoaXMuZW5hYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0b25CZWZvcmVTYXZlIChcblx0XHRrZXk6IHN0cmluZyxcblx0XHRjYWxsYmFjazogKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpID0+IGFueSxcblx0XHRjb25kaXRpb246IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiA9IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5BbHdheXNcblx0KTogKCkgPT4gdm9pZCB7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3Mub25CZWZvcmVTYXZlW2NvbmRpdGlvbl07XG5cblx0XHRjYWxsYmFja3Nba2V5XSA9IGNhbGxiYWNrO1xuXG5cdFx0cmV0dXJuICgpID0+IGRlbGV0ZSBjYWxsYmFja3Nba2V5XTtcblx0fVxuXG5cdG9uU2F2ZVN1Y2Nlc3MgKFxuXHRcdGtleTogc3RyaW5nLFxuXHRcdGNhbGxiYWNrOiBPblNhdmVDYWxsYmFjayxcblx0XHRjb25kaXRpb246IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiA9IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5BbHdheXNcblx0KTogKCkgPT4gdm9pZCB7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3Mub25TYXZlU3VjY2Vzc1tjb25kaXRpb25dO1xuXG5cdFx0Y2FsbGJhY2tzW2tleV0gPSBjYWxsYmFjaztcblxuXHRcdHJldHVybiAoKSA9PiBkZWxldGUgY2FsbGJhY2tzW2tleV07XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDYWxsYmFja0V2ZW50PFQ+IChcblx0XHRjYWxsYmFja3M6IExvY2FsQ2FjaGVDYWxsYmFja3M8VD4sXG5cdFx0ZXhlY3V0ZTogKGNhbGxiYWNrOiBUKSA9PiBhbnksXG5cdFx0Y2xvc2VUYWI6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxhbnk+IHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tzKGNhbGxiYWNrc1tMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uQWx3YXlzXSwgZXhlY3V0ZSkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcyhcblx0XHRcdFx0XHRjYWxsYmFja3NbY2xvc2VUYWIgPyBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uT25DbG9zZSA6IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5Ta2lwT25DbG9zZV0sXG5cdFx0XHRcdFx0ZXhlY3V0ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDYWxsYmFja3M8VD4gKGNhbGxiYWNrczoge1trZXk6IHN0cmluZ106IFR9LCBleGVjdXRlOiAoY2FsbGJhY2s6IFQpID0+IGFueSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gY2FsbGJhY2tzKVxuXHRcdFx0cmVzdWx0W2tleV0gPSBleGVjdXRlKGNhbGxiYWNrc1trZXldKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXN1bHQpO1xuXHR9XG5cblx0ZW5hYmxlQ2hhbmdlc1dhdGNoZXIgKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc29sZS53YXJuKCdDaGFuZ2VzIHdhdGNoZXIgYWxyZWFkeSBydW5uaW5nIScsIHRoaXMpO1xuXHRcdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblx0XHR9XG5cblx0XHR0aGlzLmNoYW5nZXNJbnRlcnZhbCA9IHNldEludGVydmFsKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuZGV0ZWN0Q2hhbmdlcygpKVxuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayg8SXRlbUVudHJ5PiB0aGlzLnJvb3RJdGVtKTtcblx0XHRcdH0sXG5cdFx0XHQzMDAwXG5cdFx0KTtcblx0fVxuXG5cdGRpc2FibGVDaGFuZ2VzV2F0Y2hlciAoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsID09PSBudWxsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLmNoYW5nZXNJbnRlcnZhbCk7XG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBudWxsO1xuXHR9XG5cblx0b25EZWFjdGl2YXRlSXRlbSAoaXRlbUVudHJ5KSB7XG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtRW50cnkpO1xuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG5cdH1cblxuXHRvbkFjdGl2YXRlSXRlbSAoaXRlbUVudHJ5KSB7XG5cdFx0dGhpcy5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcblx0XHQvLyB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIExvY2tTZXJ2aWNlIHtcblx0bG9ja0l0ZW1zID0ge307XG5cdHByb21pc2VzID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cblx0fVxuXG5cdGdldFZhbHVlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgbWFwKSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXHR9XG5cblx0c2V0VmFsdWUgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCB2YWx1ZSwgbWFwKSB7XG5cdFx0cmV0dXJuIGNyZWF0ZVBhdGgoXG5cdFx0XHRtYXAsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwgdmFsdWVdXG5cdFx0KTtcblx0fVxuXG5cdGdldExvY2tzICgpIHtcblx0XHRyZXR1cm4gdGhpcy5sb2NrSXRlbXM7XG5cdH1cblxuXHRoYXNMb2NrIChsb2NrVG9rZW5JZCkge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5sb2NrSXRlbXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0XHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduICYmIGxvY2tJdGVtLmlkID09IGxvY2tUb2tlbklkKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSBmYXN0ICh3YXRjaGVkKVxuXHRpc0xvY2tlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XG5cblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ247XG5cdH1cblxuXHRnZXRNZXNzYWdlIChpdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XG5cblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWxvY2tJdGVtLmlzRm9yZWlnbilcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbG9ja0l0ZW0ubWVzc2FnZTtcblx0fVxuXG5cdC8vIGRvZXMgbm90IHJlamVjdCB3aGVuIGEgZm9yZWlnbiBsb2NrIGlzIGVuY291bnRlcmVkXG5cdC8vIGlzIGFsc28gdXNlZCBieSBkZWxldGVMb2NrXG5cdGZldGNoQ2FjaGVkTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRjb25zdCBsb2NrID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcblxuXHRcdGlmIChsb2NrICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGxvY2spO1xuXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLnByb21pc2VzKTtcblxuXHRcdGlmIChwcm9taXNlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcHJvbWlzZTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdGZldGNoTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKGxvY2tJdGVtID0+IHtcblx0XHRcdFx0aWYgKGxvY2tJdGVtICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlcXVlc3RMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKGxvY2tJdGVtID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbiA/XG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGxvY2tJdGVtLm1lc3NhZ2UpIDpcblx0XHRcdFx0XHRsb2NrSXRlbS50b2tlbjtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShcblx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdHtpdGVtdHlwZTogaXRlbVR5cGUsIGl0ZW06IGl0ZW1JZH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxuXHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChcblx0XHRcdFx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3MuTG9ja3Rva2VuWzBdXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSwgZXJyb3IgPT4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlc1tpdGVtVHlwZV1baXRlbUlkXTtcblxuXHRcdFx0XHRpZiAoZXJyb3IuY29kZSA9PT0gMzAxKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlzRm9yZWlnbjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogZXJyb3IubWVzc2FnZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShpdGVtRW50cnksIHByb21pc2UsIHRoaXMucHJvbWlzZXMpO1xuXHR9XG5cblx0ZGVsZXRlTG9jayAoaXRlbUVudHJ5KSB7XG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihjYWNoZWRMb2NrID0+IHtcblx0XHRcdFx0Ly8gdW5kZWZpbmVkOiBub3QgcmVxdWVzdGVkIHlldFxuXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrLmlzRm9yZWlnbikge1xuXHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKCdMb2NrdG9rZW4nLCBjYWNoZWRMb2NrLmlkKVxuXHRcdFx0XHRcdC50aGVuKFxuXHRcdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTG9jayhpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyTG9jayAoaXRlbUVudHJ5KSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRpZiAodGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmltcG9ydCB7IGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xuXG5jb25zdCBFTVBUWV9FTlRSWSA9IHt9O1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIHtcblx0cGFyZW50TWFwOiBhbnkgPSB7fTtcblx0ZGVzdGluYXRpb246IGFueSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHJvb3RJdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRwcml2YXRlIHNpbmdsZUl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcblx0KSB7XG5cdH1cblxuXHRwcm9jZXNzICgpIHtcblx0XHR0aGlzLnBhcmVudE1hcCA9IHRoaXMuY3JlYXRlUGFyZW50TWFwKHRoaXMuc2luZ2xlSXRlbUNhY2hlKTtcblx0XHR0aGlzLnByb2Nlc3NJdGVtcyh0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsIFt0aGlzLnJvb3RJdGVtRW50cnldLCB7fSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdGl0ZW1JZDogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdGl0ZW1zOiB0aGlzLmRlc3RpbmF0aW9uXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlUGFyZW50TWFwIChpdGVtQ2FjaGUpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGl0ZW1DYWNoZS5mb3JFYWNoKFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbCkgLy8gd2UgZG9uJ3QgY2FyZSBmb3IgaXRlbXMgdGhhdCBhcmUgbm90IGxpbmtlZCB0byB0aGUgcm9vdCBpdGVtXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IHBhcmVudFR5cGUgPSBwYXJlbnQuaXRlbVR5cGU7XG5cdFx0XHRcdGNvbnN0IHBhcmVudElkID0gcGFyZW50Lml0ZW1JZDtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3BhcmVudFR5cGVdID0ge307XG5cblx0XHRcdFx0bGV0IG1hcEVudHJ5ID0gcmVzdWx0W3BhcmVudFR5cGVdO1xuXG5cdFx0XHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRtYXBFbnRyeVtwYXJlbnRJZF0gPSB7fTtcblxuXHRcdFx0XHRtYXBFbnRyeSA9IG1hcEVudHJ5W3BhcmVudElkXTtcblxuXHRcdFx0XHRpZiAobWFwRW50cnlbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0bWFwRW50cnlbaXRlbVR5cGVdID0gW107XG5cblx0XHRcdFx0bWFwRW50cnlbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW1zIChpdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBsaW5rQWNjdW11bGF0b3IpIHtcblx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdID0ge307XG5cblx0XHRpZiAobGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRcdC8vIGVhY2ggaXRlbSBvbmx5IGhhcyBhIHNpbmdsZSBwYXJlbnQsIHNvIHdlIGNhbiBzYWZlbHkgZG8gdGhpc1xuXHRcdFx0aWYgKHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0ucHVzaChpdGVtSWQpO1xuXG5cdFx0XHR0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXVtpdGVtSWRdID0gdGhpcy5wcm9jZXNzSXRlbShpdGVtRW50cnkpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW0gKGl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgY2hpbGRJdGVtcyA9IHRoaXMuZ2V0SXRlbXNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHRjb25zdCBjaGlsZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGUuZ2V0Q29sbGVjdGlvbnNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcblx0XHRjb25zdCB2YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xuXHRcdGNvbnN0IGxpbmtzID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNoaWxkVHlwZSBpbiBjaGlsZEl0ZW1zKVxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY2hpbGRUeXBlLCBjaGlsZEl0ZW1zW2NoaWxkVHlwZV0sIGxpbmtzKTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNoaWxkQ29sbGVjdGlvbnMpIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5xdWVyeSAhPT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMucHJvY2Vzc0l0ZW1zKGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5Lml0ZW1zLCBsaW5rcyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGFzVmFsdWVzID0gaGFzUHJvcGVydGllcyh2YWx1ZXMpO1xuXHRcdGNvbnN0IGhhc0xpbmtzID0gaGFzUHJvcGVydGllcyhsaW5rcyk7XG5cblx0XHRpZiAoaGFzVmFsdWVzICYmIGhhc0xpbmtzKVxuXHRcdFx0cmV0dXJuIHt2YWx1ZXM6IHZhbHVlcywgbGlua3M6IGxpbmtzfTtcblxuXHRcdGlmIChoYXNWYWx1ZXMpXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzfTtcblxuXHRcdGlmIChoYXNMaW5rcylcblx0XHRcdHJldHVybiB7bGlua3M6IGxpbmtzfTtcblxuXHRcdHJldHVybiBFTVBUWV9FTlRSWTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0SXRlbXNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcblx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMucGFyZW50TWFwW3BhcmVudFR5cGVdO1xuXG5cdFx0aWYgKG1hcEVudHJ5ID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRpZiAobWFwRW50cnlbcGFyZW50SWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRyZXR1cm4gbWFwRW50cnlbcGFyZW50SWRdO1xuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XG5cbmNvbnN0IE1BWUJFID0gJ21heWJlJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cHVibGljIGZpZWxkczogRmllbGRNYXAsXG5cdFx0cHVibGljIHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbFxuXHQpIHtcblxuXHR9XG5cblx0cHJpdmF0ZSBjb21wYXJlVmFsdWVzICh2YWx1ZSwgcXVlcnlWYWx1ZSkge1xuXHRcdGlmIChtb21lbnQuaXNNb21lbnQocXVlcnlWYWx1ZSkpXG5cdFx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZU1vbWVudE9iamVjdHMocXVlcnlWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHF1ZXJ5VmFsdWUpKVxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVEdXJhdGlvbnMocXVlcnlWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcblx0XHRyZXR1cm4gcXVlcnlWYWx1ZSA9PSB2YWx1ZTtcblx0fVxuXG5cdG1hdGNoUXVlcnkgKHF1ZXJ5OiBhbnkpOiBib29sZWFuIHwgc3RyaW5nIHtcblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoTGlua2VkVG9RdWVyeShxdWVyeSk7XG5cblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hDb21wbGV4UXVlcnkocXVlcnkpO1xuXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hTaW1wbGVRdWVyeSh0aGlzLmZpZWxkc1txdWVyeS5rZXldLCBxdWVyeSk7XG5cblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgcXVlcnkhIFBhcnNlZD8nKTtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hMaW5rZWRUb1F1ZXJ5IChxdWVyeSkge1xuXHRcdGlmIChxdWVyeS5yZXZlcnNlKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cdFx0bGV0IG1hdGNoO1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdG1hdGNoID0gZmFsc2U7XG5cdFx0ZWxzZSBpZiAocXVlcnkubGlua2VkVG8gIT09IHBhcmVudC5pdGVtVHlwZSlcblx0XHRcdG1hdGNoID0gZmFsc2U7XG5cdFx0ZWxzZVxuXHRcdFx0bWF0Y2ggPSB0aGlzLm1hdGNoU2ltcGxlUXVlcnkocGFyZW50Lml0ZW1JZCwgcXVlcnkucXVlcnkpO1xuXG5cdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdHJldHVybiBxdWVyeS5ub3QgPyAhbWF0Y2ggOiBtYXRjaDtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hDb21wbGV4UXVlcnkgKHF1ZXJ5KSB7XG5cdFx0Y29uc3QgY29uZGl0aW9ucyA9IHF1ZXJ5LmNvbmRpdGlvbnM7XG5cblx0XHRsZXQgcmVzdWx0O1xuXHRcdGxldCB0ZXJtaW5hbDtcblxuXHRcdHN3aXRjaCAocXVlcnkub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgJ0FORCc6XG5cdFx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdHRlcm1pbmFsID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnT1InOlxuXHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcblx0XHRcdFx0dGVybWluYWwgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBvcGVyYXRvcicpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpIHtcblx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaFF1ZXJ5KGNvbmRpdGlvbik7XG5cblx0XHRcdGlmIChtYXRjaCA9PT0gdGVybWluYWwpXG5cdFx0XHRcdHJldHVybiB0ZXJtaW5hbDtcblxuXHRcdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcblx0XHRcdFx0cmVzdWx0ID0gTUFZQkU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hTaW1wbGVRdWVyeSAodmFsdWUsIHF1ZXJ5KSB7XG5cdFx0Y29uc3Qga2V5ID0gcXVlcnkua2V5O1xuXHRcdGxldCBxdWVyeVZhbHVlID0gcXVlcnkudmFsdWU7XG5cblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKSAvLyBDb3VsZCBiZSBsaW5rZWRUbyBhbiBlbXB0eSBvYmplY3Rcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignUmVxdWlyZWQgZmllbGQnLCBrZXksICdub3QgZm91bmQgZm9yJywgdGhpcy5pdGVtVHlwZSk7XG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cdFx0fVxuXG5cdFx0aWYgKHF1ZXJ5VmFsdWUgPT09ICdOT1cnKVxuXHRcdFx0cXVlcnlWYWx1ZSA9IG1vbWVudCgpO1xuXG5cdFx0c3dpdGNoIChxdWVyeS5jb21wYXJhdG9yKSB7XG5cdFx0XHRjYXNlICc9Jzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZVZhbHVlcyh2YWx1ZSwgcXVlcnlWYWx1ZSk7XG5cdFx0XHRjYXNlICchPSc6XG5cdFx0XHRcdHJldHVybiAhdGhpcy5jb21wYXJlVmFsdWVzKHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGNhc2UgJzwnOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPCBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnPD0nOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPD0gcXVlcnlWYWx1ZTtcblx0XHRcdGNhc2UgJz4nOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPiBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnPj0nOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPj0gcXVlcnlWYWx1ZTtcblx0XHRcdGNhc2UgJ0lOJzpcblx0XHRcdFx0cmV0dXJuIGluQXJyYXkodmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0Y2FzZSAnTk9UIElOJzpcblx0XHRcdFx0cmV0dXJuICFpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBjb21wYXJhdG9yOiAnICsgcXVlcnkuY29tcGFyYXRvciArICcgaW4gcXVlcnkgJyArIHF1ZXJ5KTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5IH0gZnJvbSAnLi9VdGlsJztcblxuZW51bSBDT05TVEFOVFMge1xuXHRPQkogPSAwLFxuXHRTVFIgPSAxLFxuXHRTRVAgPSAnOidcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyIHtcblx0cXVlcnk6IGFueTtcblx0cGFyYW1ldGVyczogYW55O1xuXG5cdGNvbnN0cnVjdG9yIChxdWVyeSwgcGFyYW1ldGVycz8pIHtcblx0XHR0aGlzLnF1ZXJ5ID0gcXVlcnk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1ZhbHVlICh2YWx1ZSkge1xuXHRcdC8vIGFsZ29yaXRobSBpcyBub3QgaW1wb3J0YW50LCBhcyBsb25nIGFzIGFsbCBhcnJheXMgYXJlIHNvcnRlZCB0aGUgc2FtZSB3YXlcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG5cdFx0XHRyZXR1cm4gdmFsdWUuc2xpY2UoKS5zb3J0KCk7XG5cblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcblx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xuXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHZhbHVlKSlcblx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUpO1xuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cblx0cHJpdmF0ZSBjb21wYXJlUGFyc2VkUXVlcmllcyAoYSwgYikge1xuXHRcdGlmIChhW0NPTlNUQU5UUy5TVFJdID09PSBiW0NPTlNUQU5UUy5TVFJdKVxuXHRcdFx0cmV0dXJuIDA7XG5cblx0XHRyZXR1cm4gYVtDT05TVEFOVFMuU1RSXSA+IGJbQ09OU1RBTlRTLlNUUl0gPyAxIDogLTE7XG5cdH1cblxuXHRwYXJzZSAocXVlcnkgPSB0aGlzLnF1ZXJ5KSB7XG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUxpbmtlZFRvUXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmxpbmtlZFRvLFxuXHRcdFx0XHRxdWVyeS5xdWVyeSxcblx0XHRcdFx0cXVlcnkucmV2ZXJzZSxcblx0XHRcdFx0cXVlcnkubm90XG5cdFx0XHQpO1xuXG5cdFx0aWYgKHF1ZXJ5Lm5vdCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogXCJOb3RcIiBub3Qgc3VwcG9ydGVkJyk7XG5cblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUN1c3RvbVF1ZXJ5KFxuXHRcdFx0XHRxdWVyeS5jdXN0b20sXG5cdFx0XHRcdHF1ZXJ5LnBhcmFtZXRlcnNcblx0XHRcdCk7XG5cblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNlYXJjaFF1ZXJ5KHF1ZXJ5LnNlYXJjaCk7XG5cblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDb21wbGV4UXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmNvbmRpdGlvbnMsXG5cdFx0XHRcdHF1ZXJ5Lm9wZXJhdG9yXG5cdFx0XHQpO1xuXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShcblx0XHRcdFx0cXVlcnkua2V5LFxuXHRcdFx0XHRxdWVyeS52YWx1ZSxcblx0XHRcdFx0cXVlcnkuY29tcGFyYXRvclxuXHRcdFx0KTtcblxuXHRcdGNvbnN0IGtleSA9IGdldEZpcnN0UHJvcGVydHkocXVlcnkpO1xuXG5cdFx0aWYgKGtleSA9PT0gbnVsbClcblx0XHRcdHJldHVybiBbe30sICd7fSddO1xuXG5cdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShrZXksIHF1ZXJ5W2tleV0pO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZVNlYXJjaFF1ZXJ5ICh2YWx1ZSkge1xuXHRcdHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e3NlYXJjaDogdmFsdWVbQ09OU1RBTlRTLk9CSl19LFxuXHRcdFx0J1snICsgJ3NlYXJjaCcgKyBDT05TVEFOVFMuU0VQICsgdmFsdWVbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUN1c3RvbVF1ZXJ5IChjdXN0b20sIHBhcmFtZXRlcnMpIHtcblx0XHRpZiAocGFyYW1ldGVycyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0e2N1c3RvbTogY3VzdG9tfSxcblx0XHRcdFx0J1snICsgY3VzdG9tICsgJ10nXG5cdFx0XHRdO1xuXG5cdFx0Y29uc3QgcGFyc2VkUGFyYW1ldGVycyA9IHRoaXMucGFyc2VDdXN0b21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtjdXN0b206IGN1c3RvbSwgcGFyYW1ldGVyczogcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuT0JKXX0sXG5cdFx0XHQnWycgKyBjdXN0b20gKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUGFyYW1ldGVycyAocGFyYW1ldGVycykge1xuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5zb3J0KCk7XG5cblx0XHRjb25zdCBxdWVyeSA9IHt9O1xuXHRcdGxldCBzdHJpbmcgPSAnJztcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qga2V5ID0ga2V5c1tpXTtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShwYXJhbWV0ZXJzW2tleV0pO1xuXG5cdFx0XHRxdWVyeVtrZXldID0gdmFsdWVbQ09OU1RBTlRTLk9CSl07XG5cblx0XHRcdGlmIChpID4gMClcblx0XHRcdFx0c3RyaW5nICs9IENPTlNUQU5UUy5TRVA7XG5cblx0XHRcdHN0cmluZyArPSB2YWx1ZVtDT05TVEFOVFMuU1RSXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gW3F1ZXJ5LCBzdHJpbmddO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZVNpbXBsZVF1ZXJ5IChrZXksIHZhbHVlLCBjb21wYXJhdG9yPykge1xuXHRcdHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XG5cblx0XHRpZiAoY29tcGFyYXRvciA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y29tcGFyYXRvciA9IEFycmF5LmlzQXJyYXkodmFsdWVbQ09OU1RBTlRTLk9CSl0pID8gJ0lOJyA6ICc9JztcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7a2V5OiBrZXksIHZhbHVlOiB2YWx1ZVtDT05TVEFOVFMuT0JKXSwgY29tcGFyYXRvcjogY29tcGFyYXRvcn0sXG5cdFx0XHQnWycgKyBjb21wYXJhdG9yICsgQ09OU1RBTlRTLlNFUCArIGtleSArIENPTlNUQU5UUy5TRVAgKyB2YWx1ZVtDT05TVEFOVFMuU1RSXSArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlTGlua2VkVG9RdWVyeSAobGlua2VkVG8sIHF1ZXJ5LCByZXZlcnNlLCBub3QpIHtcblx0XHRpZiAocXVlcnkgPT09IHVuZGVmaW5lZClcblx0XHRcdHF1ZXJ5ID0ge307XG5cblx0XHRpZiAocmV2ZXJzZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV2ZXJzZSA9IGZhbHNlO1xuXG5cdFx0aWYgKG5vdCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0bm90ID0gZmFsc2U7XG5cblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucGFyc2UocXVlcnkpO1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdHtsaW5rZWRUbzogbGlua2VkVG8sIHF1ZXJ5OiBwYXJzZWRRdWVyeVtDT05TVEFOVFMuT0JKXSwgcmV2ZXJzZTogcmV2ZXJzZSwgbm90OiBub3R9LFxuXHRcdFx0J1snICsgJ2xpbmtlZFRvJyArIENPTlNUQU5UUy5TRVAgKyBsaW5rZWRUbyArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRRdWVyeVtDT05TVEFOVFMuU1RSXSArIENPTlNUQU5UUy5TRVAgKyByZXZlcnNlICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ29tcGxleFF1ZXJ5IChjb25kaXRpb25zLCBvcGVyYXRvcikge1xuXHRcdGlmIChvcGVyYXRvciA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b3BlcmF0b3IgPSAnQU5EJztcblx0XHRlbHNlXG5cdFx0XHRvcGVyYXRvciA9IG9wZXJhdG9yLnRvVXBwZXJDYXNlKCk7XG5cblx0XHRjb25zdCBwYXJzZWRDb25kaXRpb25zID0gdGhpcy5wYXJzZUNvbmRpdGlvbnMoY29uZGl0aW9ucyk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2NvbmRpdGlvbnM6IHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLk9CSl0sIG9wZXJhdG9yOiBvcGVyYXRvcn0sXG5cdFx0XHQnWycgKyBvcGVyYXRvciArIHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcblx0XHRdO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZUNvbmRpdGlvbnMgKGNvbmRpdGlvbnMpIHtcblx0XHRsZXQgcGFyc2VkQ29uZGl0aW9uczogb2JqZWN0W10gPSBbXTtcblx0XHRjb25zdCBxdWVyeTogb2JqZWN0W10gPSBbXTtcblx0XHRsZXQgc3RyaW5nID0gJyc7XG5cblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKVxuXHRcdFx0cGFyc2VkQ29uZGl0aW9ucy5wdXNoKHRoaXMucGFyc2UoY29uZGl0aW9uKSk7XG5cblx0XHRwYXJzZWRDb25kaXRpb25zID0gcGFyc2VkQ29uZGl0aW9ucy5zb3J0KChhLCBiKSA9PiB0aGlzLmNvbXBhcmVQYXJzZWRRdWVyaWVzKGEsIGIpKTtcblxuXHRcdGZvciAoY29uc3QgcGFyc2VkQ29uZGl0aW9uIG9mIHBhcnNlZENvbmRpdGlvbnMpIHtcblx0XHRcdHF1ZXJ5LnB1c2gocGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5PQkpdKTtcblx0XHRcdHN0cmluZyArPSBwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLlNUUl07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcblx0fVxuXG5cdHByaXZhdGUgZm9ybWF0VmFsdWUgKHZhbHVlKSB7XG5cdFx0bGV0IHByb2Nlc3NlZFZhbHVlO1xuXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuY2hhckF0KDApID09PSAnJicpIHtcblx0XHRcdGNvbnN0IGtleSA9IHZhbHVlLnN1YnN0cmluZygxKTtcblxuXHRcdFx0dmFsdWUgPSB0aGlzLnBhcmFtZXRlcnNba2V5XTtcblxuXHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlQYXJzZXI6IFVuZGVmaW5lZCB0ZW1wbGF0ZSBwYXJhbWV0ZXIgXFwnJyArIGtleSArICdcXCcnKTtcblxuXHRcdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XG5cblx0XHRcdHJldHVybiBbcHJvY2Vzc2VkVmFsdWUsIGtleSArICc+JyArIHZhbHVlXTtcblx0XHR9XG5cblx0XHRwcm9jZXNzZWRWYWx1ZSA9IHRoaXMucHJvY2Vzc1ZhbHVlKHZhbHVlKTtcblxuXHRcdHJldHVybiBbcHJvY2Vzc2VkVmFsdWUsICcnICsgcHJvY2Vzc2VkVmFsdWVdO1xuXHR9XG59XG4iLCJleHBvcnQgY2xhc3MgUXVlcnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKCkge1xuXHR9XG5cblx0YWRkQW5kQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcblx0XHRcdHJldHVybiB7Y29uZGl0aW9uczogW3F1ZXJ5LCBjb25kaXRpb25dfTtcblxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcblx0fVxuXG5cdGFkZE9yQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XG5cdFx0aWYgKHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcblxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl0sIG9wZXJhdG9yOiAnb3InfTtcblx0fVxuXG5cdGFkZFBhcmVudENvbmRpdGlvbiAocXVlcnksIHBhcmVudCkge1xuXHRcdGxldCBsaW5rZWRUb1F1ZXJ5O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBxdWVyeTtcblxuXHRcdGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHBhcmVudC5pdGVtSWR9O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID8gbGlua2VkVG9RdWVyeSA6IHRoaXMuYWRkQW5kQ29uZGl0aW9uKHF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcblx0fVxuXG5cdGNyZWF0ZU5vdEluIChpZEFycmF5KSB7XG5cdFx0cmV0dXJuIHtjb21wYXJhdG9yOiAnTk9UIElOJywga2V5OiAnaWQnLCB2YWx1ZTogaWRBcnJheX07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuL0NvbHVtblV0aWwnO1xuXG5leHBvcnQgY2xhc3MgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB7XG5cdHByaXZhdGUgY29sdW1ucyA9IHt9O1xuXHRwcml2YXRlIGNvbHVtbkluZm9JZE1hcCA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRleHBhbmQgKGNvbHVtbkluZm8pIHtcblx0XHRpZiAodGhpcy5jb2x1bW5JbmZvSWRNYXBbY29sdW1uSW5mby5pZF0pXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtbkluZm8uaXRlbVR5cGU7XG5cblx0XHRpZiAodGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0dGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSA9IHRoaXMuY29sdW1uVXRpbFxuXHRcdFx0Lm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSwgY29sdW1uSW5mby5yZXF1ZXN0KVxuXHRcdFx0Lm1lcmdlZDtcblxuXHRcdHRoaXMuY29sdW1uSW5mb0lkTWFwW2NvbHVtbkluZm8uaWRdID0gdHJ1ZTtcblx0fVxuXG5cdGdldCAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1ucztcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2xsZWN0aW9uSGFuZGxlciwgSXRlbUhhbmRsZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdENvbHVtblNldEZhY3RvcnksXG5cdEl0ZW1FbnRyeUZhY3RvcnksXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoUmVzdWx0LCBGaWVsZE1hcCwgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgU29ja2V0TWVzc2FnZUhhbmRsZXIge1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdG9uTWVzc2FnZVJlY2VpdmVkIChtZXNzYWdlOiBhbnkpOiBhbnkge1xuXHRcdHN3aXRjaCAobWVzc2FnZS5ib2R5LmV2ZW50VHlwZSkge1xuXHRcdFx0Y2FzZSAndXBkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlVXBkYXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnY3JlYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQ3JlYXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnZGVsZXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlRGVsZXRlKG1lc3NhZ2UpO1xuXHRcdFx0Y2FzZSAnbGlua1RvJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlTGlua01vdmUoLyogbWVzc2FnZSAqLyk7XG5cdFx0fVxuXHR9XG5cblx0Zm9ybWF0TWVzc2FnZVZhbHVlcyAodmFsdWVzLCBjb2x1bW5zKTogRmllbGRNYXAge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxuXHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uc1tjb2x1bW5JZF0udHlwZSwgdmFsdWVzW2NvbHVtbklkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y3JlYXRlQ29sbGVjdGlvbk1hcCAoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSB7XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2l0ZW1JZDogbnVtYmVyXTogQ29sbGVjdGlvbk1hdGNoUmVzdWx0fSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcblx0XHRcdGNvbnN0IGl0ZW0gPSBpdGVtc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbS5wYXJlbnQgIT09IG51bGwgPyBpdGVtLnBhcmVudCA6IHt9O1xuXG5cdFx0XHRyZXN1bHRbaXRlbUlkXSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUZpdHRpbmdJdGVtKFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0dGhpcy5mb3JtYXRNZXNzYWdlVmFsdWVzKGl0ZW0udmFsdWVzLCBjb2x1bW5zKSxcblx0XHRcdFx0cGFyZW50XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRncm91cEJ5Q29sbGVjdGlvbklkIChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XG5cblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIGNvbGxlY3Rpb25zKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1tzdGF0dXNdKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcblxuXHRcdFx0XHRcdGlmIChyZXN1bHRbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF0gPSB7XG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdGZpdHRpbmc6IFtdLFxuXHRcdFx0XHRcdFx0XHRub3RmaXR0aW5nOiBbXSxcblx0XHRcdFx0XHRcdFx0bWF5YmU6IFtdXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF1bc3RhdHVzXS5wdXNoKFxuXHRcdFx0XHRcdFx0c3RhdHVzID09PSAnZml0dGluZycgPyB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpIDogaXRlbUlkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZXF1ZXN0Q29sdW1ucyAoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApIHtcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XG5cdFx0XHRjb25zdCBmaXR0aW5nQ29sbGVjdGlvbnMgPSBjb2xsZWN0aW9ucy5maXR0aW5nO1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nQ29sbGVjdGlvbiBvZiBmaXR0aW5nQ29sbGVjdGlvbnMpXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoZml0dGluZ0NvbGxlY3Rpb24uY29sdW1ucyk7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcblx0fVxuXG5cdGRlZmVyRW50cnkgKGl0ZW1FbnRyeSkge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gaXRlbUVudHJ5LmRlZmVycmVkO1xuXG5cdFx0aWYgKGRlZmVycmVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVyKCk7XG5cblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZS50aGVuKFxuXHRcdFx0dGhpcy5kZWZlckVudHJ5LmJpbmQodGhpcyksXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJvY2Vzc01lc3NhZ2UgKGJvZHkpIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGJvZHkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtVHlwZSwgYm9keS5pdGVtc1tpdGVtVHlwZV0sIGJvZHkuY29sdW1uc1tpdGVtVHlwZV0pO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1ucyhpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRcdGNvbnN0IHJlcXVlc3RJZHM6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZFN0cmluZyBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWRTdHJpbmcpO1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gK2l0ZW1JZFN0cmluZztcblxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShpdGVtRW50cnkpKTtcblx0XHRcdFx0cmVxdWVzdElkcy5wdXNoKGl0ZW1JZCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtpdGVtSWRdLmZpdHRpbmcubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgZmFsc2UpXG5cdFx0XHQpO1xuXG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkpOyAvLyBjb2xsZWN0aW9uTWFwIG1pZ2h0IGNvbnRhaW4gJ21heWJlJyBtYXRjaGVzXG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiByZXF1ZXN0SWRzfSwgcmVxdWVzdENvbHVtbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2UoaXRlbVR5cGUsIHJlcXVlc3RJZHMsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgcmVzcG9uc2UsIGNvbGxlY3Rpb25NYXApO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZSAoYm9keSkge1xuXHRcdGNvbnN0IGl0ZW1zID0gYm9keS5pdGVtcy5GdW5jdGlvbkNoYW5nZXNSZXNvbHZlO1xuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcblx0XHRjb25zdCByZXF1ZXN0SWRzOiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcblx0XHRcdGNvbnN0IGZ1bmN0aW9uSWQgPSBpdGVtc1tpdGVtSWRdLnBhcmVudC5pdGVtSWQ7XG5cdFx0XHRjb25zdCBmdW5jdGlvbkVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldCgnRnVuY3RpZScsIGZ1bmN0aW9uSWQpO1xuXG5cdFx0XHRpZiAoZnVuY3Rpb25FbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGZ1bmN0aW9uRW50cnkuY29sdW1ucy5yZXNwb25zZS5GdW5jdGllLm5ld2NoYW5nZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShmdW5jdGlvbkVudHJ5KSk7XG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goZnVuY3Rpb25JZCk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoJ0Z1bmN0aWUnLCB7aWQ6IHJlcXVlc3RJZHN9LCB7RnVuY3RpZTogWyduZXdjaGFuZ2VzJ119KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRzID0gcmVzcG9uc2UubGlua3MuRnVuY3RpZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXNwb25zZUlkcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IDxJdGVtRW50cnk+IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBpdGVtSWQpO1xuXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxuXHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5tYWluXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCByZXNwb25zZVZhbHVlID0gcmVzcG9uc2UuZmV0Y2hWYWx1ZSgnRnVuY3RpZScsIGl0ZW1JZCwgJ25ld2NoYW5nZXMnKTtcblxuXHRcdFx0XHRcdGlmIChyZXNwb25zZVZhbHVlID09PSBwcmV2aW91cy5uZXdjaGFuZ2VzKVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdFx0aXRlbUVudHJ5XG5cdFx0XHRcdFx0XHQuc2V0SW5pdGlhbCh7bmV3Y2hhbmdlczogcmVzcG9uc2VWYWx1ZX0sIHRydWUpXG5cdFx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKVxuXHRcdFx0XHRcdFx0LnJlc29sdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xuXHR9XG5cblx0aGFuZGxlUmVzcG9uc2UgKGl0ZW1UeXBlLCByZXF1ZXN0SWRzLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UsIGNvbGxlY3Rpb25NYXApIHtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXF1ZXN0SWRzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSA8SXRlbUVudHJ5PiB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdFx0Y29uc3QgaXNOZXcgPSBpdGVtRW50cnkuaW5pdGlhbCA9PT0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChmaWVsZHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XG5cblx0XHRcdFx0aWYgKGlzTmV3KVxuXHRcdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xuXG5cdFx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBkZXJpdmVkID0gcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbkluZm8ucm9vdCk7XG5cblx0XHRcdGlmIChpc05ldylcblx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChmaWVsZHMsIGRlcml2ZWQsIGNvbHVtbkluZm8pO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxuXHRcdFx0XHRcdHt9LFxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsKVxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoZmllbGRzLCBkZXJpdmVkLCBleHBhbnNpb25SZXN1bHQpO1xuXG5cdFx0XHRcdGl0ZW1FbnRyeVxuXHRcdFx0XHRcdC51cGRhdGVGaWVsZHMoZmllbGRzLCBkZXJpdmVkLCBmYWxzZSlcblx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKVxuXHRcdFx0XHRcdC5yZXNvbHZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XG5cdH1cblxuXHRoYW5kbGVDcmVhdGUgKG1lc3NhZ2UpIHtcblx0XHRjb25zdCBib2R5ID0gbWVzc2FnZS5ib2R5O1xuXG5cdFx0aWYgKGJvZHkuaXRlbVR5cGUgPT09ICdGdW5jdGlvbkNoYW5nZXNSZXNvbHZlJylcblx0XHRcdHJldHVybiB0aGlzLnByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlKGJvZHkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UoYm9keSkudGhlbihcblx0XHRcdGNvbGxlY3Rpb25NYXAgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5hZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xuXHR9XG5cblx0aGFuZGxlVXBkYXRlIChtZXNzYWdlKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UobWVzc2FnZS5ib2R5KS50aGVuKFxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xuXHR9XG5cblx0aGFuZGxlRGVsZXRlIChtZXNzYWdlKSB7XG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBib2R5Lml0ZW1zKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUNvbnRhaW5pbmdJdGVtKGJvZHkuaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uSWQgPSBjb2xsZWN0aW9uLmlkO1xuXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbiwgaXRlbXM6IFtdfTtcblxuXHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0uaXRlbXMucHVzaChpdGVtSWQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0bWFwRW50cnkuY29sbGVjdGlvbi5yZW1vdmVJdGVtcyhtYXBFbnRyeS5pdGVtcywgbnVsbCwgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHR9XG5cblx0Ly8gVE9ETyFcblx0aGFuZGxlTGlua01vdmUgKCkge31cblxuLypcdGhhbmRsZUxpbmtNb3ZlIChtZXNzYWdlKSB7XG5cdFx0cHJvY2Vzc01lc3NhZ2UoXG5cdFx0XHRtZXNzYWdlLFxuXHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdC8vIGZpdHMgaW4gdGhpcyBjb2xsZWN0aW9uLCB0b2RvOiBnZXQgdGhlIG9sZCBjb2xsZWN0aW9uIGl0IGJlbG9uZ2VkIHRvXG5cdFx0XHRcdGNvbGxlY3Rpb24ubW92ZUl0ZW1zKGl0ZW1FbnRyaWVzLCBudWxsLCB0cnVlKTtcblx0XHRcdH0sXG5cdFx0XHRmdW5jdGlvbiAoY29sbGVjdGlvbiwgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0Ly8gbWF5YmUgZml0c1xuXHRcdFx0XHQvLyB0b2RvOiBhbHNvIHJlbW92ZSB0aGVtIGZyb20gdGhlIG9sZCBjb2xsZWN0aW9uXG5cdFx0XHRcdGNvbGxlY3Rpb24uZXh0ZW5kKGFuZ3VsYXIuaWRlbnRpdHksIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHR9LFxuXHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGlkcykge1xuXHRcdFx0XHQvLyBub3QgZml0dGluZyBpbiB0aGlzIGNvbGxlY3Rpb24sIHJlbW92ZSBpdCA/XG5cdFx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoaWRzLCBudWxsLCBtZXNzYWdlKTtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG4qL1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9BcGlGb3JtYXR0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXF1ZXN0U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlUHJvY2Vzc29yJztcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXMnO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzUHJvY2Vzc29yJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25IYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbk1hdGNoZXInO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5IYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSW5mbyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblNldCc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9DcmVhdGVSZXF1ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUFkbWluaXN0cmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnlTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVxdWVzdFNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vS2V5U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Mb2NrU2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlcic7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyJztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbic7XG5leHBvcnQgKiBmcm9tICcuL1NvY2tldE1lc3NhZ2VIYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vVXRpbCc7XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5cbmV4cG9ydCBjbGFzcyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAocHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcikge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKHJlc3BvbnNlOiBhbnkpIHtcblx0XHRyZXR1cm4gbmV3IEFwaVJlc3BvbnNlUHJvY2Vzc29yKHRoaXMuYXBpRm9ybWF0dGVyLCByZXNwb25zZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEJhdGNoU3RhdHVzIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQmF0Y2hTdGF0dXNGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChnZXRJdGVtSWQ6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gSXRlbUlkLCBnZXRQcm9taXNlOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IFByb21pc2U8SXRlbUVudHJ5Pik6IEJhdGNoU3RhdHVzIHtcblx0XHRyZXR1cm4gbmV3IEJhdGNoU3RhdHVzKFxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcblx0XHRcdGdldEl0ZW1JZCxcblx0XHRcdGdldFByb21pc2Vcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDaGFuZ2VzQ29tcGlsYXRpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcblxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4vJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5XG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXSk6IENoYW5nZXNDb21waWxhdGlvbiB7XG5cdFx0cmV0dXJuIG5ldyBDaGFuZ2VzQ29tcGlsYXRpb24oXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHRzaW5nbGVJdGVtcyxcblx0XHRcdGNvbGxlY3Rpb25zXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRDaGFuZ2VzUHJvY2Vzc29yLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0SXRlbUhhbmRsZXJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IENoYW5nZXNQcm9jZXNzb3Ige1xuXHRcdHJldHVybiBuZXcgQ2hhbmdlc1Byb2Nlc3Nvcihcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Vcblx0XHQpO1xuXHR9XG5cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoKSB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uQ2FjaGUoXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5FeHBhbnNpb24sIENvbHVtbkluZm8sIENvbHVtblNldCwgaW5BcnJheSwgSXRlbUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0RW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbnNcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5sZXQgY3VycmVudElkID0gMDtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeSB7XG5cdGlkOiBudW1iZXIgPSBjdXJyZW50SWQrKztcblx0cXVlcnk6IGFueTtcblx0Y29sdW1uczogQ29sdW1uU2V0O1xuXHR0ZW1wbGF0ZUNvbHVtbnM6IENvbHVtblNldCB8IG51bGwgPSBudWxsO1xuXG5cdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbDtcblxuXHRpbml0aWFsOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRpdGVtczogSXRlbUVudHJ5W10gPSBbXTtcblxuXHRyZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XG5cdGRlZmVycmVkOiBhbnk7XG5cdHByb21pc2U6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5Pjtcblx0cmVsb2FkUXVldWVkOiBib29sZWFuID0gZmFsc2U7XG5cblx0aGFzRWRpdFJlc291cmNlcyA9IGZhbHNlO1xuXHRoYXNJdGVtRWRpdFJlc291cmNlcyA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRwdWJsaWMgb3B0aW9uczogYW55XG5cdCkge1xuXHRcdHRoaXMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cdFx0dGhpcy5xdWVyeSA9IGZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0XHR0aGlzLmNvbHVtbnMgPSBmYWN0b3J5LmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdHRoaXMuZGVmZXIoKTtcblx0fVxuXG5cdGRlZmVyICgpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5pc0RlZmVycmVkKCkpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2UuZGVmZXIoKTtcblx0XHR0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnByb21pc2UgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9yZXNvbHZlICgpOiB0aGlzIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XG5cblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcblx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xuXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmVzb2x2ZSAoaXRlbUVudHJ5Q29tcG91bmQ6IHtjb2x1bW5zOiBDb2x1bW5TZXQsIGl0ZW1zOiBJdGVtRW50cnlbXX0pOiB0aGlzIHtcblx0XHR0aGlzLmNvbHVtbnMgPSBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zO1xuXHRcdHRoaXMuaW5pdGlhbCA9IGl0ZW1FbnRyeUNvbXBvdW5kLml0ZW1zO1xuXHRcdHRoaXMuaXRlbXMgPSBpdGVtRW50cnlDb21wb3VuZC5pdGVtcy5zbGljZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3Jlc29sdmUoKTtcblx0fVxuXG5cdGlzTG9jYWwgKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3Rvcnkua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XG5cdH1cblxuXHRtYXRjaFBhcmVudCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0cmV0dXJuIHBhcmVudC5pdGVtVHlwZSA9PT0gaXRlbVR5cGUgJiYgcGFyZW50Lml0ZW1JZCA9PSBpdGVtSWQ7XG5cdH1cblxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBtb2Qgb2YgbW9kaWZpZWQpXG5cdFx0XHRjYWxsYmFjayhtb2QpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5SWQgKGl0ZW1JZCk6IEl0ZW1FbnRyeSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmIChpdGVtRW50cnkuaXRlbUlkID09PSBpdGVtSWQpXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGdldElkQXJyYXkgKGFjY3VtdWxhdG9yOiBJdGVtSWRbXSA9IFtdKTogSXRlbUlkW10ge1xuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5nZXRJZEFycmF5KHRoaXMuaXRlbXMsIGFjY3VtdWxhdG9yKTtcblx0fVxuXG5cdC8vIHNodWxkIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCByZXNvbHZlRGVyaXZlZFxuXHRjcmVhdGVJdGVtcyAodmFsdWVzQXJyYXk6IEZpZWxkTWFwW10pOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBjb2x1bW5TZXQgPSB0aGlzLmNvbHVtbnM7XG5cdFx0bGV0IHRlbXBsYXRlO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuaXRlbUhhbmRsZXIuZmV0Y2hUZW1wbGF0ZSh0aGlzLml0ZW1UeXBlKS50aGVuKFxuXHRcdFx0dGVtcGxhdGVJbnN0YW5jZSA9PiB7XG5cdFx0XHRcdHRlbXBsYXRlID0gdGVtcGxhdGVJbnN0YW5jZTtcblxuXHRcdFx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRcdFx0aWYgKHRoaXMudGVtcGxhdGVDb2x1bW5zID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZUNvbHVtbnMgPSB0ZW1wbGF0ZS5jb2x1bW5zLmV4cGFuZChcblx0XHRcdFx0XHRcdGNvbHVtblNldC5yZXF1ZXN0LFxuXHRcdFx0XHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZSxcblx0XHRcdFx0XHRcdGNvbHVtblNldC5yZXNwb25zZVxuXHRcdFx0XHRcdCkubWVyZ2VkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZXMgb2YgdmFsdWVzQXJyYXkpIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChcblx0XHRcdFx0XHRcdGZhY3RvcnkuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3RMb2NhbChcblx0XHRcdFx0XHRcdFx0ZmFjdG9yeS5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdFx0XHRcdFx0dGVtcGxhdGUsXG5cdFx0XHRcdFx0XHRcdHZhbHVlcyxcblx0XHRcdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0XHRcdHRoaXMucGFyZW50LFxuXHRcdFx0XHRcdFx0XHQ8Q29sdW1uU2V0PiB0aGlzLnRlbXBsYXRlQ29sdW1uc1xuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0XHR9LFxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHJlc29sdmVEZXJpdmVkVmFsdWVzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5pdGVtSGFuZGxlci5yZXNvbHZlRGVyaXZlZFZhbHVlcyhpdGVtRW50cmllcywgdGhpcy5jb2x1bW5zLnJvb3QsIGxvY2FsSXRlbUNhY2hlKTtcblx0fVxuXG5cdGFkZEl0ZW1zIChcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4gPSBmYWxzZSxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxuXHQpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xuXHRcdC8vIGxvY2FsIGVudHJ5IG1pZ2h0IGJlIGFkZGVkIG11bHRpcGxlIHRpbWVzIChleHRlbmQ/KVxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cdFx0Y29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5jb2x1bW5zLmxpbms7XG5cdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Jbml0aWFsOiBJdGVtRW50cnlbXSA9IFtdO1xuXHRcdGNvbnN0IGVudHJpZXNBZGRlZFRvTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRpZiAodXBkYXRlSW5pdGlhbCkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0Ly8gd2hlbiBzYXZpbmcsIGl0ZW1zIHRoYXQgbWlnaHQgYWxyZWFkeSBiZSBpbiBtb2RpZmllZCBhcmUgYWRkZWQgdG8gaW5pdGlhbFxuXHRcdFx0XHRpZiAoaW5pdGlhbC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKSB7XG5cdFx0XHRcdFx0aW5pdGlhbC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRpZiAobW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSkge1xuXHRcdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblxuXHRcdFx0XHRcdGlmIChwYXJlbnRDb2x1bW4gIT09IG51bGwgJiYgaXRlbUVudHJ5Lm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkubW9kaWZpZWRbcGFyZW50Q29sdW1uLmlkXSA9IHBhcmVudC5pdGVtSWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrcyhcblx0XHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbCxcblx0XHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQsXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcblx0XHRcdGNhbGxPbkFkZCxcblx0XHRcdGNhbGxPbkFjdGl2YXRlXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzIChcblx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdLFxuXHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdLFxuXHRcdHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCxcblx0XHRjYWxsT25BZGQ6IGJvb2xlYW4gPSB0cnVlLFxuXHRcdGNhbGxPbkFjdGl2YXRlOiBib29sZWFuID0gdHJ1ZVxuXHQpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblxuXHRcdGlmIChlbnRyaWVzQWRkZWRUb0luaXRpYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLm9wdGlvbnMub25BZGRJbml0aWFsKGVudHJpZXNBZGRlZFRvSW5pdGlhbCwgdGhpcyk7XG5cdFx0fVxuXG5cdFx0aWYgKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xuXG5cdFx0aWYgKGNhbGxPbkFjdGl2YXRlICYmIGNvbGxlY3Rpb25SZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbG9jYWxDYWNoZSA9IGNvbGxlY3Rpb25SZXNvdXJjZXNbMF0ubG9jYWxDYWNoZTtcblxuXHRcdFx0Zm9yIChjb25zdCBhZGRlZEl0ZW1FbnRyeSBvZiBlbnRyaWVzQWRkZWRUb01vZGlmaWVkKVxuXHRcdFx0XHRsb2NhbENhY2hlLm9uQWN0aXZhdGVJdGVtKGFkZGVkSXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcykge1xuXHRcdFx0Y29uc3QgYWRkZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuYWRkSXRlbVJlc291cmNlcyhlbnRyaWVzQWRkZWRUb01vZGlmaWVkKTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcblx0XHRcdFx0cmVzdWx0ID0gYWRkZWRSZXNvdXJjZXM7XG5cblx0XHRcdFx0aWYgKGNhbGxPbkFkZClcblx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmVtb3ZlSXRlbXMgKFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCB7XG5cdFx0aWYgKGlkQXJyYXkubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuICFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIGlkQXJyYXkpO1xuXHRcdFx0fSxcblx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcblx0XHRcdGNhbGxPblJlbW92ZVxuXHRcdCk7XG5cdH1cblxuXHRjbGVhciAoXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0Y2FsbE9uUmVtb3ZlXG5cdFx0KTtcblx0fVxuXG5cdGhhbmRsZVJlbW92ZWRJdGVtcyAoXG5cdFx0ZmlsdGVyRnVuY3Rpb246IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbixcblx0XHRyZXN1bHRSZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbDogYm9vbGVhbiA9IGZhbHNlLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IHJlbW92ZWRGcm9tTW9kaWZpZWQgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaXRlbXMsIGZpbHRlckZ1bmN0aW9uKTtcblx0XHRsZXQgcmVtb3ZlZEZyb21Jbml0aWFsO1xuXG5cdFx0aWYgKHVwZGF0ZUluaXRpYWwpXG5cdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaW5pdGlhbCwgZmlsdGVyRnVuY3Rpb24pO1xuXHRcdGVsc2Uge1xuXHRcdFx0Ly8gcmVtb3ZlIGFsbCAqbG9jYWwqIGl0ZW1zIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSBtb2RpZmllZCBmcm9tIGluaXRpYWwsIHRvb1xuXHRcdFx0Y29uc3QgbG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkOiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHJlbW92ZWRFbnRyeSBvZiByZW1vdmVkRnJvbU1vZGlmaWVkKSB7XG5cdFx0XHRcdGlmIChyZW1vdmVkRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRcdGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZC5wdXNoKHJlbW92ZWRFbnRyeSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KFxuXHRcdFx0XHRcdHRoaXMuaW5pdGlhbCxcblx0XHRcdFx0XHRpdGVtRW50cnkgPT4gbG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTFcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyhyZW1vdmVkRnJvbUluaXRpYWwsIHJlbW92ZWRGcm9tTW9kaWZpZWQsIHJlc3VsdFJlc291cmNlLCBjYWxsT25SZW1vdmUpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyAoXG5cdFx0cmVtb3ZlZEZyb21Jbml0aWFsOiBJdGVtRW50cnlbXSxcblx0XHRyZW1vdmVkRnJvbU1vZGlmaWVkOiBJdGVtRW50cnlbXSxcblx0XHRyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwsXG5cdFx0Y2FsbE9uUmVtb3ZlOiBib29sZWFuID0gdHJ1ZVxuXHQpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblxuXHRcdGlmIChyZW1vdmVkRnJvbUluaXRpYWwubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLm9wdGlvbnMub25SZW1vdmVJbml0aWFsKHJlbW92ZWRGcm9tSW5pdGlhbCwgdGhpcyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbW92ZWRGcm9tTW9kaWZpZWQubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xuXG5cdFx0bGV0IHJlc3VsdDogSXRlbVJlc291cmNlW10gfCBudWxsID0gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgcmVtb3ZlZEVudHJ5IG9mIHJlbW92ZWRGcm9tTW9kaWZpZWQpXG5cdFx0XHRyZW1vdmVkRW50cnkuZGVhY3RpdmF0ZVJlc291cmNlcygpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcykge1xuXHRcdFx0Y29uc3QgcmVtb3ZlZFJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5yZW1vdmVJdGVtUmVzb3VyY2VzKHJlbW92ZWRGcm9tTW9kaWZpZWQpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlID09PSByZXN1bHRSZXNvdXJjZSkge1xuXHRcdFx0XHRyZXN1bHQgPSByZW1vdmVkUmVzb3VyY2VzO1xuXG5cdFx0XHRcdGlmIChjYWxsT25SZW1vdmUpXG5cdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uUmVtb3ZlKHJlbW92ZWRSZXNvdXJjZXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRleHBhbmQgKG5ld0NvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKTogUHJvbWlzZTx0aGlzPiB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XG5cblx0XHRpZiAobmV3Q29sdW1ucyAhPT0gdHJ1ZSAmJiBuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBmYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4odGhpcyk7XG5cblx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKHRoaXMsIHVuZGVmaW5lZCwgbmV3Q29sdW1ucykudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJdGVtcyA9IHJlc3BvbnNlLml0ZW1zW2l0ZW1UeXBlXTtcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0V4cGFuc2lvbihcblx0XHRcdFx0XHRuZXdDb2x1bW5zLFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdHRoaXMuaXRlbXNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcyhcblx0XHRcdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF0gIT09IHVuZGVmaW5lZCB8fCBpdGVtRW50cnkuaXNMb2NhbCgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblxuXHRcdFx0XHR0aGlzLmV4cGFuZENvbHVtbnMoY29sdW1uRXhwYW5zaW9uKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0ZXh0ZW5kUXVlcnkgKGNhbGxiYWNrKSB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucXVlcnk7XG5cblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gY2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5xdWVyeSA9IHRoaXMuZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHR9XG5cblx0ZXh0ZW5kIChxdWVyeUNhbGxiYWNrLCBjb2xsZWN0aW9uUmVzb3VyY2UsIGNhbGxPbkFkZD8sIHVwZGF0ZUluaXRpYWw/KSB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSBmYWN0b3J5LmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCBleHRlbmRlZFF1ZXJ5ID0gdGhpcy5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKS5vYmplY3Q7XG5cdFx0Y29uc3QgZnVsbFF1ZXJ5ID0gZmFjdG9yeS5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxuXHRcdFx0ZXh0ZW5kZWRRdWVyeSxcblx0XHRcdGZhY3RvcnkucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKHRoaXMuZ2V0SWRBcnJheSgpKVxuXHRcdCk7XG5cblx0XHQvLyB0b2RvOiBhbHNvIGRvIHRoZSBsaW1pdCBjaGVjayBpbiBiYXRjaEV4dGVuZFxuXHRcdGNvbnN0IHByb21pc2UgPSBmYWN0b3J5Lml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoXG5cdFx0XHR0aGlzLFxuXHRcdFx0Ly8gV2hlbiB0aGVyZSdzIGEgbGltaXQgd2Ugd2FudCB0byBmZXRjaCBhbGwgaXRlbXMgYmVjYXVzZSB3ZSB3aWxsIGRvIHNvcnRpbmcgYW5kIHNwbGljaW5nIG9mIHRoZSBleGNlc3MgaXRlbXNcblx0XHRcdHRoaXMub3B0aW9ucy5saW1pdCAhPT0gbnVsbCA/XG5cdFx0XHRcdGV4dGVuZGVkUXVlcnkgOlxuXHRcdFx0XHRmdWxsUXVlcnlcblx0XHQpLnRoZW4ocmVzcG9uc2UgPT4ge1xuXHRcdFx0XHQvLyByZW1vdmVBYnNlbnRJdGVtcyhyZXNwb25zZSk7IFRPRE86IHdlIGNhbiBvbmx5IGRvIHRoaXMgd2hlbiB3ZSByZXF1ZXN0ICphbGwqIHRoZSBpdGVtc1xuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW3RoaXMuaXRlbVR5cGVdLFxuXHRcdFx0XHRcdHRoaXMucGFyZW50LFxuXHRcdFx0XHRcdHRoaXMuY29sdW1uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oaXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBjb2xsZWN0aW9uUmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwsIGNhbGxPbkFkZCwgZmFsc2UpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0dGhpcy5wcm9taXNlID0gcHJvbWlzZS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdHJldHVybiBwcm9taXNlO1xuXHR9XG5cblx0cXVldWVSZWxvYWQgKCk6IHZvaWQge1xuXHRcdHRoaXMucmVsb2FkUXVldWVkID0gdHJ1ZTtcblx0fVxuXG5cdGV4cGFuZENvbHVtbnMgKGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uKSB7XG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bih0aGlzLmNvbHVtbnMpO1xuXG5cdFx0aWYgKGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbClcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XG5cdFx0dGhpcy50ZW1wbGF0ZUNvbHVtbnMgPSBudWxsO1xuXHRcdHRoaXMub3B0aW9ucy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJlcXVlc3Q7XG5cdH1cblxuXHRleHBhbmRSZXF1ZXN0Q29sdW1ucyAocmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0dGhpcy5jb2x1bW5zLmV4cGFuZFJlcXVlc3RDb2x1bW5zKHJlcXVlc3RDb2x1bW5zKTtcblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5yZXF1ZXN0O1xuXHR9XG5cblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkcyA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnkgfCBJdGVtSWQ+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcblx0XHRcdFx0cmVzdWx0LnB1c2gocmV0dXJuSXRlbUlkcyA/IGl0ZW1FbnRyeS5pdGVtSWQgOiBpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZW1vdmVkSXRlbXMgKHJldHVybkl0ZW1JZHMgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5IHwgSXRlbUlkPiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaW5pdGlhbCkge1xuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0VXBkYXRlZEl0ZW1zICgpIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSAmJiBpdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRoYXNBZGRlZEl0ZW1zICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiB0aGlzLmluaXRpYWwubGVuZ3RoO1xuXHR9XG5cblx0aGFzUmVtb3ZlZEl0ZW1zICgpIHtcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsLmxlbmd0aCA+IHRoaXMuaXRlbXMubGVuZ3RoO1xuXHR9XG5cblx0aGFzVXBkYXRlZEl0ZW1zICgpIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IG1vZGlmaWVkSXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAobW9kaWZpZWRJdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRnZXRDdXJyZW50UmVzb3VyY2UgKCkge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xuXG5cdFx0cmV0dXJuIHJlc291cmNlc1tyZXNvdXJjZXMubGVuZ3RoIC0gMV07XG5cdH1cblxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJ0YWJDaGFuZ2UgPSBmYWxzZSkge1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gdGhpcy5pdGVtczsgLy8gVE9ETzogaW5pdGlhbFxuXHRcdGNvbnN0IGN1cnJlbnRSZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRjb25zdCBuZXdSZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XG5cblx0XHQvLyB3ZSdsbCBhZGQgdGhlIGl0ZW0gcmVzb3VyY2VzIGJhY2sgaW4gbGF0ZXJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY3VycmVudFJlc291cmNlcykge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zW2lzU3VidGFiQ2hhbmdlID8gJ2NsZWFyT25TdWJUYWJDaGFuZ2UnIDogJ2NsZWFyT25UYWJDaGFuZ2UnXSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdG5ld1Jlc291cmNlcy5wdXNoKGNvbGxlY3Rpb25SZXNvdXJjZSk7XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcylcblx0XHRcdFx0aXRlbVJlc291cmNlLmVudHJ5LnJlc291cmNlcy5wdXNoKGl0ZW1SZXNvdXJjZSk7IC8vIHJlc291cmNlcyBzaG91bGQgYmUgZW1wdHkgYnkgbm93IDotKVxuXHRcdH1cblxuXHRcdHRoaXMucmVzb3VyY2VzID0gbmV3UmVzb3VyY2VzO1xuXHR9XG5cblx0Ly8gdGhpcyBkb2Vzbid0IHJldmVydCB1cGRhdGVzXG5cdHJldmVydENoYW5nZXMgKCkge1xuXHRcdC8vIHNhdmUgdGhlc2UgYmVmb3JlIHJlc2V0dGluZyB0aGUgaXRlbXMgcHJvcGVydHlcblx0XHRjb25zdCBhZGRlZEl0ZW1zID0gPEl0ZW1FbnRyeVtdPiB0aGlzLmdldEFkZGVkSXRlbXMoKTtcblx0XHRjb25zdCByZW1vdmVkSXRlbXMgPSA8SXRlbUVudHJ5W10+IHRoaXMuZ2V0UmVtb3ZlZEl0ZW1zKCk7XG5cblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pbml0aWFsLnNsaWNlKCk7XG5cblx0XHR0aGlzLmhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrcyhbXSwgcmVtb3ZlZEl0ZW1zKTtcblx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzKFtdLCBhZGRlZEl0ZW1zKTtcblx0fVxuXG5cdG9uSXRlbXNDcmVhdGVkIChjb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XG5cblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xuXHRcdFx0cmVzb3VyY2UucmVidWlsZE1hcCgpO1xuXHRcdFx0cmVzb3VyY2Uub3B0aW9ucy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwKTtcblx0XHR9XG5cdH1cblxuXHRnZXRVcGRhdGVkSXRlbUNvbHVtbnMgKGNvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xuXHRcdGNvbnN0IHJlc3VsdDoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGl0ZW1Db2x1bW5zKSB7XG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtjb2x1bW4uYXBpQ29sdW1uLml0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHRbY29sdW1uLmlkXSA9IGNvbHVtbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y2xvbmUgKHBhcmVudCwgY29udmVyc2lvbk1hcD86IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGNsb25lZEl0ZW1FbnRyaWVzID0gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmJhdGNoQ2xvbmUodGhpcy5pdGVtcywgY29udmVyc2lvbk1hcCk7XG5cblx0XHRmb3IgKGNvbnN0IGNsb25lZEl0ZW1FbnRyeSBvZiBjbG9uZWRJdGVtRW50cmllcylcblx0XHRcdGNsb25lZEl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRyZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxuXHRcdFx0ZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNsb25lT3B0aW9ucyh0aGlzLm9wdGlvbnMsIHBhcmVudClcblx0XHQpXG5cdFx0XHQucmVzb2x2ZShcblx0XHRcdFx0e2NvbHVtbnM6IHRoaXMuY29sdW1ucywgaXRlbXM6IGNsb25lZEl0ZW1FbnRyaWVzfVxuXHRcdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgZmlsdGVyQXJyYXkgfSBmcm9tICcuLi9jbGFzc2VzL1V0aWwnO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VJdGVtSWRNYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdGl0ZW1zOiBJdGVtUmVzb3VyY2VbXTtcblx0aXRlbUlkTWFwOiBJdGVtUmVzb3VyY2VJdGVtSWRNYXAgPSB7fTtcblx0Y29sdW1ucztcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHB1YmxpYyBlbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxuXHRcdHB1YmxpYyBvcHRpb25zLFxuXHRcdHB1YmxpYyBsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCkge1xuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2U7XG5cdFx0dGhpcy5pdGVtSWRNYXAgPSB7fTtcblx0XHR0aGlzLml0ZW1zID0gW107XG5cblx0XHRlbnRyeS5yZXNvdXJjZXMucHVzaCh0aGlzKTtcblxuXHRcdHRoaXMuYWRkSXRlbVJlc291cmNlcyhlbnRyeS5pdGVtcyk7XG5cdH1cblxuXHRnZXRJdGVtQnlJZCAoaXRlbUlkOiBudW1iZXIpOiBJdGVtUmVzb3VyY2Uge1xuXHRcdHJldHVybiB0aGlzLml0ZW1JZE1hcFtpdGVtSWRdO1xuXHR9XG5cblx0cmVidWlsZE1hcCAoKTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgaXRlbUlkTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XG5cdFx0XHRpdGVtSWRNYXBbaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5pdGVtSWRNYXAgPSBpdGVtSWRNYXA7XG5cdH1cblxuXHRhZGRJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiBJdGVtUmVzb3VyY2VbXSB7IC8vIHNob3VsZCBiZSBmYXN0XG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXHRcdGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB0aGlzLml0ZW1JZE1hcDtcblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3Rvcihcblx0XHRcdHtcblx0XHRcdFx0ZWRpdDogb3B0aW9ucy5lZGl0SXRlbXMsXG5cdFx0XHRcdG9uQ2hhbmdlOiBvcHRpb25zLm9uQ2hhbmdlLFxuXHRcdFx0XHRvbkRlYWN0aXZhdGU6IGl0ZW1FbnRyeSA9PiB0aGlzLmxvY2FsQ2FjaGUub25EZWFjdGl2YXRlSXRlbShpdGVtRW50cnkpXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXG5cdFx0XHRsZXQgaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2U7XG5cblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGNvbnN0cnVjdG9yKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdGl0ZW1zLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdFx0aXRlbUlkTWFwW2l0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0aXRlbVJlc291cmNlID0gaXRlbUlkTWFwW2l0ZW1JZF07XG5cblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gaXRlbUVudHJpZXNcblx0ICogQHJldHVybnMge0l0ZW1SZXNvdXJjZVtdfVxuXHQgKlxuXHQgKiBSZXR1cm5zIHRoZSBJdGVtcmVzb3VyY2VzIHRoYXQgd2hlcmUgcmVtb3ZlZCBDb2xsZWN0aW9uLlxuXHQgKiBGaWx0ZXJzIG9uIEl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gSXRlbUVudHJ5XG5cdCAqL1xuXHRyZW1vdmVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiBJdGVtUmVzb3VyY2VbXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0ZmlsdGVyQXJyYXkoXG5cdFx0XHR0aGlzLml0ZW1zLFxuXHRcdFx0aXRlbVJlc291cmNlID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHRpZiAoaXRlbVJlc291cmNlLmVudHJ5ID09PSBpdGVtRW50cnkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0XHRcdFx0XHRkZWxldGUgdGhpcy5pdGVtSWRNYXBbaXRlbUVudHJ5Lml0ZW1JZF07XG5cblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNhbGxPbkFkZCAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pOiB2b2lkIHtcblx0XHR0aGlzLm9wdGlvbnMub25BZGQoaXRlbVJlc291cmNlcywgdGhpcyk7XG5cdH1cblxuXHRjYWxsT25SZW1vdmUgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKTogdm9pZCB7XG5cdFx0dGhpcy5vcHRpb25zLm9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMsIHRoaXMpO1xuXHR9XG5cblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSk7XG5cdH1cblxuXHRmaWx0ZXIgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2VbXSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZpcnN0IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBib29sZWFuKTogSXRlbVJlc291cmNlIHwgbnVsbCB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbVJlc291cmNlKSlcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5maXJzdChjYWxsYmFjaykgIT09IG51bGw7XG5cdH1cblxuXHRncm91cEJ5IChhcmd1bWVudDogc3RyaW5nIHwgKChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkgPT4gc3RyaW5nIHwgbnVsbCkpOiB7W2tleTogc3RyaW5nXTogSXRlbVJlc291cmNlW119IHtcblx0XHRjb25zdCBpdGVtc1Jlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBpdGVtUmVzb3VyY2UuZmllbGRzW2FyZ3VtZW50XTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFt2YWx1ZV0gPSBbXTtcblxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZSk7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xuXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtYXA8VD4gKGFyZ3VtZW50OiBzdHJpbmcgfCAoKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBUKSk6IFRbXSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgbGVuZ3RoID0gaXRlbVJlc291cmNlcy5sZW5ndGg7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdFx0cmVzdWx0W2ldID0gaXRlbVJlc291cmNlc1tpXS5maWVsZHNbYXJndW1lbnRdO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZXNbaV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZWR1Y2U8VD4gKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsIHZhbHVlOiBUKSA9PiBULCB2YWx1ZTogVCk6IFQge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdHZhbHVlID0gY2FsbGJhY2soaXRlbVJlc291cmNlLCB2YWx1ZSk7XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRleHRlbmQgKHF1ZXJ5Q2FsbGJhY2ssIHJldHVybkFsbEl0ZW1zOiBib29sZWFuID0gZmFsc2UsIGNhbGxPbkFkZD86IGJvb2xlYW4pOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuZXh0ZW5kKHF1ZXJ5Q2FsbGJhY2ssIHRoaXMsIGNhbGxPbkFkZCwgdHJ1ZSkudGhlbihcblx0XHRcdGl0ZW1SZXNvdXJjZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gcmV0dXJuQWxsSXRlbXMgPyB0aGlzLml0ZW1zIDogaXRlbVJlc291cmNlcztcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0ZGVhY3RpdmF0ZSAoKTogdm9pZCB7XG5cdFx0dGhpcy5sb2NhbENhY2hlLmNsZWFyQ29sbGVjdGlvbih0aGlzKTtcblx0fVxuXG5cdGNsZWFyUmVzb3VyY2UgKCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBpbmRleCA9IGNvbGxlY3Rpb25SZXNvdXJjZXMuaW5kZXhPZih0aGlzKTtcblxuXHRcdGlmIChpbmRleCAhPT0gLTEpXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0aXRlbVJlc291cmNlLmNsZWFyUmVzb3VyY2UoKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uVmlld1Jlc291cmNlIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXG5cdFx0b3B0aW9ucyxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCkge1xuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucywgbG9jYWxDYWNoZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRWRpdFJlc291cmNlIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcblx0XHRvcHRpb25zLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGVcblx0KSB7XG5cdFx0c3VwZXIoZmFjdG9yeS5pdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMsIGxvY2FsQ2FjaGUpO1xuXHR9XG5cblx0c2F2ZSAoKTogUHJvbWlzZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuZW5hYmxlU2F2ZSlcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogU2F2aW5nIGRpc2FibGVkJyk7XG5cblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cnk7XG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwgJiYgZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKSlcblx0XHRcdHJldHVybiBmYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblxuXHRcdHJldHVybiBmYWN0b3J5LmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLmV4ZWN1dGUoW10sIFtjb2xsZWN0aW9uRW50cnldKTtcblx0fVxuXG5cdC8vIFRPRE86IHVzZSBjYWxsYmFjayBmdW5jdGlvblxuXHRtb3ZlSXRlbXMgKGlkQXJyYXk6IEl0ZW1JZFtdLCBkZXN0aW5hdGlvbjogQ29sbGVjdGlvblJlc291cmNlLCBlbmFibGVDYWxsYmFja3M/OiBib29sZWFuKTogSXRlbVJlc291cmNlW10ge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cnk7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdGlmIChvcHRpb25zLmVuYWJsZVNhdmUgfHwgb3B0aW9ucy5tb2RJbnN0YW50KVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogc2F2aW5nIGVuYWJsZWQnKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUgIT09IGRlc3RpbmF0aW9uLmVudHJ5Lml0ZW1UeXBlKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogaXRlbVR5cGUgbWlzbWF0Y2gnKTtcblxuXHRcdGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2VzID0gPEl0ZW1SZXNvdXJjZVtdPiBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2Ugb2YgcmVtb3ZlZEl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRpdGVtRW50cmllcy5wdXNoKHJlbW92ZWRJdGVtUmVzb3VyY2UuZW50cnkpO1xuXG5cdFx0ZGVzdGluYXRpb24uZW50cnkuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGRlc3RpbmF0aW9uLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblxuXHRcdHJldHVybiByZW1vdmVkSXRlbVJlc291cmNlcztcblx0fVxuXG5cdHJlbW92ZUl0ZW1zIChpZEFycmF5OiBJdGVtSWRbXSwgY2FsbE9uUmVtb3ZlOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcblx0XHQvLyBjYWxsT25SZW1vdmUgc2hvdWxkIGJlIGZhbHNlIGhlcmUgdG8gcHJldmVudCBvblJlbW92ZSBmcm9tIGJlaW5nIGNhbGxlZCB0d2ljZVxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSA8SXRlbVJlc291cmNlW10+IHRoaXMuZW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGZhbHNlKTtcblxuXHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudClcblx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGNhbGxPblJlbW92ZSlcblx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cblx0XHRpZiAoY2FsbE9uUmVtb3ZlKVxuXHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbVJlc291cmNlcyk7XG5cdH1cblxuXHRyZW1vdmVJdGVtIChpdGVtSWQ6IEl0ZW1JZCwgY2FsbE9uUmVtb3ZlPzogYm9vbGVhbik6IFByb21pc2U8SXRlbVJlc291cmNlPiB7XG5cdFx0cmV0dXJuIHRoaXMucmVtb3ZlSXRlbXMoW2l0ZW1JZF0sIGNhbGxPblJlbW92ZSkudGhlbihcblx0XHRcdGl0ZW1SZXNvdXJjZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlc1swXTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRhZGRJdGVtcyAodmFsdWVzQXJyYXk6IEZpZWxkTWFwW10sIGNhbGxPbkFkZDogYm9vbGVhbiA9IHRydWUsIGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhbik6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IG1vZEluc3RhbnQgPSB0aGlzLm9wdGlvbnMubW9kSW5zdGFudDtcblxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmNyZWF0ZUl0ZW1zKHZhbHVlc0FycmF5KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRpZiAobW9kSW5zdGFudClcblx0XHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZW50cnkucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIHRoaXMubG9jYWxDYWNoZS5pdGVtcyk7XG5cdFx0XHR9XG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gPEl0ZW1SZXNvdXJjZVtdPiB0aGlzLmVudHJ5LmFkZEl0ZW1zKFxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0Y2FsbE9uQWN0aXZhdGVcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAobW9kSW5zdGFudCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKFxuXHRcdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoY2FsbE9uQWRkKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY2FsbE9uQWRkKVxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0fSxcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRhZGRJdGVtICh2YWx1ZXM6IEZpZWxkTWFwLCBjYWxsT25BZGQ/OiBib29sZWFuLCBjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW4pOiBQcm9taXNlPEl0ZW1SZXNvdXJjZT4ge1xuXHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKFt2YWx1ZXNdLCBjYWxsT25BZGQsIGNhbGxPbkFjdGl2YXRlKS50aGVuKFxuXHRcdFx0aXRlbVJlc291cmNlcyA9PiB7XG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyIChlbmFibGVDYWxsYmFja3MpIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5jbGVhcih0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uSW5mbywgQ29sdW1uU2V0IH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRDb2x1bW5FeHBhbnNpb25SZXN1bHQsIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsXG5cdFJlc3BvbnNlQ29sdW1uXG59IGZyb20gJy4uL3R5cGVzJztcblxubGV0IGN1cnJlbnRJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBJdGVtRW50cnkge1xuXHRpZDogbnVtYmVyID0gKytjdXJyZW50SWQ7XG5cblx0cmVsb2FkUXVldWVkOiBib29sZWFuID0gZmFsc2U7XG5cdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRkZWZlcnJlZDtcblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xuXG5cdGluaXRpYWw6IEZpZWxkTWFwO1xuXHRtb2RpZmllZDogRmllbGRNYXA7XG5cdGRlcml2ZWQ6IEZpZWxkTWFwO1xuXG5cdHJlc291cmNlczogSXRlbVJlc291cmNlW10gPSBbXTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogc3RyaW5nLFxuXHRcdHB1YmxpYyBpdGVtSWQ6IEl0ZW1JZCxcblx0XHRwdWJsaWMgY29sdW1uczogQ29sdW1uU2V0XG5cdCkge1xuXHR9XG5cblx0cXVldWVSZWxvYWQgKCk6IHRoaXMge1xuXHRcdHRoaXMucmVsb2FkUXVldWVkID0gdHJ1ZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0ZGVmZXIgKGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlKTogdGhpcyB7XG5cdFx0dGhpcy5kZWZlcnJlZCA9IHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS5kZWZlcigpO1xuXHRcdHRoaXMuZGVmZXJSZXF1ZXN0ID0gZGVmZXJSZXF1ZXN0O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyZXNvbHZlICgpOiB0aGlzIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XG5cblx0XHQvLyB0aGUgcmVzb2x2ZSBmdW5jdGlvbiBtaWdodCBkZWZlciB0aGUgaXRlbSBhZ2Fpbiwgc28gZGVsZXRlIHRoZSBwcm9wZXJ0aWVzIGZpcnN0XG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xuXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cmVzb2x2ZURlZmVycmVkIChpbml0aWFsLCBkZXJpdmVkLCBjb2x1bW5zKTogdGhpcyB7XG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1ucztcblx0XHR0aGlzLnNldEZpZWxkcyhpbml0aWFsLCBkZXJpdmVkKTtcblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmUoKTtcblx0fVxuXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmRlZmVycmVkICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHRyZWplY3QgKGVycm9yPyk6IHRoaXMge1xuXHRcdC8vIHRvZG86IHRyYW5zbGF0ZWQgZXJyb3Jcblx0XHR0aGlzLmRlZmVycmVkLnJlamVjdChlcnJvcik7XG5cblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcblx0XHRkZWxldGUgdGhpcy5kZWZlclJlcXVlc3Q7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZpZWxkcyAoaW5pdGlhbDogRmllbGRNYXAsIGRlcml2ZWQ6IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBmb3JtYXR0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZvcm1hdHRlZDtcblxuXHRcdHRoaXMuaW5pdGlhbCA9IGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShpbml0aWFsLCBmb3JtYXR0ZWRDb2x1bW5zLm1haW4pO1xuXHRcdHRoaXMuZGVyaXZlZCA9IGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShkZXJpdmVkLCBmb3JtYXR0ZWRDb2x1bW5zLmRlcml2ZWQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvLyBXZSBzaG91bGQgY3JlYXRlIGEgY29weSBvZiBpbml0aWFsIGhlcmUsIGJlY2F1c2UgaW4gbW9zdCBpbnN0YW5jZXMgaXQgd2lsbCBiZSBhIHRlbXBsYXRlLlxuXHRzZXRMb2NhbEZpZWxkcyAoXG5cdFx0aW5pdGlhbFZhbHVlczogRmllbGRNYXAsXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCxcblx0XHRjb2x1bW5zOiBDb2x1bW5TZXQgPSB0aGlzLmNvbHVtbnNcblx0KTogdGhpcyB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBpbml0aWFsID0gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmdldExvY2FsRGVmYXVsdFZhbHVlcygpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucy5tYWluKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblxuXHRcdFx0aW5pdGlhbFtjb2x1bW5JZF0gPSBpbml0aWFsVmFsdWVzW2NvbHVtbklkXTtcblx0XHR9XG5cblx0XHR0aGlzLmluaXRpYWwgPSBmYWN0b3J5LmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShpbml0aWFsLCBjb2x1bW5zLmZvcm1hdHRlZC5tYWluKTtcblx0XHR0aGlzLmRlcml2ZWQgPSB7J2NyZWF0b3I+ZGlzcGxheW5hbWUnOiBmYWN0b3J5LmF1dGhJbnRlcmZhY2UuZ2V0VXNlckRpc3BsYXluYW1lKCl9O1xuXG5cdFx0cmV0dXJuIHRoaXMudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcblx0fVxuXG5cdGNsb25lIChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge30pOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U2VydmljZSA9IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZTtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXHRcdGNvbnN0IG5ld0l0ZW1JZCA9IGl0ZW1FbnRyeVNlcnZpY2UuZXhwYW5kQ29udmVyc2lvbk1hcCh0aGlzLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdC8vIHdlJ2xsIGNvcHkgbW9kaWZpZWQgdG8gcmVzdWx0LmluaXRpYWwgKGluaXRpYWwgbWF5IGJlIGEgdGVtcGxhdGUpXG5cdFx0Y29uc3QgY2xvbmVkRW50cnkgPSBmYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdG5ld0l0ZW1JZCxcblx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuZ2V0RmllbGRzKCksIHt9LCBjb2x1bW5zLm1haW4pLFxuXHRcdFx0YXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5kZXJpdmVkLCB7fSwgY29sdW1ucy5kZXJpdmVkKSxcblx0XHRcdGNvbHVtbnNcblx0XHQpO1xuXG5cdFx0Y2xvbmVkRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcblxuXHRcdGNsb25lZEVudHJ5Lm1vZGlmaWVkID0gYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoY2xvbmVkRW50cnkuaW5pdGlhbCwge30sIGNvbHVtbnMubWFpbik7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xuXG5cdFx0Y29uc3QgcGFyZW50SWQgPSBpdGVtRW50cnlTZXJ2aWNlLmdldENvbnZlcnNpb25WYWx1ZSh0aGlzLml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdGNsb25lZEVudHJ5LnNldFBhcmVudChcblx0XHRcdHBhcmVudC5pdGVtVHlwZSxcblx0XHRcdHBhcmVudElkID09PSB1bmRlZmluZWQgPyBwYXJlbnQuaXRlbUlkIDogcGFyZW50SWRcblx0XHQpO1xuXG5cdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xuXHR9XG5cblx0cmVzZXREZXJpdmVkIChjb2x1bW5JZHMpOiB0aGlzIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHJvb3RDb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJvb3Q7XG5cdFx0Y29uc3QgZmlsdGVyZWRDb2x1bW5zOiBDb2x1bW5JbmZvW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XG5cdFx0XHRpZiAoY29sdW1uSWRzLmluZGV4T2YoY29sdW1uLmlkKSAhPT0gLTEpXG5cdFx0XHRcdGZpbHRlcmVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0fVxuXG5cdFx0cmVzZXREZXJpdmVkUmVjdXJzaXZlbHkoZmlsdGVyZWRDb2x1bW5zKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdFx0ZnVuY3Rpb24gcmVzZXREZXJpdmVkUmVjdXJzaXZlbHkgKGNvbHVtbnMpIHtcblx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdFx0aWYgKCFjb2x1bW4uaXNMZWFmKVxuXHRcdFx0XHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbik7XG5cblx0XHRcdFx0ZGVsZXRlIHNlbGYuZGVyaXZlZFtjb2x1bW4ucGF0aF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJSZXNvdXJjZXMgKCk6IHRoaXMge1xuXHRcdHRoaXMucmVzb3VyY2VzID0gW107XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGRlYWN0aXZhdGVSZXNvdXJjZXMgKCk6IHRoaXMge1xuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzOyAvLyBvbiBvZiB0aGUgZGVhY3RpdmF0ZSBjYWxsYmFja3MgbWlnaHQgY2FsbCBjbGVhclJlc291cmNlc1xuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXG5cdFx0XHRyZXNvdXJjZS5kZWFjdGl2YXRlKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldEZpZWxkcyAoKTogRmllbGRNYXAge1xuXHRcdGlmICh0aGlzLm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tb2RpZmllZDtcblxuXHRcdHJldHVybiB0aGlzLmluaXRpYWw7XG5cdH1cblxuXHQvLyBzaG91bGQgYmUgZmFzdFxuXHQvLyB0b2RvOiB0eXBlIGNvbHVtbkV4cGFuc2lvblJlc3VsdFxuXHRleHBhbmQgKG1haW46IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCwgY29sdW1uRXhwYW5zaW9uUmVzdWx0OiBDb2x1bW5FeHBhbnNpb25SZXN1bHQpOiB0aGlzIHtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZTtcblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQubWVyZ2VkO1xuXG5cdFx0YXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxuXHRcdFx0dGhpcy5pbml0aWFsLFxuXHRcdFx0bWFpbixcblx0XHRcdGRpZmZlcmVuY2UubWFpblxuXHRcdCk7XG5cblx0XHRhcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UoXG5cdFx0XHR0aGlzLmRlcml2ZWQsXG5cdFx0XHRkZXJpdmVkLFxuXHRcdFx0ZGlmZmVyZW5jZS5kZXJpdmVkXG5cdFx0KTtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZShcblx0XHRcdHRoaXMubW9kaWZpZWQsXG5cdFx0XHRtYWluLFxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgaW5pdGlhbCwgbW9kaWZpZWQsIGRlcml2ZWQgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBzZXQuIEl0IHdpbGwgdXBkYXRlIHRoZSB2YWx1ZXNcblx0ICogdGhlbXNlbHZlcyB0byBwcmVzZXJ2ZSByZWZlcmVuY2VzIGluIGV4aXN0aW5nIGl0ZW0gcmVzb3VyY2VzLlxuXHQgKi9cblx0dXBkYXRlRmllbGRzIChmaWVsZHM6IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCB8IG51bGwgPSBudWxsLCBvdmVyd3JpdGU6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xuXG5cdFx0Ly8gZm9yIHNvbWUgd2VpcmQgcmVhc29uIHRoaXMgZnVuY3Rpb24gaXMgbm90IGF0b21pYywgc28gb3ZlcndyaXRlIHRoZSB2YWx1ZXMgd2l0aCB0aGVpciBmb3JtYXR0ZWQgY291bnRlcnBhcnRzXG5cdFx0Ly8gaW1tZWRpYXRlbHlcblx0XHRpZiAobW9kaWZpZWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcblx0XHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRcdGNvbnN0IGNvbHVtblR5cGUgPSBjb2x1bW4uYXBpQ29sdW1uLnR5cGU7XG5cblx0XHRcdFx0aWYgKG92ZXJ3cml0ZSB8fCBhcGlGb3JtYXR0ZXIuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcblx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW5UeXBlLCBmaWVsZHNbY29sdW1uSWRdKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBtYWluQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdGluaXRpYWxbY29sdW1uSWRdID0gYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRpZiAoZGVyaXZlZCAhPT0gbnVsbClcblx0XHRcdHRoaXMuc2V0RGVyaXZlZChkZXJpdmVkKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dXBkYXRlSXRlbVZhbHVlIChmaWVsZHM6IEZpZWxkTWFwLCBhcGlDb2x1bW46IFJlc3BvbnNlQ29sdW1uLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKTogdGhpcyB7XG5cdFx0Y29uc3QgY29sdW1uSWQgPSBhcGlDb2x1bW4uaWQ7XG5cdFx0Y29uc3QgY3VycmVudFZhbHVlID0gZmllbGRzW2NvbHVtbklkXTtcblxuXHRcdGxldCBuZXdWYWx1ZTtcblxuXHRcdGlmIChhcGlDb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdG5ld1ZhbHVlID0gdGhpcy5wYXJlbnQuaXRlbUlkO1xuXHRcdH0gZWxzZVxuXHRcdFx0bmV3VmFsdWUgPSB0aGlzLmZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUoYXBpQ29sdW1uLml0ZW1UeXBlLCBjdXJyZW50VmFsdWUsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0aWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gbmV3VmFsdWU7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHVwZGF0ZUl0ZW1GaWVsZHMgKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsIGNvbHVtbnM6IENvbHVtblNldCA9IHRoaXMuY29sdW1ucyk6IHRoaXMge1xuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gY29sdW1ucy5pdGVtO1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdHRoaXMudXBkYXRlSXRlbVZhbHVlKGluaXRpYWwsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdGlmIChtb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUobW9kaWZpZWQsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0ICgpOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xuXG5cdFx0aWYgKHRoaXMuaXNMb2NhbCgpKVxuXHRcdFx0cmV0dXJuIGFwaUZvcm1hdHRlci5mb3JtYXRSZXF1ZXN0TG9jYWwodGhpcy5nZXRGaWVsZHMoKSwgbWFpbkNvbHVtbnMpO1xuXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdHJldHVybiBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVxdWVzdCh0aGlzLmluaXRpYWwsIHRoaXMubW9kaWZpZWQsIG1haW5Db2x1bW5zKTtcblx0fVxuXG5cdHNldERpc3BsYXlOYW1lICgpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdldERpc3BsYXlOYW1lKCk7XG5cblx0XHRpZiAocmVzdWx0KVxuXHRcdFx0dGhpcy5tb2RpZmllZC5kaXNwbGF5bmFtZSA9IHJlc3VsdDtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Z2V0RGlzcGxheU5hbWUgKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XG5cblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0XHRyZXR1cm4gZmllbGRzLnR5cGUgPT09ICdiZWRyaWpmJyA/XG5cdFx0XHRcdFx0ZmllbGRzLmJlZHJpamYgOiBpdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxuXHRcdFx0XHRcdFx0ZmllbGRzLnZvb3JuYWFtLFxuXHRcdFx0XHRcdFx0ZmllbGRzLnR1c3NlbnZvZWdzZWwsXG5cdFx0XHRcdFx0XHRmaWVsZHMubmFhbVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcblx0XHRcdGNhc2UgJ1BlcnNvbic6XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxuXHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcblx0XHRcdFx0XHRmaWVsZHMudHVzc2Vudm9lZ3NlbCxcblx0XHRcdFx0XHRmaWVsZHMuYWNodGVybmFhbVxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSAnUmVwYXJhdGllJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZGVyaXZlZFsnbWF0ZXJpYWFsPm5hYW0nXTsgLy8gVE9ETyFcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmaWVsZHNbaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKHRoaXMuaXRlbVR5cGUpXTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtCb29sZWFufSByZXR1cm5BbGwgUmV0dXJucyBhbGwgaW5pdGlhbCB2YWx1ZXMgaWYgdHJ1ZVxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKi9cblx0Z2V0Q2hhbmdlcyAocmV0dXJuQWxsOiBib29sZWFuID0gZmFsc2UpIHtcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkICYmICFyZXR1cm5BbGwpXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5nZXRDaGFuZ2VzKFxuXHRcdFx0dGhpcy5pbml0aWFsLFxuXHRcdFx0cmV0dXJuQWxsID8ge30gOiB0aGlzLm1vZGlmaWVkLFxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cblx0XHQpO1xuXHR9XG5cblx0aXNMb2NhbCAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZCh0aGlzLml0ZW1JZCk7XG5cdH1cblxuXHRpc0xvY2thYmxlICgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5pc0xvY2FsKCkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcic6XG5cdFx0XHRjYXNlICdWb2VydHVpZyc6XG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGhhc0NoYW5nZXMgKCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5oYXNDaGFuZ2VzKFxuXHRcdFx0dGhpcy5pbml0aWFsLFxuXHRcdFx0dGhpcy5tb2RpZmllZCxcblx0XHRcdHRoaXMuY29sdW1ucy5tYWluXG5cdFx0KTtcblx0fVxuXG5cdHJlc2V0TW9kaWZpZWQgKCk6IHRoaXMge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uLmlkXSA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY2xvbmUoXG5cdFx0XHRcdGNvbHVtbi5hcGlDb2x1bW4udHlwZSxcblx0XHRcdFx0dGhpcy5pbml0aWFsW2NvbHVtbi5pZF1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRJbml0aWFsICh2YWx1ZXM6IEZpZWxkTWFwLCBlbmFibGVDYWxsYmFja3M6IGJvb2xlYW4gPSBmYWxzZSk6IHRoaXMge1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0bGV0IHByZXZpb3VzO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXG5cdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXG5cdFx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuaW5pdGlhbCwge30sIHRoaXMuY29sdW1ucy5tYWluKSk7XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHByZXZpb3VzID0gYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5tb2RpZmllZCwge30sIHRoaXMuY29sdW1ucy5tYWluKTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERvZXMgYSBzaGFsbG93IGNvcHkgb2YgdmFsdWVzIVxuXHQgKi9cblx0c2V0TW9kaWZpZWQgKHZhbHVlcz86IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSBmYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IGNvbHVtbnMucmVzcG9uc2VbdGhpcy5pdGVtVHlwZV07XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcblx0XHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQgPSB0aGlzLmlzTG9jYWwoKSA/IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5nZXRMb2NhbERlZmF1bHRWYWx1ZXMoKSA6IHt9O1xuXG5cdFx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGFwaUZvcm1hdHRlci5zaGFsbG93Q29weUZpZWxkcyh2YWx1ZXMsIGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKSB7XG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly8gdG9kbzogZGV2IG1vZGUgY29uc3RhbnRcblx0XHRcdFx0XHRcdC8vIGlmIChERVZfTU9ERSlcblx0XHRcdFx0XHRcdC8vIFx0Y29uc29sZS53YXJuKCdzZXRNb2RpZmllZDogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcblxuXHRcdFx0XHRcdFx0bW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXG5cdFx0XHRcdHJlc291cmNlLmZpZWxkcyA9IG1vZGlmaWVkO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXREZXJpdmVkICh2YWx1ZXM6IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5kZXJpdmVkW2tleV0gPSB2YWx1ZXNba2V5XTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0c2V0UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCk6IHRoaXMge1xuXHRcdHRoaXMucGFyZW50ID0ge1xuXHRcdFx0aXRlbVR5cGU6IHBhcmVudFR5cGUsXG5cdFx0XHRpdGVtSWQ6IHBhcmVudElkXG5cdFx0fTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91czogRmllbGRNYXApOiB0aGlzIHtcblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMucmVzb3VyY2VzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgaXRlbVJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbaV07XG5cblx0XHRcdGlmIChpdGVtUmVzb3VyY2UgIT09IG51bGwpXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5vcHRpb25zLm9uQ2hhbmdlKGl0ZW1SZXNvdXJjZSwgcHJldmlvdXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0dG9KU09OICgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aWQ6IHRoaXMuaWQsXG5cdFx0XHRwYXJlbnQ6IHRoaXMucGFyZW50LFxuXHRcdFx0aW5pdGlhbDogdGhpcy5pbml0aWFsLFxuXHRcdFx0bW9kaWZpZWQ6IHRoaXMubW9kaWZpZWQsXG5cdFx0XHRkZXJpdmVkOiB0aGlzLmRlcml2ZWQsXG5cdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtbnNcblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgRmllbGRNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlIHtcblx0Y29sdW1uczogeyBbY29sdW1uSWQ6IHN0cmluZ106IFJlc3BvbnNlQ29sdW1uIH07XG5cdGZpZWxkczogRmllbGRNYXA7XG5cdGRlcml2ZWQ6IEZpZWxkTWFwO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgZW50cnk6IEl0ZW1FbnRyeSxcblx0XHRwdWJsaWMgb3B0aW9ucyxcblx0XHRwcm90ZWN0ZWQgcmVhZG9ubHkgX2lzTmV3OiBib29sZWFuID0gZmFsc2Vcblx0KSB7XG5cdFx0dGhpcy5kZXJpdmVkID0gZW50cnkuZGVyaXZlZDtcblx0XHR0aGlzLmNvbHVtbnMgPSBlbnRyeS5jb2x1bW5zLnJlc3BvbnNlW2VudHJ5LmNvbHVtbnMuaXRlbVR5cGVdO1xuXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XG5cdH1cblxuXHRpc05ldyAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzTmV3O1xuXHR9XG5cblx0aXNMb2NhbCAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuaXNMb2NhbCgpO1xuXHR9XG5cblx0Y2xlYXJSZXNvdXJjZSAoKSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZXNvdXJjZXM7XG5cdFx0Y29uc3QgaW5kZXggPSByZXNvdXJjZXMuaW5kZXhPZih0aGlzKTtcblxuXHRcdGlmIChpbmRleCAhPT0gLTEpXG5cdFx0XHRyZXNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0fVxuXG5cdGRlYWN0aXZhdGUgKCkge1xuXHRcdHRoaXMub3B0aW9ucy5vbkRlYWN0aXZhdGUodGhpcy5lbnRyeSk7XG5cdH1cblxuXHR0b0pTT04gKCkge1xuXHRcdGNvbnN0IGNvbHVtbklkczogc3RyaW5nW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdGhpcy5jb2x1bW5zKVxuXHRcdFx0Y29sdW1uSWRzLnB1c2goY29sdW1uSWQpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGNvbHVtbnM6IGNvbHVtbklkcyxcblx0XHRcdGZpZWxkczogdGhpcy5maWVsZHMsXG5cdFx0XHRkZXJpdmVkOiB0aGlzLmRlcml2ZWQsXG5cdFx0XHRlbnRyeTogdGhpcy5lbnRyeVxuXHRcdH07XG5cdH1cbn1cbiIsImltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNsYXNzIFZpZXdSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRlbnRyeTogSXRlbUVudHJ5LFxuXHRcdG9wdGlvbnMsXG5cdFx0aXNOZXc/OiBib29sZWFuXG5cdCkge1xuXHRcdHN1cGVyKGVudHJ5LCBvcHRpb25zLCBpc05ldyk7XG5cblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQgP1xuXHRcdFx0ZW50cnkuaW5pdGlhbCA6IGVudHJ5Lm1vZGlmaWVkO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEZpZWxkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4vJztcblxuZXhwb3J0IGNsYXNzIEVkaXRSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XG5cdGxvY2FsQ29waWVzOiBGaWVsZE1hcFtdID0gW107XG5cdHRyYW5zYWN0aW9uczogbnVtYmVyID0gMDtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdGVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9ucyxcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KSB7XG5cdFx0c3VwZXIoZW50cnksIG9wdGlvbnMsIGlzTmV3KTtcblxuXHRcdGVudHJ5LnNldE1vZGlmaWVkKCk7XG5cblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkO1xuXHR9XG5cblx0aXNOZXcgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9pc05ldyAmJiB0aGlzLnRyYW5zYWN0aW9ucyA9PT0gMDtcblx0fVxuXG5cdHN0YXJ0ICgpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5sb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5sb2NhbENvcGllcyA9IFtdO1xuXG5cdFx0dGhpcy5sb2NhbENvcGllcy5wdXNoKHRoaXMuY29weUZpZWxkcygpKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cm9sbGJhY2sgKCk6IHRoaXMge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XG5cblx0XHR0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoPEZpZWxkTWFwPiB0aGlzLmxvY2FsQ29waWVzLnBvcCgpLCBpdGVtRW50cnkubW9kaWZpZWQsIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xuXG5cdFx0aWYgKHRoaXMuaXNOZXcoKSAmJiB0aGlzLmxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjb21taXQgKGNhbGxPbkNoYW5nZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcblx0XHRjb25zdCBwcmV2aW91cyA9IDxGaWVsZE1hcD4gdGhpcy5sb2NhbENvcGllcy5wb3AoKTtcblxuXHRcdGlmIChjYWxsT25DaGFuZ2UpXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XG5cblx0XHR0aGlzLnRyYW5zYWN0aW9ucysrOyAvLyBjb21wbGV0ZWQgdHJhbnNhY3Rpb25zXG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldExvY2FsQ29weSAoKTogRmllbGRNYXAgfCBudWxsIHtcblx0XHRjb25zdCBsb2NhbENvcGllcyA9IHRoaXMubG9jYWxDb3BpZXM7XG5cblx0XHRpZiAobG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0aWYgKGxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIGxvY2FsQ29waWVzW2xvY2FsQ29waWVzLmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0Y29weUZpZWxkcyAoZGVzdGluYXRpb246IEZpZWxkTWFwID0ge30pOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5Lm1vZGlmaWVkLCBkZXN0aW5hdGlvbiwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cdH1cblxuXHRzZXRGaWVsZHMgKHZhbHVlczogRmllbGRNYXAsIGNhbGxPbkNoYW5nZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRzO1xuXHRcdGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG5cdFx0bGV0IHByZXZpb3VzO1xuXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSlcblx0XHRcdHByZXZpb3VzID0gdGhpcy5jb3B5RmllbGRzKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gY29sdW1uc1tjb2x1bW5JZF07XG5cblx0XHRcdGlmIChjb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ3NldEZpZWxkczogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvbXBhcmVGaWVsZHMoY29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0sIHZhbHVlc1tjb2x1bW5JZF0pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cdFx0XHRoYXNDaGFuZ2VzID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoY2FsbE9uQ2hhbmdlICYmIGhhc0NoYW5nZXMpXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNhbGxPbkNoYW5nZSAocHJldmlvdXM6IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0dGhpcy5lbnRyeS5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzYXZlIChwYXJhbWV0ZXJzPyk6IFByb21pc2U8dGhpcz4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBwYXJhbWV0ZXJNYXAgPSB7fTtcblxuXHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHRcdHBhcmFtZXRlck1hcCxcblx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdFt7fSwgcGFyYW1ldGVyc11cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdGl0ZW1FbnRyeS5pc0xvY2thYmxlKCkgP1xuXHRcdFx0XHRmYWN0b3J5LmxvY2tTZXJ2aWNlLmZldGNoTG9jayhpdGVtRW50cnkpIDpcblx0XHRcdFx0ZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKClcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdC8vIGFkZFRvQ29sbGVjdGlvbnMgaXMgY2FsbGVkIGluIGNoYW5nZXNQcm9jZXNzb3Jcblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkuY2hhbmdlc1Byb2Nlc3Nvci5leGVjdXRlKFtpdGVtRW50cnldLCBbXSwgcGFyYW1ldGVyTWFwKTtcblx0XHRcdH0sXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblNldCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgVGVtcGxhdGVGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBGaWVsZE1hcCwgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGUge1xuXHRmaWVsZHM6IEZpZWxkTWFwO1xuXHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwO1xuXHRjb2x1bW5zOiBDb2x1bW5TZXQ7IC8vIFRPRE86IHJlbmFtZSB0byBjb2x1bW5TZXRcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZmFjdG9yeTogVGVtcGxhdGVGYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cHVibGljIHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRhZGRpdGlvbmFsQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KSB7XG5cdFx0dGhpcy5maWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgcmVzcG9uc2UubGlua3NbaXRlbVR5cGVdWzBdKTtcblxuXHRcdHRoaXMucmVzcG9uc2VDb2x1bW5zID0gZmFjdG9yeS5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpLCBhZGRpdGlvbmFsQ29sdW1ucykubWVyZ2VkO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gZmFjdG9yeS5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdHJ1ZSwgdGhpcy5yZXNwb25zZUNvbHVtbnMpO1xuXHR9XG59XG4iLCIvLyBzaG91bGQgYmUgb3JkZXJlZCBieSBkZXBlbmRlbmN5IVxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uVmlld1Jlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL1ZpZXdSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL0VkaXRSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL1RlbXBsYXRlJztcbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsIEl0ZW1FbnRyeVNlcnZpY2UsIEl0ZW1IYW5kbGVyLCBJdGVtUmVxdWVzdFNlcnZpY2UsIEtleVNlcnZpY2UsIFF1ZXJ5U2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnksIEl0ZW1FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnkgfSBmcm9tICcuLi9tb2RlbHMvJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHVibGljIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHVibGljIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHVibGljIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdHB1YmxpYyBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcblx0XHRwdWJsaWMgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2Vcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnMpOiBDb2xsZWN0aW9uRW50cnkge1xuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkVudHJ5KFxuXHRcdFx0dGhpcyxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uTWF0Y2hlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0IChjb2xsZWN0aW9uQ2FjaGVzOiBDb2xsZWN0aW9uQ2FjaGVbXSwgdXBkYXRlSW5pdGlhbDogYm9vbGVhbiwgY2FsbE9uQWN0aXZhdGU6IGJvb2xlYW4pIHtcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25NYXRjaGVyKFxuXHRcdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0Y29sbGVjdGlvbkNhY2hlcyxcblx0XHRcdHVwZGF0ZUluaXRpYWwsXG5cdFx0XHRjYWxsT25BY3RpdmF0ZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsIEtleVNlcnZpY2UsIExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LCBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSwgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHVibGljIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHVibGljIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHVibGljIGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2Vcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnMsIGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRcdG9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRpZiAob3B0aW9ucy5lZGl0SXRlbXMpXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMgPSB0cnVlO1xuXG5cdFx0aWYgKG9wdGlvbnMuZWRpdENvbGxlY3Rpb24pIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzID0gdHJ1ZTtcblxuXHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRWRpdFJlc291cmNlKHRoaXMsIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucywgbG9jYWxDYWNoZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uVmlld1Jlc291cmNlKHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zLCBsb2NhbENhY2hlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCByZXF1ZXN0Q29sdW1uczogYW55IHwgYm9vbGVhbiwgcmVzcG9uc2VDb2x1bW5zOiBhbnkpIHtcblx0XHRyZXR1cm4gbmV3IENvbHVtbkV4cGFuc2lvbihcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRyZXNwb25zZUNvbHVtbnNcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5JbmZvIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBSZXNwb25zZUNvbHVtbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkluZm9GYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKCkge31cblxuXHRjb25zdHJ1Y3QgKGFwaUNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIHBhcmVudDogQ29sdW1uSW5mbykge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uSW5mbyhhcGlDb2x1bW4sIHBhcmVudCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkhhbmRsZXIsIENvbHVtblNldCwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtblNldEZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdFN0dWIgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5TZXQoXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXG5cdFx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5LFxuXHRcdFx0dGhpcyxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHQpO1xuXHR9XG5cblx0Y29uc3RydWN0IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsXG5cdFx0ZW5hYmxlQ2FjaGluZz8sXG5cdFx0aW5jbHVkZUlkQ29sdW1uP1xuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykucmVzb2x2ZShyZXNwb25zZUNvbHVtbnMsIGVuYWJsZUNhY2hpbmcsIGluY2x1ZGVJZENvbHVtbik7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25IYW5kbGVyLCBDcmVhdGVSZXF1ZXN0LCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcblxuZXhwb3J0IGNsYXNzIENyZWF0ZVJlcXVlc3RGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGNvbXBpbGF0aW9uLCBjb2xsZWN0aW9uRW50cmllcywgcGFyYW1ldGVyTWFwLCBicmVha3VwQnlQYXJlbnQ/KSB7XG5cdFx0cmV0dXJuIG5ldyBDcmVhdGVSZXF1ZXN0KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdGNvbXBpbGF0aW9uLFxuXHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXG5cdFx0XHRwYXJhbWV0ZXJNYXAsXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IEl0ZW1DYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBJdGVtQ2FjaGUodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2x1bW5TZXQsIEl0ZW1FbnRyeVNlcnZpY2UsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXV0aEludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIFRlbXBsYXRlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5RmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHVibGljIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHVibGljIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHVibGljIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHR9XG5cblx0Y29uc3RydWN0U3R1YiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgY29sdW1uU2V0U3R1YjogQ29sdW1uU2V0KSB7XG5cdFx0cmV0dXJuIG5ldyBJdGVtRW50cnkodGhpcywgaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0U3R1Yik7XG5cdH1cblxuXHRjb25zdHJ1Y3RMb2NhbExpbmtlZCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdGluaXRpYWw6IEZpZWxkTWFwLFxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0LFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcblx0KTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmNvbnN0cnVjdFN0dWIoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0KTtcblxuXHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5LnNldExvY2FsRmllbGRzKGluaXRpYWwsIGNvbnZlcnNpb25NYXApO1xuXHR9XG5cblx0Y29uc3RydWN0TG9jYWwgKFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdHRlbXBsYXRlOiBUZW1wbGF0ZSxcblx0XHRtb2RpZmllZDogRmllbGRNYXAsXG5cdFx0ZGVyaXZlZDogRmllbGRNYXAsXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsLFxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0ID0gdGVtcGxhdGUuY29sdW1ucyxcblx0XHRjb252ZXJzaW9uTWFwP1xuXHQpOiBJdGVtRW50cnkge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGVtcGxhdGUuY29sdW1ucy5pdGVtVHlwZTtcblxuXHRcdGlmIChjb252ZXJzaW9uTWFwID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb252ZXJzaW9uTWFwID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZUxvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCB0ZW1wbGF0ZS5yZXNwb25zZSk7XG5cblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmNvbnN0cnVjdFN0dWIoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0KTtcblxuXHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5XG5cdFx0XHQuc2V0TG9jYWxGaWVsZHModGVtcGxhdGUuZmllbGRzLCBjb252ZXJzaW9uTWFwLCB0ZW1wbGF0ZS5jb2x1bW5zKVxuXHRcdFx0LnNldE1vZGlmaWVkKG1vZGlmaWVkKVxuXHRcdFx0LnNldERlcml2ZWQoZGVyaXZlZCk7XG5cdH1cblxuXHRjb25zdHJ1Y3REZWZlcnJlZCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcblx0XHRkZWZlclJlcXVlc3Q6IGJvb2xlYW5cblx0KTogSXRlbUVudHJ5IHtcblx0XHRjb25zdCBpdGVtRW50cnlTdHViID0gdGhpcy5jb25zdHJ1Y3RTdHViKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0U3R1Yihcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdGl0ZW1FbnRyeVN0dWIuZGVmZXIoZGVmZXJSZXF1ZXN0KTtcblxuXHRcdHJldHVybiBpdGVtRW50cnlTdHViO1xuXHR9XG5cblx0Y29uc3RydWN0IChcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRpbml0aWFsOiBGaWVsZE1hcCxcblx0XHRkZXJpdmVkOiBGaWVsZE1hcCxcblx0XHRjb2x1bW5JbmZvOiBDb2x1bW5TZXRcblx0KTogSXRlbUVudHJ5IHtcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdHViKFxuXHRcdFx0Y29sdW1uSW5mby5pdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCwgLy8gaW5pdGlhbC5pZCAod2hlbiBpbml0aWFsIGlzIG5vdCBhIHRlbXBsYXRlKVxuXHRcdFx0Y29sdW1uSW5mbyxcblx0XHQpLnNldEZpZWxkcyhcblx0XHRcdGluaXRpYWwsIC8vIGNhbiBhbHNvIGJlIGEgdGVtcGxhdGVcblx0XHRcdGRlcml2ZWQsXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDaGFuZ2VzUHJvY2Vzc29yLCBJdGVtUmVzb3VyY2VTZXJ2aWNlLCBMb2NrU2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFZGl0UmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlLCBWaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbU9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtUmVzb3VyY2VGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwdWJsaWMgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuXHRcdHB1YmxpYyBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdHB1YmxpYyBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2Vcblx0KSB7XG5cdH1cblxuXHRnZXRDb25zdHJ1Y3RvciAob3B0aW9uczogSXRlbU9wdGlvbnMpOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IEl0ZW1SZXNvdXJjZSB7XG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdHJldHVybiBpdGVtRW50cnkgPT4ge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMuZWRpdCA/XG5cdFx0XHRcdG5ldyBFZGl0UmVzb3VyY2UodGhpcywgaXRlbUVudHJ5LCBvcHRpb25zKSA6XG5cdFx0XHRcdG5ldyBWaWV3UmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zKTtcblx0XHR9O1xuXHR9XG5cblx0Y29uc3RydWN0IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogSXRlbU9wdGlvbnMsIGlzTmV3PzogYm9vbGVhbik6IEl0ZW1SZXNvdXJjZSB7XG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdHJldHVybiBvcHRpb25zLmVkaXQgP1xuXHRcdFx0bmV3IEVkaXRSZXNvdXJjZSh0aGlzLCBpdGVtRW50cnksIG9wdGlvbnMsIGlzTmV3KSA6XG5cdFx0XHRuZXcgVmlld1Jlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNOZXcpO1xuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRMb2NhbENhY2hlLFxuXHRMb2NrU2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIExvY2FsQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGlkPzogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG5ldyBMb2NhbENhY2hlKFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXG5cdFx0XHRpZFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgSXRlbUNhY2hlLCBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjbGFzcyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5IHtcblx0Y29uc3RydWN0IChyb290SXRlbTogSXRlbUVudHJ5LCBzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSwgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUpIHtcblx0XHRyZXR1cm4gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbihyb290SXRlbSwgc2luZ2xlSXRlbUNhY2hlLCBjb2xsZWN0aW9uQ2FjaGUpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIFF1ZXJ5TWF0Y2hlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeU1hdGNoZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXJcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBmaWVsZHM6IEZpZWxkTWFwLCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCk6IFF1ZXJ5TWF0Y2hlciB7XG5cdFx0cmV0dXJuIG5ldyBRdWVyeU1hdGNoZXIoXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0ZmllbGRzLFxuXHRcdFx0cGFyZW50XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlQYXJzZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAocXVlcnksIHBhcmFtZXRlcnM/KTogUXVlcnlQYXJzZXIge1xuXHRcdHJldHVybiBuZXcgUXVlcnlQYXJzZXIocXVlcnksIHBhcmFtZXRlcnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsLCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCkge1xuXHRcdHJldHVybiBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbihcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHt9XG5cblx0Y29uc3RydWN0IChpdGVtVHlwZTogSXRlbVR5cGUsIHJlc3BvbnNlOiBBcGlSZXNwb25zZSwgYWRkaXRpb25hbENvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwKSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0aGlzLCBpdGVtVHlwZSwgcmVzcG9uc2UsIGFkZGl0aW9uYWxDb2x1bW5zKTtcblx0fVxufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9BcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1c0ZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSW5mb0ZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TZXRGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ3JlYXRlUmVxdWVzdEZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtQ2FjaGVGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5RmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Mb2NhbENhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeU1hdGNoZXJGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlQYXJzZXJGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9UZW1wbGF0ZUZhY3RvcnknO1xuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRBcGlSZXF1ZXN0U2VydmljZSxcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXG5cdENvbHVtbkNhY2hlLFxuXHRDb2x1bW5IYW5kbGVyLFxuXHRDb2x1bW5VdGlsLFxuXHRJdGVtQWRtaW5pc3RyYXRvcixcblx0SXRlbUVudHJ5U2VydmljZSxcblx0SXRlbUhhbmRsZXIsXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0SXRlbVJlc291cmNlU2VydmljZSxcblx0S2V5U2VydmljZSxcblx0TG9ja1NlcnZpY2UsXG5cdFF1ZXJ5U2VydmljZSxcblx0U29ja2V0TWVzc2FnZUhhbmRsZXJcbn0gZnJvbSAnLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSxcblx0QmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0Q29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5JbmZvRmFjdG9yeSxcblx0Q29sdW1uU2V0RmFjdG9yeSxcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdEl0ZW1DYWNoZUZhY3RvcnksXG5cdEl0ZW1FbnRyeUZhY3RvcnksXG5cdEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdExvY2FsQ2FjaGVGYWN0b3J5LFxuXHRNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRRdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRRdWVyeVBhcnNlckZhY3RvcnksXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCBUZW1wbGF0ZUZhY3Rvcnlcbn0gZnJvbSAnLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdEF1dGhJbnRlcmZhY2UsXG5cdEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0TG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFByb21pc2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFJtQ29yZSB7XG5cdHZlcnNpb246IHN0cmluZztcblx0bm9vcCA9IG5vb3A7XG5cblx0YXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXI7XG5cdGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZTtcblx0YXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk7XG5cdGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5O1xuXHRjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xuXHRjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2U7XG5cdGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcjtcblx0Y29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U7XG5cdGNvbHVtbkNhY2hlOiBDb2x1bW5DYWNoZTtcblx0Y29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeTtcblx0Y29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcjtcblx0Y29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5O1xuXHRjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5O1xuXHRjb2x1bW5VdGlsOiBDb2x1bW5VdGlsO1xuXHRjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3Rvcnk7XG5cdGl0ZW1BZG1pbmlzdHJhdG9yOiBJdGVtQWRtaW5pc3RyYXRvcjtcblx0aXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeTtcblx0aXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeTtcblx0aXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZTtcblx0aXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyO1xuXHRpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZTtcblx0aXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeTtcblx0aXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZTtcblx0a2V5U2VydmljZTogS2V5U2VydmljZTtcblx0bG9jYWxDYWNoZUZhY3Rvcnk6IExvY2FsQ2FjaGVGYWN0b3J5O1xuXHRsb2NrU2VydmljZTogTG9ja1NlcnZpY2U7XG5cdG1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk7XG5cdHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnk7XG5cdHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5O1xuXHRxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZTtcblx0cmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xuXHRzb2NrZXRNZXNzYWdlSGFuZGxlcjogU29ja2V0TWVzc2FnZUhhbmRsZXI7XG5cdHRlbXBsYXRlRmFjdG9yeTogVGVtcGxhdGVGYWN0b3J5O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0YXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcblx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2U6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcm9taXNlSW50ZXJmYWNlOiBQcm9taXNlSW50ZXJmYWNlXG5cdCkge1xuXHRcdHRoaXMudmVyc2lvbiA9ICcxLjIuOCc7XG5cblx0XHR0aGlzLmFwaUZvcm1hdHRlciA9IG5ldyBBcGlGb3JtYXR0ZXIoKTtcblx0XHR0aGlzLmtleVNlcnZpY2UgPSBuZXcgS2V5U2VydmljZSgpO1xuXHRcdHRoaXMucXVlcnlTZXJ2aWNlID0gbmV3IFF1ZXJ5U2VydmljZSgpO1xuXHRcdHRoaXMuY29sdW1uVXRpbCA9IG5ldyBDb2x1bW5VdGlsKCk7XG5cblx0XHR0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSA9IG5ldyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkodGhpcy5hcGlGb3JtYXR0ZXIpO1xuXG5cdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSA9IG5ldyBBcGlSZXF1ZXN0U2VydmljZShleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLCB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UgPSBuZXcgSXRlbUVudHJ5U2VydmljZShhdXRoSW50ZXJmYWNlLCB0aGlzLmtleVNlcnZpY2UpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlU2VydmljZSA9IG5ldyBJdGVtUmVzb3VyY2VTZXJ2aWNlKCk7XG5cblx0XHR0aGlzLmxvY2tTZXJ2aWNlID0gbmV3IExvY2tTZXJ2aWNlKFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSA9IG5ldyBRdWVyeU1hdGNoZXJGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnkgPSBuZXcgSXRlbUNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5ID0gbmV3IEJhdGNoU3RhdHVzRmFjdG9yeShwcm9taXNlSW50ZXJmYWNlKTtcblxuXHRcdHRoaXMuY29sdW1uQ2FjaGUgPSBuZXcgQ29sdW1uQ2FjaGUodGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNvbHVtbkhhbmRsZXIgPSBuZXcgQ29sdW1uSGFuZGxlcihcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5DYWNoZSxcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxuXHRcdCk7XG5cblx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5ID0gbmV3IENvbHVtbkluZm9GYWN0b3J5KCk7XG5cdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5ID0gbmV3IENvbHVtblNldEZhY3RvcnkodGhpcy5jb2x1bW5IYW5kbGVyLCB0aGlzLmNvbHVtblV0aWwsIHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkpO1xuXHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uVXRpbCk7XG5cblx0XHR0aGlzLnRlbXBsYXRlRmFjdG9yeSA9IG5ldyBUZW1wbGF0ZUZhY3RvcnkodGhpcy5jb2x1bW5TZXRGYWN0b3J5LCB0aGlzLmNvbHVtblV0aWwpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5ID0gbmV3IEl0ZW1FbnRyeUZhY3RvcnkoXG5cdFx0XHRhdXRoSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLml0ZW1IYW5kbGVyID0gbmV3IEl0ZW1IYW5kbGVyKFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy50ZW1wbGF0ZUZhY3Rvcnlcblx0XHQpO1xuXHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlID0gbmV3IEl0ZW1SZXF1ZXN0U2VydmljZSh0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZVxuXHRcdCk7XG5cblx0XHR0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSA9IG5ldyBRdWVyeVBhcnNlckZhY3RvcnkoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UgPSBuZXcgQ29sbGVjdGlvbkVudHJ5U2VydmljZSh0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSwgdGhpcy5xdWVyeVNlcnZpY2UpO1xuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlKCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25FbnRyeUZhY3RvcnkoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2Vcblx0XHQpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5KHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5KHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlciA9IG5ldyBDb2xsZWN0aW9uSGFuZGxlcihcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxuXHRcdCk7XG5cblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5ID0gbmV3IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSA9IG5ldyBDcmVhdGVSZXF1ZXN0RmFjdG9yeShcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0XHQpO1xuXHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSA9IG5ldyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5KHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSk7XG5cdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSA9IG5ldyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSh0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5ID0gbmV3IEl0ZW1SZXNvdXJjZUZhY3RvcnkodGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5KFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2Vcblx0XHQpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSA9IG5ldyBMb2NhbENhY2hlRmFjdG9yeShlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSA9IG5ldyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5KCk7XG5cblx0XHR0aGlzLml0ZW1BZG1pbmlzdHJhdG9yID0gbmV3IEl0ZW1BZG1pbmlzdHJhdG9yKFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGF1dGhJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LFxuXHRcdFx0bG9jYWxDYWNoZU1hbmFnZXIsXG5cdFx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2Vcblx0XHQpO1xuXG5cdFx0dGhpcy5zb2NrZXRNZXNzYWdlSGFuZGxlciA9IG5ldyBTb2NrZXRNZXNzYWdlSGFuZGxlcihwcm9taXNlSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlXG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCAoKSB7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9tYWluJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsYXNzZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9mYWN0b3JpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG4iXSwic291cmNlUm9vdCI6IiJ9
|