@rentman/rm-core 1.7.3 → 1.7.4
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/rm-core.js +3 -3
- package/dist/rm-core.min.js +1 -1
- package/dist/src/classes/ApiResponseProcessor.d.ts +2 -4
- package/dist/src/models/CollectionEditResource.d.ts +2 -2
- package/dist/src/models/CollectionEntry.d.ts +1 -1
- package/dist/src/models/EditResource.d.ts +5 -5
- package/dist/src/models/ItemEntry.d.ts +12 -12
- package/dist/src/models/ItemResource.d.ts +4 -4
- package/dist/src/models/ViewResource.d.ts +1 -1
- package/dist/src/types/ItemTypesCollection.d.ts +1 -1
- package/package.json +1 -1
package/dist/rm-core.js
CHANGED
|
@@ -6273,7 +6273,7 @@ var LocalCache_LocalCache = /** @class */ (function () {
|
|
|
6273
6273
|
console.warn('Changes watcher already running!', this);
|
|
6274
6274
|
this.disableChangesWatcher();
|
|
6275
6275
|
}
|
|
6276
|
-
this.changesInterval = setInterval(function () {
|
|
6276
|
+
this.changesInterval = window.setInterval(function () {
|
|
6277
6277
|
if (!_this.detectChanges())
|
|
6278
6278
|
return;
|
|
6279
6279
|
_this.disableChangesWatcher();
|
|
@@ -7691,7 +7691,7 @@ var TemplateFactory_TemplateFactory = /** @class */ (function () {
|
|
|
7691
7691
|
var core_RmCore = /** @class */ (function () {
|
|
7692
7692
|
function RmCore(apiRequestServiceInterface, authInterface, errorHandlerInterface, exceptionHandlerInterface, localCacheManager, promiseLibraryInterface) {
|
|
7693
7693
|
this.noop = noop;
|
|
7694
|
-
this.version = '1.7.
|
|
7694
|
+
this.version = '1.7.4';
|
|
7695
7695
|
this.apiFormatter = new ApiFormatter_ApiFormatter();
|
|
7696
7696
|
this.apiResponseProcessorFactory = new ApiResponseProcessorFactory_ApiResponseProcessorFactory(this.apiFormatter);
|
|
7697
7697
|
this.apiRequestService = new ApiRequestService(apiRequestServiceInterface, this.apiResponseProcessorFactory);
|
|
@@ -7862,4 +7862,4 @@ function identity(value) {
|
|
|
7862
7862
|
/***/ })
|
|
7863
7863
|
/******/ ]);
|
|
7864
7864
|
});
|
|
7865
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0l0ZW1FbnRyeU9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2VPcHRpb25zLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvSXRlbUVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvSXRlbVJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvRWRpdFJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5T3B0aW9ucy50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVkaXRSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL1RlbXBsYXRlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvUmVtb3RlVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvTG9jYWxWaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uU3Vic2V0Q2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1BZG1pbmlzdHJhdG9yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1SZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9LZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy90eXBlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Mb2NhbENhY2hlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2tTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeU1hdGNoZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUXVlcnlQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUXVlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1Jlc291cmNlQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbkVudHJ5RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uSW5mb0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5TZXRGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ3JlYXRlUmVxdWVzdEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbUVudHJ5RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1SZXNvdXJjZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Mb2NhbENhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeU1hdGNoZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvUXVlcnlQYXJzZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9UZW1wbGF0ZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29yZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7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QUksQ0FBQyxpQkFBaUIsRUFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsc0JBQXNCLEVBQzNCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixJQUFJLENBQUMsNkJBQTZCLENBQ2xDLENBQUM7SUFDSCxDQUFDO0lBQ0YsYUFBQztBQUFELENBQUM7O0FBRUssU0FBVSxJQUFJO0FBQ3BCLENBQUM7QUFFSyxTQUFVLFFBQVEsQ0FBRSxLQUFLO0lBQzlCLE9BQU8sS0FBSyxDQUFDO0FBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvU3NCO0FBQ0s7QUFDSDtBQUVDO0FBQ0U7QUFDSiIsImZpbGUiOiJybS1jb3JlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwibW9tZW50XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcIm1vbWVudFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJSbUNvcmVcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJtQ29yZVwiXSA9IGZhY3Rvcnkocm9vdFtcIm1vbWVudFwiXSk7XG59KSh3aW5kb3csIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fOyIsImV4cG9ydCBmdW5jdGlvbiBpbnN0YW50aWF0ZU9wdGlvbnMgKG9wdGlvbnM6IHtba2V5OiBzdHJpbmddOiBhbnl9LCB2YWx1ZXM6IG9iamVjdCk6IHZvaWQge1xuXHRmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZXMpIHtcblx0XHRpZiAoIShrZXkgaW4gb3B0aW9ucykpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdGlmICh2YWx1ZXNba2V5XSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y29udGludWU7XG5cblx0XHRvcHRpb25zW2tleV0gPSB2YWx1ZXNba2V5XTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hhbGxvd01lcmdlIChvYmplY3QsIGRlZmF1bHRzKSB7XG5cdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcblx0XHRyZXR1cm4gZGVmYXVsdHM7XG5cblx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdHMpIHtcblx0XHRyZXN1bHRba2V5XSA9IG9iamVjdFtrZXldID09PSB1bmRlZmluZWQgP1xuXHRcdFx0ZGVmYXVsdHNba2V5XSA6IG9iamVjdFtrZXldO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Byb3BlcnRpZXMgKG9iamVjdCkge1xuXHQvLyBAdHMtaWdub3JlXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXJzdFByb3BlcnR5IChvYmplY3QpIHtcblx0aWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKVxuXHRcdHJldHVybiBudWxsO1xuXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcblx0XHRyZXR1cm4ga2V5O1xuXG5cdHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5BcnJheSAobmVlZGxlLCBoYXlzdGFjaykge1xuXHRmb3IgKGNvbnN0IGhheSBvZiBoYXlzdGFjaykge1xuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0aWYgKG5lZWRsZSA9PSBoYXkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFycmF5PFQ+IChzb3VyY2U6IFRbXSwgY2FsbGJhY2s6IChlbGVtOiBUKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG5cdGNvbnN0IGZpbHRlcmVkOiBUW10gPSBbXTtcblxuXHRmb3IgKGNvbnN0IHNyYyBvZiBzb3VyY2UpIHtcblx0XHRpZiAoY2FsbGJhY2soc3JjKSlcblx0XHRcdGZpbHRlcmVkLnB1c2goc3JjKTtcblx0fVxuXG5cdGlmIChmaWx0ZXJlZC5sZW5ndGggPT09IHNvdXJjZS5sZW5ndGgpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdGVtcHR5QXJyYXkoc291cmNlKTtcblxuXHRmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJlZClcblx0XHRzb3VyY2UucHVzaChmaWx0ZXIpO1xuXG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlBcnJheSAoYXJyYXkpOiB2b2lkIHtcblx0YXJyYXkuc3BsaWNlKDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEV4aXN0cyAoc291cmNlLCBwYXRoKSB7XG5cdGlmICh0eXBlb2Ygc291cmNlID09PSAndW5kZWZpbmVkJylcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0Zm9yIChjb25zdCBwIG9mIHBhdGgpIHtcblx0XHRpZiAodHlwZW9mIHNvdXJjZVtwXSA9PT0gJ3VuZGVmaW5lZCcpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzb3VyY2UgPSBzb3VyY2VbcF07XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGg8VD4gKG9iamVjdDogYW55LCBwYXRoOiBBcnJheTxudW1iZXIgfCBzdHJpbmc+LCBkZWZhdWx0czogYW55W10pOiBUIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBwYXRoW2ldO1xuXG5cdFx0aWYgKG9iamVjdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdG9iamVjdFt2YWx1ZV0gPSBkZWZhdWx0c1tpXTtcblxuXHRcdG9iamVjdCA9IG9iamVjdFt2YWx1ZV07XG5cdH1cblxuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aCAob2JqZWN0OiB7fSwgcGF0aDogQXJyYXk8bnVtYmVyIHwgc3RyaW5nPiwgY3JlYXRlOiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xuXHRcdG9iamVjdCA9IG9iamVjdFtwXTsgLy8gd29uJ3QgYWx0ZXIgdGhlIGNhbGxlcidzIHZhclxuXG5cdFx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkICYmICFjcmVhdGUpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLy8gVGFrZW4gZnJvbSBBbmd1bGFySlMsIGFkZGVkIGNvbW1lbnRzIHRvIGlnbm9yZSBUeXBlU2NyaXB0IGVycm9yc1xuZnVuY3Rpb24gYmFzZUV4dGVuZCAoZHN0LCBvYmpzLCBkZWVwKSB7XG5cdGZvciAobGV0IGkgPSAwLCBpaSA9IG9ianMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuXHRcdGNvbnN0IG9iaiA9IG9ianNbaV07XG5cblx0XHRpZiAoIWlzT2JqZWN0KG9iaikgJiYgIWlzRnVuY3Rpb24ob2JqKSlcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG5cblx0XHRmb3IgKGxldCBqID0gMCwgamogPSBrZXlzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbal07XG5cdFx0XHRjb25zdCBzcmMgPSBvYmpba2V5XTtcblxuXHRcdFx0aWYgKGRlZXAgJiYgaXNPYmplY3Qoc3JjKSkge1xuXHRcdFx0XHRpZiAoaXNEYXRlKHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBEYXRlKHNyYy52YWx1ZU9mKCkpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBSZWdFeHAoc3JjKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzcmMubm9kZU5hbWUpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNFbGVtZW50KHNyYykpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICghaXNPYmplY3QoZHN0W2tleV0pKVxuXHRcdFx0XHRcdFx0ZHN0W2tleV0gPSBpc0FycmF5KHNyYykgPyBbXSA6IHt9O1xuXG5cdFx0XHRcdFx0YmFzZUV4dGVuZChkc3Rba2V5XSwgW3NyY10sIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkc3Rba2V5XSA9IHNyYztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZHN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kIChkc3QsIC4uLmFyZ3MpIHtcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSAoZHN0LCAuLi5hcmdzKSB7XG5cdHJldHVybiBiYXNlRXh0ZW5kKGRzdCwgYXJncywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCAodmFsdWUpIHtcblx0Ly8gaHR0cDovL2pzcGVyZi5jb20vaXNvYmplY3Q0XG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua09iamVjdCAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIU9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlciAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGUgKHZhbHVlKSB7XG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uPFQ+ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgVCB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZ0V4cCAodmFsdWUpIHtcblx0cmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbiAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50IChub2RlKSB7XG5cdHJldHVybiAhIShub2RlICYmXG5cdFx0KFxuXHRcdFx0bm9kZS5ub2RlTmFtZSAgLy8gV2UgYXJlIGEgZGlyZWN0IGVsZW1lbnQuXG5cdFx0XHR8fCAobm9kZS5wcm9wICYmIG5vZGUuYXR0ciAmJiBub2RlLmZpbmQpXG5cdFx0KVxuXHQpOyAgLy8gV2UgaGF2ZSBhbiBvbiBhbmQgZmluZCBtZXRob2QgcGFydCBvZiBqUXVlcnkgQVBJLlxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXaW5kb3cgKG9iaikge1xuXHRyZXR1cm4gb2JqICYmIG9iai53aW5kb3cgPT09IG9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMgKG8xLCBvMikge1xuXHRpZiAobzEgPT09IG8yKVxuXHRcdHJldHVybiB0cnVlO1xuXG5cdGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbClcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuXHRpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMilcblx0XHRyZXR1cm4gdHJ1ZTsgLy8gTmFOID09PSBOYU5cblxuXHRjb25zdCB0MSA9IHR5cGVvZiBvMTtcblx0Y29uc3QgdDIgPSB0eXBlb2YgbzI7XG5cblx0bGV0IGxlbmd0aDtcblx0bGV0IGtleTtcblx0bGV0IGtleVNldDtcblxuXHRpZiAodDEgPT09IHQyICYmIHQxID09PSAnb2JqZWN0Jykge1xuXHRcdGlmIChpc0FycmF5KG8xKSkge1xuXHRcdFx0aWYgKCFpc0FycmF5KG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRsZW5ndGggPSBvMS5sZW5ndGg7XG5cblx0XHRcdGlmIChvMS5sZW5ndGggPT09IG8yLmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcblx0XHRcdFx0XHRpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSlcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNEYXRlKG8xKSkge1xuXHRcdFx0aWYgKCFpc0RhdGUobzIpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdHJldHVybiBzaW1wbGVDb21wYXJlKG8xLmdldFRpbWUoKSwgbzIuZ2V0VGltZSgpKTtcblx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKG8xKSkge1xuXHRcdFx0aWYgKCFpc1JlZ0V4cChvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0cmV0dXJuIG8xLnRvU3RyaW5nKCkgPT09IG8yLnRvU3RyaW5nKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChpc1dpbmRvdyhvMSkgfHwgaXNXaW5kb3cobzIpIHx8IGlzQXJyYXkobzIpIHx8IGlzRGF0ZShvMikgfHwgaXNSZWdFeHAobzIpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdGtleVNldCA9IGNyZWF0ZU1hcCgpO1xuXHRcdFx0Zm9yIChrZXkgaW4gbzEpIHtcblx0XHRcdFx0aWYgKGlzRnVuY3Rpb24obzFba2V5XSkpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRcdGtleVNldFtrZXldID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChrZXkgaW4gbzIpIHtcblx0XHRcdFx0aWYgKCEoa2V5IGluIGtleVNldCkgJiYgaXNEZWZpbmVkKG8yW2tleV0pICYmICFpc0Z1bmN0aW9uKG8yW2tleV0pKVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNYXAgKCkge1xuXHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuZnVuY3Rpb24gc2ltcGxlQ29tcGFyZSAoYSwgYikge1xuXHRyZXR1cm4gYSA9PT0gYiB8fCAoYSAhPT0gYSAmJiBiICE9PSBiKTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZE9iamVjdE1heERlcHRoIChtYXhEZXB0aCkge1xuXHRyZXR1cm4gaXNOdW1iZXIobWF4RGVwdGgpICYmIG1heERlcHRoID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHNvdXJjZSwgZGVzdGluYXRpb24/LCBtYXhEZXB0aD8pIHtcblx0Y29uc3Qgc3RhY2tTb3VyY2UgPSBbXTtcblx0Y29uc3Qgc3RhY2tEZXN0ID0gW107XG5cblx0bWF4RGVwdGggPSBpc1ZhbGlkT2JqZWN0TWF4RGVwdGgobWF4RGVwdGgpID8gbWF4RGVwdGggOiBOYU47XG5cblx0aWYgKGRlc3RpbmF0aW9uKSB7XG5cdFx0aWYgKHNvdXJjZSA9PT0gZGVzdGluYXRpb24pIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBpZGVudGljYWwuJyk7XG5cdFx0fVxuXG5cdFx0Ly8gRW1wdHkgdGhlIGRlc3RpbmF0aW9uIG9iamVjdFxuXHRcdGlmIChpc0FycmF5KGRlc3RpbmF0aW9uKSkge1xuXHRcdFx0ZGVzdGluYXRpb24ubGVuZ3RoID0gMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gZGVzdGluYXRpb24pXG5cdFx0XHRcdGRlbGV0ZSBkZXN0aW5hdGlvbltrZXldO1xuXHRcdH1cblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGFja1NvdXJjZS5wdXNoKHNvdXJjZSk7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN0YWNrRGVzdC5wdXNoKGRlc3RpbmF0aW9uKTtcblxuXHRcdHJldHVybiBjb3B5UmVjdXJzZShzb3VyY2UsIGRlc3RpbmF0aW9uLCBtYXhEZXB0aCk7XG5cdH1cblxuXHRyZXR1cm4gY29weUVsZW1lbnQoc291cmNlLCBtYXhEZXB0aCk7XG5cblx0ZnVuY3Rpb24gY29weVJlY3Vyc2UgKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKSB7XG5cdFx0X21heERlcHRoLS07XG5cblx0XHRpZiAoX21heERlcHRoIDwgMClcblx0XHRcdHJldHVybiAnLi4uJztcblxuXHRcdGlmIChpc0FycmF5KF9zb3VyY2UpKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWkgPSBfc291cmNlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcblx0XHRcdFx0X2Rlc3RpbmF0aW9uLnB1c2goY29weUVsZW1lbnQoX3NvdXJjZVtpXSwgX21heERlcHRoKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc0JsYW5rT2JqZWN0KF9zb3VyY2UpKSB7XG5cdFx0XHQvLyBjcmVhdGVNYXAoKSBmYXN0IHBhdGggLS0tIFNhZmUgdG8gYXZvaWQgaGFzT3duUHJvcGVydHkgY2hlY2sgYmVjYXVzZSBwcm90b3R5cGUgY2hhaW4gaXMgZW1wdHlcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChfc291cmNlICYmIHR5cGVvZiBfc291cmNlLmhhc093blByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvLyBTbG93IHBhdGgsIHdoaWNoIG11c3QgcmVseSBvbiBoYXNPd25Qcm9wZXJ0eVxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xuXHRcdFx0XHRpZiAoX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gU2xvd2VzdCBwYXRoIC0tLSBoYXNPd25Qcm9wZXJ0eSBjYW4ndCBiZSBjYWxsZWQgYXMgYSBtZXRob2Rcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfc291cmNlLCBrZXkpKSB7XG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gX2Rlc3RpbmF0aW9uO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29weUVsZW1lbnQgKF9zb3VyY2UsIF9tYXhEZXB0aCA9IDUpIHtcblx0XHQvLyBTaW1wbGUgdmFsdWVzXG5cdFx0aWYgKCFpc09iamVjdChfc291cmNlKSlcblx0XHRcdHJldHVybiBfc291cmNlO1xuXG5cdFx0Ly8gQWxyZWFkeSBjb3BpZWQgdmFsdWVzXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNvbnN0IGluZGV4ID0gc3RhY2tTb3VyY2UuaW5kZXhPZihfc291cmNlKTtcblxuXHRcdGlmIChpbmRleCAhPT0gLTEpXG5cdFx0XHRyZXR1cm4gc3RhY2tEZXN0W2luZGV4XTtcblxuXHRcdGlmIChpc1dpbmRvdyhfc291cmNlKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGNvcHkhIE1ha2luZyBjb3BpZXMgb2YgV2luZG93IGluc3RhbmNlcyBpcyBub3Qgc3VwcG9ydGVkLicpO1xuXHRcdH1cblxuXHRcdGxldCBuZWVkc1JlY3Vyc2UgPSBmYWxzZTtcblx0XHRsZXQgX2Rlc3RpbmF0aW9uID0gY29weVR5cGUoX3NvdXJjZSk7XG5cblx0XHRpZiAoX2Rlc3RpbmF0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdF9kZXN0aW5hdGlvbiA9IGlzQXJyYXkoX3NvdXJjZSkgPyBbXSA6IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKF9zb3VyY2UpKTtcblx0XHRcdG5lZWRzUmVjdXJzZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN0YWNrU291cmNlLnB1c2goX3NvdXJjZSk7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHN0YWNrRGVzdC5wdXNoKF9kZXN0aW5hdGlvbik7XG5cblx0XHRyZXR1cm4gbmVlZHNSZWN1cnNlXG5cdFx0XHQ/IGNvcHlSZWN1cnNlKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKVxuXHRcdFx0OiBfZGVzdGluYXRpb247XG5cdH1cblxuXHRmdW5jdGlvbiBjb3B5VHlwZSAoX3NvdXJjZSkge1xuXHRcdHN3aXRjaCAodG9TdHJpbmcuY2FsbChfc291cmNlKSkge1xuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQ4QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MTZBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQzMkFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBGbG9hdDY0QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MTZBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MzJBcnJheV0nOlxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoY29weUVsZW1lbnQoX3NvdXJjZS5idWZmZXIpLCBfc291cmNlLmJ5dGVPZmZzZXQsIF9zb3VyY2UubGVuZ3RoKTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTEwXG5cdFx0XHRcdGlmICghX3NvdXJjZS5zbGljZSkge1xuXHRcdFx0XHRcdC8vIElmIHdlJ3JlIGluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBlbnZpcm9ubWVudCBzdXBwb3J0cyBBcnJheUJ1ZmZlclxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5cdFx0XHRcdFx0Y29uc3QgY29waWVkID0gbmV3IEFycmF5QnVmZmVyKF9zb3VyY2UuYnl0ZUxlbmd0aCk7XG5cdFx0XHRcdFx0bmV3IFVpbnQ4QXJyYXkoY29waWVkKS5zZXQobmV3IFVpbnQ4QXJyYXkoX3NvdXJjZSkpO1xuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cblx0XHRcdFx0XHRyZXR1cm4gY29waWVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBfc291cmNlLnNsaWNlKDApO1xuXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBEYXRlXSc6XG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihfc291cmNlLnZhbHVlT2YoKSk7XG5cblx0XHRcdGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XG5cdFx0XHRcdGNvbnN0IHJlID0gbmV3IFJlZ0V4cChfc291cmNlLl9zb3VyY2UsIF9zb3VyY2UudG9TdHJpbmcoKS5tYXRjaCgvW14vXSokLylbMF0pO1xuXG5cdFx0XHRcdHJlLmxhc3RJbmRleCA9IF9zb3VyY2UubGFzdEluZGV4O1xuXG5cdFx0XHRcdHJldHVybiByZTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBCbG9iXSc6XG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3RvcihbX3NvdXJjZV0sIHt0eXBlOiBfc291cmNlLnR5cGV9KTtcblx0XHR9XG5cblx0XHRpZiAoaXNGdW5jdGlvbihfc291cmNlLmNsb25lTm9kZSkpIHtcblx0XHRcdHJldHVybiBfc291cmNlLmNsb25lTm9kZSh0cnVlKTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBDb2x1bW5JbmZvIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBGaWVsZE1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY29weSwgZXF1YWxzIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIEFwaUZvcm1hdHRlciB7XG5cdE1PTUVOVF9JTlZBTElEID0gJ0ludmFsaWQgZGF0ZSc7XG5cdFNFUlZFUl9EQVRFVElNRV9GT1JNQVQgPSAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzWic7XG5cdFNFUlZFUl9USU1FX0ZPUk1BVCA9ICdISDptbTpzcyc7XG5cdFNFUlZFUl9EQVRFX0ZPUk1BVCA9ICdZWVlZLU1NLUREJztcblxuXHRjb25zdHJ1Y3RvciAoKSB7XG5cblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlIChmaWVsZHM6IEZpZWxkTWFwLCBjb2x1bW5zOiBBcnJheTxDb2x1bW5JbmZvPGFueT4+KTogRmllbGRNYXAge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXG5cdFx0XHRmaWVsZHNbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbi5wYXRoXSk7XG5cblx0XHRyZXR1cm4gZmllbGRzO1xuXHR9XG5cblx0ZXhwYW5kUmVzcG9uc2UgKGN1cnJlbnQ6IEZpZWxkTWFwLCBleHBhbmRlZDogRmllbGRNYXAsIGNvbHVtbnM6IEFycmF5PENvbHVtbkluZm88YW55Pj4pOiBGaWVsZE1hcCB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcblx0XHRcdGN1cnJlbnRbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZXhwYW5kZWRbY29sdW1uLnBhdGhdKTtcblxuXHRcdHJldHVybiBjdXJyZW50O1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdCAoaW5pdGlhbDogRmllbGRNYXAsIG1vZGlmaWVkOiBGaWVsZE1hcCwgY29sdW1uczogQXJyYXk8Q29sdW1uSW5mbzxhbnk+Pik6IEZpZWxkTWFwIHtcblx0XHRjb25zdCByZXN1bHQ6IHtbY29sdW1uSWQ6IHN0cmluZ106IGFueX0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblx0XHRcdGNvbnN0IGNvbHVtblR5cGUgPSBhcGlDb2x1bW4udHlwZTtcblxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5mb3JtYXRSZXF1ZXN0VmFsdWUoY29sdW1uVHlwZSwgbW9kaWZpZWRbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdExvY2FsIChmaWVsZHM6IEZpZWxkTWFwLCBjb2x1bW5zOiBBcnJheTxDb2x1bW5JbmZvPGFueT4+KTogRmllbGRNYXAge1xuXHRcdGNvbnN0IHJlc3VsdDoge1tjb2x1bW5JZDogc3RyaW5nXTogYW55fSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuZm9ybWF0UmVxdWVzdFZhbHVlKGFwaUNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0aGFzQ2hhbmdlcyAoaW5pdGlhbDogRmllbGRNYXAsIG1vZGlmaWVkOiBGaWVsZE1hcCwgY29sdW1uczogQXJyYXk8Q29sdW1uSW5mbzxhbnk+Pik6IGJvb2xlYW4ge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0Q2hhbmdlcyAoaW5pdGlhbDogRmllbGRNYXAsIG1vZGlmaWVkOiBGaWVsZE1hcCwgY29sdW1uczogQXJyYXk8Q29sdW1uSW5mbzxhbnk+Pik6IEZpZWxkTWFwIHtcblx0XHRjb25zdCByZXN1bHQ6IG9iamVjdFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpIHtcblx0XHRcdFx0cmVzdWx0LnB1c2goXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0b2xkVmFsdWU6IGluaXRpYWxbY29sdW1uSWRdLFxuXHRcdFx0XHRcdFx0bmV3VmFsdWU6IG1vZGlmaWVkW2NvbHVtbklkXSxcblx0XHRcdFx0XHRcdGNvbHVtbjogY29sdW1uLmFwaUNvbHVtblxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Y29weUZpZWxkcyAoc291cmNlOiBGaWVsZE1hcCwgZGVzdGluYXRpb246IEZpZWxkTWFwLCBjb2x1bW5zOiBBcnJheTxDb2x1bW5JbmZvPGFueT4+KTogRmllbGRNYXAge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW4ucGF0aDtcblxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uUGF0aF0gPSB0aGlzLmNsb25lKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgc291cmNlW2NvbHVtblBhdGhdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRzaGFsbG93Q29weUZpZWxkcyAoXG5cdFx0c2hhbGxvd1NvdXJjZTogRmllbGRNYXAsXG5cdFx0ZGVlcFNvdXJjZTogRmllbGRNYXAsXG5cdFx0ZGVzdGluYXRpb246IEZpZWxkTWFwLFxuXHRcdGNvbHVtbnM6IEFycmF5PENvbHVtbkluZm88YW55Pj5cblx0KTogRmllbGRNYXAge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW4ucGF0aDtcblxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uUGF0aF0gPSBzaGFsbG93U291cmNlW2NvbHVtblBhdGhdICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRzaGFsbG93U291cmNlW2NvbHVtblBhdGhdIDpcblx0XHRcdFx0dGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGRlZXBTb3VyY2VbY29sdW1uUGF0aF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcblx0fVxuXG5cdHNldERlZmF1bHRWYWx1ZXMgKGRlc3RpbmF0aW9uOiBGaWVsZE1hcCwgY29sdW1uczogQXJyYXk8Q29sdW1uSW5mbzxhbnk+Pik6IEZpZWxkTWFwIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKVxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uLmlkXSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSk7XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRjb21wYXJlRmllbGRzIChjb2x1bW5UeXBlOiBzdHJpbmcsIGZpcnN0PzogYW55LCBzZWNvbmQ/OiBhbnkpOiBib29sZWFuIHtcblx0XHRpZiAoZmlyc3QgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBzZWNvbmQgPT09IHVuZGVmaW5lZDtcblxuXHRcdGlmIChzZWNvbmQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZU1vbWVudE9iamVjdHMoZmlyc3QsIHNlY29uZCk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVEdXJhdGlvbnMoZmlyc3QsIHNlY29uZCk7XG5cdFx0XHRjYXNlICdpZCc6IC8vIGlkIHR5cGVzXG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxuXHRcdFx0Y2FzZSAnc2libGluZyc6XG5cdFx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PSBzZWNvbmQ7IC8vIHVzZSBub24tc3RyaWN0IGNvbXBhcmlzb25cblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XG5cdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0Y2FzZSAncG93ZXInOlxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmxvYXRzKGZpcnN0LCBzZWNvbmQpO1xuXHRcdFx0Y2FzZSAnaW50JzogLy8gaW50ZWdlciB0eXBlc1xuXHRcdFx0Y2FzZSAnYm9vbCc6IC8vIGJvb2xlYW4gdHlwZXNcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0Y2FzZSAnZW1haWwnOiAvLyBzdHJpbmcgdHlwZXNcblx0XHRcdGNhc2UgJ3Bob25lJzpcblx0XHRcdGNhc2UgJ3VybCc6XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdGNhc2UgJ29yZGVyJzpcblx0XHRcdFx0cmV0dXJuIGZpcnN0ID09PSBzZWNvbmQ7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZXF1YWxzKGZpcnN0LCBzZWNvbmQpO1xuXHRcdH1cblx0fVxuXG5cdGNvbXBhcmVGbG9hdHMgKGE6IG51bWJlciwgYjogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYWJzQSA9IE1hdGguYWJzKGEpO1xuXHRcdGNvbnN0IGFic0IgPSBNYXRoLmFicyhiKTtcblx0XHRjb25zdCBkaWZmID0gTWF0aC5hYnMoYSAtIGIpO1xuXG5cdFx0Y29uc3QgRVBTSUxPTiA9IDEuMTllLTA3O1xuXG5cdFx0Ly8gc2hvcnRjdXQsIGhhbmRsZXMgaW5maW5pdGllc1xuXHRcdGlmIChhID09PSBiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKGEgPT09IDAgfHwgYiA9PT0gMCB8fCBkaWZmIDwgTnVtYmVyLk1JTl9WQUxVRSkge1xuXHRcdFx0Ly8gYSBvciBiIGlzIHplcm8gb3IgYm90aCBhcmUgZXh0cmVtZWx5IGNsb3NlIHRvIGl0XG5cdFx0XHQvLyByZWxhdGl2ZSBlcnJvciBpcyBsZXNzIG1lYW5pbmdmdWwgaGVyZVxuXHRcdFx0cmV0dXJuIGRpZmYgPCAoRVBTSUxPTiAqIE51bWJlci5NSU5fVkFMVUUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyB1c2UgcmVsYXRpdmUgZXJyb3Jcblx0XHRcdHJldHVybiBkaWZmIC8gTWF0aC5taW4oKGFic0EgKyBhYnNCKSwgTnVtYmVyLk1BWF9WQUxVRSkgPCBFUFNJTE9OO1xuXHRcdH1cblx0fVxuXG5cdGNvbXBhcmVNb21lbnRPYmplY3RzIChmaXJzdDogbW9tZW50Lk1vbWVudCwgc2Vjb25kOiBtb21lbnQuTW9tZW50KTogYm9vbGVhbiB7XG5cdFx0aWYgKCFmaXJzdC5pc1ZhbGlkKCkpXG5cdFx0XHRyZXR1cm4gIXNlY29uZC5pc1ZhbGlkKCk7XG5cblx0XHRpZiAoIXNlY29uZC5pc1ZhbGlkKCkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGZpcnN0IElTIHZhbGlkXG5cblx0XHRyZXR1cm4gZmlyc3QuaXNTYW1lKHNlY29uZCk7XG5cdH1cblxuXHRjb21wYXJlRHVyYXRpb25zIChmaXJzdDogbW9tZW50LkR1cmF0aW9uLCBzZWNvbmQ6IG1vbWVudC5EdXJhdGlvbik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmaXJzdC5hc01pbGxpc2Vjb25kcygpID09PSBzZWNvbmQuYXNNaWxsaXNlY29uZHMoKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlVmFsdWUgKGNvbHVtblR5cGU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlRGF0ZSh2YWx1ZSk7XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlQ29sb3IodmFsdWUpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUR1cmF0aW9uKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJycgPyBKU09OLnBhcnNlKHZhbHVlKSA6IHZhbHVlO1xuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgLyAxMDAwMDAwO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdFJlcXVlc3RWYWx1ZSAoY29sdW1uVHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlVGltZSh2YWx1ZSk7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGUodmFsdWUpO1xuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0Q29sb3IodmFsdWUpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RHVyYXRpb24odmFsdWUpO1xuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlRGF0ZSAodmFsdWU6IG51bGwgfCBhbnkpOiBtb21lbnQuTW9tZW50IHtcblx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBtb21lbnQuaW52YWxpZCgpIDogbW9tZW50KHZhbHVlKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlRHVyYXRpb24gKHZhbHVlOiBudWxsIHwgbnVtYmVyKTogbW9tZW50LkR1cmF0aW9uIHtcblx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKHZhbHVlID09PSBudWxsID8gMCA6IHZhbHVlLCAnc2Vjb25kcycpO1xuXHR9XG5cblx0Zm9ybWF0UmVzcG9uc2VDb2xvciAodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUgOiAnIycgKyB2YWx1ZTtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3REYXRlVGltZSAodmFsdWU6IG1vbWVudC5Nb21lbnQpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCkgOiBudWxsO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdERhdGUgKHZhbHVlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlLmZvcm1hdCh0aGlzLlNFUlZFUl9EQVRFX0ZPUk1BVCkgOiBudWxsO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdER1cmF0aW9uICh2YWx1ZTogbW9tZW50LkR1cmF0aW9uKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdmFsdWUuYXNTZWNvbmRzKCk7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0Q29sb3IgKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcjJyA/IHZhbHVlLnN1YnN0cmluZygxKSA6IHZhbHVlO1xuXHR9XG5cblx0Z2V0RGVmYXVsdFZhbHVlIChjb2x1bW5UeXBlOiBzdHJpbmcpOiBhbnkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnaW50Jzpcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ29yZGVyJzpcblx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2xpbmsnOlxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxuXHRcdFx0Y2FzZSAnc2libGluZyc6XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0XHRyZXR1cm4gJzAnO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5pbnZhbGlkKCk7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oKTtcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRcdHJldHVybiAnIzAwMDAwMCc7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHQvLyBcdFx0XHRcdFx0ZW1haWxcblx0XHRcdC8vIFx0XHRcdFx0XHR1cmxcblx0XHRcdC8vIFx0XHRcdFx0XHRodG1sXG5cdFx0XHQvLyBcdFx0XHRcdFx0anNvblxuXHRcdFx0Ly8gXHRcdFx0XHRcdGRhdGFcblx0XHR9XG5cdH1cblxuXHRpc0RlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCB2YWx1ZSwgdGhpcy5nZXREZWZhdWx0VmFsdWUoY29sdW1uVHlwZSkpO1xuXHR9XG5cblx0Y2xvbmUgKGNvbHVtblR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRHVyYXRpb24odmFsdWUpO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xuXHRcdFx0Y2FzZSAnanNvbic6XG5cdFx0XHRcdHJldHVybiBjb3B5KHZhbHVlKTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRnZXRDbG9uZUZ1bmN0aW9uIChjb2x1bW5UeXBlOiBzdHJpbmcpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbjtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZURhdGU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZGVudGl0eTtcblx0XHR9XG5cdH1cblxuXHRjbG9uZUR1cmF0aW9uIChkdXJhdGlvbjogbW9tZW50LkR1cmF0aW9uKSB7XG5cdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbihkdXJhdGlvbik7XG5cdH1cblxuXHRjbG9uZURhdGUgKGRhdGU6IG1vbWVudC5Nb21lbnQpOiBtb21lbnQuTW9tZW50IHtcblx0XHRyZXR1cm4gZGF0ZS5jbG9uZSgpO1xuXHR9XG5cblx0aWRlbnRpdHk8VD4gKGlucHV0OiBUKTogVCB7XG5cdFx0cmV0dXJuIGlucHV0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0Q29sdW1uTWFwLCBBcGlSZXF1ZXN0SXRlbU1hcCwgQXBpUmVxdWVzdExpbWl0LCBJdGVtSWQsIEl0ZW1UeXBlLCBQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEFwaVJlcXVlc3RTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeVxuXHQpIHtcblxuXHR9XG5cblx0dGVtcGxhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcGFyYW1zOiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgcGFyYW1zKSk7XG5cdH1cblxuXHRjcmVhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIHZhbHVlczogYW55LCBwYXJlbnRUeXBlPzogSXRlbVR5cGUsIHBhcmVudElkPzogSXRlbUlkKTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY3JlYXRlKGl0ZW1UeXBlLCBpdGVtSWQsIHZhbHVlcywgcGFyZW50VHlwZSwgcGFyZW50SWQpKTtcblx0fVxuXG5cdGRlbGV0ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWRzOiBJdGVtSWRbXSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaXRlbUlkcykpO1xuXHR9XG5cblx0dXBkYXRlSXRlbXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbXM6IEFwaVJlcXVlc3RJdGVtTWFwLCBjb2x1bW5zOiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS51cGRhdGVJdGVtcyhpdGVtVHlwZSwgaXRlbXMsIGNvbHVtbnMpKTtcblx0fVxuXG5cdHJlcXVlc3RTa2VsZXRvbiAocGFyYW1zOiBhbnksIHJlcXVlc3RDYW5jZWxlcj86IFByb21pc2VJbnRlcmZhY2U8YW55Pik6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMsIHJlcXVlc3RDYW5jZWxlcikpO1xuXHR9XG5cblx0bW92ZUl0ZW1zIChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbXM6IHtbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1JZFtdfSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLm1vdmVJdGVtcyhwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbXMpKTtcblx0fVxuXG5cdGNvbHVtbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sdW1uczogQXBpUmVxdWVzdENvbHVtbk1hcCwgcGFyYW1zPzogYW55KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zKSk7XG5cdH1cblxuXHRxdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogYW55LCBjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uTWFwLCBsaW1pdD86IEFwaVJlcXVlc3RMaW1pdCk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSwgY29sdW1ucywgbGltaXQpKTtcblx0fVxuXG5cdHByb2Nlc3NSZXNwb25zZSAocmVxdWVzdDogYW55KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiByZXF1ZXN0LnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdChyZXNwb25zZSkpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1UeXBlLCBJdGVtVHlwZU1hcCwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBBcGlSZXNwb25zZVByb2Nlc3NvciB7XG5cdGNvbHVtbnM6IEl0ZW1UeXBlTWFwO1xuXHRpdGVtczoge1xuXHRcdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFx0W2l0ZW1JZDogbnVtYmVyXTogYW55XG5cdFx0fVxuXHR9O1xuXHRsaW5rczogSXRlbVR5cGVNYXA7XG5cdGNhY2hlYWJsZTogYm9vbGVhbjtcblx0bWFwOiBhbnk7XG5cblx0Y29sdW1uSW5kZXhNYXA6IGFueSA9IHt9O1xuXHRjb2x1bW5NYXA6IGFueSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXG5cdFx0cHVibGljIHJlc3BvbnNlOiBhbnlcblx0KSB7XG5cdFx0dGhpcy5jb2x1bW5zID0gcmVzcG9uc2UuY29sdW1ucztcblx0XHR0aGlzLml0ZW1zID0gcmVzcG9uc2UuaXRlbXM7XG5cdFx0dGhpcy5saW5rcyA9IHJlc3BvbnNlLmxpbmtzO1xuXHRcdHRoaXMuY2FjaGVhYmxlID0gcmVzcG9uc2UuY2FjaGVhYmxlO1xuXHRcdHRoaXMubWFwID0gcmVzcG9uc2UubWFwO1xuXG5cdFx0dGhpcy5jcmVhdGVDb2x1bW5NYXBzKCk7XG5cdH1cblxuXHRjcmVhdGVDb2x1bW5NYXBzICgpIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtblR5cGUgaW4gdGhpcy5jb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdID0ge307XG5cdFx0XHR0aGlzLmNvbHVtbk1hcFtjb2x1bW5UeXBlXSA9IHt9O1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbY29sdW1uVHlwZV1baV07XG5cdFx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGk7XG5cdFx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBjb2x1bW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZmV0Y2hWYWx1ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgY29sdW1uSWQ6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YVt0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF1dO1xuXHR9XG5cblx0ZmV0Y2hEZXJpdmVkT2JqZWN0IChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCByb290Q29sdW1uczogUmVzcG9uc2VDb2x1bW5bXSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygcm9vdENvbHVtbnMpIHtcblx0XHRcdHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzKFxuXHRcdFx0XHR0aGlzLmZldGNoVmFsdWUoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uLmlkKSxcblx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRyZXN1bHRcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoRGVyaXZlZFZhbHVlcyAodmFsdWU6IGFueSwgY29sdW1uOiBSZXNwb25zZUNvbHVtbiwgZGVzdGluYXRpb246IGFueSk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XG5cdFx0XHRsZXQgY2hpbGRWYWx1ZTtcblxuXHRcdFx0aWYgKHZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdGNoaWxkVmFsdWUgPSBudWxsO1xuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmdldERlZmF1bHRWYWx1ZShjaGlsZENvbHVtbi5hcGlDb2x1bW4udHlwZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjaGlsZFZhbHVlID0gdGhpcy5mZXRjaFZhbHVlKGNvbHVtbi5pdGVtVHlwZSwgdmFsdWUsIGNoaWxkQ29sdW1uLmlkKTtcblx0XHRcdFx0ZGVzdGluYXRpb25bY2hpbGRDb2x1bW4ucGF0aF0gPSBjaGlsZFZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2hpbGRDb2x1bW4uaXNMZWFmKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5mZXRjaERlcml2ZWRWYWx1ZXMoY2hpbGRWYWx1ZSwgY2hpbGRDb2x1bW4sIGRlc3RpbmF0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRmZXRjaE9iamVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUlkOiBzdHJpbmcgfCBJdGVtSWQsXG5cdFx0aW5jbHVkZUxpbmtzOiBib29sZWFuID0gZmFsc2Vcblx0KTogRmllbGRNYXA8SXRlbVR5cGVUeXBlPiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuaXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgaXRlbSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGE7XG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0cmVzdWx0W3RoaXMuY29sdW1uc1tpdGVtVHlwZV1baV0uaWRdID0gZGF0YVtpXTtcblx0XHR9XG5cblx0XHRpZiAoaW5jbHVkZUxpbmtzKSB7XG5cdFx0XHRjb25zdCBsaW5rcyA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0ubGlua3M7XG5cdFx0XHRyZXN1bHQuX19saW5rcyA9IHt9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtUeXBlIGluIGxpbmtzKVxuXHRcdFx0XHRyZXN1bHQuX19saW5rc1tsaW5rVHlwZV0gPVxuXHRcdFx0XHRcdHRoaXMuZmV0Y2hPYmplY3RBcnJheShsaW5rVHlwZSwgaW5jbHVkZUxpbmtzLCBsaW5rc1tsaW5rVHlwZV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaE9iamVjdEFycmF5IChpdGVtVHlwZTogSXRlbVR5cGUsIGluY2x1ZGVMaW5rcz86IGJvb2xlYW4sIGlkQXJyYXk/OiBJdGVtSWRbXSB8IG51bGwpOiBGaWVsZE1hcFtdIHtcblx0XHRjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG5cblx0XHRpZiAoaWRBcnJheSA9PT0gbnVsbCkge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzKSk7XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXG5cdFx0aWYgKGlkQXJyYXkgPT09IHVuZGVmaW5lZClcblx0XHRcdGlkQXJyYXkgPSB0aGlzLmxpbmtzW2l0ZW1UeXBlXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkhKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaE9iamVjdE1hcCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5JZDogc3RyaW5nLCBpbmNsdWRlTGlua3M/OiBib29sZWFuLCByZXR1cm5LZXlzPzogYm9vbGVhbikge1xuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdO1xuXHRcdGNvbnN0IHJlc3VsdDoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcblx0XHRjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pIHtcblx0XHRcdGNvbnN0IGtleSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YVtjb2x1bW5JbmRleF07XG5cdFx0XHRrZXlzLnB1c2goa2V5KTtcblx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpO1xuXHRcdH1cblxuXHRcdGlmIChyZXR1cm5LZXlzKVxuXHRcdFx0cmV0dXJuIHtyZXN1bHQ6IHJlc3VsdCwga2V5czoga2V5c307XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoRmllbGRNYXAgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sdW1uSWQ6IHN0cmluZykge1xuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdO1xuXHRcdGNvbnN0IHJlc3VsdDoge1tpdGVtSWQ6IG51bWJlcl06IEZpZWxkTWFwfSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcblx0XHRcdHJlc3VsdFtpZF0gPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0uZGF0YVtpbmRleF07XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hDb2x1bW5BcnJheSAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogUmVzcG9uc2VDb2x1bW5bXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBSZXNwb25zZUNvbHVtbltdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGFwaUNvbHVtbiBvZiB0aGlzLmNvbHVtbnNbaXRlbVR5cGVdKVxuXHRcdFx0cmVzdWx0LnB1c2goYXBpQ29sdW1uKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaENvbHVtbk9iamVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogUmVzcG9uc2VDb2x1bW4ge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcFtpdGVtVHlwZV07XG5cdH1cblxuXHRmZXRjaENvbHVtbnNPYmplY3QgKCk6IHtbaXRlbVR5cGU6IHN0cmluZ106IFJlc3BvbnNlQ29sdW1ufSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwO1xuXHR9XG5cblx0Y3JlYXRlUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChpdGVtVHlwZTogSXRlbVR5cGVUeXBlLCBpZDogSXRlbUlkKToge29iamVjdDogRmllbGRNYXA8SXRlbVR5cGVUeXBlPiB8IHVuZGVmaW5lZCwgbGlua3M6IGFueX0ge1xuXHRcdHJldHVybiB7XG5cdFx0XHRvYmplY3Q6IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkKSxcblx0XHRcdGxpbmtzOiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0ubGlua3Ncblx0XHR9O1xuXHR9XG5cblx0aGFzSXRlbXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IGJvb2xlYW4ge1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogSXRlbUlkW10ge1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRyZXN1bHQucHVzaChwYXJzZUludChpdGVtSWQsIDEwKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiZXhwb3J0IGVudW0gRU5UUllfU1RBVFVTIHtcblx0Q0FDSEVEID0gJ2NhY2hlZCcsXG5cdExPQ0FMID0gJ2xvY2FsJyxcblx0UFJPTUlTRUQgPSAncHJvbWlzZWQnLFxuXHRFWFBBTkQgPSAnZXhwYW5kJyxcblx0UFJPTUlTRURfRVhQQU5EID0gJ3Byb21pc2VkLWV4cGFuZCcsXG5cdEVYUEFORF9MT0NBTCA9ICdleHBhbmQtbG9jYWwnLFxuXHRQUk9NSVNFRF9FWFBBTkRfTE9DQUwgPSAncHJvbWlzZWQtZXhwYW5kLWxvY2FsJyxcblx0UkVTT0xWRSA9ICdyZXNvbHZlJyxcblx0UkVTT0xWRV9WQUxVRVMgPSAncmVzb2x2ZS12YWx1ZXMnXG59XG5cbmV4cG9ydCBjb25zdCBBTExfUEVSTUlTU0lPTlMgPSAnNyc7XG5cbmV4cG9ydCBjb25zdCBDT0xVTU5fU0VQRVJBVE9SID0gJz4nO1xuZXhwb3J0IGNvbnN0IFJFTkRFUl9BU19TRVBFUkFUT1IgPSAnOic7XG5cbmV4cG9ydCBjb25zdCBORVdfUFJFRklYOiBzdHJpbmcgPSAnLTEnO1xuZXhwb3J0IGNvbnN0IERVUExJQ0FURV9QUkVGSVg6IHN0cmluZyA9ICctMic7XG5cbmV4cG9ydCBjb25zdCBORVdfS0VZV09SRDogc3RyaW5nID0gJ25ldy0nO1xuZXhwb3J0IGNvbnN0IERVUExJQ0FURV9LRVlXT1JEOiBzdHJpbmcgPSAnZHVwLSc7XG4iLCJpbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEVudHJ5U3RhdHVzLCBFbnRyeVN0YXR1c01hcCwgSXRlbUlkLCBJdGVtVHlwZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEJhdGNoU3RhdHVzPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlLCBUIGV4dGVuZHMgSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4gfCBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj4ge1xuXHRyZWFkb25seSByZXF1ZXN0U3RhdHVzID0gW1xuXHRcdEVOVFJZX1NUQVRVUy5SRVNPTFZFLFxuXHRcdEVOVFJZX1NUQVRVUy5SRVNPTFZFX1ZBTFVFUyxcblx0XHRFTlRSWV9TVEFUVVMuRVhQQU5ELFxuXHRcdEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRcblx0XTtcblxuXHRyZWFkb25seSByZW1vdGVFeHBhbmRTdGF0dXMgPSBbRU5UUllfU1RBVFVTLkVYUEFORCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF07XG5cblx0cmVhZG9ubHkgbG9jYWxFeHBhbmRTdGF0dXMgPSBbRU5UUllfU1RBVFVTLkVYUEFORF9MT0NBTCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF9MT0NBTF07XG5cblx0ZW50cmllczogRW50cnlTdGF0dXNNYXA8VD4gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0cHVibGljIGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogVCkgPT4gSXRlbUlkLFxuXHRcdHB1YmxpYyBnZXRQcm9taXNlOiAoaXRlbUVudHJ5OiBUKSA9PiBQcm9taXNlSW50ZXJmYWNlPFQ+XG5cdCkge1xuXHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIEVOVFJZX1NUQVRVUylcblx0XHRcdHRoaXMuZW50cmllc1tFTlRSWV9TVEFUVVNbc3RhdHVzXV0gPSBbXTtcblx0fVxuXG5cdGFkZCAoZW50cnlTdGF0dXM6IEVudHJ5U3RhdHVzPFQ+KTogdm9pZCB7XG5cdFx0dGhpcy5lbnRyaWVzW2VudHJ5U3RhdHVzLnN0YXR1c10ucHVzaChlbnRyeVN0YXR1cy5lbnRyeSk7XG5cdH1cblxuXHRoYXNFbnRyaWVzIChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10pOiBib29sZWFuIHtcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBvZiBzdGF0dXNBcnJheSkge1xuXHRcdFx0aWYgKHRoaXMuZW50cmllc1tzdGF0dXNdLmxlbmd0aCA+IDApXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGhhc1JlcXVlc3RzICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5oYXNFbnRyaWVzKHRoaXMucmVxdWVzdFN0YXR1cyk7XG5cdH1cblxuXHRmb3JFYWNoRW50cnkgKHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSwgY2FsbGJhY2s6IChlbnRyeTogVCwgaXRlbUlkOiBJdGVtSWQpID0+IHZvaWQpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBvZiBzdGF0dXNBcnJheSkge1xuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IHRoaXMuZW50cmllc1tzdGF0dXNdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1c0VudHJ5IG9mIHN0YXR1c0VudHJpZXMpXG5cdFx0XHRcdGNhbGxiYWNrKHN0YXR1c0VudHJ5LCB0aGlzLmdldEl0ZW1JZChzdGF0dXNFbnRyeSkpO1xuXHRcdH1cblx0fVxuXG5cdHJlZHVjZUVudHJpZXM8VT4gKFxuXHRcdHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSxcblx0XHRjYWxsYmFjazogKGVudHJ5OiBULCBpdGVtSWQ6IEl0ZW1JZCwgZGVzdGluYXRpb246IFUpID0+IHZvaWQsXG5cdFx0ZGVzdGluYXRpb246IFVcblx0KTogVSB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSwgdGhpcy5nZXRJdGVtSWQoc3RhdHVzRW50cnkpLCBkZXN0aW5hdGlvbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0cmVkdWNlQWxsRW50cmllczxVPiAoXG5cdFx0Y2FsbGJhY2s6IChlbnRyeTogVCwgaXRlbUlkOiBJdGVtSWQsIGRlc3RpbmF0aW9uOiBVKSA9PiB2b2lkLFxuXHRcdGRlc3RpbmF0aW9uOiBVXG5cdCk6IFUge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBzdGF0dXNFbnRyaWVzID0gZW50cmllc1tzdGF0dXNdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1c0VudHJ5IG9mIHN0YXR1c0VudHJpZXMpXG5cdFx0XHRcdGNhbGxiYWNrKHN0YXR1c0VudHJ5LCB0aGlzLmdldEl0ZW1JZChzdGF0dXNFbnRyeSksIGRlc3RpbmF0aW9uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRnZXRQcm9taXNlcyAoKTogUHJvbWlzZUludGVyZmFjZTxUW10+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoXG5cdFx0XHR0aGlzLnJlZHVjZUVudHJpZXMoXG5cdFx0XHRcdFtFTlRSWV9TVEFUVVMuUFJPTUlTRUQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdLFxuXHRcdFx0XHQoZW50cnk6IFQsIF9pdGVtSWQ6IEl0ZW1JZCwgZGVzdGluYXRpb24pID0+IHtcblx0XHRcdFx0XHRkZXN0aW5hdGlvbi5wdXNoKHRoaXMuZ2V0UHJvbWlzZShlbnRyeSkpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRbXSBhcyBBcnJheTxQcm9taXNlSW50ZXJmYWNlPFQ+PlxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtSWRzIChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10pOiBJdGVtSWRbXSB7XG5cdFx0cmV0dXJuIHRoaXMucmVkdWNlRW50cmllcyhcblx0XHRcdHN0YXR1c0FycmF5LFxuXHRcdFx0KF8sIGl0ZW1JZCwgZGVzdGluYXRpb24pID0+IHtcblx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaChpdGVtSWQpO1xuXHRcdFx0fSxcblx0XHRcdFtdIGFzIEl0ZW1JZFtdXG5cdFx0KTtcblx0fVxuXG5cdGdldFJlcXVlc3RJZHMgKCk6IEl0ZW1JZFtdIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRJdGVtSWRzKHRoaXMucmVxdWVzdFN0YXR1cyk7XG5cdH1cblxuXHRnZXRBcnJheSAoc3RhdHVzQXJyYXk/OiBFTlRSWV9TVEFUVVNbXSk6IFRbXSB7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSAoZW50cnk6IFQsIF9pdGVtSWQ6IEl0ZW1JZCwgZGVzdGluYXRpb246IFRbXSkgPT4ge1xuXHRcdFx0ZGVzdGluYXRpb24ucHVzaChlbnRyeSk7XG5cdFx0fTtcblxuXHRcdGlmIChzdGF0dXNBcnJheSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucmVkdWNlQWxsRW50cmllcyhjYWxsYmFjaywgW10pO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVkdWNlRW50cmllcyhzdGF0dXNBcnJheSwgY2FsbGJhY2ssIFtdKTtcblx0fVxuXG5cdGdldE1hcCAoKToge1tpdGVtSWQ6IHN0cmluZ106IFR9IHtcblx0XHRyZXR1cm4gdGhpcy5yZWR1Y2VBbGxFbnRyaWVzKFxuXHRcdFx0KGVudHJ5OiBULCBpdGVtSWQ6IEl0ZW1JZCwgZGVzdGluYXRpb246IHtbaXRlbUlkOiBudW1iZXJdOiBUfSkgPT4ge1xuXHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtSWRdID0gZW50cnk7XG5cdFx0XHR9LFxuXHRcdFx0e31cblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgRW50cnlQYXJlbnQsIEVudHJ5UGFyZW50TnVsbCwgSXRlbUVudHJ5TWFwLCBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBjcmVhdGVQYXRoLCBnZXRQYXRoIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IHR5cGUgRGVsZXRlTWFwRW50cnk8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ID0ge2l0ZW06IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbH07XG5cbmV4cG9ydCB0eXBlIE1vdmVNYXBFbnRyeTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gPSB7aXRlbTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sIHBhcmVudDogRW50cnlQYXJlbnR9O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVDb21waWxhdGlvbiA9IHtcblx0W3BhcmVudFR5cGU6IHN0cmluZ106IHtcblx0XHRbcGFyZW50SWQ6IG51bWJlcl06IEl0ZW1FbnRyeU1hcDxJdGVtVHlwZT5cblx0fVxufTtcblxuZXhwb3J0IHR5cGUgRGVsZXRlQ29tcGlsYXRpb24gPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXTogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlPj5cbn07XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZUNvbXBpbGF0aW9uID0gSXRlbUVudHJ5TWFwPEl0ZW1UeXBlPjtcblxuZXhwb3J0IHR5cGUgTW92ZUNvbXBpbGF0aW9uID0ge1xuXHRbcGFyZW50VHlwZTogc3RyaW5nXToge1xuXHRcdFtwYXJlbnRJZDogbnVtYmVyXTogQXJyYXk8TW92ZU1hcEVudHJ5PGFueT4+XG5cdH1cbn07XG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsYXRpb24ge1xuXHRjb21waWxhdGlvbjoge1xuXHRcdGNyZWF0ZTogQ3JlYXRlQ29tcGlsYXRpb24sXG5cdFx0ZGVsZXRlOiBEZWxldGVDb21waWxhdGlvbixcblx0XHR1cGRhdGU6IFVwZGF0ZUNvbXBpbGF0aW9uLFxuXHRcdG1vdmU6IE1vdmVDb21waWxhdGlvblxuXHR9ID0ge1xuXHRcdGNyZWF0ZToge30sXG5cdFx0ZGVsZXRlOiB7fSxcblx0XHR1cGRhdGU6IHt9LFxuXHRcdG1vdmU6IHt9XG5cdH07XG5cblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcblxuXHRwcml2YXRlIG1vdmVBcnJheTogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlPj4gPSBbXTtcblxuXHRwcml2YXRlIGRlbGV0ZU1hcDoge1xuXHRcdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFx0W2l0ZW1JZDogbnVtYmVyXTogRGVsZXRlTWFwRW50cnk8SXRlbVR5cGU+XG5cdFx0fVxuXHR9ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHVibGljIHNpbmdsZUl0ZW1zOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGU+Pixcblx0XHRjb2xsZWN0aW9uRW50cmllczogQXJyYXk8Q29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlPj5cblx0KSB7XG5cdFx0dGhpcy5jb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblxuXHRcdHRoaXMucHJvY2Vzc1NpbmdsZUl0ZW1zKCk7XG5cdFx0dGhpcy5wcm9jZXNzQ29sbGVjdGlvbnMoY29sbGVjdGlvbkVudHJpZXMpO1xuXHRcdHRoaXMucG9zdFByb2Nlc3MoKTtcblx0fVxuXG5cdGdldERlZmF1bHRQYXJlbnQgKCk6IEVudHJ5UGFyZW50IHtcblx0XHRyZXR1cm4ge2l0ZW1UeXBlOiAnVm9pZCcsIGl0ZW1JZDogMH07XG5cdH1cblxuXHRhZGRNb3ZlRW50cnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlPik6IHZvaWQge1xuXHRcdHRoaXMubW92ZUFycmF5LnB1c2goaXRlbUVudHJ5KTtcblx0fVxuXG5cdGFkZERlbGV0ZUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZT4sIHBhcmVudDogRW50cnlQYXJlbnROdWxsKTogdm9pZCB7XG5cdFx0Y3JlYXRlUGF0aChcblx0XHRcdHRoaXMuZGVsZXRlTWFwLFxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHtpdGVtOiBpdGVtRW50cnksIHBhcmVudDogcGFyZW50fV1cblx0XHQpO1xuXHR9XG5cblx0YWRkVXBkYXRlRW50cnkgKGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlPik6IHZvaWQge1xuXHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHR0aGlzLmNvbXBpbGF0aW9uLnVwZGF0ZSxcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0W3t9LCBpdGVtRW50cnldXG5cdFx0KTtcblx0fVxuXG5cdGFkZENyZWF0ZUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZT4pOiB2b2lkIHtcblx0XHRsZXQgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRwYXJlbnQgPSB0aGlzLmdldERlZmF1bHRQYXJlbnQoKTtcblxuXHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHR0aGlzLmNvbXBpbGF0aW9uLmNyZWF0ZSxcblx0XHRcdFtwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHt9LCB7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRjb250YWluc0NyZWF0ZUVudHJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY3JlYXRlQ29tcGlsYXRpb24gPSB0aGlzLmNvbXBpbGF0aW9uLmNyZWF0ZTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjcmVhdGVDb21waWxhdGlvbikge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjcmVhdGVDb21waWxhdGlvbltwYXJlbnRUeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBjcmVhdGVDb21waWxhdGlvbltwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdO1xuXG5cdFx0XHRcdGlmIChpdGVtRW50cnlNYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBpdGVtRW50cnlNYXApIHtcblx0XHRcdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2tleV0uaXRlbUlkID09PSBpdGVtSWQpXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlRGVsZXRlQ29tcGlsYXRpb24gKCk6IHZvaWQge1xuXHRcdGNvbnN0IGRlbGV0ZU1hcCA9IHRoaXMuZGVsZXRlTWFwO1xuXHRcdGNvbnN0IGRlbGV0ZUNvbXBpbGF0aW9uID0gdGhpcy5jb21waWxhdGlvbi5kZWxldGU7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGRlbGV0ZU1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZGVsZXRlTWFwW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZT4gPSBkZWxldGVNYXBbaXRlbVR5cGVdW2l0ZW1JZF0uaXRlbTtcblxuXHRcdFx0XHRpZiAoZGVsZXRlQ29tcGlsYXRpb25baXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0ZGVsZXRlQ29tcGlsYXRpb25baXRlbVR5cGVdID0gW107XG5cblx0XHRcdFx0ZGVsZXRlQ29tcGlsYXRpb25baXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwb3N0UHJvY2VzcyAoKTogdm9pZCB7XG5cdFx0Y29uc3QgZGVsZXRlTWFwID0gdGhpcy5kZWxldGVNYXA7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiB0aGlzLm1vdmVBcnJheSkge1xuXHRcdFx0Y29uc3QgZGVsZXRlRW50cnk6IERlbGV0ZU1hcEVudHJ5PEl0ZW1UeXBlPiA9IGdldFBhdGgoZGVsZXRlTWFwLCBbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSk7XG5cblx0XHRcdGlmIChkZWxldGVFbnRyeSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Ly8gYXNzdW1lIHRoZSBpdGVtRW50cnkgaGFzIGEgcGFyZW50IChvciBzb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3JvbmcpXG5cdFx0XHRjb25zdCB7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9ID0gaXRlbUVudHJ5LnBhcmVudCE7XG5cblx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSAmJiAhdGhpcy5jb250YWluc0NyZWF0ZUVudHJ5KHBhcmVudFR5cGUsIHBhcmVudElkKSkge1xuXHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gZGVsZXRlRW50cnkucGFyZW50O1xuXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjcmVhdGVQYXRoPEFycmF5PERlbGV0ZU1hcEVudHJ5PEl0ZW1UeXBlPj4+KHRoaXMuY29tcGlsYXRpb24ubW92ZSwgW3BhcmVudFR5cGUsIHBhcmVudElkXSwgW3t9LCBbXV0pLnB1c2goZGVsZXRlRW50cnkpO1xuXG5cdFx0XHRkZWxldGUgZGVsZXRlTWFwW2l0ZW1FbnRyeS5pdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XG5cdFx0fVxuXG5cdFx0dGhpcy5jcmVhdGVEZWxldGVDb21waWxhdGlvbigpO1xuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzU2luZ2xlSXRlbXMgKCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHRoaXMuc2luZ2xlSXRlbXMpIHtcblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGl0ZW1FbnRyeSk7XG5cdFx0XHRlbHNlIGlmIChpdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxuXHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KGl0ZW1FbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25FbnRyaWVzOiBBcnJheTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGU+Pik6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKSB7XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25zLmFkZChjb2xsZWN0aW9uRW50cnkpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGxldCBhZGRlZEl0ZW1zOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGU+Pjtcblx0XHRcdGxldCByZW1vdmVkSXRlbXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZT4+O1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzTG9jYWwoKSkge1xuXHRcdFx0XHRhZGRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1zO1xuXHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBbXTtcblx0XHRcdH0gZWxzZSBpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0VkaXRSZXNvdXJjZXMpIHtcblx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRBZGRlZEl0ZW1zKCk7XG5cdFx0XHRcdHJlbW92ZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRSZW1vdmVkSXRlbXMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFkZGVkSXRlbXMgPSBbXTtcblx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gW107XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgYWRkZWRJdGVtIG9mIGFkZGVkSXRlbXMpIHsgLy8gaXQgaXMgcG9zc2libGUgdG8gbW92ZSBhbiBleGlzdGluZyBpdGVtIHRvIGEgbmV3IGNvbGxlY3Rpb25cblx0XHRcdFx0aWYgKGFkZGVkSXRlbS5pc0xvY2FsKCkpXG5cdFx0XHRcdFx0dGhpcy5hZGRDcmVhdGVFbnRyeShhZGRlZEl0ZW0pO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0dGhpcy5hZGRNb3ZlRW50cnkoYWRkZWRJdGVtKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCByZW1vdmVkSXRlbSBvZiByZW1vdmVkSXRlbXMpXG5cdFx0XHRcdHRoaXMuYWRkRGVsZXRlRW50cnkocmVtb3ZlZEl0ZW0sIGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzKSB7XG5cdFx0XHRcdGNvbnN0IHVwZGF0ZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRVcGRhdGVkSXRlbXMoKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHVwZGF0ZWRJdGVtIG9mIHVwZGF0ZWRJdGVtcylcblx0XHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KHVwZGF0ZWRJdGVtKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0Q2hhbmdlc0NvbXBpbGF0aW9uLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sdW1uSW5mbyxcblx0RGVsZXRlQ29tcGlsYXRpb24sXG5cdEl0ZW1IYW5kbGVyLFxuXHRNb3ZlQ29tcGlsYXRpb24sXG5cdE1vdmVNYXBFbnRyeSxcblx0VXBkYXRlQ29tcGlsYXRpb25cbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LCBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCBDcmVhdGVSZXF1ZXN0RmFjdG9yeSwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RNb3ZlSXRlbXMsXG5cdEFwaVJlc3BvbnNlLFxuXHRDcmVhdGVSZXF1ZXN0RW50cnksXG5cdENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdEVudHJ5UGFyZW50LFxuXHRGaWVsZE1hcCxcblx0SXRlbUlkLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtVHlwZSxcblx0UHJvbWlzZUludGVyZmFjZVxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVBhdGgsIGdldFBhdGgsIGhhc1Byb3BlcnRpZXMsIGluQXJyYXkgfSBmcm9tICcuL1V0aWwnO1xuXG50eXBlIENvbGxlY3Rpb25NYXA8VD4gPSB7XG5cdFtwYXJlbnRUeXBlOiBzdHJpbmddOiB7XG5cdFx0W3BhcmVudElkOiBzdHJpbmddOiB7XG5cdFx0XHRbaXRlbVR5cGU6IHN0cmluZ106IFRbXVxuXHRcdH1cblx0fVxufTtcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3Ige1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdCkge1xuXHR9XG5cblx0YnVpbGRNb3ZlUmVxdWVzdCAoY29tcGlsYXRpb25FbnRyaWVzOiBBcnJheTxNb3ZlTWFwRW50cnk8YW55Pj4pOiBBcGlSZXF1ZXN0TW92ZUl0ZW1zIHtcblx0XHRjb25zdCByZXN1bHQ6IEFwaVJlcXVlc3RNb3ZlSXRlbXMgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29tcGlsYXRpb25FbnRyeSBvZiBjb21waWxhdGlvbkVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGNvbXBpbGF0aW9uRW50cnkuaXRlbTtcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0XHRpZiAocmVzdWx0W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gW107XG5cblx0XHRcdHJlc3VsdFtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0TWFwVmFsdWUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIG1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IEl0ZW1JZCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKG1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3RzIChcblx0XHRjaGFuZ2VzQ29tcGlsYXRpb246IENoYW5nZXNDb21waWxhdGlvbixcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhbixcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1JZENvbnZlcnNpb25NYXA+IHtcblx0XHRjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uLmNyZWF0ZSxcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbi5jb2xsZWN0aW9ucyxcblx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcblx0XHQpLnJ1bigpO1xuXG5cdFx0Y29uc3QgcmVzcG9uc2VzOiBBcnJheTxQcm9taXNlSW50ZXJmYWNlPGFueT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpXG5cdFx0XHRyZXNwb25zZXMucHVzaCh0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0KHJlcXVlc3QsIGNvbnZlcnNpb25NYXApLnRoZW4obm90aWZ5KSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVzcG9uc2VzKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0ZnVuY3Rpb24gbm90aWZ5IChyZXN1bHQ6IGFueSkge1xuXHRcdFx0aWYgKG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2soY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlQ3JlYXRlUmVxdWVzdCAoXG5cdFx0cmVxdWVzdFJlc291cmNlOiBDcmVhdGVSZXF1ZXN0RW50cnk8YW55Pixcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdCkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VNYXAgPSByZXNwb25zZS5tYXA7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5pdGVtcztcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1uc1tpdGVtVHlwZV0sXG5cdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0l0ZW1JZCA9IHRoaXMuZ2V0TWFwVmFsdWUoaXRlbVR5cGUsIHBhcnNlSW50KGl0ZW1JZCwgMTApLCByZXNwb25zZU1hcCk7XG5cblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ0NyZWF0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZCA9IG5ld0l0ZW1JZDtcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVGaWVsZHMoXG5cdFx0XHRcdFx0XHRcdGZpZWxkcyxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQsIGl0ZW1FbnRyeS5jb2x1bW5zLnJvb3QpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcblx0XHRcdFx0XHRcdFx0XHRmaWVsZHMsXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQsIGV4cGFuZFJlc291cmNlLmRpZmZlcmVuY2Uucm9vdCksXG5cdFx0XHRcdFx0XHRcdFx0ZXhwYW5kUmVzb3VyY2Vcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlcXVlc3RSZXNvdXJjZS5jb2xsZWN0aW9ucy5hZGRUb0NvbGxlY3Rpb25zKCk7XG5cblx0XHRcdFx0Ly8gZXh0ZW5kIGNvbnZlcnNpb24gbWFwXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gcmVzcG9uc2VNYXApIHtcblx0XHRcdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiByZXNwb25zZU1hcFtpdGVtVHlwZV0pXG5cdFx0XHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVtwYXJzZUludChpdGVtSWQsIDEwKV0gPSByZXNwb25zZU1hcFtpdGVtVHlwZV1baXRlbUlkXTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVVcGRhdGVSZXF1ZXN0cyAoY29tcGlsYXRpb246IFVwZGF0ZUNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbXBpbGF0aW9uKVxuXHRcdFx0cmVxdWVzdHMucHVzaCh0aGlzLmV4ZWN1dGVVcGRhdGVSZXF1ZXN0KGl0ZW1UeXBlLCBjb21waWxhdGlvbltpdGVtVHlwZV0sIHBhcmFtZXRlcnMpKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVVcGRhdGVSZXF1ZXN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtRW50cmllczoge1tpdGVtSWQ6IG51bWJlcl06IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+fSxcblx0XHRwYXJhbWV0ZXJNYXA6IGFueVxuXHQpIHtcblx0XHRjb25zdCByZXF1ZXN0OiB7W2l0ZW1UeXBlOiBzdHJpbmddOiB7W2l0ZW1JZDogbnVtYmVyXTogRmllbGRNYXB9fSA9IHt9O1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZ2V0Q29sbGVjdGlvbk1hdGNoZXI8SXRlbVR5cGVUeXBlPigpO1xuXG5cdFx0cmVxdWVzdFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdC8vIHdlIG5lZWQgdG8gZG8gdGhlIGZvcm1hdFJlcXVlc3QgY2FsbCBoZXJlIChmaWVsZHMgbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQpXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XG5cdFx0XHQvLyBSTUNvcmUgdG9kbzogdHlwZVxuXHRcdFx0Y29uc3QgaXRlbVJlcXVlc3Q6IGFueSA9IHJlcXVlc3RbaXRlbVR5cGVdW2l0ZW1JZF0gPSB7fTtcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXRoKHBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcblxuXHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcblxuXHRcdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XG5cdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRjb25zdCBjb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMgPSBjb2xsZWN0aW9uTWF0Y2hlci5nZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMoKTtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMpXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucy5leHBhbmQoY29sbGVjdGlvbi5jb2x1bW5zKTtcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUl0ZW1zKGl0ZW1UeXBlLCByZXF1ZXN0LCByZXF1ZXN0Q29sdW1ucy5nZXQoKSkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucy5nZXQoKVtpdGVtVHlwZV0sXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XG5cdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignVXBkYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5pbml0aWFsLCB7fSwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cblx0XHRcdFx0XHRpdGVtRW50cnlcblx0XHRcdFx0XHRcdC51cGRhdGVGaWVsZHMoZmllbGRzLCByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaXRlbUVudHJ5LmNvbHVtbnMucm9vdCkpXG5cdFx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdFx0XHRcdGNvbnN0IGV4cGFuZFJlc291cmNlID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XG5cblx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgPT09IG51bGwpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXG5cdFx0XHRcdFx0XHRmaWVsZHMsXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZURlbGV0ZVJlcXVlc3RzIChjb21waWxhdGlvbjogRGVsZXRlQ29tcGlsYXRpb24pIHtcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZUludGVyZmFjZTx2b2lkPj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pIC8vIGNsZWFyaW5nIG5vdCBuZWNlc3Nhcnlcblx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PlxuXHQpIHtcblx0XHRjb25zdCBpZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRpZEFycmF5LnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoaXRlbVR5cGUsIGlkQXJyYXkpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRBcnJheSA9IHJlc3BvbnNlLml0ZW1zO1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZ2V0Q29sbGVjdGlvbk1hdGNoZXI8SXRlbVR5cGVUeXBlPigpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0aWYgKCFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIHJlc3BvbnNlSWRBcnJheSkpXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ0RlbGV0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZU1vdmVSZXF1ZXN0cyAoY29tcGlsYXRpb246IE1vdmVDb21waWxhdGlvbiwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlSW50ZXJmYWNlPHZvaWQ+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbXBpbGF0aW9uKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdKVxuXHRcdFx0XHRleGVjdXRlTW92ZVJlcXVlc3QocGFyZW50VHlwZSwgK3BhcmVudElkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xuXG5cdFx0ZnVuY3Rpb24gZXhlY3V0ZU1vdmVSZXF1ZXN0IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCkge1xuXHRcdFx0Ly8gb25seSB0aGUgcGFyZW50IGlkIGNvdWxkIGhhdmUgYmVlbiB1cGRhdGVkXG5cdFx0XHRjb25zdCBjb21waWxhdGlvbkVudHJpZXMgPSBjb21waWxhdGlvbltwYXJlbnRUeXBlXVtwYXJlbnRJZF07XG5cdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHNlbGYuZ2V0TWFwVmFsdWUocGFyZW50VHlwZSwgcGFyZW50SWQsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKFxuXHRcdFx0XHRzZWxmLmFwaVJlcXVlc3RTZXJ2aWNlLm1vdmVJdGVtcyhcblx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQgPyBuZXdQYXJlbnRJZCA6IHBhcmVudElkLFxuXHRcdFx0XHRcdHNlbGYuYnVpbGRNb3ZlUmVxdWVzdChjb21waWxhdGlvbkVudHJpZXMpXG5cdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRzZWxmLnByb2Nlc3NNb3ZlUmVzcG9uc2UoLyogcmVzcG9uc2UsICovY29tcGlsYXRpb25FbnRyaWVzKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHNlbGYuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc01vdmVSZXNwb25zZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllczogQXJyYXk8TW92ZU1hcEVudHJ5PEl0ZW1UeXBlVHlwZT4+KTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogcHJvY2VzcyByZXNwb25zZVxuXG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXHRcdGNvbnN0IHJlbW92ZUNvbGxlY3Rpb25NYXAgPSB7fTtcblx0XHRjb25zdCBhZGRDb2xsZWN0aW9uTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbXBpbGF0aW9uRW50cnkgb2YgY29tcGlsYXRpb25FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XG5cblx0XHRcdHRoaXMuYWRkQ29sbGVjdGlvbk1hcEVudHJ5KFxuXHRcdFx0XHRyZW1vdmVDb2xsZWN0aW9uTWFwLFxuXHRcdFx0XHRjb21waWxhdGlvbkVudHJ5LnBhcmVudC5pdGVtSWQsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZFxuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXG5cdFx0XHRcdGFkZENvbGxlY3Rpb25NYXAsXG5cdFx0XHRcdChpdGVtRW50cnkucGFyZW50IGFzIEVudHJ5UGFyZW50KS5pdGVtSWQsXG5cdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0aXRlbUVudHJ5XG5cdFx0XHQpO1xuXG5cdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5mb3JFYWNoQ29sbGVjdGlvbjxJdGVtSWQ+KFxuXHRcdFx0cmVtb3ZlQ29sbGVjdGlvbk1hcCxcblx0XHRcdChjb2xsZWN0aW9uRW50cnksIGl0ZW1JZHMpID0+IHtcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKFxuXHRcdFx0XHRcdGl0ZW1JZHMsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb248SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+KFxuXHRcdFx0YWRkQ29sbGVjdGlvbk1hcCxcblx0XHRcdChjb2xsZWN0aW9uRW50cnksIGFkZGVkRW50cmllcykgPT4ge1xuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXG5cdFx0XHRcdFx0YWRkZWRFbnRyaWVzLFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGFkZENvbGxlY3Rpb25NYXBFbnRyeTxVIGV4dGVuZHMgSXRlbUVudHJ5PGFueT4sIFQgZXh0ZW5kcyBJdGVtSWQgfCBVPiAoXG5cdFx0Y29sbGVjdGlvbk1hcDogQ29sbGVjdGlvbk1hcDxUPixcblx0XHRwYXJlbnRJZDogSXRlbUlkLFxuXHRcdGl0ZW1FbnRyeTogVSxcblx0XHR2YWx1ZTogVFxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwRW50cnkgPSBjcmVhdGVQYXRoPFRbXT4oXG5cdFx0XHRjb2xsZWN0aW9uTWFwLFxuXHRcdFx0W2l0ZW1FbnRyeS5wYXJlbnQhLml0ZW1UeXBlLCBwYXJlbnRJZCwgaXRlbUVudHJ5Lml0ZW1UeXBlXSxcblx0XHRcdFt7fSwge30sIFtdXVxuXHRcdCk7XG5cblx0XHRjb2xsZWN0aW9uTWFwRW50cnkucHVzaCh2YWx1ZSk7XG5cdH1cblxuXHRwcml2YXRlIGZvckVhY2hDb2xsZWN0aW9uPFQgZXh0ZW5kcyBJdGVtSWQgfCBJdGVtRW50cnk8YW55Pj4gKFxuXHRcdGNvbGxlY3Rpb25NYXA6IENvbGxlY3Rpb25NYXA8VD4sXG5cdFx0Y2FsbGJhY2s6IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxhbnk+LCBpdGVtczogVFtdKSA9PiB2b2lkXG5cdCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV0pIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdW3BhcmVudElkXSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCArcGFyZW50SWQsIGl0ZW1UeXBlKTtcblxuXHRcdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGNhbGxiYWNrKGNvbGxlY3Rpb25FbnRyeSwgY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIG5vdGU6IHdpdGggdGhlIG5ldyBpdGVtIHN0cnVjdHVyZSwgKmFsbCogbG9jYWwgaXRlbXMgYXJlIGluIHRoZSBzaW5nbGUgaXRlbSBjYWNoZVxuXHRwcml2YXRlIG9uSXRlbXNDcmVhdGVkIChcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdHNpbmdsZUl0ZW1zOiBBcnJheTxJdGVtRW50cnk8YW55Pj4sXG5cdFx0Y29sbGVjdGlvbnM6IEFycmF5PENvbGxlY3Rpb25FbnRyeTxhbnk+PlxuXHQpIHtcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMoY29udmVyc2lvbk1hcCkpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcblx0XHRcdGNvbnN0IHVwZGF0ZWRDb2x1bW5zOiB7W2NvbHVtbklkOiBzdHJpbmddOiBDb2x1bW5JbmZvPGFueT59ID1cblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmdldFVwZGF0ZWRJdGVtQ29sdW1ucyhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHRoaXMuZ2V0TWFwVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHBhcmVudC5pdGVtSWQgPSBuZXdQYXJlbnRJZDtcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucXVlcnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaGFzUHJvcGVydGllcyh1cGRhdGVkQ29sdW1ucykpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAodXBkYXRlZENvbHVtbnMuaWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXBbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXSk7XG5cblx0XHRcdC8vIHdoZW4gdXBkYXRpbmcgYW4gaXRlbSB0byByZWZlciB0byBhIG5ld2x5IGNyZWF0ZWQgaXRlbSwgdGhlIHVwZGF0ZWQgaXRlbSB3aWxsICpub3QqIGJlIGFkZGVkIHRvXG5cdFx0XHQvLyBzaW5nbGUgaXRlbXMgKGUuZy4gbW92aW5nIGEgZnVuY3Rpb24gdG8gYSBuZXdseSBjcmVhdGVkIGZ1bmN0aW9uIGdyb3VwKVxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgY29sbGVjdGlvbkVudHJ5Lml0ZW1zKVxuXHRcdFx0XHRpdGVtRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBzaW5nbGVJdGVtcykge1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSB0aGlzLmdldE1hcFZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdFx0aWYgKG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIHByb3BlciBvcmRlcjogY3JlYXRlIC0gbW92ZSAtIGRlbGV0ZSAtIHVwZGF0ZVxuXHRleGVjdXRlIChcblx0XHRzaW5nbGVJdGVtczogQXJyYXk8SXRlbUVudHJ5PGFueT4+LFxuXHRcdGNvbGxlY3Rpb25zOiBBcnJheTxDb2xsZWN0aW9uRW50cnk8YW55Pj4sXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHt9LFxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgY2hhbmdlc0NvbXBpbGF0aW9uID0gdGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xuXHRcdGNvbnN0IGNvbXBpbGF0aW9uID0gY2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uO1xuXHRcdGNvbnN0IGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fTtcblxuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyhcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbixcblx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRjb252ZXJzaW9uTWFwLFxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50LFxuXHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHR0aGlzLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZU1vdmVSZXF1ZXN0cyhjb21waWxhdGlvbi5tb3ZlLCBjb252ZXJzaW9uTWFwKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdHRoaXMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcblxuXHRcdFx0XHRyZXR1cm4gZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdHMoY29tcGlsYXRpb24udXBkYXRlLCBwYXJhbWV0ZXJzKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdHMoY29tcGlsYXRpb24uZGVsZXRlKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSwgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsIENvbGxlY3Rpb25RdWVyeSwgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZW51bSBDT05TVEFOVFMge1xuXHRNQVlCRSA9ICdtYXliZSdcbn1cblxudHlwZSBDb2xsZWN0aW9uRW50cnlNYXAgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFtjb2xsZWN0aW9uRW50cnlJZDogbnVtYmVyXTogQ29sbGVjdGlvbkVudHJ5PGFueT5cblx0fVxufTtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZSB7XG5cdHByaXZhdGUgZW50cmllczogQ29sbGVjdGlvbkVudHJ5TWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7fVxuXG5cdGNvbnRhaW5zIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxhbnk+KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBlbnRyaWVzW2NvbGxlY3Rpb25FbnRyeS5pZF0gIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeTxhbnk+KSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGlmIChjYWxsYmFjayhlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSkpXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5PGFueT4pID0+IHZvaWQpOiB2b2lkIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdKTtcblx0XHR9XG5cdH1cblxuXHQvKlx0ZmlsdGVyIChjYWxsYmFjazogKGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IGJvb2xlYW4pOiB2b2lkIHtcblx0IGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdCBjb25zdCBmaWx0ZXJlZEVudHJpZXM6IENvbGxlY3Rpb25FbnRyeU1hcCAgPSB7fTtcblxuXHQgZm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdCBmaWx0ZXJlZEVudHJpZXNbaXRlbVR5cGVdID0ge307XG5cblx0IGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHQgY29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF07XG5cblx0IGlmIChjYWxsYmFjayhjb2xsZWN0aW9uRW50cnkpKVxuXHQgZmlsdGVyZWRFbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSA9IGNvbGxlY3Rpb25FbnRyeTtcblx0IH1cblx0IH1cblxuXHQgdGhpcy5lbnRyaWVzID0gZmlsdGVyZWRFbnRyaWVzO1xuXHQgfVxuXHQgKi9cblx0dG9BcnJheSAoKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PENvbGxlY3Rpb25FbnRyeTxhbnk+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YWRkPFQgZXh0ZW5kcyBDb2xsZWN0aW9uRW50cnk8YW55Pj4gKGNvbGxlY3Rpb25FbnRyeTogVCk6IFQge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XG5cblx0XHRpZiAoZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGVudHJpZXNbaXRlbVR5cGVdID0ge307XG5cblx0XHRyZXR1cm4gZW50cmllc1tpdGVtVHlwZV1bY29sbGVjdGlvbkVudHJ5LmlkXSA9IGNvbGxlY3Rpb25FbnRyeTtcblx0fVxuXG5cdGNsZWFyIChjb2xsZWN0aW9uRW50cnk/OiBDb2xsZWN0aW9uRW50cnk8YW55Pik6IGJvb2xlYW4ge1xuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5lbnRyaWVzID0ge307XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5jb250YWlucyhjb2xsZWN0aW9uRW50cnkpKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIGRlbGV0ZSB0aGlzLmVudHJpZXNbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXVtjb2xsZWN0aW9uRW50cnkuaWRdO1xuXHR9XG5cblx0Z2V0QnlJdGVtVHlwZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbZW50cnlJZF0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdG1hdGNoUGFyZW50IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxhbnk+LCBpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IEl0ZW1JZCkge1xuXHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Ly8gPT0gdG8gY29tcGFyZSBpdGVtSWRzXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcblx0XHRyZXR1cm4gcGFyZW50Lml0ZW1UeXBlID09PSBpdGVtVHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IGl0ZW1JZDtcblx0fVxuXG5cdC8vIFRPRE86IHRoaW5rIG9mIGJldHRlciBuYW1lXG5cdGdldEJ5UGFyZW50PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUpOiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPiB8IG51bGwge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGlmICh0aGlzLm1hdGNoUGFyZW50KGVudHJpZXNbZW50cnlJZF0sIHBhcmVudFR5cGUsIHBhcmVudElkKSlcblx0XHRcdFx0cmV0dXJuIGVudHJpZXNbZW50cnlJZF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXRSZXNvdXJjZUJ5UGFyZW50PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUpOiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPiB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZ2V0QnlQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkuY2FjaGUuZ2V0TGF0ZXN0KGNvbGxlY3Rpb25FbnRyeSk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uc0J5UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxDb2xsZWN0aW9uRW50cnk8YW55Pj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdO1xuXG5cdFx0XHRcdGlmICh0aGlzLm1hdGNoUGFyZW50KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50VHlwZSwgcGFyZW50SWQpKVxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBPbmx5IHJlc291cmNlc1xuXHQgKiBAcGFyYW0ge1N0cmluZ30gaXRlbVR5cGVcblx0ICogQHBhcmFtIHtTdHJpbmd8SW50ZWdlcn0gaXRlbUlkXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IEFycmF5IG9mIGNvbGxlY3Rpb25zLlxuXHQgKi9cblx0Z2V0QnlDb250YWluaW5nSXRlbTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsIGl0ZW1JZDogSXRlbUlkKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuZ2V0SXRlbUJ5SWQoaXRlbUlkKSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhbiBhcnJheSBvZiBjb2xsZWN0aW9ucyB0aGUgaXRlbSAnYmVsb25ncycgaW4uXG5cdCAqL1xuXHRnZXRCeUZpdHRpbmdJdGVtPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25NYXRjaFJlc3VsdDxJdGVtVHlwZVR5cGU+ID0ge2ZpdHRpbmc6IFtdLCBub3RmaXR0aW5nOiBbXSwgbWF5YmU6IFtdfTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Ly8gY29uc29sZS50aW1lKCdnZXRCeUZpdHRpbmdJdGVtJyk7XG5cblx0XHRjb25zdCBxdWVyeU1hdGNoZXIgPSB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBmaWVsZHMsIHBhcmVudCk7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcblx0XHRcdGNvbnN0IG1hdGNoUmVzdWx0ID0gcXVlcnlNYXRjaGVyLm1hdGNoUXVlcnkoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCk7XG5cblx0XHRcdC8vIFRPRE86IG1heWJlP1xuXHRcdFx0aWYgKG1hdGNoUmVzdWx0ID09PSB0cnVlKSAvLyBtaWdodCBhbHNvIHJldHVybiAnbWF5YmUnXG5cdFx0XHRcdHJlc3VsdC5maXR0aW5nLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHRcdGVsc2UgaWYgKG1hdGNoUmVzdWx0ID09PSBDT05TVEFOVFMuTUFZQkUpXG5cdFx0XHRcdHJlc3VsdC5tYXliZS5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJlc3VsdC5ub3RmaXR0aW5nLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHR9XG5cblx0XHQvLyBjb25zb2xlLnRpbWVFbmQoJ2dldEJ5Rml0dGluZ0l0ZW0nKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRCeVF1ZXJ5PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSwgcXVlcnk6IENvbGxlY3Rpb25RdWVyeSk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+IHwgbnVsbCB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5zdHJpbmcgPT09IHF1ZXJ5LnN0cmluZylcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldEJ5S2V5PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSwgZW50cnlLZXk6IHN0cmluZyk6IEFycmF5PENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5lbnRyeUtleSA9PT0gZW50cnlLZXkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFJlc291cmNlQnlLZXk8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChpdGVtVHlwZTogSXRlbVR5cGVUeXBlLCByZXNvdXJjZUtleTogc3RyaW5nKTogQXJyYXk8Q29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LmNhY2hlLmdldChlbnRyaWVzW2VudHJ5SWRdKTtcblxuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcblx0XHRcdFx0aWYgKHJlc291cmNlLm9wdGlvbnMucmVzb3VyY2VLZXkgPT09IHJlc291cmNlS2V5KVxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKHJlc291cmNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBpbnN0YW50aWF0ZU9wdGlvbnMgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW5NYXAsIEFwaVJlcXVlc3RDb2x1bW5zLCBFbnRyeVBhcmVudE51bGwgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIEl0ZW1FbnRyeU9wdGlvbnNJbnRlcmZhY2UgPSBQYXJ0aWFsPEl0ZW1FbnRyeU9wdGlvbnM+O1xuXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5T3B0aW9ucyB7XG5cdHB1YmxpYyBjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IHRydWU7XG5cdHB1YmxpYyBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XG5cdHB1YmxpYyB0ZW1wbGF0ZU9wdGlvbnM6IGFueSA9IHt9OyAvLyBUT0RPXG5cdHB1YmxpYyB0ZW1wbGF0ZUNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5NYXAgPSB7fTtcblx0cHVibGljIGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRwdWJsaWMgaXNEdXBsaWNhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAodmFsdWVzOiBJdGVtRW50cnlPcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0aW5zdGFudGlhdGVPcHRpb25zKHRoaXMsIHZhbHVlcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IGluc3RhbnRpYXRlT3B0aW9ucyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgT25DaGFuZ2VGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4vSXRlbVJlc291cmNlJztcblxuZXhwb3J0IHR5cGUgSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtUmVzb3VyY2VUeXBlIGV4dGVuZHMgSXRlbVJlc291cmNlPGFueT4gPSBJdGVtUmVzb3VyY2U8YW55Pj4gPSBQYXJ0aWFsPEl0ZW1SZXNvdXJjZU9wdGlvbnM8SXRlbVJlc291cmNlVHlwZT4+O1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlT3B0aW9uczxJdGVtUmVzb3VyY2VUeXBlIGV4dGVuZHMgSXRlbVJlc291cmNlPGFueT4gPSBJdGVtUmVzb3VyY2U8YW55Pj4ge1xuXHRwdWJsaWMgZWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRwdWJsaWMgcmVtb3RlOiBib29sZWFuID0gZmFsc2U7XG5cdHB1YmxpYyBvbkNoYW5nZTogT25DaGFuZ2VGdW5jdGlvbjxJdGVtUmVzb3VyY2VUeXBlPiA9IG5vb3A7XG5cblx0Y29uc3RydWN0b3IgKHZhbHVlczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtUmVzb3VyY2VUeXBlPikge1xuXHRcdGluc3RhbnRpYXRlT3B0aW9ucyh0aGlzLCB2YWx1ZXMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5JbmZvLCBDb2x1bW5TZXQgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRGVmZXJyZWQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZSwgTG9jYWxWaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uUmVzdWx0LCBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtRXJyb3IsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmxldCBjdXJyZW50SWQgPSAwO1xuXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlID0gYW55PiB7XG5cdHB1YmxpYyBpZDogbnVtYmVyID0gKytjdXJyZW50SWQ7XG5cblx0cHVibGljIHJlbG9hZFF1ZXVlZDogYm9vbGVhbiA9IGZhbHNlO1xuXHRwdWJsaWMgZGVmZXJSZXF1ZXN0OiBib29sZWFuID0gZmFsc2U7XG5cdHB1YmxpYyBkZWZlcnJlZD86IERlZmVycmVkPHRoaXM+O1xuXG5cdHB1YmxpYyBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XG5cblx0cHVibGljIGluaXRpYWw6IEZpZWxkTWFwO1xuXHRwdWJsaWMgbW9kaWZpZWQ6IEZpZWxkTWFwO1xuXHRwdWJsaWMgZGVyaXZlZDogRmllbGRNYXA7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRwdWJsaWMgaXRlbUlkOiBJdGVtSWQsXG5cdFx0cHVibGljIGNvbHVtbnM6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+XG5cdCkge1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZXNvdXJjZXMgKCk6IEFycmF5PEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5pdGVtUmVzb3VyY2VGYWN0b3J5LmNhY2hlLmdldCh0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBxdWV1ZVJlbG9hZCAoKTogdGhpcyB7XG5cdFx0dGhpcy5yZWxvYWRRdWV1ZWQgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZGVmZXIgKGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlKTogdGhpcyB7XG5cdFx0dGhpcy5kZWZlcnJlZCA9IHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS5kZWZlcigpO1xuXHRcdHRoaXMuZGVmZXJSZXF1ZXN0ID0gZGVmZXJSZXF1ZXN0O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJvbWlzZSAoKTogUHJvbWlzZUludGVyZmFjZTx0aGlzPiB7XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xuXG5cdFx0aWYgKGRlZmVycmVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4odGhpcyk7XG5cblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZTtcblx0fVxuXG5cdHB1YmxpYyByZXNvbHZlICgpOiB0aGlzIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XG5cblx0XHRpZiAoZGVmZXJyZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gdGhlIHJlc29sdmUgZnVuY3Rpb24gbWlnaHQgZGVmZXIgdGhlIGl0ZW0gYWdhaW4sIHNvIGRlbGV0ZSB0aGUgcHJvcGVydGllcyBmaXJzdFxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xuXHRcdGRlbGV0ZSB0aGlzLmRlZmVyUmVxdWVzdDtcblxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyByZXNvbHZlRGVmZXJyZWQgKGluaXRpYWw6IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCwgY29sdW1uczogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4pOiB0aGlzIHtcblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xuXHRcdHRoaXMuc2V0RmllbGRzKGluaXRpYWwsIGRlcml2ZWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZSgpO1xuXHR9XG5cblx0cHVibGljIGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmRlZmVycmVkICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHRwdWJsaWMgcmVqZWN0IChlcnJvcjogSXRlbUVycm9yID0gdGhpcy5mYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlVW5mb3VuZFJlbW90ZUl0ZW1FcnJvcigpKTogdGhpcyB7XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xuXG5cdFx0aWYgKGRlZmVycmVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGRlZmVycmVkLnJlamVjdChlcnJvcik7XG5cblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcblx0XHRkZWxldGUgdGhpcy5kZWZlclJlcXVlc3Q7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBzZXRGaWVsZHMgKGluaXRpYWw6IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcCk6IHRoaXMge1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0Y29uc3QgZm9ybWF0dGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5mb3JtYXR0ZWQ7XG5cblx0XHR0aGlzLmluaXRpYWwgPSBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoaW5pdGlhbCwgZm9ybWF0dGVkQ29sdW1ucy5tYWluKTtcblx0XHR0aGlzLmRlcml2ZWQgPSBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoZGVyaXZlZCwgZm9ybWF0dGVkQ29sdW1ucy5kZXJpdmVkKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Ly8gV2Ugc2hvdWxkIGNyZWF0ZSBhIGNvcHkgb2YgaW5pdGlhbCBoZXJlLCBiZWNhdXNlIGluIG1vc3QgaW5zdGFuY2VzIGl0IHdpbGwgYmUgYSB0ZW1wbGF0ZS5cblx0cHVibGljIHNldExvY2FsRmllbGRzIChcblx0XHRpbml0aWFsVmFsdWVzOiBGaWVsZE1hcCxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdGNvbHVtbnM6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+ID0gdGhpcy5jb2x1bW5zXG5cdCk6IHRoaXMge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5nZXRMb2NhbERlZmF1bHRWYWx1ZXMoKTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMubWFpbikge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdGluaXRpYWxbY29sdW1uSWRdID0gaW5pdGlhbFZhbHVlc1tjb2x1bW5JZF07XG5cdFx0fVxuXG5cdFx0dGhpcy5pbml0aWFsID0gZmFjdG9yeS5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoaW5pdGlhbCwgY29sdW1ucy5mb3JtYXR0ZWQubWFpbik7XG5cdFx0dGhpcy5kZXJpdmVkID0geydjcmVhdG9yPmRpc3BsYXluYW1lJzogZmFjdG9yeS5hdXRoSW50ZXJmYWNlLmdldFVzZXJEaXNwbGF5bmFtZSgpfTtcblxuXHRcdHJldHVybiB0aGlzLnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XG5cdH1cblxuXHRwdWJsaWMgY2xvbmUgKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fSk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IGZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IGl0ZW1FbnRyeVNlcnZpY2UgPSBmYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2U7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblx0XHRjb25zdCBuZXdJdGVtSWQgPSBpdGVtRW50cnlTZXJ2aWNlLmV4cGFuZENvbnZlcnNpb25NYXAodGhpcywgY29udmVyc2lvbk1hcCk7XG5cblx0XHQvLyB3ZSdsbCBjb3B5IG1vZGlmaWVkIHRvIHJlc3VsdC5pbml0aWFsIChpbml0aWFsIG1heSBiZSBhIHRlbXBsYXRlKVxuXHRcdGNvbnN0IGNsb25lZEVudHJ5ID0gZmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRuZXdJdGVtSWQsXG5cdFx0XHRhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmdldEZpZWxkcygpLCB7fSwgY29sdW1ucy5tYWluKSxcblx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuZGVyaXZlZCwge30sIGNvbHVtbnMuZGVyaXZlZCksXG5cdFx0XHRjb2x1bW5zXG5cdFx0KTtcblxuXHRcdGNsb25lZEVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XG5cblx0XHRjbG9uZWRFbnRyeS5tb2RpZmllZCA9IGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGNsb25lZEVudHJ5LmluaXRpYWwsIHt9LCBjb2x1bW5zLm1haW4pO1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBjbG9uZWRFbnRyeTtcblxuXHRcdGNvbnN0IHBhcmVudElkID0gaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdGNsb25lZEVudHJ5LnNldFBhcmVudChcblx0XHRcdHBhcmVudC5pdGVtVHlwZSxcblx0XHRcdHBhcmVudElkID09PSB1bmRlZmluZWQgPyBwYXJlbnQuaXRlbUlkIDogcGFyZW50SWRcblx0XHQpO1xuXG5cdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xuXHR9XG5cblx0cHVibGljIHJlc2V0RGVyaXZlZCAoY29sdW1uSWRzOiBzdHJpbmdbXSk6IHRoaXMge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0Y29uc3Qgcm9vdENvbHVtbnMgPSB0aGlzLmNvbHVtbnMucm9vdDtcblx0XHRjb25zdCBmaWx0ZXJlZENvbHVtbnM6IEFycmF5PENvbHVtbkluZm88SXRlbVR5cGVUeXBlPj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XG5cdFx0XHRpZiAoY29sdW1uSWRzLmluZGV4T2YoY29sdW1uLmlkKSAhPT0gLTEpXG5cdFx0XHRcdGZpbHRlcmVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0fVxuXG5cdFx0cmVzZXREZXJpdmVkUmVjdXJzaXZlbHkoZmlsdGVyZWRDb2x1bW5zKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdFx0ZnVuY3Rpb24gcmVzZXREZXJpdmVkUmVjdXJzaXZlbHkgKGNvbHVtbnM6IEFycmF5PENvbHVtbkluZm88SXRlbVR5cGVUeXBlPj4pIHtcblx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdFx0aWYgKCFjb2x1bW4uaXNMZWFmKVxuXHRcdFx0XHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbik7XG5cblx0XHRcdFx0ZGVsZXRlIHNlbGYuZGVyaXZlZFtjb2x1bW4ucGF0aF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGdldEZpZWxkcyAoKTogRmllbGRNYXAge1xuXHRcdGlmICh0aGlzLm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tb2RpZmllZDtcblxuXHRcdHJldHVybiB0aGlzLmluaXRpYWw7XG5cdH1cblxuXHQvLyBzaG91bGQgYmUgZmFzdFxuXHRwdWJsaWMgZXhwYW5kIChtYWluOiBGaWVsZE1hcCwgZGVyaXZlZDogRmllbGRNYXAsIGNvbHVtbkV4cGFuc2lvblJlc3VsdDogQ29sdW1uRXhwYW5zaW9uUmVzdWx0PEl0ZW1UeXBlVHlwZT4pOiB0aGlzIHtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZTtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XG5cblx0XHRhcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UodGhpcy5pbml0aWFsLCBtYWluLCBkaWZmZXJlbmNlLm1haW4pO1xuXHRcdGFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZSh0aGlzLmRlcml2ZWQsIGRlcml2ZWQsIGRpZmZlcmVuY2UuZGVyaXZlZCk7XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRhcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UodGhpcy5tb2RpZmllZCwgbWFpbiwgZGlmZmVyZW5jZS5tYWluKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGV4cGFuZExvY2FsIChjb2x1bW5FeHBhbnNpb25SZXN1bHQ6IENvbHVtbkV4cGFuc2lvblJlc3VsdDxJdGVtVHlwZVR5cGU+KTogdGhpcyB7XG5cdFx0Y29uc3QgbWFpbkNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5tYWluO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uUmVzdWx0Lm1lcmdlZDtcblxuXHRcdGlmIChtYWluQ29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdHRoaXMuc2V0TG9jYWxWYWx1ZXModGhpcy5pbml0aWFsLCBtYWluQ29sdW1ucyk7XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHR0aGlzLnNldExvY2FsVmFsdWVzKHRoaXMubW9kaWZpZWQsIG1haW5Db2x1bW5zKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRMb2NhbFZhbHVlcyAoZmllbGRzOiBGaWVsZE1hcCwgY29sdW1uczogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+Pik6IHZvaWQge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblxuXHRcdFx0aWYgKGZpZWxkc1tjb2x1bW5JZF0gIT09IHVuZGVmaW5lZCkgLy8gcGFyZW50IGNvbHVtbnMgbWlnaHQgYWxzbyBiZSBpbmNsdWRlZCBpbiB0aGUgZGlmZmVyZW5jZVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Y29uc3QgY29sdW1uVHlwZSA9IGNvbHVtbi5hcGlDb2x1bW4udHlwZTtcblxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IGNvbHVtblR5cGUgPT09ICdsaW5rJyAmJiBwYXJlbnQgIT09IG51bGwgP1xuXHRcdFx0XHRwYXJlbnQuaXRlbUlkIDpcblx0XHRcdFx0ZmFjdG9yeS5hcGlGb3JtYXR0ZXIuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtblR5cGUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhlIGluaXRpYWwsIG1vZGlmaWVkLCBkZXJpdmVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgc2V0LiBJdCB3aWxsIHVwZGF0ZSB0aGUgdmFsdWVzXG5cdCAqIHRoZW1zZWx2ZXMgdG8gcHJlc2VydmUgcmVmZXJlbmNlcyBpbiBleGlzdGluZyBpdGVtIHJlc291cmNlcy5cblx0ICovXG5cdHB1YmxpYyB1cGRhdGVGaWVsZHMgKGZpZWxkczogRmllbGRNYXAsIGRlcml2ZWQ6IEZpZWxkTWFwIHwgbnVsbCA9IG51bGwsIG92ZXJ3cml0ZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IG1haW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLm1haW47XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQ7XG5cblx0XHQvLyBmb3Igc29tZSB3ZWlyZCByZWFzb24gdGhpcyBmdW5jdGlvbiBpcyBub3QgYXRvbWljLCBzbyBvdmVyd3JpdGUgdGhlIHZhbHVlcyB3aXRoIHRoZWlyIGZvcm1hdHRlZCBjb3VudGVycGFydHNcblx0XHQvLyBpbW1lZGlhdGVseVxuXHRcdGlmIChtb2RpZmllZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBtYWluQ29sdW1ucykge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdFx0Y29uc3QgY29sdW1uVHlwZSA9IGNvbHVtbi5hcGlDb2x1bW4udHlwZTtcblxuXHRcdFx0XHRpZiAob3ZlcndyaXRlIHx8IGFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRcdG1vZGlmaWVkW2NvbHVtbklkXSA9IGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtblR5cGUsIGZpZWxkc1tjb2x1bW5JZF0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIG1haW5Db2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblxuXHRcdFx0aW5pdGlhbFtjb2x1bW5JZF0gPSBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0pO1xuXHRcdH1cblxuXHRcdGlmIChkZXJpdmVkICE9PSBudWxsKVxuXHRcdFx0dGhpcy5zZXREZXJpdmVkKGRlcml2ZWQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZUl0ZW1WYWx1ZXMgKGZpZWxkczogRmllbGRNYXAsIGl0ZW1Db2x1bW5zOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+LCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblxuXHRcdFx0Ly8gVE9ETzogd2UgY2FuIHJlY29uc2lkZXIgdGhpcyBvbmNlIGFsbCBjb2x1bW5zIGFyZSByZXNwZWN0ZWQgZm9yIGxvY2FsIGl0ZW1zIFtSTTQtMTAzNzhdXG5cdFx0XHRsZXQgbmV3VmFsdWU7XG5cblx0XHRcdGlmIChhcGlDb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGZpZWxkc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0XHRcdG5ld1ZhbHVlID0gcGFyZW50Lml0ZW1JZDtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRuZXdWYWx1ZSA9IGl0ZW1FbnRyeVNlcnZpY2UuZ2V0Q29udmVyc2lvblZhbHVlKGFwaUNvbHVtbi5pdGVtVHlwZSwgZmllbGRzW2NvbHVtbklkXSwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gbmV3VmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHVwZGF0ZUl0ZW1GaWVsZHMgKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsIGNvbHVtbnM6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+ID0gdGhpcy5jb2x1bW5zKTogdGhpcyB7XG5cdFx0Y29uc3QgaXRlbUNvbHVtbnMgPSBjb2x1bW5zLml0ZW07XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xuXG5cdFx0dGhpcy51cGRhdGVJdGVtVmFsdWVzKHRoaXMuaW5pdGlhbCwgaXRlbUNvbHVtbnMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0aWYgKG1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdHRoaXMudXBkYXRlSXRlbVZhbHVlcyhtb2RpZmllZCwgaXRlbUNvbHVtbnMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZm9ybWF0UmVxdWVzdCAoKTogRmllbGRNYXAge1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0Y29uc3QgbWFpbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcblxuXHRcdGlmICh0aGlzLmlzTG9jYWwoKSlcblx0XHRcdHJldHVybiBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVxdWVzdExvY2FsKHRoaXMuZ2V0RmllbGRzKCksIG1haW5Db2x1bW5zKTtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRyZXR1cm4gYXBpRm9ybWF0dGVyLmZvcm1hdFJlcXVlc3QodGhpcy5pbml0aWFsLCB0aGlzLm1vZGlmaWVkLCBtYWluQ29sdW1ucyk7XG5cdH1cblxuXHRwdWJsaWMgc2V0RGlzcGxheU5hbWUgKCk6IHRoaXMge1xuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0RGlzcGxheU5hbWUoKTtcblxuXHRcdGlmIChyZXN1bHQpXG5cdFx0XHR0aGlzLm1vZGlmaWVkLmRpc3BsYXluYW1lID0gcmVzdWx0O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RGlzcGxheU5hbWUgKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XG5cblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0XHRyZXR1cm4gZmllbGRzLnR5cGUgPT09ICdiZWRyaWpmJyA/XG5cdFx0XHRcdFx0ZmllbGRzLmJlZHJpamYgOiBpdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxuXHRcdFx0XHRcdFx0ZmllbGRzLnZvb3JuYWFtLFxuXHRcdFx0XHRcdFx0ZmllbGRzLnR1c3NlbnZvZWdzZWwsXG5cdFx0XHRcdFx0XHRmaWVsZHMubmFhbVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcblx0XHRcdGNhc2UgJ1BlcnNvbic6XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxuXHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcblx0XHRcdFx0XHRmaWVsZHMudHVzc2Vudm9lZ3NlbCxcblx0XHRcdFx0XHRmaWVsZHMuYWNodGVybmFhbVxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSAnUmVwYXJhdGllJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZGVyaXZlZFsnbWF0ZXJpYWFsPm5hYW0nXTsgLy8gVE9ETyFcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmaWVsZHNbaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKHRoaXMuaXRlbVR5cGUpXTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtCb29sZWFufSByZXR1cm5BbGwgUmV0dXJucyBhbGwgaW5pdGlhbCB2YWx1ZXMgaWYgdHJ1ZVxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKi9cblx0cHVibGljIGdldENoYW5nZXMgKHJldHVybkFsbDogYm9vbGVhbiA9IGZhbHNlKSB7XG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCAmJiAhcmV0dXJuQWxsKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuZ2V0Q2hhbmdlcyhcblx0XHRcdHRoaXMuaW5pdGlhbCxcblx0XHRcdHJldHVybkFsbCA/IHt9IDogdGhpcy5tb2RpZmllZCxcblx0XHRcdHRoaXMuY29sdW1ucy5tYWluXG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBpc0xvY2FsICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmtleVNlcnZpY2UuaXNMb2NhbElkKHRoaXMuaXRlbUlkKTtcblx0fVxuXG5cdHB1YmxpYyBpc0xvY2thYmxlICgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5pc0xvY2FsKCkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcic6XG5cdFx0XHRjYXNlICdWb2VydHVpZyc6XG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBoYXNDaGFuZ2VzICgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuaGFzQ2hhbmdlcyhcblx0XHRcdHRoaXMuaW5pdGlhbCxcblx0XHRcdHRoaXMubW9kaWZpZWQsXG5cdFx0XHR0aGlzLmNvbHVtbnMubWFpblxuXHRcdCk7XG5cdH1cblxuXHRwdWJsaWMgcmVzZXRNb2RpZmllZCAoKTogdGhpcyB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xuXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW4uaWRdID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5jbG9uZShcblx0XHRcdFx0Y29sdW1uLmFwaUNvbHVtbi50eXBlLFxuXHRcdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uLmlkXVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBzZXRJbml0aWFsICh2YWx1ZXM6IEZpZWxkTWFwLCBlbmFibGVDYWxsYmFja3M6IGJvb2xlYW4gPSBmYWxzZSk6IHRoaXMge1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0bGV0IHByZXZpb3VzO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXG5cdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXG5cdFx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuaW5pdGlhbCwge30sIHRoaXMuY29sdW1ucy5tYWluKSk7XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHByZXZpb3VzID0gYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5tb2RpZmllZCwge30sIHRoaXMuY29sdW1ucy5tYWluKTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERvZXMgYSBzaGFsbG93IGNvcHkgb2YgdmFsdWVzIVxuXHQgKi9cblx0cHVibGljIHNldE1vZGlmaWVkICh2YWx1ZXM/OiBGaWVsZE1hcCk6IHRoaXMge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSBjb2x1bW5zLnJlc3BvbnNlW3RoaXMuaXRlbVR5cGVdO1xuXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZCA9IHRoaXMuaXNMb2NhbCgpID8gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmdldExvY2FsRGVmYXVsdFZhbHVlcygpIDoge307XG5cblx0XHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0YXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMubWFpbik7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0YXBpRm9ybWF0dGVyLnNoYWxsb3dDb3B5RmllbGRzKHZhbHVlcywgaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMubWFpbik7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcblx0XHRcdFx0XHRpZiAocmVzcG9uc2VDb2x1bW5zW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHQvLyB0b2RvOiBkZXYgbW9kZSBjb25zdGFudFxuXHRcdFx0XHRcdFx0Ly8gaWYgKERFVl9NT0RFKVxuXHRcdFx0XHRcdFx0Ly8gXHRjb25zb2xlLndhcm4oJ3NldE1vZGlmaWVkOiBubyBjb2x1bW4gZm91bmQgZm9yJywgY29sdW1uSWQpO1xuXG5cdFx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHRoaXMuZ2V0UmVzb3VyY2VzKCkpIHtcblx0XHRcdFx0aWYgKHJlc291cmNlIGluc3RhbmNlb2YgTG9jYWxWaWV3UmVzb3VyY2UpXG5cdFx0XHRcdFx0cmVzb3VyY2UuZmllbGRzID0gbW9kaWZpZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXG5cdFx0XHR0aGlzLm1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBzZXREZXJpdmVkICh2YWx1ZXM6IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5kZXJpdmVkW2tleV0gPSB2YWx1ZXNba2V5XTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHNldFBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQpOiB0aGlzIHtcblx0XHR0aGlzLnBhcmVudCA9IHtcblx0XHRcdGl0ZW1UeXBlOiBwYXJlbnRUeXBlLFxuXHRcdFx0aXRlbUlkOiBwYXJlbnRJZFxuXHRcdH07XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBjYWxsT25DaGFuZ2UgKHByZXZpb3VzPzogRmllbGRNYXApOiB0aGlzIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiB0aGlzLmdldFJlc291cmNlcygpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpdGVtUmVzb3VyY2Uub3B0aW9ucy5vbkNoYW5nZShpdGVtUmVzb3VyY2UsIHByZXZpb3VzKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHRoaXMuZmFjdG9yeS5leGNlcHRpb25IYW5kbGVyKGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyB0b0pTT04gKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpZDogdGhpcy5pZCxcblx0XHRcdHBhcmVudDogdGhpcy5wYXJlbnQsXG5cdFx0XHRpbml0aWFsOiB0aGlzLmluaXRpYWwsXG5cdFx0XHRtb2RpZmllZDogdGhpcy5tb2RpZmllZCxcblx0XHRcdGRlcml2ZWQ6IHRoaXMuZGVyaXZlZCxcblx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1uc1xuXHRcdH07XG5cdH1cbn1cbiIsImltcG9ydCB7IExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUgPSBhbnk+IHtcblx0cHVibGljIGNvbHVtbnM6IHtbY29sdW1uSWQ6IHN0cmluZ106IFJlc3BvbnNlQ29sdW1ufTtcblx0cHVibGljIGZpZWxkczogRmllbGRNYXA7XG5cdHB1YmxpYyBkZXJpdmVkOiBGaWVsZE1hcDtcblxuXHRwcm90ZWN0ZWQgY29uc3RydWN0b3IgKFxuXHRcdHByb3RlY3RlZCByZWFkb25seSBmYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHB1YmxpYyByZWFkb25seSBlbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0cHVibGljIHJlYWRvbmx5IG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnM8SXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHByb3RlY3RlZCByZWFkb25seSBfaXNOZXc6IGJvb2xlYW4sXG5cdFx0cHJvdGVjdGVkIHJlYWRvbmx5IGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCBudWxsXG5cdCkge1xuXHRcdHRoaXMuZGVyaXZlZCA9IGVudHJ5LmRlcml2ZWQ7XG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZVtlbnRyeS5jb2x1bW5zLml0ZW1UeXBlXTtcblx0fVxuXG5cdHB1YmxpYyBpc05ldyAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzTmV3O1xuXHR9XG5cblx0cHVibGljIGlzTG9jYWwgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmVudHJ5LmlzTG9jYWwoKTtcblx0fVxuXG5cdHB1YmxpYyBjbGVhclJlc291cmNlICgpOiB2b2lkIHtcblx0XHR0aGlzLmZhY3RvcnkuY2FjaGUuY2xlYXJSZXNvdXJjZSh0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBkZWFjdGl2YXRlICgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5sb2NhbENhY2hlID09PSBudWxsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlLm9uRGVhY3RpdmF0ZUl0ZW0odGhpcy5lbnRyeSk7XG5cdH1cblxuXHRwdWJsaWMgdG9KU09OICgpIHtcblx0XHRjb25zdCBjb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHRoaXMuY29sdW1ucylcblx0XHRcdGNvbHVtbklkcy5wdXNoKGNvbHVtbklkKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjb2x1bW5zOiBjb2x1bW5JZHMsXG5cdFx0XHRmaWVsZHM6IHRoaXMuZmllbGRzLFxuXHRcdFx0ZGVyaXZlZDogdGhpcy5kZXJpdmVkLFxuXHRcdFx0ZW50cnk6IHRoaXMuZW50cnlcblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlLCBJdGVtUmVzb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSA9IGFueT4gZXh0ZW5kcyBJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPiB7XG5cdGZpZWxkczogUmVhZG9ubHk8RmllbGRNYXA+O1xuXG5cdHByb3RlY3RlZCBjb25zdHJ1Y3RvciAoXG5cdFx0ZmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRlbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uczxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4sXG5cdFx0aXNOZXc6IGJvb2xlYW4sXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSB8IG51bGxcblx0KSB7XG5cdFx0c3VwZXIoZmFjdG9yeSwgZW50cnksIG9wdGlvbnMsIGlzTmV3LCBsb2NhbENhY2hlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgY3JlYXRlUGF0aCwgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgSXRlbVJlc291cmNlT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBGaWVsZE1hcCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUgPSBhbnk+IGV4dGVuZHMgSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4ge1xuXHRwcm90ZWN0ZWQgbG9jYWxDb3BpZXM6IEZpZWxkTWFwW10gPSBbXTtcblx0cHJvdGVjdGVkIHRyYW5zYWN0aW9uczogbnVtYmVyID0gMDtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRlbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9ucyxcblx0XHRpc05ldzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgbnVsbFxuXHQpIHtcblx0XHRzdXBlcihmYWN0b3J5LCBlbnRyeSwgb3B0aW9ucywgaXNOZXcsIGxvY2FsQ2FjaGUpO1xuXG5cdFx0ZW50cnkuc2V0TW9kaWZpZWQoKTtcblxuXHRcdHRoaXMuZmllbGRzID0gZW50cnkubW9kaWZpZWQ7XG5cdH1cblxuXHRwdWJsaWMgaXNOZXcgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9pc05ldyAmJiB0aGlzLnRyYW5zYWN0aW9ucyA9PT0gMDtcblx0fVxuXG5cdHB1YmxpYyBzdGFydCAoKTogdGhpcyB7XG5cdFx0aWYgKHRoaXMubG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMubG9jYWxDb3BpZXMgPSBbXTtcblxuXHRcdHRoaXMubG9jYWxDb3BpZXMucHVzaCh0aGlzLmNvcHlGaWVsZHMoKSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyByb2xsYmFjayAoKTogdGhpcyB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmxvY2FsQ29waWVzLnBvcCgpISwgaXRlbUVudHJ5Lm1vZGlmaWVkLCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcblxuXHRcdGlmICh0aGlzLmlzTmV3KCkgJiYgdGhpcy5sb2NhbENvcGllcy5sZW5ndGggPT09IDAgJiYgdGhpcy5sb2NhbENhY2hlICE9PSBudWxsKVxuXHRcdFx0dGhpcy5sb2NhbENhY2hlLm9uRGVhY3RpdmF0ZUl0ZW0odGhpcy5lbnRyeSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBjb21taXQgKGNhbGxPbkNoYW5nZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcblx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMubG9jYWxDb3BpZXMucG9wKCk7XG5cblx0XHRpZiAoY2FsbE9uQ2hhbmdlKVxuXHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xuXG5cdFx0dGhpcy50cmFuc2FjdGlvbnMrKzsgLy8gY29tcGxldGVkIHRyYW5zYWN0aW9uc1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TG9jYWxDb3B5ICgpOiBGaWVsZE1hcCB8IG51bGwge1xuXHRcdGNvbnN0IGxvY2FsQ29waWVzID0gdGhpcy5sb2NhbENvcGllcztcblxuXHRcdGlmIChsb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRpZiAobG9jYWxDb3BpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4gbG9jYWxDb3BpZXNbbG9jYWxDb3BpZXMubGVuZ3RoIC0gMV07XG5cdH1cblxuXHRwdWJsaWMgY29weUZpZWxkcyAoZGVzdGluYXRpb246IEZpZWxkTWFwID0ge30pOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5Lm1vZGlmaWVkLCBkZXN0aW5hdGlvbiwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cdH1cblxuXHRwdWJsaWMgc2V0RmllbGRzICh2YWx1ZXM6IEZpZWxkTWFwLCBjYWxsT25DaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcblx0XHRjb25zdCBmaWVsZHMgPSB0aGlzLmZpZWxkcztcblx0XHRsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdGxldCBwcmV2aW91cztcblxuXHRcdGlmIChjYWxsT25DaGFuZ2UpXG5cdFx0XHRwcmV2aW91cyA9IHRoaXMuY29weUZpZWxkcygpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbY29sdW1uSWRdO1xuXG5cdFx0XHRpZiAoY29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdzZXRGaWVsZHM6IG5vIGNvbHVtbiBmb3VuZCBmb3InLCBjb2x1bW5JZCk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uSWRdLCB2YWx1ZXNbY29sdW1uSWRdKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGZpZWxkc1tjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXHRcdFx0aGFzQ2hhbmdlcyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSAmJiBoYXNDaGFuZ2VzKVxuXHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgY2FsbE9uQ2hhbmdlIChwcmV2aW91cz86IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0dGhpcy5lbnRyeS5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgc2F2ZSAocGFyYW1ldGVycz86IGFueSk6IFByb21pc2VJbnRlcmZhY2U8dGhpcz4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBwYXJhbWV0ZXJNYXAgPSB7fTtcblxuXHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHRcdHBhcmFtZXRlck1hcCxcblx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdFt7fSwgcGFyYW1ldGVyc11cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdGl0ZW1FbnRyeS5pc0xvY2thYmxlKCkgP1xuXHRcdFx0XHRmYWN0b3J5LmxvY2tTZXJ2aWNlLmZldGNoTG9jayhpdGVtRW50cnkpIDpcblx0XHRcdFx0ZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKClcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdC8vIGFkZFRvQ29sbGVjdGlvbnMgaXMgY2FsbGVkIGluIGNoYW5nZXNQcm9jZXNzb3Jcblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkuY2hhbmdlc1Byb2Nlc3Nvci5leGVjdXRlKFtpdGVtRW50cnldLCBbXSwgcGFyYW1ldGVyTWFwKTtcblx0XHRcdH0sXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IGluc3RhbnRpYXRlT3B0aW9ucyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUXVlcnksIEFwaVJlcXVlc3RDb2x1bW5zLCBBcGlSZXF1ZXN0TGltaXQsIEVudHJ5UGFyZW50TnVsbCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSA9IFBhcnRpYWw8Q29sbGVjdGlvbkVudHJ5T3B0aW9ucz47XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlPcHRpb25zIHtcblx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSBbXTtcblx0cXVlcnk6IEFwaVF1ZXJ5IHwgbnVsbCA9IG51bGw7XG5cdHF1ZXJ5UGFyYW1zOiBhbnkgPSB7fTsgLy8gVE9ET1xuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XG5cdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xuXHRsaW1pdDogQXBpUmVxdWVzdExpbWl0IHwgbnVsbCA9IG51bGw7XG5cdGVudHJ5S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuXHRjb25zdHJ1Y3RvciAodmFsdWVzOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zSW50ZXJmYWNlKSB7XG5cdFx0aW5zdGFudGlhdGVPcHRpb25zKHRoaXMsIHZhbHVlcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IGluc3RhbnRpYXRlT3B0aW9ucyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlLCBPbkNoYW5nZUZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uUmVzb3VyY2VDYWxsYmFjazxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gPSAoXG5cdGl0ZW1SZXNvdXJjZXM6IEFycmF5PEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pixcblx0Y29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPlxuKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uUmVzb3VyY2VJbml0aWFsQ2FsbGJhY2s8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ID0gKFxuXHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+XG4pID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIE9uSXRlbXNDcmVhdGVkQ2FsbGJhY2sgPSAoY29udmVyc2lvbk1hcDogQ29udmVyc2lvbk1hcCkgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gPSBQYXJ0aWFsPENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnM8SXRlbVR5cGVUeXBlPj47XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiB7XG5cdGVkaXRJdGVtczogYm9vbGVhbiA9IGZhbHNlO1xuXHRyZW1vdGVJdGVtczogYm9vbGVhbiA9IGZhbHNlO1xuXHRlZGl0Q29sbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXHRtb2RJbnN0YW50OiBib29sZWFuID0gZmFsc2U7XG5cdGVuYWJsZVNhdmU6IGJvb2xlYW4gPSB0cnVlO1xuXHRvbkl0ZW1zQ3JlYXRlZDogT25JdGVtc0NyZWF0ZWRDYWxsYmFjayA9IG5vb3A7XG5cdG9uQ2hhbmdlOiBPbkNoYW5nZUZ1bmN0aW9uID0gbm9vcDtcblx0b25BZGQ6IENvbGxlY3Rpb25SZXNvdXJjZUNhbGxiYWNrPEl0ZW1UeXBlVHlwZT4gPSBub29wO1xuXHRvblJlbW92ZTogQ29sbGVjdGlvblJlc291cmNlQ2FsbGJhY2s8SXRlbVR5cGVUeXBlPiA9IG5vb3A7XG5cdG9uQWRkSW5pdGlhbDogQ29sbGVjdGlvblJlc291cmNlSW5pdGlhbENhbGxiYWNrPEl0ZW1UeXBlVHlwZT4gPSBub29wO1xuXHRvblJlbW92ZUluaXRpYWw6IENvbGxlY3Rpb25SZXNvdXJjZUluaXRpYWxDYWxsYmFjazxJdGVtVHlwZVR5cGU+ID0gbm9vcDtcblx0cmVzb3VyY2VLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRjdXN0b206IGFueSA9IG51bGw7XG5cblx0Y29uc3RydWN0b3IgKHZhbHVlczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+KSB7XG5cdFx0aW5zdGFudGlhdGVPcHRpb25zKHRoaXMsIHZhbHVlcyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEJhdGNoU3RhdHVzLCBDb2x1bW5FeHBhbnNpb24sIENvbHVtbkluZm8sIENvbHVtblNldCwgaW5BcnJheSwgSXRlbUNhY2hlLCBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBEZWZlcnJlZCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucywgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIFRlbXBsYXRlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRDb2xsZWN0aW9uUXVlcnksXG5cdENvbnZlcnNpb25NYXAsXG5cdEVudHJ5UGFyZW50TnVsbCxcblx0RmllbGRNYXAsXG5cdEl0ZW1JZCxcblx0SXRlbUlkQ29udmVyc2lvbk1hcCxcblx0SXRlbVR5cGUsXG5cdFByb21pc2VJbnRlcmZhY2UsXG5cdFF1ZXJ5Q2FsbGJhY2tcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5sZXQgY3VycmVudElkID0gMDtcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSA9IGFueT4ge1xuXHRwdWJsaWMgaWQ6IG51bWJlciA9IGN1cnJlbnRJZCsrO1xuXHRwdWJsaWMgcGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xuXHRwdWJsaWMgcXVlcnk6IENvbGxlY3Rpb25RdWVyeTtcblx0cHVibGljIGNvbHVtbnM6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+O1xuXG5cdHByaXZhdGUgdGVtcGxhdGVDb2x1bW5zOiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPiB8IG51bGwgPSBudWxsO1xuXG5cdHB1YmxpYyBpbml0aWFsOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblx0cHVibGljIGl0ZW1zOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblxuXHRkZWZlcnJlZD86IERlZmVycmVkPHRoaXM+O1xuXHRwcm9taXNlOiBQcm9taXNlSW50ZXJmYWNlPHRoaXM+O1xuXHRyZWxvYWRRdWV1ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRoYXNFZGl0UmVzb3VyY2VzID0gZmFsc2U7XG5cdGhhc0l0ZW1FZGl0UmVzb3VyY2VzID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgZmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRwdWJsaWMgb3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9uc1xuXHQpIHtcblx0XHR0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXHRcdHRoaXMucXVlcnkgPSBmYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XG5cdFx0dGhpcy5jb2x1bW5zID0gZmFjdG9yeS5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdFN0dWIoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucyk7XG5cblx0XHR0aGlzLmRlZmVyKCk7XG5cdH1cblxuXHRwcml2YXRlIGdldFJlc291cmNlcyAoKTogQXJyYXk8Q29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHQvLyBAdHMtaWdub3JlIHRvZG8sIGZpeCBpdGVtVHlwZSBpbiBjb2xsZWN0aW9uQ2FjaGVcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkuY2FjaGUuZ2V0KHRoaXMpIGFzIEFycmF5PENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pjtcblx0fVxuXG5cdGRlZmVyICgpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5pc0RlZmVycmVkKCkpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2UuZGVmZXIoKTtcblx0XHR0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnByb21pc2UgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9yZXNvbHZlICgpOiB0aGlzIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XG5cblx0XHRpZiAoZGVmZXJyZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcblxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHJlc29sdmUgKFxuXHRcdGl0ZW1FbnRyeUNvbXBvdW5kOiB7XG5cdFx0XHRjb2x1bW5zOiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPixcblx0XHRcdGluaXRpYWw6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRcdG1vZGlmaWVkPzogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+XG5cdFx0fVxuXHQpOiB0aGlzIHtcblx0XHRjb25zdCB7aW5pdGlhbCwgbW9kaWZpZWR9ID0gaXRlbUVudHJ5Q29tcG91bmQ7XG5cblx0XHR0aGlzLmNvbHVtbnMgPSBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zO1xuXHRcdHRoaXMuaW5pdGlhbCA9IGluaXRpYWw7XG5cdFx0dGhpcy5pdGVtcyA9IG1vZGlmaWVkICE9PSB1bmRlZmluZWQgPyBtb2RpZmllZCA6IGluaXRpYWwuc2xpY2UoKTtcblxuXHRcdHJldHVybiB0aGlzLl9yZXNvbHZlKCk7XG5cdH1cblxuXHRpc0xvY2FsICgpOiBib29sZWFuIHtcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpO1xuXHR9XG5cblx0bWF0Y2hQYXJlbnQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQpOiBib29sZWFuIHtcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHQvLyA9PSB0byBjb21wYXJlIGl0ZW1JZHNcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xuXHR9XG5cblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtRW50cnk6IHRoaXNbJ2l0ZW1zJ11bMF0pID0+IHZvaWQpOiB2b2lkIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IG1vZCBvZiBtb2RpZmllZClcblx0XHRcdGNhbGxiYWNrKG1vZCk7XG5cdH1cblxuXHRnZXRJdGVtQnlJZCAoaXRlbUlkOiBJdGVtSWQpOiB0aGlzWydpdGVtcyddWzBdIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pdGVtSWQgPT09IGl0ZW1JZClcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoYWNjdW11bGF0b3I6IEl0ZW1JZFtdID0gW10pOiBJdGVtSWRbXSB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmdldElkQXJyYXkodGhpcy5pdGVtcywgYWNjdW11bGF0b3IpO1xuXHR9XG5cblx0Ly8gc2hvdWxkIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCByZXNvbHZlRGVyaXZlZFxuXHRjcmVhdGVJdGVtcyAodmFsdWVzQXJyYXk6IEZpZWxkTWFwW10pOiBQcm9taXNlSW50ZXJmYWNlPEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pj4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgY29sdW1uU2V0ID0gdGhpcy5jb2x1bW5zO1xuXHRcdGxldCB0ZW1wbGF0ZTogVGVtcGxhdGU8SXRlbVR5cGVUeXBlPjtcblxuXHRcdHJldHVybiBmYWN0b3J5Lml0ZW1IYW5kbGVyLmZldGNoVGVtcGxhdGUodGhpcy5pdGVtVHlwZSkudGhlbihcblx0XHRcdCh0ZW1wbGF0ZUluc3RhbmNlOiBUZW1wbGF0ZTxJdGVtVHlwZVR5cGU+KSA9PiB7XG5cdFx0XHRcdHRlbXBsYXRlID0gdGVtcGxhdGVJbnN0YW5jZTtcblxuXHRcdFx0XHRjb25zdCByZXN1bHQ6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0XHRcdGlmICh0aGlzLnRlbXBsYXRlQ29sdW1ucyA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdHRoaXMudGVtcGxhdGVDb2x1bW5zID0gdGVtcGxhdGUuY29sdW1ucy5tZXJnZShjb2x1bW5TZXQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZXMgb2YgdmFsdWVzQXJyYXkpIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChcblx0XHRcdFx0XHRcdGZhY3RvcnkuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3RMb2NhbDxJdGVtVHlwZVR5cGU+KFxuXHRcdFx0XHRcdFx0XHRmYWN0b3J5LmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZSxcblx0XHRcdFx0XHRcdFx0dmFsdWVzLFxuXHRcdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdFx0dGhpcy5wYXJlbnQsXG5cdFx0XHRcdFx0XHRcdHRoaXMudGVtcGxhdGVDb2x1bW5zXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRcdH0sXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVzb2x2ZURlcml2ZWRWYWx1ZXMgKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pj4ge1xuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuaXRlbUhhbmRsZXIucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIHRoaXMuY29sdW1ucy5yb290LCBsb2NhbEl0ZW1DYWNoZSk7XG5cdH1cblxuXHRhZGRJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJlc3VsdFJlc291cmNlOiBVLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWN0aXZhdGU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ107XG5cblx0YWRkSXRlbXMgKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWN0aXZhdGU/OiBib29sZWFuXG5cdCk6IG51bGw7XG5cblx0YWRkSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWN0aXZhdGU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXG5cdGFkZEl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuID0gZmFsc2UsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXSB8IG51bGwge1xuXHRcdC8vIGxvY2FsIGVudHJ5IG1pZ2h0IGJlIGFkZGVkIG11bHRpcGxlIHRpbWVzIChleHRlbmQ/KVxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cdFx0Y29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5jb2x1bW5zLmxpbms7XG5cdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Jbml0aWFsOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblxuXHRcdGlmICh1cGRhdGVJbml0aWFsKSB7XG5cdFx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHQvLyB3aGVuIHNhdmluZywgaXRlbXMgdGhhdCBtaWdodCBhbHJlYWR5IGJlIGluIG1vZGlmaWVkIGFyZSBhZGRlZCB0byBpbml0aWFsXG5cdFx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcblx0XHRcdFx0XHRpbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWwucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKSB7XG5cdFx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0XHRcdFx0aWYgKHBhcmVudENvbHVtbiAhPT0gbnVsbCAmJiBpdGVtRW50cnkubW9kaWZpZWQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5tb2RpZmllZFtwYXJlbnRDb2x1bW4uaWRdID0gcGFyZW50Lml0ZW1JZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG1vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzKFxuXHRcdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsLFxuXHRcdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZCxcblx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0Y2FsbE9uQWRkLFxuXHRcdFx0Y2FsbE9uQWN0aXZhdGVcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3M8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZDogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJlc3VsdFJlc291cmNlOiBVIHwgbnVsbCA9IG51bGwsXG5cdFx0Y2FsbE9uQWRkOiBib29sZWFuID0gdHJ1ZSxcblx0XHRjYWxsT25BY3RpdmF0ZTogYm9vbGVhbiA9IHRydWVcblx0KTogVVsnaXRlbXMnXSB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLmdldFJlc291cmNlcygpO1xuXG5cdFx0aWYgKGVudHJpZXNBZGRlZFRvSW5pdGlhbC5sZW5ndGggPiAwKVxuXHRcdFx0dGhpcy5vbkFkZEluaXRpYWwoZW50cmllc0FkZGVkVG9Jbml0aWFsKTtcblxuXHRcdGlmIChlbnRyaWVzQWRkZWRUb01vZGlmaWVkLmxlbmd0aCA9PT0gMCB8fCBjb2xsZWN0aW9uUmVzb3VyY2VzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcblxuXHRcdGxldCBsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgdW5kZWZpbmVkO1xuXHRcdGxldCByZXN1bHQ6IFVbJ2l0ZW1zJ10gfCB1bmRlZmluZWQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlLmxvY2FsQ2FjaGUgIT09IG51bGwpXG5cdFx0XHRcdGxvY2FsQ2FjaGUgPSBjb2xsZWN0aW9uUmVzb3VyY2UubG9jYWxDYWNoZTtcblxuXHRcdFx0Y29uc3QgYWRkZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuYWRkSXRlbVJlc291cmNlcyhlbnRyaWVzQWRkZWRUb01vZGlmaWVkKTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcblx0XHRcdFx0cmVzdWx0ID0gYWRkZWRSZXNvdXJjZXM7XG5cblx0XHRcdFx0aWYgKGNhbGxPbkFkZClcblx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcblx0XHR9XG5cblx0XHRpZiAoY2FsbE9uQWN0aXZhdGUgJiYgbG9jYWxDYWNoZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbUVudHJ5IG9mIGVudHJpZXNBZGRlZFRvTW9kaWZpZWQpXG5cdFx0XHRcdGxvY2FsQ2FjaGUub25BY3RpdmF0ZUl0ZW0oYWRkZWRJdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRyZXR1cm4gcmVzdWx0UmVzb3VyY2UgPT09IG51bGwgPyBudWxsIDogW107XG5cdH1cblxuXHRyZW1vdmVJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChcblx0XHRpZEFycmF5OiBJdGVtSWRbXSxcblx0XHRyZXN1bHRSZXNvdXJjZTogVSxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ107XG5cblx0cmVtb3ZlSXRlbXMgKFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IG51bGw7XG5cblx0cmVtb3ZlSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXG5cdHJlbW92ZUl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0aWYgKGlkQXJyYXkubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0aXRlbUVudHJ5ID0+ICFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIGlkQXJyYXkpLFxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0Y2FsbE9uUmVtb3ZlXG5cdFx0KTtcblx0fVxuXG5cdGNsZWFyPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdHJlc3VsdFJlc291cmNlOiBVLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXTtcblxuXHRjbGVhciAoXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogbnVsbDtcblxuXHRjbGVhcjxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0KCkgPT4gZmFsc2UsXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcblx0XHRcdHVwZGF0ZUluaXRpYWwsXG5cdFx0XHRjYWxsT25SZW1vdmVcblx0XHQpO1xuXHR9XG5cblx0aGFuZGxlUmVtb3ZlZEl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdGZpbHRlckZ1bmN0aW9uOiAoaXRlbUVudHJ5OiB0aGlzWydpdGVtcyddWzBdKSA9PiBib29sZWFuLFxuXHRcdHJlc3VsdFJlc291cmNlOiBVLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXTtcblxuXHRoYW5kbGVSZW1vdmVkSXRlbXMgKFxuXHRcdGZpbHRlckZ1bmN0aW9uOiAoaXRlbUVudHJ5OiB0aGlzWydpdGVtcyddWzBdKSA9PiBib29sZWFuLFxuXHRcdHJlc3VsdFJlc291cmNlPzogbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IG51bGw7XG5cblx0aGFuZGxlUmVtb3ZlZEl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdGZpbHRlckZ1bmN0aW9uOiAoaXRlbUVudHJ5OiB0aGlzWydpdGVtcyddWzBdKSA9PiBib29sZWFuLFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbDtcblxuXHRoYW5kbGVSZW1vdmVkSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0ZmlsdGVyRnVuY3Rpb246IChpdGVtRW50cnk6IHRoaXNbJ2l0ZW1zJ11bMF0pID0+IGJvb2xlYW4sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuID0gZmFsc2UsXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IHJlbW92ZWRGcm9tTW9kaWZpZWQgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaXRlbXMsIGZpbHRlckZ1bmN0aW9uKTtcblx0XHRsZXQgcmVtb3ZlZEZyb21Jbml0aWFsOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj47XG5cblx0XHRpZiAodXBkYXRlSW5pdGlhbClcblx0XHRcdHJlbW92ZWRGcm9tSW5pdGlhbCA9IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pbml0aWFsLCBmaWx0ZXJGdW5jdGlvbik7XG5cdFx0ZWxzZSB7XG5cdFx0XHQvLyByZW1vdmUgYWxsICpsb2NhbCogaXRlbXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIG1vZGlmaWVkIGZyb20gaW5pdGlhbCwgdG9vXG5cdFx0XHRjb25zdCBsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQ6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHJlbW92ZWRFbnRyeSBvZiByZW1vdmVkRnJvbU1vZGlmaWVkKSB7XG5cdFx0XHRcdGlmIChyZW1vdmVkRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRcdGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZC5wdXNoKHJlbW92ZWRFbnRyeSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KFxuXHRcdFx0XHRcdHRoaXMuaW5pdGlhbCxcblx0XHRcdFx0XHRpdGVtRW50cnkgPT4gbG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTFcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyhyZW1vdmVkRnJvbUluaXRpYWwsIHJlbW92ZWRGcm9tTW9kaWZpZWQsIHJlc3VsdFJlc291cmNlLCBjYWxsT25SZW1vdmUpO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChcblx0XHRyZW1vdmVkRnJvbUluaXRpYWw6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRyZW1vdmVkRnJvbU1vZGlmaWVkOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHRjYWxsT25SZW1vdmU6IGJvb2xlYW4gPSB0cnVlXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5nZXRSZXNvdXJjZXMoKTtcblxuXHRcdGlmIChyZW1vdmVkRnJvbUluaXRpYWwubGVuZ3RoID4gMClcblx0XHRcdHRoaXMub25SZW1vdmVJbml0aWFsKHJlbW92ZWRGcm9tSW5pdGlhbCk7XG5cblx0XHRpZiAocmVtb3ZlZEZyb21Nb2RpZmllZC5sZW5ndGggPT09IDAgfHwgY29sbGVjdGlvblJlc291cmNlcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gcmVzdWx0UmVzb3VyY2UgPT09IG51bGwgPyBudWxsIDogW107XG5cblx0XHRsZXQgbG9jYWxDYWNoZTogTG9jYWxDYWNoZSB8IHVuZGVmaW5lZDtcblx0XHRsZXQgcmVzdWx0OiBVWydpdGVtcyddIHwgdW5kZWZpbmVkO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcykge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZS5sb2NhbENhY2hlICE9PSBudWxsKVxuXHRcdFx0XHRsb2NhbENhY2hlID0gY29sbGVjdGlvblJlc291cmNlLmxvY2FsQ2FjaGU7XG5cblx0XHRcdGNvbnN0IHJlbW92ZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UucmVtb3ZlSXRlbVJlc291cmNlcyhyZW1vdmVkRnJvbU1vZGlmaWVkKTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVtb3ZlZFJlc291cmNlcztcblxuXHRcdFx0XHRpZiAoY2FsbE9uUmVtb3ZlKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25SZW1vdmUocmVtb3ZlZFJlc291cmNlcyk7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcblx0XHR9XG5cblx0XHRpZiAobG9jYWxDYWNoZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtRW50cnkgb2YgcmVtb3ZlZEZyb21Nb2RpZmllZClcblx0XHRcdFx0bG9jYWxDYWNoZS5vbkRlYWN0aXZhdGVJdGVtKHJlbW92ZWRJdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRyZXR1cm4gcmVzdWx0UmVzb3VyY2UgPT09IG51bGwgPyBudWxsIDogW107XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUJhdGNoU3RhdHVzIChcblx0XHRpdGVtSWRzOiBJdGVtSWRbXSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBCYXRjaFN0YXR1czxJdGVtVHlwZVR5cGUsIEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5pdGVtSGFuZGxlci5jcmVhdGVCYXRjaFN0YXR1cyhcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRpdGVtSWRzLFxuXHRcdFx0dGhpcy5wYXJlbnQsXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdGZhbHNlLFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHRmYWxzZVxuXHRcdCkuYmF0Y2hTdGF0dXM7XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZExvY2FsIChcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbHVtbkV4cGFuc2lvbjxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSBmYWN0b3J5LmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XG5cblx0XHRyZXR1cm4gZmFjdG9yeS5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykudGhlbihcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IGZhY3RvcnkuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Y29uc3QgYmF0Y2hTdGF0dXMgPSB0aGlzLmNyZWF0ZUJhdGNoU3RhdHVzKHRoaXMuZ2V0SWRBcnJheSgpLCByZXF1ZXN0Q29sdW1ucywgbG9jYWxJdGVtQ2FjaGUpO1xuXG5cdFx0XHRcdHJldHVybiBiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhY3RvcnkuaXRlbUhhbmRsZXIuaGFuZGxlQmF0Y2hSZXNwb25zZShcblx0XHRcdFx0XHRcdFx0YmF0Y2hTdGF0dXMsXG5cdFx0XHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlLFxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiBjb2x1bW5FeHBhbnNpb24sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBleHBhbmRSZW1vdGUgKFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sdW1uRXhwYW5zaW9uPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IGZhY3RvcnkuZXJyb3JIYW5kbGVyO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcblxuXHRcdHJldHVybiBmYWN0b3J5Lml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXModGhpcywgdW5kZWZpbmVkLCByZXF1ZXN0Q29sdW1ucykudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IGZhY3RvcnkuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Y29uc3QgYmF0Y2hTdGF0dXMgPSB0aGlzLmNyZWF0ZUJhdGNoU3RhdHVzKHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSwgcmVxdWVzdENvbHVtbnMsIGxvY2FsSXRlbUNhY2hlKTtcblxuXHRcdFx0XHRyZXR1cm4gYmF0Y2hTdGF0dXMuZ2V0UHJvbWlzZXMoKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWN0b3J5Lml0ZW1IYW5kbGVyLmhhbmRsZUJhdGNoUmVzcG9uc2UoXG5cdFx0XHRcdFx0XHRcdGJhdGNoU3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZSxcblx0XHRcdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlSXRlbXMgPSByZXNwb25zZS5pdGVtc1tpdGVtVHlwZV07XG5cblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZUl0ZW1zW2l0ZW1FbnRyeS5pdGVtSWRdICE9PSB1bmRlZmluZWQgfHwgaXRlbUVudHJ5LmlzTG9jYWwoKTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0dGhpcy5hZGRJdGVtcyhcblx0XHRcdFx0XHRcdFx0YmF0Y2hTdGF0dXMuZ2V0QXJyYXkoW0VOVFJZX1NUQVRVUy5SRVNPTFZFXSksXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0ZXhwYW5kIChuZXdDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucywgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2VJbnRlcmZhY2U8dGhpcz4ge1xuXHRcdGNvbnN0IHttZXJnZWQsIGRpZmZlcmVuY2V9ID0gdGhpcy5jb2x1bW5zLm1lcmdlUmVxdWVzdENvbHVtbnMobmV3Q29sdW1ucyk7XG5cblx0XHRpZiAoZGlmZmVyZW5jZSAhPT0gdHJ1ZSAmJiBkaWZmZXJlbmNlLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLmlzTG9jYWwoKSA/XG5cdFx0XHRcdHRoaXMuZXhwYW5kTG9jYWwoZGlmZmVyZW5jZSwgbG9jYWxJdGVtQ2FjaGUpIDpcblx0XHRcdFx0dGhpcy5leHBhbmRSZW1vdGUobWVyZ2VkLCBsb2NhbEl0ZW1DYWNoZSlcblx0XHQpLnRoZW4oXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24gPT4ge1xuXHRcdFx0XHR0aGlzLmV4cGFuZENvbHVtbnMoY29sdW1uRXhwYW5zaW9uKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0ZXh0ZW5kUXVlcnkgKGNhbGxiYWNrPzogUXVlcnlDYWxsYmFjaykge1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnF1ZXJ5O1xuXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IGNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXG5cdFx0cmV0dXJuIHRoaXMucXVlcnkgPSB0aGlzLmZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0fVxuXG5cdGV4dGVuZDxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChcblx0XHRxdWVyeUNhbGxiYWNrOiBRdWVyeUNhbGxiYWNrLFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZT86IFUsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFVbJ2l0ZW1zJ10+O1xuXG5cdGV4dGVuZCAoXG5cdFx0cXVlcnlDYWxsYmFjazogUXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U/OiBudWxsLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxudWxsPjtcblxuXHRleHRlbmQ8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0cXVlcnlDYWxsYmFjazogUXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuXG5cdCkge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gZmFjdG9yeS5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgZXh0ZW5kZWRRdWVyeSA9IHRoaXMuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjaykub2JqZWN0O1xuXHRcdGNvbnN0IGZ1bGxRdWVyeSA9IGZhY3RvcnkucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdGV4dGVuZGVkUXVlcnksXG5cdFx0XHRmYWN0b3J5LnF1ZXJ5U2VydmljZS5jcmVhdGVOb3RJbih0aGlzLmdldElkQXJyYXkoKSlcblx0XHQpO1xuXG5cdFx0Ly8gdG9kbzogYWxzbyBkbyB0aGUgbGltaXQgY2hlY2sgaW4gYmF0Y2hFeHRlbmRcblx0XHRjb25zdCBwcm9taXNlID0gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKFxuXHRcdFx0dGhpcyxcblx0XHRcdC8vIFdoZW4gdGhlcmUncyBhIGxpbWl0IHdlIHdhbnQgdG8gZmV0Y2ggYWxsIGl0ZW1zIGJlY2F1c2Ugd2Ugd2lsbCBkbyBzb3J0aW5nIGFuZCBzcGxpY2luZyBvZiB0aGUgZXhjZXNzIGl0ZW1zXG5cdFx0XHR0aGlzLm9wdGlvbnMubGltaXQgIT09IG51bGwgPyBleHRlbmRlZFF1ZXJ5IDogZnVsbFF1ZXJ5XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHQvLyByZW1vdmVBYnNlbnRJdGVtcyhyZXNwb25zZSk7IFRPRE86IHdlIGNhbiBvbmx5IGRvIHRoaXMgd2hlbiB3ZSByZXF1ZXN0ICphbGwqIHRoZSBpdGVtc1xuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW3RoaXMuaXRlbVR5cGVdLFxuXHRcdFx0XHRcdHRoaXMucGFyZW50LFxuXHRcdFx0XHRcdHRoaXMuY29sdW1uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cmllcyA9PiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGNvbGxlY3Rpb25SZXNvdXJjZSwgdHJ1ZSwgY2FsbE9uQWRkLCBmYWxzZSk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cblx0XHR0aGlzLnByb21pc2UgPSBwcm9taXNlLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHByb21pc2U7XG5cdH1cblxuXHRxdWV1ZVJlbG9hZCAoKTogdm9pZCB7XG5cdFx0dGhpcy5yZWxvYWRRdWV1ZWQgPSB0cnVlO1xuXHR9XG5cblx0ZXhwYW5kQ29sdW1ucyAoY29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb248SXRlbVR5cGVUeXBlPik6IHZvaWQge1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4odGhpcy5jb2x1bW5zKTtcblxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLmNvbHVtbnMgPSBleHBhbnNpb25SZXN1bHQubWVyZ2VkO1xuXHRcdHRoaXMudGVtcGxhdGVDb2x1bW5zID0gbnVsbDtcblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5yZXF1ZXN0O1xuXHR9XG5cblx0ZXhwYW5kUmVxdWVzdENvbHVtbnMgKHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IHZvaWQge1xuXHRcdHRoaXMuY29sdW1ucy5leHBhbmRSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucyk7XG5cdFx0dGhpcy5vcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMucmVxdWVzdDtcblx0fVxuXG5cdGdldEFkZGVkSXRlbXMgKHJldHVybkl0ZW1JZHM6IHRydWUpOiBJdGVtSWRbXTtcblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkcz86IGJvb2xlYW4pOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj47XG5cdGdldEFkZGVkSXRlbXMgKHJldHVybkl0ZW1JZHM6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4gfCBJdGVtSWQ+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcblx0XHRcdFx0cmVzdWx0LnB1c2gocmV0dXJuSXRlbUlkcyA/IGl0ZW1FbnRyeS5pdGVtSWQgOiBpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZW1vdmVkSXRlbXMgKHJldHVybkl0ZW1JZHM6IHRydWUpOiBJdGVtSWRbXTtcblx0Z2V0UmVtb3ZlZEl0ZW1zIChyZXR1cm5JdGVtSWRzPzogYm9vbGVhbik6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pjtcblx0Z2V0UmVtb3ZlZEl0ZW1zIChyZXR1cm5JdGVtSWRzOiBib29sZWFuID0gZmFsc2UpIHtcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+IHwgSXRlbUlkPiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaW5pdGlhbCkge1xuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHJldHVybkl0ZW1JZHMgPyBpdGVtRW50cnkuaXRlbUlkIDogaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0VXBkYXRlZEl0ZW1zICgpOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4ge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSAmJiBpdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRoYXNBZGRlZEl0ZW1zICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiB0aGlzLmluaXRpYWwubGVuZ3RoO1xuXHR9XG5cblx0aGFzUmVtb3ZlZEl0ZW1zICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsLmxlbmd0aCA+IHRoaXMuaXRlbXMubGVuZ3RoO1xuXHR9XG5cblx0aGFzVXBkYXRlZEl0ZW1zICgpOiBib29sZWFuIHtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IG1vZGlmaWVkSXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAobW9kaWZpZWRJdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQGRlc2NyaXB0aW9uXG5cdCAqIHRoaXMgZG9lc24ndCByZXZlcnQgdXBkYXRlc1xuXHQgKi9cblx0cmV2ZXJ0Q2hhbmdlcyAoKTogdm9pZCB7XG5cdFx0Ly8gc2F2ZSB0aGVzZSBiZWZvcmUgcmVzZXR0aW5nIHRoZSBpdGVtcyBwcm9wZXJ0eVxuXHRcdGNvbnN0IGFkZGVkSXRlbXMgPSB0aGlzLmdldEFkZGVkSXRlbXMoKTtcblx0XHRjb25zdCByZW1vdmVkSXRlbXMgPSB0aGlzLmdldFJlbW92ZWRJdGVtcygpO1xuXG5cdFx0dGhpcy5pdGVtcyA9IHRoaXMuaW5pdGlhbC5zbGljZSgpO1xuXG5cdFx0dGhpcy5oYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3MoW10sIHJlbW92ZWRJdGVtcyk7XG5cdFx0dGhpcy5oYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyhbXSwgYWRkZWRJdGVtcyk7XG5cdH1cblxuXHRvbkl0ZW1zQ3JlYXRlZCAoY29udmVyc2lvbk1hcDogQ29udmVyc2lvbk1hcCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgdGhpcy5nZXRSZXNvdXJjZXMoKSkge1xuXHRcdFx0cmVzb3VyY2UucmVidWlsZE1hcCgpO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvdXJjZS5vcHRpb25zLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXApO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0dGhpcy5mYWN0b3J5LmV4Y2VwdGlvbkhhbmRsZXIoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgb25BZGRJbml0aWFsIChpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiB0aGlzLmdldFJlc291cmNlcygpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXNvdXJjZS5vcHRpb25zLm9uQWRkSW5pdGlhbChpdGVtRW50cmllcywgdGhpcyk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHR0aGlzLmZhY3RvcnkuZXhjZXB0aW9uSGFuZGxlcihlcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBvblJlbW92ZUluaXRpYWwgKGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4pOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHRoaXMuZ2V0UmVzb3VyY2VzKCkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc291cmNlLm9wdGlvbnMub25SZW1vdmVJbml0aWFsKGl0ZW1FbnRyaWVzLCB0aGlzKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHRoaXMuZmFjdG9yeS5leGNlcHRpb25IYW5kbGVyKGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRnZXRVcGRhdGVkSXRlbUNvbHVtbnMgKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApOiB7W2NvbHVtbklkOiBzdHJpbmddOiBDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT59IHtcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xuXHRcdGNvbnN0IHJlc3VsdDoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+fSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2NvbHVtbi5hcGlDb2x1bW4uaXRlbVR5cGVdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc3VsdFtjb2x1bW4uaWRdID0gY29sdW1uO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjbG9uZSAocGFyZW50OiBFbnRyeVBhcmVudE51bGwsIGNvbnZlcnNpb25NYXA/OiBJdGVtSWRDb252ZXJzaW9uTWFwKSB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBjbG9uZWRJdGVtRW50cmllcyA9IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5iYXRjaENsb25lPEl0ZW1UeXBlVHlwZT4odGhpcy5pdGVtcywgY29udmVyc2lvbk1hcCk7XG5cblx0XHRmb3IgKGNvbnN0IGNsb25lZEl0ZW1FbnRyeSBvZiBjbG9uZWRJdGVtRW50cmllcylcblx0XHRcdGNsb25lZEl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRyZXR1cm4gZmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxuXHRcdFx0ZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNsb25lT3B0aW9ucyh0aGlzLm9wdGlvbnMsIHBhcmVudClcblx0XHQpLnJlc29sdmUoXG5cdFx0XHR7XG5cdFx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcblx0XHRcdFx0aW5pdGlhbDogY2xvbmVkSXRlbUVudHJpZXNcblx0XHRcdH1cblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBmaWx0ZXJBcnJheSwgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlLCBMb2NhbFZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VJdGVtSWRNYXAsIEl0ZW1UeXBlLCBPbkNoYW5nZUZ1bmN0aW9uLCBQcm9taXNlSW50ZXJmYWNlLCBRdWVyeUNhbGxiYWNrLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSA9IGFueSwgVCBleHRlbmRzIEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGU+ID0gTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4ge1xuXHRwdWJsaWMgaXRlbXM6IFRbXTtcblx0cHVibGljIGNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwO1xuXHRwcm90ZWN0ZWQgaXRlbUlkTWFwOiBJdGVtUmVzb3VyY2VJdGVtSWRNYXA8VD4gPSB7fTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG9uQ2hhbmdlOiBPbkNoYW5nZUZ1bmN0aW9uO1xuXG5cdHByb3RlY3RlZCBjb25zdHJ1Y3RvciAoXG5cdFx0cHJvdGVjdGVkIGZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHVibGljIGVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRwdWJsaWMgb3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uczxJdGVtVHlwZVR5cGU+LFxuXHRcdHB1YmxpYyBsZXZlbDogbnVtYmVyLFxuXHRcdHB1YmxpYyBsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgbnVsbFxuXHQpIHtcblx0XHR0aGlzLml0ZW1zID0gW107XG5cdFx0dGhpcy5pdGVtSWRNYXAgPSB7fTtcblx0XHR0aGlzLmNvbHVtbnMgPSBlbnRyeS5jb2x1bW5zLnJlc3BvbnNlO1xuXG5cdFx0Ly8gdGhpcyBhbGxvd3MgdXMgdG8gdXBkYXRlIHRoZSBvbkNoYW5nZSBmdW5jdGlvbiBpbiB0aGUgb3B0aW9uc1xuXHRcdHRoaXMub25DaGFuZ2UgPSAoaXRlbVJlc291cmNlLCBwcmV2aW91cykgPT4geyB0aGlzLm9wdGlvbnMub25DaGFuZ2UoaXRlbVJlc291cmNlLCBwcmV2aW91cyk7IH07XG5cblx0XHR0aGlzLmFkZEl0ZW1SZXNvdXJjZXMoZW50cnkuaXRlbXMpO1xuXHR9XG5cblx0cHVibGljIGdldEl0ZW1CeUlkIChpdGVtSWQ6IG51bWJlcik6IFQge1xuXHRcdHJldHVybiB0aGlzLml0ZW1JZE1hcFtpdGVtSWRdO1xuXHR9XG5cblx0cHVibGljIHJlYnVpbGRNYXAgKCk6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGl0ZW1JZE1hcDogSXRlbVJlc291cmNlSXRlbUlkTWFwPFQ+ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0aXRlbUlkTWFwW2l0ZW1SZXNvdXJjZS5lbnRyeS5pdGVtSWRdID0gaXRlbVJlc291cmNlO1xuXG5cdFx0dGhpcy5pdGVtSWRNYXAgPSBpdGVtSWRNYXA7XG5cdH1cblxuXHRwdWJsaWMgYWRkSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pik6IFRbXSB7IC8vIHNob3VsZCBiZSBmYXN0XG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdGNvbnN0IHJlc3VsdDogVFtdID0gW107XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblx0XHRjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgaXRlbUlkTWFwID0gdGhpcy5pdGVtSWRNYXA7XG5cdFx0Y29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmZhY3RvcnkuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3RvcjxJdGVtVHlwZVR5cGU+KFxuXHRcdFx0e2VkaXQ6IG9wdGlvbnMuZWRpdEl0ZW1zLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZX0sXG5cdFx0XHR0aGlzLmxldmVsLFxuXHRcdFx0dGhpcy5sb2NhbENhY2hlXG5cdFx0KTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXG5cdFx0XHRsZXQgaXRlbVJlc291cmNlO1xuXG5cdFx0XHRpZiAoaXRlbUlkTWFwW2l0ZW1JZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtUmVzb3VyY2UgPSBjb25zdHJ1Y3RvcihpdGVtRW50cnkpO1xuXHRcdFx0XHRpdGVtcy5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdID0gaXRlbVJlc291cmNlO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGl0ZW1JZE1hcFtpdGVtSWRdO1xuXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIGl0ZW1FbnRyaWVzXG5cdCAqIEByZXR1cm5zIHtJdGVtUmVzb3VyY2VbXX1cblx0ICpcblx0ICogUmV0dXJucyB0aGUgSXRlbXJlc291cmNlcyB0aGF0IHdoZXJlIHJlbW92ZWQgQ29sbGVjdGlvbi5cblx0ICogRmlsdGVycyBvbiBJdGVtUmVzb3VyY2UuZW50cnkgPT09IEl0ZW1FbnRyeVxuXHQgKi9cblx0cHVibGljIHJlbW92ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4pOiBUW10ge1xuXHRcdGNvbnN0IHJlc3VsdDogVFtdID0gW107XG5cblx0XHRmaWx0ZXJBcnJheShcblx0XHRcdHRoaXMuaXRlbXMsXG5cdFx0XHRpdGVtUmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGlmIChpdGVtUmVzb3VyY2UuZW50cnkgPT09IGl0ZW1FbnRyeSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdFx0XHRcdGRlbGV0ZSB0aGlzLml0ZW1JZE1hcFtpdGVtRW50cnkuaXRlbUlkXTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHVibGljIGNhbGxPbkFkZCAoaXRlbVJlc291cmNlczogVFtdKTogdm9pZCB7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMub3B0aW9ucy5vbkFkZChpdGVtUmVzb3VyY2VzLCB0aGlzKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0dGhpcy5mYWN0b3J5LmV4Y2VwdGlvbkhhbmRsZXIoZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBjYWxsT25SZW1vdmUgKGl0ZW1SZXNvdXJjZXM6IFRbXSk6IHZvaWQge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMub25SZW1vdmUoaXRlbVJlc291cmNlcywgdGhpcyk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHRoaXMuZmFjdG9yeS5leGNlcHRpb25IYW5kbGVyKGVycm9yKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IFQpID0+IHZvaWQpOiB2b2lkIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRjYWxsYmFjayhpdGVtUmVzb3VyY2UpO1xuXHR9XG5cblx0cHVibGljIGZpbHRlciAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IFQpID0+IGJvb2xlYW4pOiBUW10ge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdDogVFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbVJlc291cmNlKSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHVibGljIGZpcnN0IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogVCkgPT4gYm9vbGVhbik6IFQgfCBudWxsIHtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtUmVzb3VyY2UpKVxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cHVibGljIHNvbWUgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBUKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZmlyc3QoY2FsbGJhY2spICE9PSBudWxsO1xuXHR9XG5cblx0cHVibGljIGdyb3VwQnkgKGFyZ3VtZW50OiBzdHJpbmcgfCAoKGl0ZW1SZXNvdXJjZTogVCkgPT4gc3RyaW5nIHwgbnVsbCkpOiB7W2tleTogc3RyaW5nXTogVFtdfSB7XG5cdFx0Y29uc3QgaXRlbXNSZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdDoge1trZXk6IHN0cmluZ106IFRbXX0gPSB7fTtcblxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGl0ZW1SZXNvdXJjZS5maWVsZHNbYXJndW1lbnRdO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xuXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1zUmVzb3VyY2VzKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYXJndW1lbnQoaXRlbVJlc291cmNlKTtcblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IG51bGwpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0aWYgKHJlc3VsdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XG5cblx0XHRcdFx0cmVzdWx0W3ZhbHVlXS5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHB1YmxpYyBtYXA8VT4gKGFyZ3VtZW50OiBzdHJpbmcgfCAoKGl0ZW1SZXNvdXJjZTogVCkgPT4gVSkpOiBVW10ge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IGxlbmd0aCA9IGl0ZW1SZXNvdXJjZXMubGVuZ3RoO1xuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGl0ZW1SZXNvdXJjZXNbaV0uZmllbGRzW2FyZ3VtZW50XTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0XHRyZXN1bHRbaV0gPSBhcmd1bWVudChpdGVtUmVzb3VyY2VzW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHVibGljIHJlZHVjZTxVPiAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IFQsIHZhbHVlOiBVKSA9PiBVLCB2YWx1ZTogVSk6IFUge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdHZhbHVlID0gY2FsbGJhY2soaXRlbVJlc291cmNlLCB2YWx1ZSk7XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRwdWJsaWMgZXh0ZW5kIChxdWVyeUNhbGxiYWNrOiBRdWVyeUNhbGxiYWNrLCByZXR1cm5BbGxJdGVtczogYm9vbGVhbiA9IGZhbHNlLCBjYWxsT25BZGQ/OiBib29sZWFuKTogUHJvbWlzZUludGVyZmFjZTxUW10+IHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5leHRlbmQocXVlcnlDYWxsYmFjaywgdGhpcywgY2FsbE9uQWRkKS50aGVuKFxuXHRcdFx0aXRlbVJlc291cmNlcyA9PiByZXR1cm5BbGxJdGVtcyA/IHRoaXMuaXRlbXMgOiBpdGVtUmVzb3VyY2VzXG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBjbGVhclJlc291cmNlICgpOiB2b2lkIHtcblx0XHR0aGlzLmZhY3RvcnkuY2FjaGUuY2xlYXJSZXNvdXJjZSh0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBkZWFjdGl2YXRlICgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5sb2NhbENhY2hlID09PSBudWxsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlLmNsZWFyQ29sbGVjdGlvbih0aGlzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucywgSXRlbVJlc291cmNlLCBMb2NhbFZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUgPSBhbnksIFQgZXh0ZW5kcyBJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPiA9IExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+XG5cdGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIDxJdGVtVHlwZVR5cGUsIFQ+IHtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0Y29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnM8SXRlbVR5cGVUeXBlPixcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCBudWxsXG5cdCkge1xuXHRcdHN1cGVyKGNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucywgbGV2ZWwsIGxvY2FsQ2FjaGUpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgTG9jYWxWaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlID0gYW55LCBUIGV4dGVuZHMgSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4gPSBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PlxuXHRleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA8SXRlbVR5cGVUeXBlLCBUPiB7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdGZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw6IG51bWJlcixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgbnVsbFxuXHQpIHtcblx0XHRzdXBlcihmYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMsIGxldmVsLCBsb2NhbENhY2hlKTtcblx0fVxuXG5cdHB1YmxpYyBzYXZlICgpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1JZENvbnZlcnNpb25NYXA+IHtcblx0XHRpZiAoIXRoaXMub3B0aW9ucy5lbmFibGVTYXZlKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBTYXZpbmcgZGlzYWJsZWQnKTtcblxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbCAmJiBmYWN0b3J5LmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpKVxuXHRcdFx0cmV0dXJuIGZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuY2hhbmdlc1Byb2Nlc3Nvci5leGVjdXRlKFtdLCBbY29sbGVjdGlvbkVudHJ5XSk7XG5cdH1cblxuXHQvLyBUT0RPOiB1c2UgY2FsbGJhY2sgZnVuY3Rpb25cblx0cHVibGljIG1vdmVJdGVtcyAoaWRBcnJheTogSXRlbUlkW10sIGRlc3RpbmF0aW9uOiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPiwgZW5hYmxlQ2FsbGJhY2tzPzogYm9vbGVhbik6IFRbXSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0aWYgKG9wdGlvbnMuZW5hYmxlU2F2ZSB8fCBvcHRpb25zLm1vZEluc3RhbnQpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENhbm5vdCBtb3ZlIGl0ZW1zOiBzYXZpbmcgZW5hYmxlZCcpO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSAhPT0gZGVzdGluYXRpb24uZW50cnkuaXRlbVR5cGUpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENhbm5vdCBtb3ZlIGl0ZW1zOiBpdGVtVHlwZSBtaXNtYXRjaCcpO1xuXG5cdFx0Y29uc3QgcmVtb3ZlZEl0ZW1SZXNvdXJjZXMgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0aWYgKHJlbW92ZWRJdGVtUmVzb3VyY2VzICE9PSBudWxsKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2Ugb2YgcmVtb3ZlZEl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2gocmVtb3ZlZEl0ZW1SZXNvdXJjZS5lbnRyeSk7XG5cblx0XHRcdGRlc3RpbmF0aW9uLmVudHJ5LmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBkZXN0aW5hdGlvbiwgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlbW92ZWRJdGVtUmVzb3VyY2VzO1xuXHR9XG5cblx0cHVibGljIHJlbW92ZUl0ZW1zIChpZEFycmF5OiBJdGVtSWRbXSwgY2FsbE9uUmVtb3ZlOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2VJbnRlcmZhY2U8VFtdPiB7XG5cdFx0Ly8gY2FsbE9uUmVtb3ZlIHNob3VsZCBiZSBmYWxzZSBoZXJlIHRvIHByZXZlbnQgb25SZW1vdmUgZnJvbSBiZWluZyBjYWxsZWQgdHdpY2Vcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZmFsc2UpO1xuXG5cdFx0aWYgKGl0ZW1SZXNvdXJjZXMgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4oW10pO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5tb2RJbnN0YW50KVxuXHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRpZiAoY2FsbE9uUmVtb3ZlKVxuXHRcdFx0XHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XG5cblx0XHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlcztcblx0XHRcdFx0fVxuXHRcdFx0KTtcblxuXHRcdGlmIChjYWxsT25SZW1vdmUpXG5cdFx0XHR0aGlzLmNhbGxPblJlbW92ZShpdGVtUmVzb3VyY2VzKTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtUmVzb3VyY2VzKTtcblx0fVxuXG5cdHB1YmxpYyByZW1vdmVJdGVtIChpdGVtSWQ6IEl0ZW1JZCwgY2FsbE9uUmVtb3ZlPzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8VD4ge1xuXHRcdHJldHVybiB0aGlzLnJlbW92ZUl0ZW1zKFtpdGVtSWRdLCBjYWxsT25SZW1vdmUpLnRoZW4oXG5cdFx0XHRpdGVtUmVzb3VyY2VzID0+IHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5mYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHVibGljIGFkZEl0ZW1zICh2YWx1ZXNBcnJheTogRmllbGRNYXBbXSwgY2FsbE9uQWRkOiBib29sZWFuID0gdHJ1ZSwgY2FsbE9uQWN0aXZhdGU/OiBib29sZWFuKTogUHJvbWlzZUludGVyZmFjZTxUW10+IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IG1vZEluc3RhbnQgPSB0aGlzLm9wdGlvbnMubW9kSW5zdGFudDtcblxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmNyZWF0ZUl0ZW1zKHZhbHVlc0FycmF5KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRpZiAobW9kSW5zdGFudCB8fCB0aGlzLmxvY2FsQ2FjaGUgPT09IG51bGwpXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyaWVzO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmVudHJ5LnJlc29sdmVEZXJpdmVkVmFsdWVzKGl0ZW1FbnRyaWVzLCB0aGlzLmxvY2FsQ2FjaGUuaXRlbXMpO1xuXHRcdFx0fVxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuZW50cnkuYWRkSXRlbXMoXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMsXG5cdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRjYWxsT25BY3RpdmF0ZVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGlmIChpdGVtUmVzb3VyY2VzID09PSBudWxsKVxuXHRcdFx0XHRcdHJldHVybiBbXTtcblxuXHRcdFx0XHRpZiAobW9kSW5zdGFudCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKFxuXHRcdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoY2FsbE9uQWRkKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY2FsbE9uQWRkKVxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0fSxcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwdWJsaWMgYWRkSXRlbSAodmFsdWVzOiBGaWVsZE1hcCwgY2FsbE9uQWRkPzogYm9vbGVhbiwgY2FsbE9uQWN0aXZhdGU/OiBib29sZWFuKTogUHJvbWlzZUludGVyZmFjZTxUPiB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkSXRlbXMoW3ZhbHVlc10sIGNhbGxPbkFkZCwgY2FsbE9uQWN0aXZhdGUpLnRoZW4oXG5cdFx0XHRpdGVtUmVzb3VyY2VzID0+IHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5mYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHVibGljIGNsZWFyIChlbmFibGVDYWxsYmFja3M6IGJvb2xlYW4pIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5jbGVhcih0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uU2V0IH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEZpZWxkTWFwLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSA9IGFueT4ge1xuXHRmaWVsZHM6IEZpZWxkTWFwPEl0ZW1UeXBlVHlwZT47XG5cdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXA7XG5cdGNvbHVtbnM6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+OyAvLyBUT0RPOiByZW5hbWUgdG8gY29sdW1uU2V0XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdGZhY3Rvcnk6IFRlbXBsYXRlRmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRwdWJsaWMgcmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGFkZGl0aW9uYWxDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpIHtcblx0XHR0aGlzLmZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCByZXNwb25zZS5saW5rc1tpdGVtVHlwZV1bMF0pITtcblxuXHRcdHRoaXMucmVzcG9uc2VDb2x1bW5zID0gZmFjdG9yeS5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCksXG5cdFx0XHRhZGRpdGlvbmFsQ29sdW1uc1xuXHRcdCkubWVyZ2VkO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gZmFjdG9yeS5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdHJ1ZSwgdGhpcy5yZXNwb25zZUNvbHVtbnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlT3B0aW9ucywgVmlld1Jlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlID0gYW55PiBleHRlbmRzIFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdGZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnM8UmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+LFxuXHRcdGlzTmV3OiBib29sZWFuLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCBudWxsXG5cdCkge1xuXHRcdHN1cGVyKGZhY3RvcnksIGVudHJ5LCBvcHRpb25zLCBpc05ldywgbG9jYWxDYWNoZSk7XG5cblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5LmluaXRpYWw7XG5cdH1cbn1cbiIsImltcG9ydCB7IExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2VPcHRpb25zLCBWaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSA9IGFueT4gZXh0ZW5kcyBWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPiB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRmYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdGVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zLFxuXHRcdGlzTmV3OiBib29sZWFuLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCBudWxsXG5cdCkge1xuXHRcdHN1cGVyKGZhY3RvcnksIGVudHJ5LCBvcHRpb25zLCBpc05ldywgbG9jYWxDYWNoZSk7XG5cblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQgPyBlbnRyeS5pbml0aWFsIDogZW50cnkubW9kaWZpZWQ7XG5cdH1cbn1cbiIsIi8vIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGRlcGVuZGVuY3khXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeU9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VPcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vVmlld1Jlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vRWRpdFJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uVmlld1Jlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL1RlbXBsYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vUmVtb3RlVmlld1Jlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxWaWV3UmVzb3VyY2UnO1xuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IFF1ZXJ5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlQYXJzZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSwgQ29sbGVjdGlvblF1ZXJ5LCBFbnRyeVBhcmVudE51bGwsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0Ly8gbm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgY29sdW1ucyBwcm9wZXJ0eSwgaXQgd2lsbCBiZSByZXBsYWNlZCBpbiB3aGVuIGNvbHVtbnMgYXJlIGV4cGFuZGVkXG5cdGNsb25lT3B0aW9ucyAob3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucywgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpIHtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyhvcHRpb25zKTsgLy8gZG9lcyBhIHNoYWxsb3cgY29weVxuXG5cdFx0cmVzdWx0LnF1ZXJ5UGFyYW1zID0gdGhpcy5jbG9uZVF1ZXJ5UGFyYW1zKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXHRcdHJlc3VsdC5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJvY2Vzc09wdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+KTogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpO1xuXHR9XG5cblx0Y2xvbmVRdWVyeVBhcmFtczxUIGV4dGVuZHMgb2JqZWN0PiAocGFyYW1ldGVyczogVCk6IFQge1xuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHBhcmFtZXRlcnNba2V5XTtcblx0XHRcdGxldCBjbG9uZTtcblxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlLnNsaWNlKCk7IC8vIHdlJ3JlIG9ubHkgdXNpbmcgcHJpbWl0aXZlIGFycmF5c1xuXHRcdFx0ZWxzZSBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZS5jbG9uZSgpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlO1xuXG5cdFx0XHRyZXN1bHRba2V5XSA9IGNsb25lO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjcmVhdGVRdWVyeSAob3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyk6IENvbGxlY3Rpb25RdWVyeSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cblx0XHRsZXQgcXVlcnk7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5O1xuXHRcdGVsc2Uge1xuXHRcdFx0Y29uc3QgbGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeToge2lkOiAnJnBhcmVudElkJ319O1xuXHRcdFx0b3B0aW9ucy5xdWVyeVBhcmFtcy5wYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XG5cblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XG5cdFx0XHRcdGxpbmtlZFRvUXVlcnkgOlxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24ob3B0aW9ucy5xdWVyeSwgbGlua2VkVG9RdWVyeSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3QocXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XG5cblx0XHRyZXR1cm4ge29iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV19O1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoaXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxhbnk+PiwgYWNjdW11bGF0b3I6IEl0ZW1JZFtdID0gW10pOiBJdGVtSWRbXSB7XG5cdFx0aWYgKGFjY3VtdWxhdG9yID09PSB1bmRlZmluZWQpXG5cdFx0XHRhY2N1bXVsYXRvciA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRhY2N1bXVsYXRvci5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXG5cdFx0cmV0dXJuIGFjY3VtdWxhdG9yO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7SXRlbUVudHJ5W119IGl0ZW1FbnRyaWVzXG5cdCAqIEBwYXJhbSB7KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFufSBjYWxsYmFja1xuXHQgKiBAcmV0dXJucyB7SXRlbUVudHJ5W119XG5cdCAqXG5cdCAqIGZpbHRlciBhbiBhcnJheSBhY2NvcmRpbmcgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBSZXR1cm4gdGhlIGVudHJpZXMgdGhhdCBmYWlsZWQgdGhlIGNvbmRpdGlvblxuXHQgKiBSZXBsYWNlIHRoZSBnaXZlbiBhcnJheSB3aXRoIHRoZSBlbnRyaWVzIHRoYXQgZGlkbid0IGZhaWwgdGhlIGNvbmRpdGlvbi5cblx0ICovXG5cdGZpbHRlckFycmF5PFQgZXh0ZW5kcyBJdGVtRW50cnk8YW55PiA9IEl0ZW1FbnRyeTxhbnk+PiAoXG5cdFx0aXRlbUVudHJpZXM6IFRbXSxcblx0XHRjYWxsYmFjazogKGl0ZW1FbnRyeTogVCkgPT4gYm9vbGVhblxuXHQpOiBUW10ge1xuXHRcdGNvbnN0IGZpbHRlcmVkRW50cmllczogVFtdID0gW107XG5cdFx0Y29uc3QgcmVtb3ZlZEVudHJpZXM6IFRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHQoY2FsbGJhY2soaXRlbUVudHJ5KSA/IGZpbHRlcmVkRW50cmllcyA6IHJlbW92ZWRFbnRyaWVzKS5wdXNoKGl0ZW1FbnRyeSk7XG5cblx0XHRpZiAocmVtb3ZlZEVudHJpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xuXG5cdFx0aXRlbUVudHJpZXMubGVuZ3RoID0gZmlsdGVyZWRFbnRyaWVzLmxlbmd0aDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbUVudHJpZXMubGVuZ3RoOyBpKyspXG5cdFx0XHRpdGVtRW50cmllc1tpXSA9IGZpbHRlcmVkRW50cmllc1tpXTtcblxuXHRcdHJldHVybiByZW1vdmVkRW50cmllcztcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUXVlcnksIENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UsIGlkZW50aXR5LCBpc0Z1bmN0aW9uLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vJztcbmltcG9ydCB7XG5cdEJhdGNoU3RhdHVzLFxuXHRDb2xsZWN0aW9uQ2FjaGUsXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25NYXRjaGVyLFxuXHRDb2x1bW5FeHBhbnNpb24sXG5cdENvbHVtbkhhbmRsZXIsXG5cdENvbHVtblNldCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRRdWVyeVNlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQmF0Y2hTdGF0dXNGYWN0b3J5LCBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LCBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIFF1ZXJ5UGFyc2VyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RDb2x1bW4sXG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCxcblx0RW50cnlTdGF0dXMsXG5cdEl0ZW1FbnRyeVBhcmVudElkTWFwLFxuXHRJdGVtSWQsXG5cdEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCxcblx0SXRlbVR5cGUsXG5cdFF1ZXJ5Q2FsbGJhY2tcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25IYW5kbGVyIHtcblx0ZW50cmllczogQ29sbGVjdGlvbkNhY2hlO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblx0XHR0aGlzLmVudHJpZXMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0ICovXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwOiBhbnkpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeTxhbnk+ID0gZW50cnkuY29sbGVjdGlvbjtcblxuXHRcdFx0Y29sbGVjdGlvbi5yZW1vdmVJdGVtcyhlbnRyeS5ub3RmaXR0aW5nLCBudWxsLCB0cnVlKTtcblx0XHRcdGNvbGxlY3Rpb24uYWRkSXRlbXMoZW50cnkuZml0dGluZywgbnVsbCwgdHJ1ZSk7IC8vIGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBpbml0aWFsXG5cblx0XHRcdGlmIChlbnRyeS5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uLmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbk1hdGNoZXI8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ICgpOiBDb2xsZWN0aW9uTWF0Y2hlcjxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFt0aGlzLmVudHJpZXNdLCB0cnVlLCB0cnVlLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxuXHQgKi9cblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8YW55PiA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8YW55Pj4gKFxuXHRcdGNvbGxlY3Rpb25NYXAsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFQgfCBudWxsID0gbnVsbFxuXHQpOiBUWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgZml0dGluZyA9IG1hcEVudHJ5LmZpdHRpbmc7XG5cdFx0XHRjb25zdCBtYXliZSA9IG1hcEVudHJ5Lm1heWJlO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8YW55PiA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBpZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGZpdHRpbmdJdGVtIG9mIGZpdHRpbmcpXG5cdFx0XHRcdGlkQXJyYXkucHVzaChmaXR0aW5nSXRlbS5pdGVtSWQpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IG1heWJlSXRlbSBvZiBtYXliZSlcblx0XHRcdFx0aWRBcnJheS5wdXNoKG1heWJlSXRlbSk7XG5cblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgbnVsbCwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8vIFRPRE86IG1heWJlLCBib29sZWFuIGluc3RlYWQgb2YgbWVzc2FnZVxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0ICovXG5cdGFkZFRvQ29sbGVjdGlvbnM8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxhbnk+ID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxhbnk+PiAoXG5cdFx0Y29sbGVjdGlvbk1hcCxcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuLFxuXHRcdHJlc3VsdFJlc291cmNlOiBUIHwgbnVsbCA9IG51bGxcblx0KTogVFsnaXRlbXMnXSB7XG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xuXG5cdFx0XHRpZiAodXBkYXRlSW5pdGlhbCAmJiBtYXBFbnRyeS5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB1cGRhdGVJbml0aWFsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YmF0Y2hFeHBhbmQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCxcblx0XHRuZXdDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW11cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdGlmIChuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sbGVjdGlvbnMpO1xuXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheTogSXRlbUlkW10gPSBbXTtcblx0XHRsZXQgaXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0Ly8gVE9ETzogZmlsdGVyIGxvY2FsIGl0ZW1zP1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cGFyZW50SWRBcnJheS5wdXNoKGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQhLml0ZW1JZCk7XG5cdFx0XHRpdGVtRW50cmllcyA9IGl0ZW1FbnRyaWVzLmNvbmNhdChjb2xsZWN0aW9uRW50cnkuaXRlbXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxuXHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdHBhcmVudElkQXJyYXksXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG51bGwsXG5cdFx0XHRuZXdDb2x1bW5zXG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKFxuXHRcdFx0XHRcdG5ld0NvbHVtbnMsXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0aXRlbUVudHJpZXNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XG5cblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5fcmVzb2x2ZSgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25zO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHQvLyB0b2RvW1RTXSBob3cgZG8gd2UgdHlwZSB0aGlzID9cblx0YmF0Y2hFeHRlbmQ8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPiAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsXG5cdFx0cXVlcnlDYWxsYmFjazogUXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uczogVCxcblx0XHRyZXR1cm5BbGxJdGVtczogYm9vbGVhbiA9IGZhbHNlLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2VJdGVtSWRNYXA+IHtcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMoY29sbGVjdGlvbnMpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih7fSk7XG5cblx0XHRjb25zdCBwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXHRcdGxldCBpdGVtSWRBcnJheTogSXRlbUlkW10gPSBbXTtcblxuXHRcdG9wdGlvbnMucXVlcnlQYXJhbXMgPSBxdWVyeUNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjayk7XG5cdFx0XHRwYXJlbnRJZEFycmF5LnB1c2goY29sbGVjdGlvbkVudHJ5LnBhcmVudCEuaXRlbUlkKTtcblxuXHRcdFx0aXRlbUlkQXJyYXkgPSBpdGVtSWRBcnJheS5jb25jYXQoY29sbGVjdGlvbkVudHJ5LmdldElkQXJyYXkoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXG5cdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0cGFyZW50SWRBcnJheSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucykub2JqZWN0LFxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5jcmVhdGVOb3RJbihpdGVtSWRBcnJheSlcblx0XHRcdCksXG5cdFx0XHRvcHRpb25zLmNvbHVtbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0cGFyZW50SWRBcnJheSxcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2UgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF07XG5cdFx0XHRcdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeS5hZGRJdGVtcyggLy8gc2hvdWxkIGdvIGZpcnN0XG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZS5pdGVtc1twYXJlbnRJZF0sXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UsXG5cdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0Y2FsbE9uQWRkLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHJldHVybkFsbEl0ZW1zID8gY29sbGVjdGlvblJlc291cmNlLml0ZW1zIDogaXRlbVJlc291cmNlcztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGJhdGNoRmV0Y2g8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSB8ICgoKSA9PiBJdGVtSWRbXSksXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCBiYXRjaFN0YXR1czogQmF0Y2hTdGF0dXM8SXRlbVR5cGVUeXBlLCBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj4gPSB0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiAoY29sbGVjdGlvbkVudHJ5LnBhcmVudCEpLml0ZW1JZCxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiBjb2xsZWN0aW9uRW50cnkucHJvbWlzZVxuXHRcdCk7XG5cblx0XHRpZiAoaXNGdW5jdGlvbjwoKSA9PiBJdGVtSWRbXT4ocGFyZW50SWRBcnJheSkpXG5cdFx0XHRwYXJlbnRJZEFycmF5ID0gcGFyZW50SWRBcnJheSgpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XG5cdFx0XHRiYXRjaFN0YXR1cy5hZGQoXG5cdFx0XHRcdHRoaXMuZ2V0RW50cnlTdGF0dXMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNsb25lT3B0aW9ucyhvcHRpb25zLCB7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9KSxcblx0XHRcdFx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZSxcblx0XHRcdFx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RJZHMgPSBiYXRjaFN0YXR1cy5nZXRSZXF1ZXN0SWRzKCk7XG5cdFx0XHRcdGxldCBpdGVtRW50cnlDb21wb3VuZFByb21pc2U7XG5cdFx0XHRcdGxldCBhZGRpdGlvbmFsUXVlcnk7XG5cblx0XHRcdFx0aWYgKG9wdGlvbnMucXVlcnkgPT09IG51bGwpXG5cdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5ID0gbnVsbDtcblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3Qob3B0aW9ucy5xdWVyeSwgb3B0aW9ucy5xdWVyeVBhcmFtcykucGFyc2UoKTtcblx0XHRcdFx0XHRhZGRpdGlvbmFsUXVlcnkgPSB7b2JqZWN0OiBwYXJzZWRRdWVyeVswXSwgc3RyaW5nOiBwYXJzZWRRdWVyeVsxXX07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0aXRlbUVudHJ5Q29tcG91bmRQcm9taXNlID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRhZGRpdGlvbmFsUXVlcnkgPT09IG51bGwgPyBudWxsIDogYWRkaXRpb25hbFF1ZXJ5Lm9iamVjdCxcblx0XHRcdFx0XHRcdG9wdGlvbnMuY29sdW1uc1xuXHRcdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKFtFTlRSWV9TVEFUVVMuTE9DQUxdKSkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyeUNvbXBvdW5kUHJvbWlzZSA9IHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKS50aGVuKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0cmV0dXJuIGJhdGNoU3RhdHVzLmdldE1hcCgpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnlDb21wb3VuZFByb21pc2UudGhlbihcblx0XHRcdFx0XHRpdGVtRW50cnlDb21wb3VuZCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBpdGVtQ2FjaGUuYmF0Y2hHZXRMb2NhbEJ5UGFyZW50KFxuXHRcdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdFx0XHRwYXJlbnRJZEFycmF5IGFzIEl0ZW1JZFtdLFxuXHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5XG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRsZXQgaXRlbUVudHJ5QXJyYXk6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGl0ZW1FbnRyeU1hcClcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5QXJyYXkgPSBpdGVtRW50cnlBcnJheS5jb25jYXQoaXRlbUVudHJ5TWFwW3BhcmVudElkXSk7XG5cblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmV4cGFuZExvY2FsSXRlbUVudHJpZXMoXG5cdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnlBcnJheSxcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5Q29tcG91bmQuY29sdW1ucyxcblx0XHRcdFx0XHRcdFx0aXRlbUNhY2hlXG5cdFx0XHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0XHRcdCgpID0+IHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShiYXRjaFN0YXR1cywgaXRlbUVudHJ5Q29tcG91bmQsIGl0ZW1FbnRyeU1hcCksXG5cdFx0XHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHQvLyBUT0RPOiBzb21lIHN0YXR1c2VzIGFyZSBub3QgdGFrZW4gaW50byBhY2NvdW50XG5cdGhhbmRsZUJhdGNoUmVzcG9uc2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRiYXRjaFN0YXR1czogQmF0Y2hTdGF0dXM8SXRlbVR5cGVUeXBlLCBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0aXRlbUVudHJ5Q29tcG91bmQ6IHtcblx0XHRcdGNvbHVtbnM6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+LFxuXHRcdFx0Y29sdW1uRXhwYW5zaW9uPzogQ29sdW1uRXhwYW5zaW9uPEl0ZW1UeXBlVHlwZT4sXG5cdFx0XHRpdGVtcz86IEl0ZW1FbnRyeVBhcmVudElkTWFwPEl0ZW1UeXBlVHlwZT5cblx0XHR9LFxuXHRcdGxvY2FsSXRlbXM6IEl0ZW1FbnRyeVBhcmVudElkTWFwPEl0ZW1UeXBlVHlwZT5cblx0KTogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLkNBQ0hFRF0sXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRJZCkgPT4ge1xuXHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5O1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkVdLFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50SWQpID0+IHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSAoaXRlbUVudHJ5Q29tcG91bmQuaXRlbXMhKVtwYXJlbnRJZF07XG5cblx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGluaXRpYWw6IGl0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdFx0bW9kaWZpZWQ6IGl0ZW1FbnRyaWVzLmNvbmNhdChsb2NhbEl0ZW1zW3BhcmVudElkXSksXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMsXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRJZCkgPT4ge1xuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kQ29sdW1ucyhpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5FeHBhbnNpb24hKTtcblx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5fcmVzb2x2ZSgpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLkxPQ0FMXSxcblx0XHRcdChjb2xsZWN0aW9uRW50cnksIHBhcmVudElkKSA9PiB7XG5cdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpbml0aWFsOiBsb2NhbEl0ZW1zW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbnNcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyxcblx0XHRpdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj4ge1xuXHRcdGNvbnN0IHN0YXR1c1Jlc291cmNlID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgbG9jYWxDb2xsZWN0aW9uQ2FjaGUsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoXG5cdFx0XHRzdGF0dXNSZXNvdXJjZS5lbnRyeSxcblx0XHRcdHN0YXR1c1Jlc291cmNlLnN0YXR1cyxcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHRpdGVtQ2FjaGUsXG5cdFx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZSxcblx0XHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZUNhY2hlZDxUIGV4dGVuZHMgQ29sbGVjdGlvbkVudHJ5PGFueT4+IChcblx0XHRlbnRyeTogVCxcblx0XHRzdGF0dXM6IEVOVFJZX1NUQVRVUyxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFQ+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblxuXHRcdHN3aXRjaCAoc3RhdHVzKSB7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5DQUNIRUQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oZW50cnkpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucywgaXRlbUNhY2hlKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IGVudHJ5Ll9yZXNvbHZlKCksXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0Ly8gdGhlIHN0YXR1cyBjb3VsZCBoYXZlIGNoYW5nZWQgYWxyZWFkeSwgc28gY2FsbCBnZXRDYWNoZWRFbnRyeVN0YXR1cyBhZ2FpblxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHRoaXMucmVzb2x2ZUNhY2hlZChcblx0XHRcdFx0XHRcdGVudHJ5LFxuXHRcdFx0XHRcdFx0dGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhlbnRyeSwgb3B0aW9ucyksXG5cdFx0XHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRcdFx0aXRlbUNhY2hlLFxuXHRcdFx0XHRcdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0XHRcdFx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuTE9DQUw6XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVMb2NhbChlbnRyeSwgaXRlbUNhY2hlKTtcblx0XHRcdGRlZmF1bHQ6IC8vIGNhc2UgRU5UUllfU1RBVFVTLlJFU09MVkU6XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVSZW1vdGUoZW50cnksIGl0ZW1DYWNoZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRDYWNoZWRFbnRyeVN0YXR1cyAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8YW55Pixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zXG5cdCk6IEVOVFJZX1NUQVRVUyB7XG5cdFx0aWYgKCFjb2xsZWN0aW9uRW50cnkuY29sdW1ucy5pc1N1cGVyc2V0T2Yob3B0aW9ucy5jb2x1bW5zKSkge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5FWFBBTkQ7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlBST01JU0VEO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQpIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQgPSBmYWxzZTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xuXHRcdH1cblxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXREZWZlcnJlZEVudHJ5U3RhdHVzPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRcdHF1ZXJ5OiBBcGlRdWVyeSxcblx0XHRkZWZlcnJlZEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZVxuXHQpOiB7ZW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LCBpc0RlZmVycmVkOiBib29sZWFufSB7XG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcblxuXHRcdGlmICghb3B0aW9ucy5kZWZlclJlcXVlc3QpIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xuXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGZhbHNlfTtcblx0XHR9XG5cblx0XHRjb2xsZWN0aW9uRW50cnkgPSBkZWZlcnJlZEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbCkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4cGFuZFJlcXVlc3RDb2x1bW5zKG9wdGlvbnMuY29sdW1ucyk7XG5cblx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogZmFsc2V9O1xuXHRcdH1cblxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIHtlbnRyeTogZGVmZXJyZWRFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLCBpc0RlZmVycmVkOiB0cnVlfTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0RW50cnlTdGF0dXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsXG5cdFx0bG9jYWxFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0ZGVmZXJyZWRFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGVcblx0KTogRW50cnlTdGF0dXM8Q29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBxdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0XHRsZXQgY29sbGVjdGlvbkVudHJ5O1xuXHRcdGxldCBpc0RlZmVycmVkO1xuXG5cdFx0aWYgKHRoaXMuaXNMb2NhbChvcHRpb25zKSkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gbG9jYWxFbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbClcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKX07XG5cblx0XHRcdCh7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZH0gPSB0aGlzLmdldERlZmVycmVkRW50cnlTdGF0dXMoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzXG5cdFx0XHQpKTtcblxuXHRcdFx0aWYgKGlzRGVmZXJyZWQpXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuUFJPTUlTRUR9O1xuXG5cdFx0XHQvLyBuZXcgbG9jYWwgZW50cnkgY3JlYXRlZCwgc2hvdWxkIGJlIGFkZGVkIHRvIGxvY2FsIGNhY2hlIG9ubHlcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuTE9DQUx9O1xuXHRcdH1cblxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XG5cblx0XHQvLyBlbnRyeSBhbHJlYWR5IGV4aXN0cyBpbiBnbG9iYWwgY2FjaGUsIGFkZCB0byBsb2NhbCBjYWNoZVxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlbnRyeTogbG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLFxuXHRcdFx0XHRzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKVxuXHRcdFx0fTtcblxuXHRcdCh7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZH0gPSB0aGlzLmdldERlZmVycmVkRW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIHF1ZXJ5LCBkZWZlcnJlZEVudHJpZXMpKTtcblxuXHRcdGlmIChpc0RlZmVycmVkKVxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRH07XG5cblx0XHQvLyBuZXcgZ2xvYmFsIGVudHJ5IGNyZWF0ZWQsIGFkZCB0byBib3RoIGxvY2FsIGFuZCBnbG9iYWwgY2FjaGVcblx0XHRsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0dGhpcy5lbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpO1xuXG5cdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5SRVNPTFZFfTtcblx0fVxuXG5cdHJlc29sdmVMb2NhbDxUIGV4dGVuZHMgQ29sbGVjdGlvbkVudHJ5PGFueT4+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IFQsXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxUPiB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnRoZW4oXG5cdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5TZXQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zLCBmYWxzZSk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5kTG9jYWxJdGVtRW50cmllcyhcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRpdGVtQ2FjaGUuZ2V0TG9jYWxCeVF1ZXJ5KGl0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkucXVlcnkpLFxuXHRcdFx0XHRcdGNvbHVtblNldCxcblx0XHRcdFx0XHRpdGVtQ2FjaGVcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdGxvY2FsRW50cmllcyA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoe2luaXRpYWw6IGxvY2FsRW50cmllcywgY29sdW1uczogY29sdW1uU2V0fSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVzb2x2ZVJlbW90ZTxUIGV4dGVuZHMgQ29sbGVjdGlvbkVudHJ5PGFueT4+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IFQsXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxUPiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XG5cblx0XHRsZXQgY29sdW1uU2V0O1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhjb2xsZWN0aW9uRW50cnkpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1ucyxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQsXG5cdFx0XHRcdFx0Y29sdW1uU2V0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdHJlbW90ZUVudHJpZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRMb2NhbEl0ZW1FbnRyaWVzKFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1DYWNoZS5nZXRMb2NhbEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXG5cdFx0XHRcdFx0Y29sdW1uU2V0LFxuXHRcdFx0XHRcdGl0ZW1DYWNoZVxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0bG9jYWxFbnRyaWVzID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGluaXRpYWw6IHJlbW90ZUVudHJpZXMsXG5cdFx0XHRcdFx0XHRcdFx0bW9kaWZpZWQ6IHJlbW90ZUVudHJpZXMuY29uY2F0KGxvY2FsRW50cmllcyksXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uczogY29sdW1uU2V0XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRpc0xvY2FsIChvcHRpb25zKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZExvY2FsSXRlbUVudHJpZXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+PiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZXhwYW5kTG9jYWxFbnRyaWVzKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtRW50cmllcyxcblx0XHRcdGNvbHVtblNldC5yZXF1ZXN0LFxuXHRcdFx0Y29sdW1uU2V0LnJlc3BvbnNlLFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGVcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBpZGVudGl0eSwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uLyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMvJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25NYXRjaGVyTWF0Y2hlczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gPSB7XG5cdFtpdGVtSWQ6IG51bWJlcl06IHtcblx0XHRpdGVtOiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRpc01hdGNoOiBib29sZWFuIHwgJ21heWJlJ1xuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBHcm91cGVkQ29sbGVjdGlvbk1hdGNoZXJSZXN1bHQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ID0ge1xuXHRmaXR0aW5nOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdG5vdEZpdHRpbmc6IEl0ZW1JZFtdLFxuXHRtYXliZTogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+XG59O1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbk1hdGNoZXI8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IHtcblx0bWFwOiB7XG5cdFx0W2NvbGxlY3Rpb25FbnRyeUlkOiBudW1iZXJdOiB7XG5cdFx0XHRjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPlxuXHRcdFx0bWF0Y2hlczogQ29sbGVjdGlvbk1hdGNoZXJNYXRjaGVzPEl0ZW1UeXBlVHlwZT5cblx0XHR9XG5cdH0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlczogQ29sbGVjdGlvbkNhY2hlW10sXG5cdFx0cHJpdmF0ZSB1cGRhdGVJbml0aWFsOiBib29sZWFuLFxuXHRcdHByaXZhdGUgY2FsbE9uQWRkOiBib29sZWFuLFxuXHRcdHByaXZhdGUgY2FsbE9uQWN0aXZhdGU6IGJvb2xlYW5cblx0KSB7XG5cblx0fVxuXG5cdGV4cGFuZCAoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPik6IHRoaXMge1xuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXG5cdFx0XHRpdGVtRW50cnkucGFyZW50XG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLl9leHBhbmQoXG5cdFx0XHRpdGVtRW50cnksXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPT4gcXVlcnlNYXRjaGVyLm1hdGNoUXVlcnkoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdClcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZXhwYW5kIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG1hdGNoRnVuY3Rpb246IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+KSA9PiBib29sZWFuIHwgJ21heWJlJ1xuXHQpOiB0aGlzIHtcblx0XHRjb25zdCBtYXAgPSB0aGlzLm1hcDtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uQ2FjaGUgb2YgdGhpcy5jb2xsZWN0aW9uQ2FjaGVzKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cmllcyA9IGNvbGxlY3Rpb25DYWNoZS5nZXRCeUl0ZW1UeXBlKGl0ZW1FbnRyeS5pdGVtVHlwZSk7XG5cblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeUlkID0gY29sbGVjdGlvbkVudHJ5LmlkO1xuXHRcdFx0XHRsZXQgbWF0Y2hlcztcblxuXHRcdFx0XHRpZiAobWFwW2NvbGxlY3Rpb25FbnRyeUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdG1hcFtjb2xsZWN0aW9uRW50cnlJZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbkVudHJ5LCBtYXRjaGVzOiB7fX07XG5cblx0XHRcdFx0bWF0Y2hlcyA9IG1hcFtjb2xsZWN0aW9uRW50cnlJZF0ubWF0Y2hlcztcblxuXHRcdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0bWF0Y2hlc1tpdGVtSWRdID0ge2l0ZW06IGl0ZW1FbnRyeSwgaXNNYXRjaDogbWF0Y2hGdW5jdGlvbihjb2xsZWN0aW9uRW50cnkpfTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcyAoKTogQXJyYXk8Q29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblxuXHRcdFx0aWYgKHRoaXMuaGFzRml0dGluZ0l0ZW1zKG1hcEVudHJ5Lm1hdGNoZXMpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChtYXBFbnRyeS5jb2xsZWN0aW9uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YWRkVG9Db2xsZWN0aW9uczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChyZXN1bHRSZXNvdXJjZTogVSk6IFVbJ2l0ZW1zJ107XG5cdGFkZFRvQ29sbGVjdGlvbnMgKHJlc3VsdFJlc291cmNlPzogbnVsbCk6IG51bGw7XG5cdGFkZFRvQ29sbGVjdGlvbnM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAocmVzdWx0UmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPiB8IG51bGwpOiBVWydpdGVtcyddIHwgbnVsbDtcblx0YWRkVG9Db2xsZWN0aW9uczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4gfCBudWxsID0gbnVsbCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRsZXQgcmVzdWx0OiBVWydpdGVtcyddIHwgdW5kZWZpbmVkO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XG5cdFx0XHRjb25zdCBmaXR0aW5nSXRlbUVudHJpZXMgPSBncm91cGVkSXRlbUVudHJpZXMuZml0dGluZztcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSkge1xuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0XHRcdHRoaXMudXBkYXRlSW5pdGlhbCxcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZCxcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFjdGl2YXRlXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVJbml0aWFsLFxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkLFxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWN0aXZhdGVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudXBkYXRlSW5pdGlhbCAmJiBncm91cGVkSXRlbUVudHJpZXMubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCA/IFtdIDogbnVsbDtcblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9uczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChyZXN1bHRSZXNvdXJjZTogVSk6IFVbJ2l0ZW1zJ107XG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAocmVzdWx0UmVzb3VyY2U/OiBudWxsKTogbnVsbDtcblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKHJlc3VsdFJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4gfCBudWxsKTogVVsnaXRlbXMnXSB8IG51bGw7XG5cdHJlbW92ZUZyb21Db2xsZWN0aW9uczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4gfCBudWxsID0gbnVsbCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRsZXQgcmVzdWx0OiBBcnJheTxJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gfCBudWxsID0gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xuXHRcdFx0Y29uc3QgZml0dGluZ0l0ZW1JZHMgPSB0aGlzLmdyb3VwSXRlbUlkcyhtYXBFbnRyeS5tYXRjaGVzKS5maXR0aW5nO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgPT09IG51bGwgfHwgY29sbGVjdGlvbkVudHJ5ICE9PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCByZXN1bHRSZXNvdXJjZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhncm91cGVkSXRlbUVudHJpZXMubm90Rml0dGluZywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0Ly8gZG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIGluaXRpYWxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhncm91cGVkSXRlbUVudHJpZXMuZml0dGluZywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0aWYgKHRoaXMudXBkYXRlSW5pdGlhbCAmJiBncm91cGVkSXRlbUVudHJpZXMubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBncm91cEl0ZW1FbnRyaWVzIChcblx0XHRtYXRjaGVzOiBDb2xsZWN0aW9uTWF0Y2hlck1hdGNoZXM8SXRlbVR5cGVUeXBlPlxuXHQpOiBHcm91cGVkQ29sbGVjdGlvbk1hdGNoZXJSZXN1bHQ8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgZml0dGluZzogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cdFx0Y29uc3Qgbm90Rml0dGluZzogSXRlbUlkW10gPSBbXTtcblx0XHRjb25zdCBtYXliZTogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IG1hdGNoLml0ZW07XG5cdFx0XHRjb25zdCBpc01hdGNoID0gbWF0Y2guaXNNYXRjaDtcblxuXHRcdFx0aWYgKGlzTWF0Y2ggPT09IHRydWUpXG5cdFx0XHRcdGZpdHRpbmcucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0ZWxzZSBpZiAoaXNNYXRjaCA9PT0gZmFsc2UpXG5cdFx0XHRcdG5vdEZpdHRpbmcucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0bWF5YmUucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7Zml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZywgbWF5YmU6IG1heWJlfTtcblx0fVxuXG5cdHByaXZhdGUgZ3JvdXBJdGVtSWRzIChtYXRjaGVzOiBDb2xsZWN0aW9uTWF0Y2hlck1hdGNoZXM8SXRlbVR5cGVUeXBlPikge1xuXHRcdC8vIGFsc28gaW5jbHVkZXMgJ21heWJlJztcblx0XHRjb25zdCBmaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xuXHRcdGNvbnN0IG5vdEZpdHRpbmc6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcblxuXHRcdFx0KG1hdGNoLmlzTWF0Y2ggPT09IGZhbHNlID8gbm90Rml0dGluZyA6IGZpdHRpbmcpLnB1c2gobWF0Y2guaXRlbS5pdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7Zml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZ307XG5cdH1cblxuXHRwcml2YXRlIGhhc0ZpdHRpbmdJdGVtcyAobWF0Y2hlczogQ29sbGVjdGlvbk1hdGNoZXJNYXRjaGVzPEl0ZW1UeXBlVHlwZT4pIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XG5cdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdLmlzTWF0Y2ggPT09IHRydWUpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucywgQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlIHtcblxuXHRwcm9jZXNzT3B0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPlxuXHQpOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKTtcblx0fVxuXG5cdGdldElkQXJyYXkgKGl0ZW1SZXNvdXJjZXM6IEFycmF5PEl0ZW1SZXNvdXJjZTxhbnk+Pik6IEl0ZW1JZFtdIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW4sIEFwaVJlcXVlc3RDb2x1bW5zLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW4sIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uQ2FjaGUge1xuXHRjYWNoZTogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblx0YWxsQ29sdW1uczoge1tpdGVtVHlwZTogc3RyaW5nXTogYm9vbGVhbn0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0c2V0Q29sdW1uIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uOiBSZXNwb25zZUNvbHVtbik6IFJlc3BvbnNlQ29sdW1uIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0XHRpZiAoY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRjYWNoZVtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGNvbnN0IGVudHJ5ID0gY2FjaGVbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IGNvbHVtbklkID0gcmVzcG9uc2VDb2x1bW4uaWQ7XG5cblx0XHRpZiAoZW50cnlbY29sdW1uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRlbnRyeVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdHJldHVybiBlbnRyeVtjb2x1bW5JZF07XG5cdH1cblxuXHRzZXRDb2x1bW5zIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogUmVzcG9uc2VDb2x1bW5NYXAge1xuXHRcdGNvbnN0IHJlc3VsdDogUmVzcG9uc2VDb2x1bW5NYXAgID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHJlc3BvbnNlVHlwZSBpbiByZXNwb25zZUNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbnMgPSByZXNwb25zZUNvbHVtbnNbcmVzcG9uc2VUeXBlXTtcblxuXHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxuXHRcdFx0XHRyZXN1bHRbcmVzcG9uc2VUeXBlXVtjb2x1bW5JZF0gPSB0aGlzLnNldENvbHVtbihyZXNwb25zZVR5cGUsIGNvbHVtbnNbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpXG5cdFx0XHR0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID0gdHJ1ZTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZXRyaWV2ZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uc1xuXHQpOiB7Y2FjaGVkOiBSZXNwb25zZUNvbHVtbk1hcCwgbWlzc2luZzogQXBpUmVxdWVzdENvbHVtbnN9IHtcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcblx0XHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHRoaXMuZ2V0Q29sdW1ucyhpdGVtVHlwZSksIG1pc3Npbmc6IFtdfTtcblxuXHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHt9LCBtaXNzaW5nOiB0cnVlfTtcblx0XHR9XG5cblx0XHRjb25zdCByZXNwb25zZUFjY3VtdWxhdG9yID0ge307XG5cdFx0Y29uc3QgcmVxdWVzdEFjY3VtdWxhdG9yOiBSZXNwb25zZUNvbHVtbltdID0gW107XG5cblx0XHR0aGlzLnJldHJpZXZlQ29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cblx0XHRyZXR1cm4ge2NhY2hlZDogcmVzcG9uc2VBY2N1bXVsYXRvciwgbWlzc2luZzogcmVxdWVzdEFjY3VtdWxhdG9yfTtcblx0fVxuXG5cdGNvbnRhaW5zQWxsIChpdGVtVHlwZTogSXRlbVR5cGUpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9PT0gdHJ1ZTtcblx0fVxuXG5cdGdldENvbHVtbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IFJlc3BvbnNlQ29sdW1uTWFwIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0XHRyZXR1cm4ge1tpdGVtVHlwZV06IGNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkID8gW10gOiBjYWNoZVtpdGVtVHlwZV19O1xuXHR9XG5cblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbnMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdLFxuXHRcdHJlcXVlc3RBY2N1bXVsYXRvcjogQXBpUmVxdWVzdENvbHVtbltdLFxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IHZvaWQge1xuXHRcdC8vIGFsd2F5cyByZXRyaWV2ZSB0aGUgaWQgY29sdW1uXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgJ2lkJywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucylcblx0XHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW4sIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cdH1cblxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1uIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbixcblx0XHRyZXF1ZXN0QWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uW10sXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcjogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5VdGlsLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uKGl0ZW1UeXBlLCBjb2x1bW4uaWQpO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKHJlcXVlc3RDb2x1bW4pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdW2NvbHVtbi5pZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y29uc3QgbWlzc2luZ0Rlcml2ZWQ6IFJlc3BvbnNlQ29sdW1uW10gPSBbXTtcblxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW5zKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjb2x1bW4uY2hpbGRyZW4sIG1pc3NpbmdEZXJpdmVkLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblxuXHRcdGlmIChtaXNzaW5nRGVyaXZlZC5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHRyZXF1ZXN0QWNjdW11bGF0b3IucHVzaCh7W2NvbHVtbi5pZF06IG1pc3NpbmdEZXJpdmVkfSk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbHVtbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5JZDogc3RyaW5nKTogUmVzcG9uc2VDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZVtpdGVtVHlwZV07XG5cblx0XHRpZiAoY2FjaGUgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdHJldHVybiBjYWNoZVtjb2x1bW5JZF07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkluZm8sIENvbHVtblNldCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbiwgQXBpUmVxdWVzdENvbHVtbnMsIENvbHVtbkV4cGFuc2lvblJlc3VsdCwgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uTWFwLCBSb290Q29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5IH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkV4cGFuc2lvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4ge1xuXHRleHBhbnNpb25NYXA6IHtbY29sdW1uU2V0SWQ6IHN0cmluZ106IENvbHVtbkV4cGFuc2lvblJlc3VsdDxJdGVtVHlwZVR5cGU+IHwgbnVsbH0gPSB7fTtcblx0ZXhwYW5zaW9uTWFwU2l6ZTogbnVtYmVyID0gMDtcblx0cmVxdWVzdENvbHVtbnNUcnVlOiBib29sZWFuO1xuXHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0cHVibGljIHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KSB7XG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKSB7XG5cdFx0XHQvLyByZXF1ZXN0Q29sdW1ucyBzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5LCB3aGVuIGl0IGlzIHRydWUgZGVyaXZlZCBjb2x1bW4gaW5mb3JtYXRpb24gd2lsbCBiZSBsb3N0XG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRydWU7XG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSlcblx0XHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucy5wdXNoKGNvbHVtbklkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSBmYWxzZTtcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMgPSByZXF1ZXN0Q29sdW1ucztcblx0XHR9XG5cdH1cblxuXHRydW4gKGNvbHVtblNldDogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4pOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQ8SXRlbVR5cGVUeXBlPiB8IG51bGwge1xuXHRcdGNvbnN0IGV4cGFuc2lvbk1hcCA9IHRoaXMuZXhwYW5zaW9uTWFwO1xuXHRcdGNvbnN0IGNvbHVtblNldElkID0gY29sdW1uU2V0LmlkO1xuXG5cdFx0aWYgKGV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBleHBhbnNpb25NYXBbY29sdW1uU2V0SWRdO1xuXG5cdFx0dGhpcy5leHBhbnNpb25NYXBTaXplKys7XG5cblx0XHRyZXR1cm4gZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSA9IGNvbHVtblNldC5pc1N1cGVyc2V0T2YodGhpcy5yZXF1ZXN0Q29sdW1ucykgP1xuXHRcdFx0bnVsbCA6XG5cdFx0XHRjb2x1bW5TZXQuZXhwYW5kKHRoaXMucmVxdWVzdENvbHVtbnMsIHRoaXMucmVxdWVzdENvbHVtbnNUcnVlLCB0aGlzLnJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cblxuXHRhZ2dyZWdhdGVSb290Q29sdW1ucyAoKTogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0Y29uc3QgZXhwYW5zaW9uTWFwID0gdGhpcy5leHBhbnNpb25NYXA7XG5cblx0XHRpZiAodGhpcy5leHBhbnNpb25NYXBTaXplID09PSAxKSB7XG5cdFx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBleHBhbnNpb25NYXBbZ2V0Rmlyc3RQcm9wZXJ0eShleHBhbnNpb25NYXApIGFzIHN0cmluZ107XG5cblx0XHRcdHJldHVybiBleHBhbnNpb25SZXN1bHQgIT09IG51bGwgPyBleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290IDogW107XG5cdFx0fVxuXG5cdFx0Y29uc3Qgcm9vdENvbHVtbk1hcDogUm9vdENvbHVtbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5TZXRJZCBpbiBleHBhbnNpb25NYXApIHtcblx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IGV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF07XG5cblx0XHRcdGlmIChjb2x1bW5FeHBhbnNpb24gPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmV4cGFuZFJvb3RDb2x1bW5NYXAoY29sdW1uRXhwYW5zaW9uLmRpZmZlcmVuY2Uucm9vdCwgcm9vdENvbHVtbk1hcCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkuY29uc3RydWN0RnJvbVJvb3RNYXAocm9vdENvbHVtbk1hcCk7XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZFJvb3RDb2x1bW5NYXAgKGNvbHVtbnM6IEFycmF5PENvbHVtbkluZm88SXRlbVR5cGVUeXBlPj4sIGRlc3RpbmF0aW9uOiBSb290Q29sdW1uTWFwKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdGlmIChkZXN0aW5hdGlvbltjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSWRdID0ge2FwaUNvbHVtbjogY29sdW1uLmFwaUNvbHVtbiwgY2hpbGRyZW46IHt9fTtcblxuXHRcdFx0dGhpcy5leHBhbmRSb290Q29sdW1uTWFwKGNvbHVtbi5jaGlsZHJlbiwgZGVzdGluYXRpb25bY29sdW1uSWRdLmNoaWxkcmVuKTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkNhY2hlLCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbnMsXG5cdEl0ZW1UeXBlLFxuXHRQcm9taXNlSW50ZXJmYWNlLFxuXHRSZXNwb25zZUNvbHVtbixcblx0UmVzcG9uc2VDb2x1bW5NYXBcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSGFuZGxlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY2FjaGU6IENvbHVtbkNhY2hlLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdHNldENvbHVtbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBSZXNwb25zZUNvbHVtbiB7XG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1uKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbik7XG5cdH1cblxuXHRzZXRDb2x1bW5zIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogUmVzcG9uc2VDb2x1bW5NYXAge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHR9XG5cblx0ZmV0Y2hJdGVtVHlwZVRyYW5zbGF0aW9ucyAoaXRlbVR5cGVzOiBJdGVtVHlwZVtdKTogUHJvbWlzZUludGVyZmFjZTx7W2l0ZW1UeXBlOiBzdHJpbmddOiBzdHJpbmd9PiB7XG5cdFx0Y29uc3QgcHJvbWlzZXM6IHtbaXRlbVR5cGU6IHN0cmluZ106IFByb21pc2VJbnRlcmZhY2U8UmVzcG9uc2VDb2x1bW5NYXA+fSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBvZiBpdGVtVHlwZXMpXG5cdFx0XHRwcm9taXNlc1tpdGVtVHlwZV0gPSB0aGlzLmZldGNoKGl0ZW1UeXBlLCBbJ2lkJ10pO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQ6IHtbaXRlbVR5cGU6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gcmVzcG9uc2UpXG5cdFx0XHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gcmVzcG9uc2VbaXRlbVR5cGVdW2l0ZW1UeXBlXS5pZC5uYW1lO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHBhcmFtcyA9IHtmaWx0ZXI6IGZhbHNlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFJlc3BvbnNlQ29sdW1uTWFwPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwge1tpdGVtVHlwZV06IGNvbHVtbnN9LCBwYXJhbXMpLnRoZW4oXG5cdFx0XHRjb2x1bW5SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0Y29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsIHBhcmFtcz86IGFueSk6IFByb21pc2VJbnRlcmZhY2U8UmVzcG9uc2VDb2x1bW5NYXA+IHtcblx0XHRjb25zdCBjb2x1bW5SZXNvdXJjZSA9IHRoaXMuY2FjaGUucmV0cmlldmUoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKTtcblxuXHRcdGlmIChjb2x1bW5SZXNvdXJjZS5taXNzaW5nICE9PSB0cnVlICYmIGNvbHVtblJlc291cmNlLm1pc3NpbmcubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjb2x1bW5SZXNvdXJjZS5jYWNoZWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdChpdGVtVHlwZSwgY29sdW1uUmVzb3VyY2UubWlzc2luZywgcGFyYW1zKS50aGVuKFxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuY2FjaGVkXG5cdFx0XHRcdCkubWVyZ2VkO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaEFsbCAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogUHJvbWlzZUludGVyZmFjZTxSZXNwb25zZUNvbHVtbk1hcD4ge1xuXHRcdGlmICh0aGlzLmNhY2hlLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5jYWNoZS5nZXRDb2x1bW5zKGl0ZW1UeXBlKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KGl0ZW1UeXBlLCB0cnVlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ09MVU1OX1NFUEVSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlID0gYW55PiB7XG5cdGlkOiBzdHJpbmc7XG5cdGxldmVsOiBudW1iZXI7XG5cdHBhdGg6IHN0cmluZztcblx0dGFpbFBhdGg6IHN0cmluZztcblx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSB8IG51bGwgPSBudWxsO1xuXHRjaGlsZHJlbjogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXHRpc0xlYWY6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRyZWFkb25seSBhcGlDb2x1bW46IFJlc3BvbnNlQ29sdW1uLFxuXHRcdHJlYWRvbmx5IHBhcmVudDogQ29sdW1uSW5mbzxJdGVtVHlwZT4gfCBudWxsID0gbnVsbFxuXHQpIHtcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcblxuXHRcdHRoaXMuaWQgPSBjb2x1bW5JZDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpIHtcblx0XHRcdHRoaXMubGV2ZWwgPSAwO1xuXHRcdFx0dGhpcy5wYXRoID0gY29sdW1uSWQ7XG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gJyc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubGV2ZWwgPSBwYXJlbnQubGV2ZWwgKyAxO1xuXHRcdFx0dGhpcy5wYXRoID0gcGFyZW50LnBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gcGFyZW50LmxldmVsID09PSAwID9cblx0XHRcdFx0Y29sdW1uSWQgOlxuXHRcdFx0XHRwYXJlbnQudGFpbFBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XG5cdFx0fVxuXHR9XG5cblx0c2V0Q2hpbGRyZW4gKGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsIGNoaWxkcmVuOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+KTogdGhpcyB7XG5cdFx0dGhpcy5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuXHRcdHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcblx0XHR0aGlzLmlzTGVhZiA9IGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkhhbmRsZXIsIENvbHVtbkluZm8sIENvbHVtblV0aWwsIFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnksIENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbiwgQXBpUmVxdWVzdENvbHVtbnMsIENvbHVtbkV4cGFuc2lvblJlc3VsdCwgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uTWFwLCBSb290Q29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBlbXB0eU9iamVjdCA9IHt9O1xubGV0IGN1cnJlbnRJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUgPSBhbnk+IHtcblx0aWQgPSArK2N1cnJlbnRJZDtcblxuXHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW47XG5cdHJlc3BvbnNlOiBSZXNwb25zZUNvbHVtbk1hcCA9IGVtcHR5T2JqZWN0O1xuXG5cdGxpbms6IENvbHVtbkluZm88SXRlbVR5cGVUeXBlPiB8IG51bGwgPSBudWxsO1xuXHRtYWluOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cdGRlcml2ZWQ6IEFycmF5PENvbHVtbkluZm88SXRlbVR5cGVUeXBlPj4gPSBbXTtcblx0cm9vdDogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXHRsZWFmOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cdGZvcm1hdHRlZDoge21haW46IEFycmF5PENvbHVtbkluZm88SXRlbVR5cGVUeXBlPj4sIGRlcml2ZWQ6IEFycmF5PENvbHVtbkluZm88SXRlbVR5cGVUeXBlPj59ID0ge21haW46IFtdLCBkZXJpdmVkOiBbXX07XG5cdGZpbHRlcmVkOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cdGN1c3RvbTogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXHRzZWFyY2hhYmxlOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cdGl0ZW06IEFycmF5PENvbHVtbkluZm88SXRlbVR5cGVUeXBlPj4gPSBbXTtcblx0bm90SXRlbTogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRwdWJsaWMgcmVxdWVzdDogQXBpUmVxdWVzdENvbHVtbnNcblx0KSB7XG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0aGlzLnJlcXVlc3QgPT09IHRydWU7XG5cdH1cblxuXHR0b0pTT04gKCkge1xuXHRcdGNvbnN0IHBhcnNlQ29sdW1ucyA9IChjb2x1bW5zOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+KSA9PiBjb2x1bW5zLm1hcChjID0+IGMuaWQpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG1haW46IHBhcnNlQ29sdW1ucyh0aGlzLm1haW4pLFxuXHRcdFx0ZGVyaXZlZDogcGFyc2VDb2x1bW5zKHRoaXMuZGVyaXZlZClcblx0XHR9O1xuXHR9XG5cblx0cmVzb2x2ZSAocmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCwgZW5hYmxlQ2FjaGluZyA9IHRydWUsIGluY2x1ZGVJZENvbHVtbiA9IHRydWUpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUpXG5cdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZUNvbHVtbnMocmVzcG9uc2VDb2x1bW5zLCBlbmFibGVDYWNoaW5nKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLnByb2Nlc3NSZXF1ZXN0Q29sdW1ucyhyZXNwb25zZUNvbHVtbnMsIGVuYWJsZUNhY2hpbmcsIGluY2x1ZGVJZENvbHVtbik7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGV4cGFuZFJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IHZvaWQge1xuXHRcdGNvbnN0IG1lcmdlZFJlcXVlc3RDb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5yZXF1ZXN0LCBjb2x1bW5zKS5tZXJnZWQ7XG5cblx0XHR0aGlzLnJlcXVlc3QgPSBtZXJnZWRSZXF1ZXN0Q29sdW1ucztcblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IG1lcmdlZFJlcXVlc3RDb2x1bW5zID09PSB0cnVlO1xuXHR9XG5cblx0aXNTdXBlcnNldE9mIChjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IGJvb2xlYW4ge1xuXHRcdGlmIChjb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0cmV0dXJuIHRoaXMucmVxdWVzdENvbHVtbnNUcnVlO1xuXG5cdFx0Y29uc3QgY29sdW1uVXRpbCA9IHRoaXMuY29sdW1uVXRpbDtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMucmVxdWVzdDtcblxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSlcblx0XHRcdHJldHVybiAhY29sdW1uVXRpbC5jb250YWluc0Rlcml2ZWRDb2x1bW5zKGNvbHVtbnMpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0aWYgKCFjb2x1bW5VdGlsLmNvbnRhaW5zQ29sdW1uKGNvbHVtbiwgcmVxdWVzdENvbHVtbnMpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCByZXF1ZXN0Q29sdW1ucyBlcXVhbHMgJ3RydWUnXG5cdHByaXZhdGUgcHJvY2Vzc1Jlc3BvbnNlQ29sdW1ucyAocmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCwgZW5hYmxlQ2FjaGluZzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcblxuXHRcdHRoaXMucmVxdWVzdCA9IFtdO1xuXHRcdHRoaXMucmVzcG9uc2UgPSBlbmFibGVDYWNoaW5nID9cblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5zZXRDb2x1bW5zKHRoaXMuaXRlbVR5cGUsIHRydWUsIHJlc3BvbnNlQ29sdW1ucykgOlxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdKSB7XG5cdFx0XHR0aGlzLmdyb3VwQ29sdW1uSW5mbyh0aGlzLmNvbHVtbkluZm9GYWN0b3J5LmNvbnN0cnVjdChyZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXSwgbnVsbCkpO1xuXHRcdFx0dGhpcy5yZXF1ZXN0LnB1c2goY29sdW1uSWQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHJlcXVlc3Rjb2x1bW5zIGRvZXMgKm5vdCogZXF1YWwgJ3RydWUnXG5cdHByaXZhdGUgcHJvY2Vzc1JlcXVlc3RDb2x1bW5zIChcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLFxuXHRcdGVuYWJsZUNhY2hpbmc6IGJvb2xlYW4sXG5cdFx0aW5jbHVkZUlkQ29sdW1uOiBib29sZWFuXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcblx0XHRjb25zdCByb290Q29sdW1uTWFwOiBSb290Q29sdW1uTWFwID0ge307XG5cblx0XHR0aGlzLmNyZWF0ZVJvb3RDb2x1bW5NYXAoXG5cdFx0XHR0aGlzLnJlcXVlc3QgYXMgQXBpUmVxdWVzdENvbHVtbltdLCAvLyB3ZSBjYW4gYXNzdW1lIHJlcXVlc3RDb2x1bW5zIGlzIGFuIGFycmF5IGhlcmVcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0cm9vdENvbHVtbk1hcCxcblx0XHRcdGVuYWJsZUNhY2hpbmdcblx0XHQpO1xuXG5cdFx0aWYgKGluY2x1ZGVJZENvbHVtbilcblx0XHRcdHRoaXMuY3JlYXRlUm9vdENvbHVtbk1hcChbJ2lkJ10sIGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbnMsIHJvb3RDb2x1bW5NYXAsIGVuYWJsZUNhY2hpbmcpO1xuXG5cdFx0dGhpcy5yZXNwb25zZSA9IHt9O1xuXG5cdFx0dGhpcy5wcm9jZXNzQ29sdW1uSW5mbyh0aGlzLmNvbHVtbkluZm9GYWN0b3J5LmNvbnN0cnVjdEZyb21Sb290TWFwKHJvb3RDb2x1bW5NYXApLCBpdGVtVHlwZSk7XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NDb2x1bW5JbmZvIChjb2x1bW5JbmZvT2JqZWN0czogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+PiwgaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcblxuXHRcdGlmIChyZXNwb25zZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3BvbnNlW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JbmZvIG9mIGNvbHVtbkluZm9PYmplY3RzKSB7XG5cdFx0XHRyZXNwb25zZVtpdGVtVHlwZV1bY29sdW1uSW5mby5pZF0gPSBjb2x1bW5JbmZvLmFwaUNvbHVtbjtcblx0XHRcdHRoaXMuZ3JvdXBDb2x1bW5JbmZvKGNvbHVtbkluZm8pO1xuXG5cdFx0XHRpZiAoIWNvbHVtbkluZm8uaXNMZWFmKVxuXHRcdFx0XHR0aGlzLnByb2Nlc3NDb2x1bW5JbmZvKGNvbHVtbkluZm8uY2hpbGRyZW4sIGNvbHVtbkluZm8uaXRlbVR5cGUhKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVJvb3RDb2x1bW5NYXAgKFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLFxuXHRcdHJvb3RDb2x1bW5NYXA6IFJvb3RDb2x1bW5NYXAsXG5cdFx0ZW5hYmxlQ2FjaGluZzogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpIHtcblx0XHRcdGNvbnN0IHtpZDogY29sdW1uSWQsIGNoaWxkcmVufSA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cblx0XHRcdGxldCByZXNwb25zZUNvbHVtbjtcblxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXTtcblxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdObyBhcGkgY29sdW1uIGZvciByZXF1ZXN0IGNvbHVtbicsIGNvbHVtbklkLCAnZm9yIGl0ZW1UeXBlJywgaXRlbVR5cGUpO1xuXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZW5hYmxlQ2FjaGluZylcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW4gPSB0aGlzLmNvbHVtbkhhbmRsZXIuc2V0Q29sdW1uKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbik7XG5cblx0XHRcdGlmIChyb290Q29sdW1uTWFwW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyb290Q29sdW1uTWFwW2NvbHVtbklkXSA9IHthcGlDb2x1bW46IHJlc3BvbnNlQ29sdW1uLCBjaGlsZHJlbjoge319O1xuXG5cdFx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5jcmVhdGVSb290Q29sdW1uTWFwKFxuXHRcdFx0XHRjaGlsZHJlbixcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsXG5cdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0cm9vdENvbHVtbk1hcFtjb2x1bW5JZF0uY2hpbGRyZW4sXG5cdFx0XHRcdGVuYWJsZUNhY2hpbmdcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBncm91cENvbHVtbkluZm8gKGNvbHVtbkluZm86IENvbHVtbkluZm88SXRlbVR5cGVUeXBlPik6IHZvaWQge1xuXHRcdGNvbnN0IGNvbHVtblV0aWwgPSB0aGlzLmNvbHVtblV0aWw7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSBjb2x1bW5JbmZvLmFwaUNvbHVtbjtcblx0XHRjb25zdCBpc0Rlcml2ZWQgPSBjb2x1bW5JbmZvLnBhcmVudCAhPT0gbnVsbDtcblxuXHRcdGlmIChpc0Rlcml2ZWQpXG5cdFx0XHR0aGlzLmRlcml2ZWQucHVzaChjb2x1bW5JbmZvKTtcblx0XHRlbHNlIHtcblx0XHRcdHRoaXMubWFpbi5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW4udHlwZSA9PT0gJ2xpbmsnKVxuXHRcdFx0XHR0aGlzLmxpbmsgPSBjb2x1bW5JbmZvO1xuXG5cdFx0XHQvLyB3ZSBjb3VsZCBwb3NzaWJseSBhZGQgZGVyaXZlZCBjb2x1bW5zIHRvICdub3RJdGVtJ1xuXHRcdFx0dGhpc1tjb2x1bW5VdGlsLmlzSXRlbUNvbHVtbihyZXNwb25zZUNvbHVtbikgPyAnaXRlbScgOiAnbm90SXRlbSddLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRcdGlmICghY29sdW1uSW5mby5pc0xlYWYpXG5cdFx0XHRcdHRoaXMucm9vdC5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRm9ybWF0dGVkQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuZm9ybWF0dGVkW2lzRGVyaXZlZCA/ICdkZXJpdmVkJyA6ICdtYWluJ10ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRmlsdGVyZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5maWx0ZXJlZC5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNTZWFyY2hhYmxlQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuc2VhcmNoYWJsZS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNDdXN0b21Db2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5jdXN0b20ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5JbmZvLmlzTGVhZilcblx0XHRcdHRoaXMubGVhZi5wdXNoKGNvbHVtbkluZm8pO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRNZXJnZWRDb2x1bW5TZXQgKFxuXHRcdG1lcmdlZFJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1uTWVyZ2VSZXN1bHQsXG5cdFx0bWVyZ2VkUmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCxcblx0XHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW5cblx0KTogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3Q8SXRlbVR5cGVUeXBlPihcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRtZXJnZWRSZXF1ZXN0Q29sdW1ucy5tZXJnZWQsXG5cdFx0XHRtZXJnZWRSZXNwb25zZUNvbHVtbnNcblx0XHQpO1xuXG5cdFx0cmVzdWx0LnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRoaXMucmVxdWVzdENvbHVtbnNUcnVlIHx8IHJlcXVlc3RDb2x1bW5zVHJ1ZTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBSZXF1ZXN0Q29sdW1uTWVyZ2VSZXN1bHQge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLnJlcXVlc3QsIHJlcXVlc3RDb2x1bW5zKTtcblx0fVxuXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5zIChyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwKTogUmVzcG9uc2VDb2x1bW5NYXAge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnModGhpcy5yZXNwb25zZSwgcmVzcG9uc2VDb2x1bW5zKS5tZXJnZWQ7XG5cdH1cblxuXHRtZXJnZSAoY29sdW1uU2V0OiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPik6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNZXJnZWRDb2x1bW5TZXQoXG5cdFx0XHR0aGlzLm1lcmdlUmVxdWVzdENvbHVtbnMoY29sdW1uU2V0LnJlcXVlc3QpLFxuXHRcdFx0dGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1ucyhjb2x1bW5TZXQucmVzcG9uc2UpLFxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRleHBhbmQgKFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW4sXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQ8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgbWVyZ2VkUmVxdWVzdENvbHVtbnMgPSB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbnMocmVxdWVzdENvbHVtbnMpO1xuXHRcdGNvbnN0IG1lcmdlZFJlc3BvbnNlQ29sdW1ucyA9IHRoaXMubWVyZ2VSZXNwb25zZUNvbHVtbnMocmVzcG9uc2VDb2x1bW5zKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRtZXJnZWQ6IHRoaXMuZ2V0TWVyZ2VkQ29sdW1uU2V0KG1lcmdlZFJlcXVlc3RDb2x1bW5zLCBtZXJnZWRSZXNwb25zZUNvbHVtbnMsIHJlcXVlc3RDb2x1bW5zVHJ1ZSksXG5cdFx0XHRkaWZmZXJlbmNlOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0PEl0ZW1UeXBlVHlwZT4oXG5cdFx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRcdG1lcmdlZFJlcXVlc3RDb2x1bW5zLmRpZmZlcmVuY2UsXG5cdFx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1ucywgLy8gd2UgbmVlZCB0byBiZSBhYmxlIHRvIGxvb2sgdXAgdGhlIHBhcmVudCBvZiBkZXJpdmVkIGNvbHVtbnNcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpXG5cdFx0fTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uU2V0IH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucywgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TdWJzZXRDYWNoZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4ge1xuXHRwcml2YXRlIGNhY2hlOiB7W2NvbHVtblNldElkOiBudW1iZXJdOiBib29sZWFufSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zXG5cdCkge1xuXG5cdH1cblxuXHRydW4gKGNvbHVtblNldDogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4pOiBib29sZWFuIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdFx0Y29uc3QgY29sdW1uU2V0SWQgPSBjb2x1bW5TZXQuaWQ7XG5cblx0XHRpZiAoY2FjaGVbY29sdW1uU2V0SWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gY2FjaGVbY29sdW1uU2V0SWRdO1xuXG5cdFx0cmV0dXJuIGNhY2hlW2NvbHVtblNldElkXSA9IGNvbHVtblNldC5pc1N1cGVyc2V0T2YodGhpcy5yZXF1ZXN0Q29sdW1ucyk7XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SLCBSRU5ERVJfQVNfU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW4sIEFwaVJlcXVlc3RDb2x1bW5zLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW4sIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBleHRlbmQsIGlzRGVmaW5lZCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdDxcblx0VCBleHRlbmRzIEFwaVJlcXVlc3RDb2x1bW5zID0gQXBpUmVxdWVzdENvbHVtbnMsXG5cdFUgZXh0ZW5kcyBBcGlSZXF1ZXN0Q29sdW1ucyA9IEFwaVJlcXVlc3RDb2x1bW5zXG4+ID0ge21lcmdlZDogVCwgZGlmZmVyZW5jZTogVX07XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5VdGlsIHtcblx0Y29uc3RydWN0b3IgKCkge1xuXHR9XG5cblx0Z2V0Q29sdW1uUGF0aCAoY29sdW1uczogUmVzcG9uc2VDb2x1bW5bXSwgcmVuZGVyQXM6IG51bGwgfCBzdHJpbmcpIHtcblx0XHRsZXQgc2VwYXJhdG9yID0gJyc7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0cmVzdWx0ICs9IHNlcGFyYXRvciArIGNvbHVtbi5pZDtcblx0XHRcdHNlcGFyYXRvciA9IENPTFVNTl9TRVBFUkFUT1I7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbmRlckFzICE9PSBudWxsKVxuXHRcdFx0cmVzdWx0ICs9IFJFTkRFUl9BU19TRVBFUkFUT1IgKyByZW5kZXJBcztcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXREYXRlRm9ybWF0T3B0aW9ucyAoY29sdW1uVHlwZT86ICdkYXRldGltZScpIHtcblx0XHRjb25zdCBub3cgPSBtb21lbnQoKTtcblxuXHRcdGNvbnN0IGZvcm1hdHMgPSB7XG5cdFx0XHQnSi1NLVknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZJyksXG5cdFx0XHQnSi1NJzogbm93LmZvcm1hdCgnREQtTU0nKSxcblx0XHRcdCdqK0YrWSc6IG5vdy5mb3JtYXQoJ0QgTU1NIFlZWVknKSxcblx0XHRcdCdEK2orRitZJzogbm93LmZvcm1hdCgnZGRkZCBEIE1NTSBZWVlZJyksXG5cdFx0XHQnRic6IG5vdy5mb3JtYXQoJ01NTScpLFxuXHRcdFx0J2YnOiBub3cuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHQnRCc6IG5vdy5mb3JtYXQoJ2RkZGQnKSxcblx0XHRcdCdkJzogbm93LmZvcm1hdCgnZGRkJylcblx0XHR9O1xuXG5cdFx0aWYgKGNvbHVtblR5cGUgPT09ICdkYXRldGltZScpXG5cdFx0XHRleHRlbmQoZm9ybWF0cywge1xuXHRcdFx0XHQnSi1NLVkrSDppJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWSBISDptbScpLFxuXHRcdFx0XHQnSi1NK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NIEhIOm1tJyksXG5cdFx0XHRcdCdqK0YrWStIOmknOiBub3cuZm9ybWF0KCdERCBNTU1NIFkgSEg6bW0nKSxcblx0XHRcdFx0J0QraitGK1krSDppJzogbm93LmZvcm1hdCgnZGRkZCBERCBNTU0gWSBISDptbScpLFxuXHRcdFx0XHQnSDppJzogbm93LmZvcm1hdCgnSEg6bW0nKVxuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm4gZm9ybWF0cztcblx0fVxuXG5cdGlzU3RyaW5nQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAncGhvbmUnOlxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0XHQvLyBjYXNlICdodG1sJzogLy8gVE9ETzogc29ydCBvbiBmaWx0ZXJlZCB2YWx1ZVxuXHRcdFx0XHQvLyBjYXNlICdlbnVtJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGbG9hdENvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXG5cdFx0XHRjYXNlICd2b2x1bWUnOlxuXHRcdFx0Y2FzZSAnd2VpZ2h0Jzpcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICdwb3dlcic6XG5cdFx0XHRjYXNlICdjdXJyZW50Jzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0ludENvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzTnVtYmVyQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaXNGbG9hdENvbHVtbihjb2x1bW4pIHx8IHRoaXMuaXNJbnRDb2x1bW4oY29sdW1uKTtcblx0fVxuXG5cdGlzQ3VzdG9tQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGNvbHVtbi5maWVsZHR5cGUgPT09ICdjdXN0b21maWVsZCc7XG5cdH1cblxuXHRpc0l0ZW1Db2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIGluY2x1ZGVJZCA9IHRydWUpOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdpZCc6XG5cdFx0XHRcdHJldHVybiBpbmNsdWRlSWQ7XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2NoaWxkJzpcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxuXHRcdFx0Y2FzZSAnbGluayc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRGF0ZUNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc1JlbmRlcmVkQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRmlsdGVyZWRDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHQvLyB1Z2x5IGhhY2sgOi0oXG5cdFx0aWYgKGNvbHVtbi5pZCA9PT0gJ3N0YWZmZWwnKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAoY29sdW1uLmdlbmVyYXRvciAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdib29sJzpcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0Y2FzZSAnY291bnRyeSc6XG5cdFx0XHRjYXNlICd2b2x1bWUnOlxuXHRcdFx0Y2FzZSAnd2VpZ2h0Jzpcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XG5cdFx0XHRjYXNlICdlbWFpbCc6XG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdGNhc2UgJ2h0bWwnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRm9ybWF0dGVkQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNTZWxlY3RhYmxlQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnYmxvYic6XG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcblx0XHRcdGNhc2UgJ2ZvcmNldXBkYXRlJzpcblx0XHRcdGNhc2UgJ2lkJzpcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0Y2FzZSAnb3JkZXInOlxuXHRcdFx0Y2FzZSAncGFyZW50aWQnOlxuXHRcdFx0Y2FzZSAncGFyZW50dHlwZSc6XG5cdFx0XHRjYXNlICdwYXNzd29yZCc6XG5cdFx0XHRjYXNlICd0b2tlbic6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGhhc0xvY2F0aW9uUHJvcGVydHkgKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIGxvY2F0aW9uOiBudW1iZXIpOiBib29sZWFuIHtcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuXHRcdHJldHVybiAobG9jYXRpb24gJiBjb2x1bW4ubG9jYXRpb24pICE9PSAwO1xuXHR9XG5cblx0aXNFZGl0YWJsZUNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdGlmIChjb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aXNTZWFyY2hhYmxlQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAncGhvbmUnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdodG1sJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Z2V0RGVmYXVsdFdlaWdodCAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IG51bWJlciB7XG5cdFx0Ly8gXHRcdFx0Y29uc29sZS5sb2coJ2dldERlZmF1bHRXZWlnaHQnLCBjb2x1bW4pO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZG91YmxlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0Y2FzZSAnaW50Jzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxuXHRcdFx0XHRyZXR1cm4gMC41O1xuXG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAnZW51bSc6XG5cdFx0XHRjYXNlICdlbWFpbCc6XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2l0ZW0nOlxuXHRcdFx0Y2FzZSAnbGluayc6XG5cdFx0XHRcdHJldHVybiAxLjU7XG5cblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2h0bWwnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0XHRyZXR1cm4gMjtcblxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdH1cblxuXHRnZXRDb21wYXJhdG9ycyAoY29sdW1uOiBSZXNwb25zZUNvbHVtbiAmIHt0eXBlOiAnZGltZW5zaW9uJyB8ICd3ZWlnaHQnIHwgJ3ByaWNlJ30pOiBbJz0nLCAnPicsICc8J107XG5cdGdldENvbXBhcmF0b3JzIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uICYge3R5cGU6ICdkYXRlJyB8ICdkYXRldGltZScgfCAndGltZScgfCAnZHVyYXRpb24nfSk6IFsnPicsICc8J107XG5cdGdldENvbXBhcmF0b3JzIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogWyc9JywgJyE9J107XG5cdGdldENvbXBhcmF0b3JzIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRcdHJldHVybiBbJz0nLCAnPicsICc8J107XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gWyc+JywgJzwnXTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBbJz0nLCAnIT0nXTtcblx0XHR9XG5cdH1cblxuXHRjb250YWluc0NvbHVtbiAocmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbiwgZGVzdGluYXRpb246IEFwaVJlcXVlc3RDb2x1bW5bXSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kUmVxdWVzdENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKHR5cGVvZiBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPT09ICdzdHJpbmcnKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGlmICghdGhpcy5jb250YWluc0NvbHVtbihjaGlsZENvbHVtbiwgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF0pKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjb250YWluc0Rlcml2ZWRDb2x1bW5zIChyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdKTogYm9vbGVhbiB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpIHtcblx0XHRcdGlmICh0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihjb2x1bW4pLmNoaWxkcmVuLmxlbmd0aCA+IDApXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10sXG5cdFx0cmVzcG9uc2VDb2x1bW5NYXA6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xuXHRcdFx0Y29uc3QgcGFyc2VkQ29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IHBhcnNlZENvbHVtbi5jaGlsZHJlbjtcblx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uTWFwW2l0ZW1UeXBlXTtcblx0XHRcdGxldCByZXNwb25zZUNvbHVtbjtcblxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW3BhcnNlZENvbHVtbi5pZF07XG5cblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdGlmIChcblx0XHRcdFx0Y2hpbGRyZW4ubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHQhdGhpcy5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNoaWxkcmVuLCByZXNwb25zZUNvbHVtbk1hcClcblx0XHRcdClcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29weVJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiB0cnVlKTogdHJ1ZTtcblx0Y29weVJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10pOiBBcGlSZXF1ZXN0Q29sdW1uW107XG5cdGNvcHlSZXF1ZXN0Q29sdW1ucyAoY29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBBcGlSZXF1ZXN0Q29sdW1ucyB7XG5cdFx0aWYgKGNvbHVtbnMgPT09IHRydWUpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdGNvbnN0IHJlc3VsdDogQXBpUmVxdWVzdENvbHVtbltdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5jb3B5UmVxdWVzdENvbHVtbihjb2x1bW4pKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjb3B5UmVxdWVzdENvbHVtbiAocmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbik6IEFwaVJlcXVlc3RDb2x1bW4ge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gY29sdW1uLmlkO1xuXG5cdFx0Y29uc3QgY2hpbGRyZW46IEFwaVJlcXVlc3RDb2x1bW5bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pXG5cdFx0XHRjaGlsZHJlbi5wdXNoKHRoaXMuY29weVJlcXVlc3RDb2x1bW4oY2hpbGRDb2x1bW4pKTtcblxuXHRcdHJldHVybiB7W2NvbHVtbi5pZF06IGNoaWxkcmVufTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaWZmZXJlbmNlOiBjb2x1bW5zIHRoYXQgYXJlIGluIHNlY29uZCwgYnV0IG5vdCBpbiBmaXJzdFxuXHQgKiBAcGFyYW0ge0FycmF5fSBmaXJzdFxuXHQgKiBAcGFyYW0ge0FycmF5fSBzZWNvbmRcblx0ICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgJ21lcmdlZCcgYW5kICdkaWZmZXJlbmNlJyBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChmaXJzdDogdHJ1ZSwgc2Vjb25kOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdDx0cnVlLCBbXT47XG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0OiBBcGlSZXF1ZXN0Q29sdW1uW10sIHNlY29uZDogdHJ1ZSk6IFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdDx0cnVlLCB0cnVlPjtcblx0bWVyZ2VSZXF1ZXN0Q29sdW1ucyAoZmlyc3Q6IEFwaVJlcXVlc3RDb2x1bW5bXSwgc2Vjb25kOiBBcGlSZXF1ZXN0Q29sdW1uW10pOlxuXHRcdFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdDxBcGlSZXF1ZXN0Q29sdW1uW10sIEFwaVJlcXVlc3RDb2x1bW5bXT47XG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0OiBBcGlSZXF1ZXN0Q29sdW1ucywgc2Vjb25kOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdDtcblx0bWVyZ2VSZXF1ZXN0Q29sdW1ucyAoZmlyc3Q6IEFwaVJlcXVlc3RDb2x1bW5zLCBzZWNvbmQ6IEFwaVJlcXVlc3RDb2x1bW5zKTogUmVxdWVzdENvbHVtbk1lcmdlUmVzdWx0IHtcblx0XHRpZiAoZmlyc3QgPT09IHRydWUpIC8vID09PSBvcGVyYXRvciBuZWVkZWQgaGVyZVxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IFtdfTtcblxuXHRcdGlmIChzZWNvbmQgPT09IHRydWUpXG5cdFx0XHRyZXR1cm4ge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogdHJ1ZX07XG5cblx0XHRjb25zdCBtZXJnZWQgPSB0aGlzLmNvcHlSZXF1ZXN0Q29sdW1ucyhmaXJzdCk7XG5cdFx0Y29uc3QgZGlmZmVyZW5jZTogQXBpUmVxdWVzdENvbHVtbltdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBzZWNvbmQpIHtcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oY29sdW1uLCBtZXJnZWQpO1xuXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXG5cdFx0XHRcdGRpZmZlcmVuY2UucHVzaChhZGRlZENvbHVtbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHRtZXJnZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uOiBBcGlSZXF1ZXN0Q29sdW1uW10pIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZFJlcXVlc3RDb2x1bW4oY29sdW1uLmlkLCBkZXN0aW5hdGlvbik7XG5cblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XG5cdFx0XHRkZXN0aW5hdGlvbi5wdXNoKHJlcXVlc3RDb2x1bW4pO1xuXHRcdFx0cmV0dXJuIHJlcXVlc3RDb2x1bW47XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJykge1xuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID0ge1xuXHRcdFx0XHRbY29sdW1uLmlkXTogW11cblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWRkZWRDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oXG5cdFx0XHRcdGNoaWxkQ29sdW1uLFxuXHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXG5cdFx0XHRcdGFkZGVkQ29sdW1ucy5wdXNoKGFkZGVkQ29sdW1uKTtcblx0XHR9XG5cblx0XHRpZiAoYWRkZWRDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIHtbY29sdW1uLmlkXTogYWRkZWRDb2x1bW5zfTtcblx0fVxuXG5cdGdldFJlcXVlc3RDb2x1bW5JZCAocmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbik6IHN0cmluZyB7XG5cdFx0aWYgKHR5cGVvZiByZXF1ZXN0Q29sdW1uID09PSAnc3RyaW5nJylcblx0XHRcdHJldHVybiByZXF1ZXN0Q29sdW1uO1xuXG5cdFx0bGV0IGNvbHVtbklkO1xuXG5cdFx0Zm9yIChjb2x1bW5JZCBpbiByZXF1ZXN0Q29sdW1uKSB7fVxuXG5cdFx0cmV0dXJuIGNvbHVtbklkIGFzIHN0cmluZztcblx0fVxuXG5cdHBhcnNlUmVxdWVzdENvbHVtbiAocmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbik6IHtpZDogc3RyaW5nLCBjaGlsZHJlbjogQXBpUmVxdWVzdENvbHVtbltdfSB7XG5cdFx0aWYgKHR5cGVvZiByZXF1ZXN0Q29sdW1uID09PSAnc3RyaW5nJylcblx0XHRcdHJldHVybiB7aWQ6IHJlcXVlc3RDb2x1bW4sIGNoaWxkcmVuOiBbXX07XG5cblx0XHRsZXQgY29sdW1uSWQ7XG5cblx0XHRmb3IgKGNvbHVtbklkIGluIHJlcXVlc3RDb2x1bW4pIHt9XG5cblx0XHRyZXR1cm4ge2lkOiBjb2x1bW5JZCBhcyBzdHJpbmcsIGNoaWxkcmVuOiByZXF1ZXN0Q29sdW1uW2NvbHVtbklkIGFzIHN0cmluZ119O1xuXHR9XG5cblx0LyoqXG5cdCAqIE1lcmdlcyB0d28gc2V0cyBvZiByZXNwb25zZSBjb2x1bW5zLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZmlyc3Rcblx0ICogQHBhcmFtIHtvYmplY3R9IHNlY29uZFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyBhICdtZXJnZWQnIGFuZCBhICdkaWZmZXJlbmNlJyBwcm9wZXJ0eS5cblx0ICovXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5zIChcblx0XHRmaXJzdDogUmVzcG9uc2VDb2x1bW5NYXAsXG5cdFx0c2Vjb25kOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiB7bWVyZ2VkOiBSZXNwb25zZUNvbHVtbk1hcCwgZGlmZmVyZW5jZTogUmVzcG9uc2VDb2x1bW5NYXB9IHtcblx0XHRjb25zdCBtZXJnZWQ6IFJlc3BvbnNlQ29sdW1uTWFwID0ge307XG5cdFx0Y29uc3QgZGlmZmVyZW5jZTogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZmlyc3QpIHtcblx0XHRcdGlmIChzZWNvbmRbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IGZpcnN0W2l0ZW1UeXBlXTtcblxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbWVyZ2VSZXN1bHQgPSB0aGlzLm1lcmdlUmVzcG9uc2VDb2x1bW5NYXAoXG5cdFx0XHRcdGZpcnN0W2l0ZW1UeXBlXSxcblx0XHRcdFx0c2Vjb25kW2l0ZW1UeXBlXVxuXHRcdFx0KTtcblxuXHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0Lm1lcmdlZDtcblx0XHRcdGRpZmZlcmVuY2VbaXRlbVR5cGVdID0gbWVyZ2VSZXN1bHQuZGlmZmVyZW5jZTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHNlY29uZCkge1xuXHRcdFx0aWYgKGZpcnN0W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xuXHRcdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IHNlY29uZFtpdGVtVHlwZV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHthcnJheX0gZmlyc3Rcblx0ICogQHBhcmFtIHthcnJheX0gc2Vjb25kXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IGRpZmZlcmVuY2U6IHRoZSBjb2x1bW5zIHRoYXQgYXJlIGluIHNlY29uZCwgYnV0IG5vdCBpbiBmaXJzdC5cblx0ICovXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5NYXAgKGZpcnN0OiBSZXNwb25zZUNvbHVtbk1hcCwgc2Vjb25kOiBSZXNwb25zZUNvbHVtbk1hcCk6IHttZXJnZWQ6IFJlc3BvbnNlQ29sdW1uTWFwLCBkaWZmZXJlbmNlOiBSZXNwb25zZUNvbHVtbk1hcH0ge1xuXHRcdGNvbnN0IG1lcmdlZDogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblx0XHRjb25zdCBkaWZmZXJlbmNlOiBSZXNwb25zZUNvbHVtbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBmaXJzdClcblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBmaXJzdFtjb2x1bW5JZF07XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHNlY29uZCkge1xuXHRcdFx0aWYgKGlzRGVmaW5lZChmaXJzdFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bWVyZ2VkW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XG5cdFx0XHRkaWZmZXJlbmNlW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHRpc0xvY2FsQ29sdW1uSWQgKGNvbHVtbklkOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gY29sdW1uSWQuc3Vic3RyaW5nKDAsIDIpID09PSAnX18nO1xuXHR9XG5cblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbnMgKGNvbmZpZ0NvbHVtbnM6IHN0cmluZ1tdKTogQXBpUmVxdWVzdENvbHVtbltdIHtcblx0XHRjb25zdCByZXF1ZXN0OiBBcGlSZXF1ZXN0Q29sdW1uW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbmZpZ0NvbHVtbnMpIHtcblx0XHRcdGlmICh0aGlzLmlzTG9jYWxDb2x1bW5JZChjb2x1bW4pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKHRoaXMucGFyc2VDb25maWdDb2x1bW4oY29sdW1uKSwgcmVxdWVzdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XG5cdH1cblxuXHRwYXJzZUNvbmZpZ0NvbHVtbiAoY29uZmlnQ29sdW1uOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIGNvbmZpZ0NvbHVtbi5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKVswXS5zcGxpdChDT0xVTU5fU0VQRVJBVE9SKTtcblx0fVxuXG5cdHByb2Nlc3NDb25maWdDb2x1bW4gKHBhcnNlZENvbmZpZ0NvbHVtbjogc3RyaW5nW10sIGRlc3RpbmF0aW9uOiBBcGlSZXF1ZXN0Q29sdW1uW10pIHtcblx0XHRjb25zdCBjb2x1bW5JZCA9IHBhcnNlZENvbmZpZ0NvbHVtblswXTtcblx0XHRjb25zdCBpc0xlYWYgPSBwYXJzZWRDb25maWdDb2x1bW4ubGVuZ3RoID09PSAxO1xuXHRcdGxldCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZFJlcXVlc3RDb2x1bW4oY29sdW1uSWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChpc0xlYWYpIHtcblx0XHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpXG5cdFx0XHRcdGRlc3RpbmF0aW9uLnB1c2goY29sdW1uSWQpO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSlcblx0XHRcdGNvbHVtbkluZGV4ID0gZGVzdGluYXRpb24ucHVzaCh7W2NvbHVtbklkXTogW119KSAtIDE7XG5cdFx0ZWxzZSBpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPSB7W2NvbHVtbklkXTogW119O1xuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbihwYXJzZWRDb25maWdDb2x1bW4uc2xpY2UoMSksIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW5JZF0pO1xuXHR9XG5cblx0ZmluZFJlcXVlc3RDb2x1bW4gKGNvbHVtbklkOiBzdHJpbmcsIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10pOiBudW1iZXIge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdENvbHVtbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IHJlcXVlc3RDb2x1bW5zW2ldO1xuXG5cdFx0XHRpZiAodGhpcy5nZXRSZXF1ZXN0Q29sdW1uSWQoY29sdW1uKSA9PT0gY29sdW1uSWQpXG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdH1cblxuXHRcdHJldHVybiAtMTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSGFuZGxlciwgQ3JlYXRlQ29tcGlsYXRpb24sIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQ3JlYXRlUmVxdWVzdEVudHJ5LCBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLCBJdGVtRW50cnlNYXAsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4ge1xuXHRyZXF1ZXN0czogQXJyYXk8Q3JlYXRlUmVxdWVzdEVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29tcGlsYXRpb246IENyZWF0ZUNvbXBpbGF0aW9uLFxuXHRcdHByaXZhdGUgbG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRwcml2YXRlIHBhcmFtZXRlck1hcDogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0XHRwcml2YXRlIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlXG5cdCkge1xuXHR9XG5cblx0ZmluYWxpemVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2U6IENyZWF0ZVJlcXVlc3RFbnRyeTxJdGVtVHlwZVR5cGU+KSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSByZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gcmVxdWVzdFJlc291cmNlLmNvbHVtbnM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcylcblx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoY29sbGVjdGlvbkVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcblxuXHRcdHJldHVybiByZXF1ZXN0UmVzb3VyY2U7XG5cdH1cblxuXHRzZXRSZXF1ZXN0UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcmVxdWVzdEVudHJ5OiBDcmVhdGVSZXF1ZXN0RW50cnk8SXRlbVR5cGVUeXBlPikge1xuXHRcdGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0RW50cnkucmVxdWVzdDtcblxuXHRcdGlmIChwYXJlbnRUeXBlID09PSAnVm9pZCcpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXF1ZXN0LnBhcmVudFR5cGUgPSBwYXJlbnRUeXBlO1xuXHRcdHJlcXVlc3QucGFyZW50SWQgPSB7fTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cnVuICgpIHtcblx0XHRjb25zdCBjb21waWxhdGlvbiA9IHRoaXMuY29tcGlsYXRpb247XG5cblx0XHRpZiAodGhpcy5icmVha3VwQnlQYXJlbnQpIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSBjb21waWxhdGlvbltwYXJlbnRUeXBlXTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xuXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpID8gK3BhcmVudElkIDogbnVsbCxcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzLnB1c2godGhpcy5maW5hbGl6ZVJlcXVlc3QocmVxdWVzdFJlc291cmNlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbXBpbGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudE1hcCA9IGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdO1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XG5cdFx0XHRcdGNvbnN0IGhhc1BhcmVudCA9IHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpO1xuXG5cdFx0XHRcdGxldCB2YWxpZFJlcXVlc3QgPSBmYWxzZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGhhc1BhcmVudCA/ICtwYXJlbnRJZCA6IG51bGwsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2Vcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dmFsaWRSZXF1ZXN0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2YWxpZFJlcXVlc3QpXG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0cy5wdXNoKHRoaXMuZmluYWxpemVSZXF1ZXN0KHJlcXVlc3RSZXNvdXJjZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RzO1xuXHR9XG5cblx0aW5pdGlhbGl6ZVJlcXVlc3QgKCk6IENyZWF0ZVJlcXVlc3RFbnRyeTxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRyZXF1ZXN0VHlwZTogJ2NyZWF0ZScsXG5cdFx0XHRcdGl0ZW1zOiB7fSxcblx0XHRcdFx0Y29sdW1uczoge31cblx0XHRcdH0sXG5cdFx0XHRjb2x1bW5zOiB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpLFxuXHRcdFx0aXRlbXM6IHt9LFxuXHRcdFx0Y29sbGVjdGlvbnM6IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdDxJdGVtVHlwZVR5cGU+KFxuXHRcdFx0XHRbdGhpcy5sb2NhbENvbGxlY3Rpb25DYWNoZSwgdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzXSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdClcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBleHRlbmRSZXF1ZXN0IChpdGVtRW50cmllczogSXRlbUVudHJ5TWFwPGFueT4sIHJlcXVlc3RQYXJlbnRJZDogSXRlbUlkIHwgbnVsbCwgZGVzdGluYXRpb246IENyZWF0ZVJlcXVlc3RFbnRyeTxJdGVtVHlwZVR5cGU+KSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IGRlc3RpbmF0aW9uLnJlcXVlc3Q7XG5cdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0gZGVzdGluYXRpb24uaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRpZiAocmVxdWVzdC5pdGVtVHlwZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXF1ZXN0Lml0ZW1UeXBlID0gaXRlbVR5cGUgYXMgSXRlbVR5cGVUeXBlO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSB7fTtcblx0XHRcdFx0cmVxdWVzdC5pdGVtc1tpdGVtVHlwZV0gPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0XHRjb25zdCBjaGlsZEVudHJpZXMgPSBnZXRQYXRoKHRoaXMuY29tcGlsYXRpb24sIFtpdGVtVHlwZSwgaXRlbUlkXSk7XG5cdFx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXRoKHRoaXMucGFyYW1ldGVyTWFwLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyZW50SWQgIT09IG51bGwpXG5cdFx0XHRcdFx0KHJlcXVlc3QucGFyZW50SWQgYXMge1tpdGVtSWQ6IHN0cmluZ106IEl0ZW1JZH0pW2l0ZW1JZF0gPSByZXF1ZXN0UGFyZW50SWQ7XG5cblx0XHRcdFx0ZGVzdGluYXRpb24uY29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2xsZWN0aW9ucy5leHBhbmQoaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSBpdGVtRW50cnk7XG5cblx0XHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cblx0XHRcdFx0aWYgKGNoaWxkRW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGNvbnN0IGxpbmtzOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXX0gPSBpdGVtUmVxdWVzdC5saW5rcyA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkRW50cmllcykge1xuXHRcdFx0XHRcdGxpbmtzW2NoaWxkVHlwZV0gPSBbXTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgY2hpbGRJZCBpbiBjaGlsZEVudHJpZXNbY2hpbGRUeXBlXSlcblx0XHRcdFx0XHRcdGxpbmtzW2NoaWxkVHlwZV0ucHVzaChwYXJzZUludChjaGlsZElkLCAxMCkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KGNoaWxkRW50cmllcywgbnVsbCwgZGVzdGluYXRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHtcblx0Q29sbGVjdGlvbkNhY2hlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sbGVjdGlvbk1hdGNoZXIsXG5cdENvbHVtblNldCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRMb2NhbENhY2hlLFxuXHRNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25SZXN1bHQsXG5cdFF1ZXJ5U2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSwgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgQXV0aEludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FZGl0UmVzb3VyY2UsXG5cdENvbGxlY3Rpb25FbnRyeSxcblx0Q29sbGVjdGlvbkVudHJ5T3B0aW9ucyxcblx0Q29sbGVjdGlvblJlc291cmNlLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRDb2xsZWN0aW9uVmlld1Jlc291cmNlLFxuXHRFZGl0UmVzb3VyY2UsXG5cdEl0ZW1FbnRyeSxcblx0SXRlbUVudHJ5T3B0aW9ucyxcblx0SXRlbVJlc291cmNlLFxuXHRJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRMb2NhbFZpZXdSZXNvdXJjZSxcblx0UmVtb3RlVmlld1Jlc291cmNlXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlRdWVyeSxcblx0Q29sbGVjdGlvbkRlZmluaXRpb24sXG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSxcblx0Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAsXG5cdENvbnZlcnNpb25NYXAsXG5cdENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdEl0ZW1JZCxcblx0SXRlbUlkQ29udmVyc2lvbk1hcCxcblx0SXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcCxcblx0SXRlbVR5cGUsXG5cdExpbmtDb2xsZWN0aW9uRGVmaW5pdGlvbixcblx0TGlua2VkSXRlbUVudHJ5TWFwLFxuXHRMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24sXG5cdE9uU2F2ZUNhbGxiYWNrLFxuXHRQcm9taXNlSW50ZXJmYWNlLFxuXHRTdGF0ZUtleVR5cGUsXG5cdFRlbXBsYXRlSXRlbUVudHJ5TWFwXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQWRtaW5pc3RyYXRvciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgbG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgbW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIHByb21pc2VJbnRlcmZhY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2Vcblx0KSB7fVxuXG5cdGludmFsaWRhdGVDYWNoZSAoKTogdm9pZCB7XG5cdFx0Ly8gdGhlIGl0ZW1IYW5kbGVyIGNhY2hlIG9ubHkgY29udGFpbnMgcmVtb3RlIGVudHJpZXNcblx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZm9yRWFjaChcblx0XHRcdGl0ZW1FbnRyeSA9PiBpdGVtRW50cnkucXVldWVSZWxvYWQoKVxuXHRcdCk7XG5cblx0XHQvLyBxdWV1ZVJlbG9hZCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgZWFjaCBpbmRpdmlkdWFsIGl0ZW1cblx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZm9yRWFjaChcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiBjb2xsZWN0aW9uRW50cnkucXVldWVSZWxvYWQoKVxuXHRcdCk7XG5cdH1cblxuXHRjbGVhclJlc291cmNlcyAobGV2ZWw6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5jYWNoZS5jbGVhclJlc291cmNlcyhsZXZlbCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LmNhY2hlLmNsZWFyUmVzb3VyY2VzKGxldmVsKTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRhZGRUb1RhYjogYm9vbGVhbiA9IHRydWUsXG5cdFx0Y2FsbE9uQWRkOiBib29sZWFuID0gdHJ1ZVxuXHQpOiBDb2xsZWN0aW9uTWF0Y2hlcjxJdGVtVHlwZVR5cGU+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3Q8SXRlbVR5cGVUeXBlPihcblx0XHRcdFtsb2NhbENhY2hlLmNvbGxlY3Rpb25zXSxcblx0XHRcdGZhbHNlLFxuXHRcdFx0Y2FsbE9uQWRkLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Ly8gdGhpcyBpcyBvbmx5IHJlbGV2YW50IGlmIHRoZXJlIGFyZSBubyBjb2xsZWN0aW9ucyB0byBhZGQgdGhlIGl0ZW0gdG8sIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIHNhdmUgdGhlIGl0ZW1cblx0XHRcdGlmIChhZGRUb1RhYilcblx0XHRcdFx0bG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25NYXRjaGVyO1xuXHR9XG5cblx0ZmV0Y2hUaXRsZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgZGVmZXJSZXF1ZXN0PzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hUaXRsZShpdGVtVHlwZSwgaXRlbUlkLCBkZWZlclJlcXVlc3QsIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zKTtcblx0fVxuXG5cdGdldEl0ZW1CeUlkPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8RWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdGdldEl0ZW1CeUlkPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0Z2V0SXRlbUJ5SWQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRnZXRJdGVtQnlJZDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMsIGxldmVsLCBpc1Jvb3QpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5SWQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1JZHM6IEl0ZW1JZFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXJyYXk8RWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+PjtcblxuXHRnZXRJdGVtc0J5SWQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1JZHM6IEl0ZW1JZFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcnJheTxSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+O1xuXG5cdGdldEl0ZW1zQnlJZDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcnJheTxMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0Z2V0SXRlbXNCeUlkPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtSWRzOiBJdGVtSWRbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSA9IHt9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXJyYXk8SXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+PiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtcyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMsIGxldmVsKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0SXRlbXNCeVF1ZXJ5PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRxdWVyeTogQXBpUXVlcnksXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcnJheTxFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+O1xuXG5cdGdldEl0ZW1zQnlRdWVyeTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0cXVlcnk6IEFwaVF1ZXJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcnJheTxSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+O1xuXG5cdGdldEl0ZW1zQnlRdWVyeTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0cXVlcnk6IEFwaVF1ZXJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXJyYXk8TG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+O1xuXG5cdGdldEl0ZW1zQnlRdWVyeTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0cXVlcnk6IEFwaVF1ZXJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlID0ge30sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcnJheTxJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgZW50cnlPcHRpb25zID0gbmV3IEl0ZW1FbnRyeU9wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkUGFyZW50Q29uZGl0aW9uKHF1ZXJ5LCBlbnRyeU9wdGlvbnMucGFyZW50KSxcblx0XHRcdHtbaXRlbVR5cGVdOiBlbnRyeU9wdGlvbnMuY29sdW1uc31cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQsXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZW50cnlPcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMsIGxldmVsKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TmV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdHJldHVybkxpbmtzOiB0cnVlLFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTx7bWFpbjogRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4sIGxpbmtlZDogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwfT47XG5cblx0Z2V0TmV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdHJldHVybkxpbmtzPzogYm9vbGVhbixcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8RWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdGdldE5ld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSA9IHt9LFxuXHRcdHJldHVybkxpbmtzOiBib29sZWFuID0gZmFsc2UsXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRvcHRpb25zLmVkaXQgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hOZXdJdGVtKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRuZXcgSXRlbUVudHJ5T3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJ5UmVzb3VyY2U6IFRlbXBsYXRlSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZT4pID0+IHtcblx0XHRcdFx0Y29uc3QgbWFpbiA9IGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeVJlc291cmNlLm1haW4sIG9wdGlvbnMsIGxldmVsLCBpc1Jvb3QsIHRydWUpO1xuXHRcdFx0XHRjb25zdCBsaW5rZWQgPSB0aGlzLnByb2Nlc3NMaW5rZWRJdGVtcyhpdGVtRW50cnlSZXNvdXJjZS5saW5rZWQsIG9wdGlvbnMsIGxldmVsLCB0cnVlKTsgLy8gZG8gdGhpcyBiZWZvcmVoYW5kXG5cblx0XHRcdFx0aWYgKCFyZXR1cm5MaW5rcylcblx0XHRcdFx0XHRyZXR1cm4gbWFpbjtcblxuXHRcdFx0XHRyZXR1cm4ge21haW46IG1haW4sIGxpbmtlZDogbGlua2VkfTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0RHVwbGljYXRlQnlJZDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0ZHVwbGljYXRlSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRyZXR1cm5MaW5rcz86IGJvb2xlYW4sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRnZXREdXBsaWNhdGVCeUlkPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRkdXBsaWNhdGVJZDogSXRlbUlkLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0cmV0dXJuTGlua3M/OiBib29sZWFuLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0Z2V0RHVwbGljYXRlQnlJZDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0ZHVwbGljYXRlSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRyZXR1cm5MaW5rcz86IGJvb2xlYW4sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdGdldER1cGxpY2F0ZUJ5SWQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGR1cGxpY2F0ZUlkOiBJdGVtSWQsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRyZXR1cm5MaW5rcz86IGJvb2xlYW4sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpIHtcblx0XHRvcHRpb25zLmlzRHVwbGljYXRlID0gdHJ1ZTtcblxuXHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPSB7fTtcblxuXHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID0gZHVwbGljYXRlSWQ7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXROZXdSZXNvdXJjZShpdGVtVHlwZSwgb3B0aW9ucywgcmV0dXJuTGlua3MsIGxldmVsLCBpc1Jvb3QpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5U3RhdGU8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdHN0YXRlS2V5OiBJdGVtSWQgfCBzdHJpbmcsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRnZXRJdGVtQnlTdGF0ZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0c3RhdGVLZXk6IEl0ZW1JZCB8IHN0cmluZyxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0Z2V0SXRlbUJ5U3RhdGU8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdHN0YXRlS2V5OiBJdGVtSWQgfCBzdHJpbmcsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdC8vIHN0YXRlS2V5IGNhbiBiZSBhIGtleXdvcmQgb3IgYSBsb2NhbCBpZCAoaW4gY2FzZSBvZiBhIHJlZnJlc2gpXG5cdGdldEl0ZW1CeVN0YXRlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRzdGF0ZUtleTogSXRlbUlkIHwgc3RyaW5nLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlID0ge30sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpIHtcblx0XHRjb25zdCBwYXJzZWRTdGF0ZUtleSA9IHRoaXMua2V5U2VydmljZS5wYXJzZVN0YXRlS2V5KHN0YXRlS2V5IGFzIHN0cmluZyk7XG5cblx0XHRpZiAocGFyc2VkU3RhdGVLZXkgPT09IG51bGwpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IHN0YXRlS2V5IGFzIEl0ZW1JZDtcblxuXHRcdFx0aWYgKCF0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKGl0ZW1JZCkgfHwgdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXMuY29udGFpbnMoaXRlbVR5cGUsIGl0ZW1JZCkpXG5cdFx0XHRcdHJldHVybiB0aGlzLmdldEl0ZW1CeUlkKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMsIGxldmVsLCBpc1Jvb3QpO1xuXHRcdH0gZWxzZSBpZiAocGFyc2VkU3RhdGVLZXkudHlwZSA9PT0gU3RhdGVLZXlUeXBlLkR1cGxpY2F0ZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0RHVwbGljYXRlQnlJZChcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHBhcnNlZFN0YXRlS2V5Lml0ZW1JZCBhcyBJdGVtSWQsXG5cdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdGxldmVsLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0aXNSb290XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmdldE5ld1Jlc291cmNlKGl0ZW1UeXBlLCBvcHRpb25zLCBmYWxzZSwgbGV2ZWwsIGlzUm9vdCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uRGVmPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+XG5cdCk6IENvbGxlY3Rpb25EZWZpbml0aW9uPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdGVudHJ5OiBuZXcgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyhvcHRpb25zKSwgLy8gd2UgbmVlZCB0aGUgZGVmYXVsdCBjb2x1bW4gdmFsdWVcblx0XHRcdFx0cmVzb3VyY2U6IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uc0RlZjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0bGlua0ZpZWxkOiBzdHJpbmcsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPlxuXHQpOiBMaW5rQ29sbGVjdGlvbkRlZmluaXRpb248SXRlbVR5cGVUeXBlPiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdGxpbmtGaWVsZDogbGlua0ZpZWxkLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRlbnRyeTogbmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksIC8vIHdlIG5lZWQgdGhlIGRlZmF1bHQgY29sdW1uIHZhbHVlXG5cdFx0XHRcdHJlc291cmNlOiBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlLCBlZGl0SXRlbXM6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0Z2V0Q29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0SXRlbXM6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0Z2V0Q29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZSwgcmVtb3RlSXRlbXM6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0Z2V0Q29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtyZW1vdGVJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+PjtcblxuXHRnZXRDb2xsZWN0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0Z2V0Q29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPixcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0Z2V0Q29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPixcblx0XHRsZXZlbD86IG51bWJlclxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGVudHJ5LCBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKSwgbGV2ZWwpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uRnJvbURlZjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGRlZmluaXRpb246IENvbGxlY3Rpb25EZWZpbml0aW9uPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcblx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5lbnRyeSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0ZW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoZW50cnksIGRlZmluaXRpb24ub3B0aW9ucy5yZXNvdXJjZSwgbGV2ZWwpO1xuXG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj4+O1xuXG5cdGdldExpbmtDb2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge3JlbW90ZUl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+Pj47XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+Pj47XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdEl0ZW1zOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+PjtcblxuXHRnZXRMaW5rQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0bGlua0lkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtyZW1vdGVJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+Pj47XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+PjtcblxuXHRnZXRMaW5rQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0bGlua0lkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPixcblx0XHRsZXZlbD86IG51bWJlclxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxuXHRcdFx0bGlua1R5cGUsXG5cdFx0XHRsaW5rSWRBcnJheSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlPikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzKGNvbGxlY3Rpb25FbnRyaWVzLCBvcHRpb25zLCBsZXZlbCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uc0Zyb21EZWY8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0bGlua0lkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGRlZmluaXRpb246IExpbmtDb2xsZWN0aW9uRGVmaW5pdGlvbjxJdGVtVHlwZVR5cGU+LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+PiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYmF0Y2hGZXRjaChcblx0XHRcdGxpbmtUeXBlLFxuXHRcdFx0bGlua0lkQXJyYXksXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHQoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPEl0ZW1UeXBlVHlwZT4pID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyhcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcblx0XHRcdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2UsXG5cdFx0XHRcdFx0bGV2ZWxcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0SXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+PjtcblxuXHRnZXRBbGxMaW5rQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge3JlbW90ZUl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+Pj47XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+PjtcblxuXHRnZXRBbGxMaW5rQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+Pj47XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtyZW1vdGVJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+Pj47XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPixcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj4+O1xuXG5cdGdldEFsbExpbmtDb2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkobGlua1R5cGUsIHt9LCB7fSkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0TGlua0NvbGxlY3Rpb25zKFxuXHRcdFx0XHRcdGxpbmtUeXBlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2xpbmtUeXBlXSxcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRcdGxldmVsXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsb25lSXRlbTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT47XG5cblx0Y2xvbmVJdGVtPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+O1xuXG5cdGNsb25lSXRlbTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPjtcblxuXHRjbG9uZUl0ZW08SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbVJlc291cmNlLmVudHJ5LmNsb25lKCksIG9wdGlvbnMsIGxldmVsLCBmYWxzZSk7XG5cdH1cblxuXHRjbG9uZUNvbGxlY3Rpb248SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdEl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdGNsb25lQ29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtyZW1vdGVJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRjbG9uZUNvbGxlY3Rpb248SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdEl0ZW1zOiB0cnVlfSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0Y2xvbmVDb2xsZWN0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge3JlbW90ZUl0ZW1zOiB0cnVlfSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0Y2xvbmVDb2xsZWN0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRjbG9uZUNvbGxlY3Rpb248SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0Y2xvbmVDb2xsZWN0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KSB7XG5cdFx0bGV0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cGFyZW50ID0gbnVsbDtcblxuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuY2xvbmUocGFyZW50LCBjb252ZXJzaW9uTWFwKSxcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHRsZXZlbFxuXHRcdCk7XG5cdH1cblxuXHRzYXZlQ3VycmVudExvY2FsQ2FjaGUgKFxuXHRcdGNsb3NlVGFiPzogYm9vbGVhbixcblx0XHRwYXJhbWV0ZXJzPzogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0XHRicmVha3VwQnlQYXJlbnQ/OiBib29sZWFuLFxuXHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz86IChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiB2b2lkXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5zYXZlKGNsb3NlVGFiLCBwYXJhbWV0ZXJzLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayk7XG5cdH1cblxuXHRnZXRDdXJyZW50Q29sbGVjdGlvbnMgKCk6IENvbGxlY3Rpb25DYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLmNvbGxlY3Rpb25zO1xuXHR9XG5cblx0Z2V0Q3VycmVudEl0ZW1zICgpOiBJdGVtQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcztcblx0fVxuXG5cdGdldE1vZHVsZUNoYW5nZXMgKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKSk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvblJlc3VsdCB7XG5cdFx0aWYgKGxvY2FsQ2FjaGUucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRocm93IG5ldyBFcnJvcignaXRlbUFkbWluaXN0cmF0b3I6IE5vIHJvb3QgaXRlbSBmb3IgbG9jYWwgY2FjaGUgJyArIGxvY2FsQ2FjaGUuaWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRsb2NhbENhY2hlLnJvb3RJdGVtLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnNcblx0XHQpLnByb2Nlc3MoKTtcblx0fVxuXG5cdGFkZFNpbmdsZUl0ZW08SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZVxuXHQpOiBFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPjtcblxuXHRhZGRTaW5nbGVJdGVtPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZVxuXHQpOiBSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPjtcblxuXHRhZGRTaW5nbGVJdGVtPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGlzUm9vdD86IGJvb2xlYW4sXG5cdFx0bG9jYWxDYWNoZT86IExvY2FsQ2FjaGVcblx0KTogTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPjtcblxuXHRhZGRTaW5nbGVJdGVtPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlID0ge30sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKClcblx0KSB7XG5cdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4obG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KSwgb3B0aW9ucywgbGV2ZWwsIGlzUm9vdCk7XG5cdH1cblxuXHRhZGRTaW5nbGVJdGVtczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBBcnJheTxFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0YWRkU2luZ2xlSXRlbXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBBcnJheTxSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0YWRkU2luZ2xlSXRlbXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQXJyYXk8TG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0YWRkU2luZ2xlSXRlbXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGxldmVsLCBmYWxzZSwgbG9jYWxDYWNoZSkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGFkZENvbGxlY3Rpb248SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZSwgZWRpdEl0ZW1zOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdGFkZENvbGxlY3Rpb248SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0SXRlbXM6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0YWRkQ29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlLCByZW1vdGVJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRhZGRDb2xsZWN0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7cmVtb3RlSXRlbXM6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0YWRkQ29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0YWRkQ29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRhZGRDb2xsZWN0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSwgSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLmFkZChjb2xsZWN0aW9uRW50cnkpO1xuXG5cdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucywgbGV2ZWwpO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVJdGVtUmVzb3VyY2VzPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw6IG51bWJlciB8IHVuZGVmaW5lZCxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCkge1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0cmVzdWx0LnB1c2gobG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPihpdGVtRW50cnksIG9wdGlvbnMsIGxldmVsKSk7XG5cblx0XHRcdGlmIChpdGVtVHlwZSA9PT0gJ1Byb2plY3Rub3RpdGllJykge1xuXHRcdFx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0XHRcdGxvY2FsQ2FjaGUudGFiUmVxdWVzdFBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdFx0W3t9LCB7bm9fbm90aWZpY2F0aW9uOiB0cnVlfV1cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJvY2Vzc0xpbmtlZEl0ZW1zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua2VkRW50cmllczogQXJyYXk8TGlua2VkSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZT4+LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGFkZFRvQ29sbGVjdGlvbnM/OiBib29sZWFuXG5cdCk6IEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0cHJvY2Vzc0xpbmtlZEl0ZW1zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua2VkRW50cmllczogQXJyYXk8TGlua2VkSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZT4+LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0YWRkVG9Db2xsZWN0aW9ucz86IGJvb2xlYW5cblx0KTogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwcm9jZXNzTGlua2VkSXRlbXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRsaW5rZWRFbnRyaWVzOiBBcnJheTxMaW5rZWRJdGVtRW50cnlNYXA8SXRlbVR5cGVUeXBlPj4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0YWRkVG9Db2xsZWN0aW9ucz86IGJvb2xlYW5cblx0KTogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdHByb2Nlc3NMaW5rZWRJdGVtczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGxpbmtlZEVudHJpZXM6IEFycmF5PExpbmtlZEl0ZW1FbnRyeU1hcDxJdGVtVHlwZVR5cGU+Pixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRhZGRUb0NvbGxlY3Rpb25zOiBib29sZWFuID0gdHJ1ZVxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBlbnRyeS5pdGVtVHlwZTtcblxuXHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHRoaXMuY3JlYXRlSXRlbVJlc291cmNlcyhlbnRyeS5pdGVtVHlwZSwgZW50cnkuaXRlbUVudHJpZXMsIG9wdGlvbnMsIGxldmVsLCBsb2NhbENhY2hlKTtcblx0XHR9XG5cblx0XHRpZiAoIWFkZFRvQ29sbGVjdGlvbnMpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Ly8gdGhlIGl0ZW1FbnRyaWVzIGFyZSBpbiB0b3AtZG93biBvcmRlciwgc28gY2FsbCBmb3IgZWFjaCBpdGVtIHR5cGUgc2VwYXJhdGVseVxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcylcblx0XHRcdHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoZW50cnkuaXRlbUVudHJpZXMsIGZhbHNlKS5hZGRUb0NvbGxlY3Rpb25zKCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZXhwYW5kUHJvY2Vzc0xpbmtlZEl0ZW1zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua2VkRW50cmllczogQXJyYXk8TGlua2VkSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZT4+LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXA8RWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+PjtcblxuXHRleHBhbmRQcm9jZXNzTGlua2VkSXRlbXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRsaW5rZWRFbnRyaWVzOiBBcnJheTxMaW5rZWRJdGVtRW50cnlNYXA8SXRlbVR5cGVUeXBlPj4sXG5cdFx0bGV2ZWw6IG51bWJlcixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0ZXhwYW5kUHJvY2Vzc0xpbmtlZEl0ZW1zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua2VkRW50cmllczogQXJyYXk8TGlua2VkSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZT4+LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXA8TG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+O1xuXG5cdGV4cGFuZFByb2Nlc3NMaW5rZWRJdGVtczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGxpbmtlZEVudHJpZXM6IEFycmF5PExpbmtlZEl0ZW1FbnRyeU1hcDxJdGVtVHlwZVR5cGU+Pixcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlXG5cdCkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRsZXQgcHJvbWlzZUNoYWluID0gdGhpcy5wcm9taXNlSW50ZXJmYWNlLndoZW4oe30pO1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBsaW5rZWRFbnRyaWVzKSB7XG5cdFx0XHQvLyB0aGUgaXRlbUVudHJpZXMgYXJlIGluIHRvcC1kb3duIG9yZGVyLCBzbyBjYWxsIGZvciBlYWNoIGl0ZW0gdHlwZSBzZXBhcmF0ZWx5XG5cdFx0XHRwcm9taXNlQ2hhaW4gPSBwcm9taXNlQ2hhaW4udGhlbihcblx0XHRcdFx0dGhpcy5jb25zdHJ1Y3RPbkl0ZW1zRXhwYW5kZWQoZW50cnkuaXRlbVR5cGUsIGVudHJ5Lml0ZW1FbnRyaWVzLCBvcHRpb25zLCBsZXZlbCwgbG9jYWxDYWNoZSksXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvbWlzZUNoYWluO1xuXHR9XG5cblx0cHJpdmF0ZSBjb25zdHJ1Y3RPbkl0ZW1zRXhwYW5kZWQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0aXRlbU9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpIHtcblx0XHRyZXR1cm4gZGVzdGluYXRpb24gPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5kQWRkVG9Db2xsZWN0aW9ucyhpdGVtVHlwZSwgaXRlbUVudHJpZXMsIG51bGwsIGxvY2FsQ2FjaGUpLnRoZW4oXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtVHlwZV0gPSB0aGlzLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdGl0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdFx0aXRlbU9wdGlvbnMsXG5cdFx0XHRcdFx0XHRsZXZlbCxcblx0XHRcdFx0XHRcdGxvY2FsQ2FjaGVcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZXhwYW5kQWRkVG9Db2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSwgVCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+ID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZTogVCxcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFRbJ2l0ZW1zJ10+O1xuXG5cdHByaXZhdGUgZXhwYW5kQWRkVG9Db2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSwgVCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+ID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IG51bGwsXG5cdFx0bG9jYWxDYWNoZT86IExvY2FsQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxudWxsPjtcblxuXHRwcml2YXRlIGV4cGFuZEFkZFRvQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUsIFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPiA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBUIHwgbnVsbCxcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFRbJ2l0ZW1zJ10gfCBudWxsPjtcblxuXHRwcml2YXRlIGV4cGFuZEFkZFRvQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUsIFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPiA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U6IFQgfCBudWxsID0gbnVsbCxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKClcblx0KTogUHJvbWlzZUludGVyZmFjZTxUWydpdGVtcyddIHwgbnVsbD4ge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0PEl0ZW1UeXBlVHlwZT4oXG5cdFx0XHRbbG9jYWxDYWNoZS5jb2xsZWN0aW9uc10sXG5cdFx0XHRmYWxzZSxcblx0XHRcdHRydWUsXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xuXG5cdFx0Y29uc3QgY29sdW1uU3VwZXJzZXQgPSB0aGlzLmdldENvbHVtblN1cGVyc2V0KGNvbGxlY3Rpb25NYXRjaGVyLmdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcygpKTtcblxuXHRcdGlmIChjb2x1bW5TdXBlcnNldCA9PT0gbnVsbClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VJbnRlcmZhY2Uud2hlbihDb2xsZWN0aW9uUmVzb3VyY2UgPT09IG51bGwgPyBudWxsIDogW10pO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZXhwYW5kTG9jYWxFbnRyaWVzKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtRW50cmllcyxcblx0XHRcdGNvbHVtblN1cGVyc2V0LnJlcXVlc3QsXG5cdFx0XHRjb2x1bW5TdXBlcnNldC5yZXNwb25zZSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uTWF0Y2hlci5hZGRUb0NvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdC8vIHdlIGNvdWxkIG1vdmUgdGhpcyB0byB0aGUgQ29sbGVjdGlvbk1hdGNoZXIgaWYgd2UgZW5mb3JjZSBhIHNpbmdsZSBpdGVtIHR5cGVcblx0cHJpdmF0ZSBnZXRDb2x1bW5TdXBlcnNldDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBBcnJheTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj5cblx0KTogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4gfCBudWxsIHtcblx0XHRjb25zdCBjb2x1bW5TZXRJZE1hcDoge1tjb2x1bW5TZXRJZDogbnVtYmVyXTogYm9vbGVhbn0gPSB7fTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGxldCByZXN1bHQgPSBjb2xsZWN0aW9uRW50cmllc1swXS5jb2x1bW5zO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBjb2xsZWN0aW9uRW50cmllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbkVudHJpZXNbaV07XG5cdFx0XHRjb25zdCBjb2x1bW5TZXQgPSBjb2xsZWN0aW9uRW50cnkuY29sdW1ucztcblxuXHRcdFx0aWYgKGNvbHVtblNldElkTWFwW2NvbHVtblNldC5pZF0gPT09IHRydWUpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2x1bW5TZXRJZE1hcFtjb2x1bW5TZXQuaWRdID0gdHJ1ZTtcblxuXHRcdFx0cmVzdWx0ID0gcmVzdWx0Lm1lcmdlKGNvbHVtblNldCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldExvY2FsQ2FjaGUgKCk6IExvY2FsQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLmdldEN1cnJlbnRMb2NhbENhY2hlKHRoaXMuYXV0aEludGVyZmFjZS5nZXRVbmlxdWVVc2VySWQoKSk7XG5cdH1cblxuXHRhZGRUb0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlLCBUIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4gPSBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZTogVCxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuXG5cdCk6IFRbJ2l0ZW1zJ107XG5cblx0YWRkVG9Db2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogbnVsbCxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuXG5cdCk6IG51bGw7XG5cblx0YWRkVG9Db2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSwgVCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+ID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBUIHwgbnVsbCxcblx0XHRjYWxsT25BZGQ6IGJvb2xlYW4gPSB0cnVlXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxlY3Rpb25NYXRjaGVyKGl0ZW1FbnRyaWVzLCB0cnVlLCBjYWxsT25BZGQpLmFkZFRvQ29sbGVjdGlvbnMocmVzdWx0Q29sbGVjdGlvblJlc291cmNlKTtcblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSwgVCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+ID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U6IFRcblx0KTogVFsnaXRlbXMnXTtcblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IG51bGxcblx0KTogbnVsbDtcblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUsIFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPiA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogVCB8IG51bGxcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoaXRlbUVudHJpZXMsIGZhbHNlKS5yZW1vdmVGcm9tQ29sbGVjdGlvbnMocmVzdWx0Q29sbGVjdGlvblJlc291cmNlKTtcblx0fVxuXG5cdHNhdmVMb2NhbCAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2U8YW55Pikge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1SZXNvdXJjZS5lbnRyeTtcblxuXHRcdGl0ZW1FbnRyeS5zZXREaXNwbGF5TmFtZSgpO1xuXHRcdHRoaXMuYWRkVG9Db2xsZWN0aW9ucyhbaXRlbUVudHJ5XSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlSW50ZXJmYWNlLndoZW4oaXRlbVJlc291cmNlKTtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1JZE1hcCAoY29sbGVjdGlvbk1hcDogYW55LCBjb252ZXJzaW9uTWFwOiBDb252ZXJzaW9uTWFwKTogdm9pZCB7XG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3Qgb2xkSWQgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Y29uc3QgbmV3SWQgPSBjb252ZXJzaW9uTWFwW29sZElkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbb2xkSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2xsZWN0aW9uTWFwW25ld0lkXSA9IGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdEl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge3JlbW90ZUl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge3JlbW90ZUl0ZW1zOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oY29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMsIGxldmVsKTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+O1xuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT47XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPjtcblxuXHRjcmVhdGVJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgbGV2ZWwsIGlzUm9vdCk7XG5cdH1cblxuXHRvbkJlZm9yZVNhdmUgKGtleTogc3RyaW5nLCBjYWxsYmFjazogKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpID0+IGFueSwgY29uZGl0aW9uPzogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLm9uQmVmb3JlU2F2ZShrZXksIGNhbGxiYWNrLCBjb25kaXRpb24pO1xuXHR9XG5cblx0b25TYXZlU3VjY2VzcyAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrOiBPblNhdmVDYWxsYmFjaywgY29uZGl0aW9uPzogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLm9uU2F2ZVN1Y2Nlc3Moa2V5LCBjYWxsYmFjaywgY29uZGl0aW9uKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblF1ZXJ5LCBJdGVtRW50cnlNYXAsIEl0ZW1FbnRyeVBhcmVudElkTWFwLCBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlIHtcblx0cHJpdmF0ZSBlbnRyaWVzOiBJdGVtRW50cnlNYXA8YW55PiA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGU+KSA9PiBib29sZWFuKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0aWYgKGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldEJ5SXRlbVR5cGU8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChpdGVtVHlwZTogSXRlbVR5cGVUeXBlKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbUlkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlRdWVyeTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsIHF1ZXJ5OiBDb2xsZWN0aW9uUXVlcnkpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XG5cblx0XHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0TG9jYWxCeVF1ZXJ5PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSwgcXVlcnk6IENvbGxlY3Rpb25RdWVyeSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcblxuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlQYXJlbnQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdFx0aWYgKHBhcmVudC5pdGVtVHlwZSA9PT0gcGFyZW50VHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IHBhcmVudElkKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRiYXRjaEdldExvY2FsQnlQYXJlbnQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRwYXJlbnRJZHM6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0YWRkaXRpb25hbFF1ZXJ5OiBhbnlcblx0KTogSXRlbUVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlQYXJlbnRJZE1hcDxJdGVtVHlwZVR5cGU+ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkcylcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmIChwYXJlbnQuaXRlbVR5cGUgIT09IHBhcmVudFR5cGUgfHwgcmVzdWx0W3BhcmVudC5pdGVtSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIWl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoYWRkaXRpb25hbFF1ZXJ5ID09PSBudWxsIHx8IHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIGFkZGl0aW9uYWxRdWVyeSkpXG5cdFx0XHRcdHJlc3VsdFtwYXJlbnQuaXRlbUlkXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGU+KSA9PiB2b2lkKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xuXHRcdH1cblx0fVxuXG5cdC8qXHRmaWx0ZXIgKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pOiB2b2lkIHtcblx0IGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdCBjb25zdCBmaWx0ZXJlZEVudHJpZXM6IEl0ZW1FbnRyeU1hcCA9IHt9O1xuXG5cdCBmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0IGZpbHRlcmVkRW50cmllc1tpdGVtVHlwZV0gPSB7fTtcblxuXHQgZm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcblx0IGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0IGlmIChjYWxsYmFjayhpdGVtRW50cnkpKVxuXHQgZmlsdGVyZWRFbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdID0gaXRlbUVudHJ5O1xuXHQgfVxuXHQgfVxuXG5cdCB0aGlzLmVudHJpZXMgPSBmaWx0ZXJlZEVudHJpZXM7XG5cdCB9XG5cdCAqL1xuXHR0b0FycmF5ICgpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlPj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+KTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4ge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRpZiAoZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGVudHJpZXNbaXRlbVR5cGVdID0ge307XG5cblx0XHRyZXR1cm4gZW50cmllc1tpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XG5cdH1cblxuXHRnZXQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChpdGVtVHlwZTogSXRlbVR5cGVUeXBlLCBpdGVtSWQ6IHN0cmluZyB8IEl0ZW1JZCk6IHVuZGVmaW5lZCB8IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHR9XG5cblx0Ly8gc2hvdWxkIGJlIGZhc3Rcblx0Y29udGFpbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBzdHJpbmcgfCBJdGVtSWQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0dXBkYXRlSXRlbUlkPFQgZXh0ZW5kcyBJdGVtRW50cnk8YW55Pj4gKGl0ZW1FbnRyeTogVCwgb2xkSXRlbUlkOiBzdHJpbmcgfCBJdGVtSWQpOiBUIHtcblx0XHRjb25zdCBlbnRyeU1hcCA9IHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0ZGVsZXRlIGVudHJ5TWFwW29sZEl0ZW1JZF07XG5cdFx0cmV0dXJuIGVudHJ5TWFwW2l0ZW1FbnRyeS5pdGVtSWRdID0gaXRlbUVudHJ5O1xuXHR9XG5cblx0Y2xlYXIgKGl0ZW1FbnRyeT86IEl0ZW1FbnRyeTxhbnk+KTogYm9vbGVhbiB7XG5cdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuY2xlYXJCeUl0ZW1JZChpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHR9XG5cblx0Y2xlYXJCeUl0ZW1JZCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBkZWxldGUgZW50cmllc1tpdGVtSWRdO1xuXHR9XG5cblx0bWF0Y2hRdWVyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnk8YW55PiwgcXVlcnk6IENvbGxlY3Rpb25RdWVyeSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudFxuXHRcdCkubWF0Y2hRdWVyeShxdWVyeS5vYmplY3QpID09PSB0cnVlOyAvLyBUT0RPOiBtYXliZT9cblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFMTF9QRVJNSVNTSU9OUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBdXRoSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1FbnRyeU9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEZpZWxkTWFwLCBJdGVtRXJyb3IsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbU9wdGlvbnNJbnRlcmZhY2UsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5U2VydmljZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UpOiBJdGVtRW50cnlPcHRpb25zIHtcblx0XHRyZXR1cm4gbmV3IEl0ZW1FbnRyeU9wdGlvbnMob3B0aW9ucyk7XG5cdH1cblxuXHQvLyB0b2RvOiB0cmFuc2xhdGVcblx0Y3JlYXRlVW5mb3VuZFJlbW90ZUl0ZW1FcnJvciAoKTogSXRlbUVycm9yIHtcblx0XHRyZXR1cm4ge21lc3NhZ2U6ICdUaGUgcmVxdWVzdGVkIGl0ZW0gY291bGQgbm90IGJlIGZvdW5kIC8geW91ciBjdXJyZW50IHBlcm1pc3Npb25zIGFyZSBub3Qgc3VmZmljaWVudCd9O1xuXHR9XG5cblx0Y3JlYXRlVW5mb3VuZExvY2FsSXRlbUVycm9yIChpdGVtVHlwZTogSXRlbVR5cGUpIHtcblx0XHRyZXR1cm4ge21lc3NhZ2U6ICdBIGxvY2FsIGl0ZW0gb2YgdHlwZSAnICsgaXRlbVR5cGUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCd9O1xuXHR9XG5cblx0Y3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0ZG9FeHRlbmQ6IGJvb2xlYW4gPSBmYWxzZSxcblx0XHRhcGlSZXNwb25zZTogQXBpUmVzcG9uc2Vcblx0KTogSXRlbUlkQ29udmVyc2lvbk1hcCB7XG5cdFx0Y29uc3QgYXBpSXRlbUlkID0gYXBpUmVzcG9uc2UubGlua3NbaXRlbVR5cGVdWzBdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9O1xuXG5cdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHt9O1xuXHRcdHJlc3VsdFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IGl0ZW1JZDtcblxuXHRcdGlmIChkb0V4dGVuZClcblx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCByZXN1bHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGV4cGFuZExvY2FsQ29udmVyc2lvbk1hcCAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWQ6IEl0ZW1JZCxcblx0XHRhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBsaW5rcyA9IGFwaVJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGVdW3BhcmVudElkXS5saW5rcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcblx0XHRcdGNvbnN0IGlkQXJyYXkgPSBsaW5rc1tpdGVtVHlwZV07XG5cblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XG5cdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdW2FwaUl0ZW1JZF0gPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xuXG5cdFx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCBjb252ZXJzaW9uTWFwKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRleHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+LCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLCBuZXdJdGVtSWQ/OiBJdGVtSWQpOiBJdGVtSWQge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRsZXQgY29udmVyc2lvbk1hcEVudHJ5O1xuXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0Y29udmVyc2lvbk1hcEVudHJ5ID0gY29udmVyc2lvbk1hcFtpdGVtVHlwZV07XG5cblx0XHRpZiAoY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXTtcblxuXHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZClcblx0XHRcdG5ld0l0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XG5cblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gPSBuZXdJdGVtSWQ7XG5cdH1cblxuXHRiYXRjaEV4cGFuZENvbnZlcnNpb25NYXAgKGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8YW55Pj4sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApOiBJdGVtSWRDb252ZXJzaW9uTWFwIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHRoaXMuZXhwYW5kQ29udmVyc2lvbk1hcChpdGVtRW50cnksIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdH1cblxuXHRnZXRDb252ZXJzaW9uVmFsdWUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIG1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IEl0ZW1JZCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHR9XG5cblx0YmF0Y2hDbG9uZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9XG5cdCk6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblxuXHRcdC8vIHRoZSB0aGUgaXRlbXMgbWlnaHQgcmVmZXJlbmNlIGVhY2ggb3RoZXIsIHNvIHVwZGF0ZSB0aGUgY29udmVyc2lvbiBtYXAgZmlyc3Rcblx0XHR0aGlzLmJhdGNoRXhwYW5kQ29udmVyc2lvbk1hcChpdGVtRW50cmllcywgY29udmVyc2lvbk1hcCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeS5jbG9uZShjb252ZXJzaW9uTWFwKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0RnVsbE5hbWUgKGZpcnN0TmFtZTogc3RyaW5nLCBpbmZpeDogc3RyaW5nLCBsYXN0TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZmlyc3ROYW1lLnRyaW0oKVxuXHRcdFx0LmNvbmNhdCgnICcsIGluZml4KS50cmltKCkgLy8gaW5maXggY2FuIGJlIGFuIGVtcHR5IHN0cmluZ1xuXHRcdFx0LmNvbmNhdCgnICcsIGxhc3ROYW1lKTtcblx0fVxuXG5cdGdldFRpdGxlRmllbGQgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IHN0cmluZyB7XG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xuXHRcdFx0Y2FzZSAnRXhlbXBsYWFyJzpcblx0XHRcdFx0cmV0dXJuICdzZXJpZW51bW1lcic7XG5cdFx0XHRjYXNlICdGYWN0dXVyJzpcblx0XHRcdFx0cmV0dXJuICdudW1tZXInO1xuXHRcdFx0Y2FzZSAnRmlsZXMnOlxuXHRcdFx0XHRyZXR1cm4gJ2ZyaWVuZGx5bmFtZSc7XG5cdFx0XHRjYXNlICdGdW5jdGllJzpcblx0XHRcdGNhc2UgJ1N0YW5kYWFyZGZ1bmN0aWUnOlxuXHRcdFx0XHRyZXR1cm4gJ25hYW1pbnRlcm4nO1xuXHRcdFx0Y2FzZSAnVm9vcnJhYWRtdXRhdGllJzpcblx0XHRcdFx0cmV0dXJuICdvbXNjaHJpanZpbmcnO1xuXHRcdFx0Y2FzZSAnQmFyY29kZSc6XG5cdFx0XHRcdHJldHVybiAnY29kZSc7XG5cdFx0XHRjYXNlICdCZXRhYWxtaWRkZWwnOlxuXHRcdFx0Y2FzZSAnQmV0YWxpbmdzY29uZGl0aWUnOlxuXHRcdFx0Y2FzZSAnQnJpZWZwYXBpZXInOlxuXHRcdFx0Y2FzZSAnVGF4Q2xhc3MnOlxuXHRcdFx0Y2FzZSAnVGF4U2NoZW1hJzpcblx0XHRcdGNhc2UgJ0NvbmRpdGlvbic6XG5cdFx0XHRjYXNlICdGYWN0dXVybW9tZW50Jzpcblx0XHRcdGNhc2UgJ0Z1bmN0aWVncm9lcCc6XG5cdFx0XHRjYXNlICdHcm9vdGJvZWsnOlxuXHRcdFx0Y2FzZSAnSW5odXVyJzpcblx0XHRcdGNhc2UgJ0luaHV1cmdyb2VwJzpcblx0XHRcdGNhc2UgJ0luaHV1cm1hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdNYXRlcmlhYWwnOlxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsQ2F0Jzpcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXJ0YXJpZWYnOlxuXHRcdFx0Y2FzZSAnTm90aXRpZSc6XG5cdFx0XHRjYXNlICdQbGFubmluZ21hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdQcm9qZWN0Jzpcblx0XHRcdGNhc2UgJ1N0YWZmZWxncm9lcCc6XG5cdFx0XHRjYXNlICdTdWJwcm9qZWN0Jzpcblx0XHRcdGNhc2UgJ1RhYWsnOlxuXHRcdFx0Y2FzZSAnVGFnJzpcblx0XHRcdGNhc2UgJ1RlbXBsYXRlJzpcblx0XHRcdGNhc2UgJ1RpamQnOlxuXHRcdFx0Y2FzZSAnVGl0ZWwnOlxuXHRcdFx0Y2FzZSAnVHlwZSc6XG5cdFx0XHRjYXNlICdWb2VydHVpZyc6XG5cdFx0XHRcdHJldHVybiAnbmFhbSc7XG5cdFx0XHQvLyBjYXNlICdDb250YWN0Jzpcblx0XHRcdC8vIGNhc2UgJ01lZGV3ZXJrZXInOlxuXHRcdFx0Ly8gY2FzZSAnUGVyc29uJzpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdC8vIG9ubHkgdXNlIGRpc3BsYXluYW1lIGZvciBpdGVtcyB0aGF0IGRvbnQndCBoYXZlIGEgc2ltcGxlLCB3cml0YWJsZSBuYW1lIGZpZWxkXG5cdFx0XHRcdC8vIHRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIGZvciB0ZW1wbGF0ZWQgaXRlbXNcblx0XHRcdFx0cmV0dXJuICdkaXNwbGF5bmFtZSc7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVE9ETzogd2UgY2FuIHJlbW92ZSB0aGVzZSBvbmNlIGFsbCBjb2x1bW5zIGFyZSByZXNwZWN0ZWQgZm9yIGxvY2FsIGl0ZW1zIFtSTTQtMTAzNzhdXG5cdGdldExvY2FsRGVmYXVsdFZhbHVlcyAoKTogRmllbGRNYXAge1xuXHRcdHJldHVybiB7cGVybWlzc2lvbnM6IEFMTF9QRVJNSVNTSU9OUywgY3JlYXRvcjogdGhpcy5hdXRoSW50ZXJmYWNlLmdldFVzZXJJZCgpLCBjcmVhdGVkOiBtb21lbnQoKX07XG5cdH1cblxuXHRoYXNMb2NhbERlZmF1bHRWYWx1ZSAoY29sdW1uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uSWQpIHtcblx0XHRcdGNhc2UgJ3Blcm1pc3Npb25zJzpcblx0XHRcdGNhc2UgJ2NyZWF0b3InOlxuXHRcdFx0Y2FzZSAnY3JlYXRlZCc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRBcGlSZXNwb25zZVByb2Nlc3Nvcixcblx0QmF0Y2hTdGF0dXMsXG5cdENvbHVtbkV4cGFuc2lvbixcblx0Q29sdW1uSGFuZGxlcixcblx0Q29sdW1uSW5mbyxcblx0Q29sdW1uU2V0LFxuXHRDb2x1bW5TdWJzZXRDYWNoZSxcblx0Q29sdW1uVXRpbCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEJhdGNoU3RhdHVzRmFjdG9yeSwgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgQ29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LCBJdGVtQ2FjaGVGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5LCBUZW1wbGF0ZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbUVudHJ5T3B0aW9ucywgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbnMsXG5cdEFwaVJlc3BvbnNlLFxuXHRFbnRyeVBhcmVudE51bGwsXG5cdEVudHJ5U3RhdHVzLFxuXHRGaWVsZE1hcCxcblx0SXRlbUlkLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtVHlwZSxcblx0TGlua2VkSXRlbUVudHJ5TWFwLFxuXHRQcm9taXNlSW50ZXJmYWNlLFxuXHRSZXNwb25zZUNvbHVtbk1hcCxcblx0VGVtcGxhdGVJdGVtRW50cnlNYXBcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5LCBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcblxuLy8gdG9kbyBtYWtlIGNsYXNzXG5cbmV4cG9ydCBjbGFzcyBJdGVtSGFuZGxlciB7XG5cdGVudHJpZXM6IEl0ZW1DYWNoZTtcblx0dGVtcGxhdGVzOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBUZW1wbGF0ZTxhbnk+fSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgYmF0Y2hTdGF0dXNGYWN0b3J5OiBCYXRjaFN0YXR1c0ZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5TdWJzZXRDYWNoZUZhY3Rvcnk6IENvbHVtblN1YnNldENhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSB0ZW1wbGF0ZUZhY3Rvcnk6IFRlbXBsYXRlRmFjdG9yeVxuXHQpIHtcblx0XHR0aGlzLmVudHJpZXMgPSB0aGlzLml0ZW1DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdH1cblxuXHRmZXRjaEl0ZW08SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdG9wdGlvbnM6IEl0ZW1FbnRyeU9wdGlvbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0Y29uc3QgZW50cnlTdGF0dXMgPSB0aGlzLmdldEVudHJ5U3RhdHVzKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHRvcHRpb25zLnBhcmVudCxcblx0XHRcdG9wdGlvbnMuZGVmZXJSZXF1ZXN0LFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHR0cnVlLFxuXHRcdFx0dGhpcy5jb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnkuY29uc3RydWN0KG9wdGlvbnMuY29sdW1ucylcblx0XHQpO1xuXG5cdFx0aWYgKGVudHJ5U3RhdHVzID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdCh0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlVW5mb3VuZExvY2FsSXRlbUVycm9yKGl0ZW1UeXBlKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKGVudHJ5U3RhdHVzLmVudHJ5LCBlbnRyeVN0YXR1cy5zdGF0dXMsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlKTtcblx0fVxuXG5cdGZldGNoTmV3SXRlbTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogSXRlbUVudHJ5T3B0aW9ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8VGVtcGxhdGVJdGVtRW50cnlNYXA8SXRlbVR5cGVUeXBlPj4ge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGxvY2FsSXRlbUNhY2hlLmFkZChcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3REZWZlcnJlZChcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdG9wdGlvbnMuaXNEdXBsaWNhdGUgPyB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxEdXBsaWNhdGVJZCgpIDogdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hUZW1wbGF0ZShpdGVtVHlwZSwgb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMsIG9wdGlvbnMudGVtcGxhdGVDb2x1bW5zKS50aGVuKFxuXHRcdFx0dGVtcGxhdGUgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoaXRlbUVudHJ5LCBvcHRpb25zLnBhcmVudCwgdGVtcGxhdGUsIGxvY2FsSXRlbUNhY2hlKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRjcmVhdGVCYXRjaFN0YXR1czxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhbixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGFkZFRvTG9jYWxDYWNoZTogYm9vbGVhblxuXHQpOiB7YmF0Y2hTdGF0dXM6IEJhdGNoU3RhdHVzPEl0ZW1UeXBlVHlwZSwgSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LCBzdWNjZXNzOiBib29sZWFufSB7XG5cdFx0Y29uc3QgY29sdW1uU3Vic2V0Q2FjaGU6IENvbHVtblN1YnNldENhY2hlPEl0ZW1UeXBlVHlwZT4gPSB0aGlzLmNvbHVtblN1YnNldENhY2hlRmFjdG9yeS5jb25zdHJ1Y3QocmVxdWVzdENvbHVtbnMpO1xuXHRcdGNvbnN0IGJhdGNoU3RhdHVzID0gdGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPikgPT4gaXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+KSA9PiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpXG5cdFx0KTtcblx0XHRsZXQgc3VjY2VzcyA9IHRydWU7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpdGVtSWRzKSB7XG5cdFx0XHRjb25zdCBlbnRyeVN0YXR1cyA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRpdGVtSWQsXG5cdFx0XHRcdHBhcmVudCxcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0LFxuXHRcdFx0XHRsb2NhbEl0ZW1DYWNoZSxcblx0XHRcdFx0YWRkVG9Mb2NhbENhY2hlLFxuXHRcdFx0XHRjb2x1bW5TdWJzZXRDYWNoZVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGVudHJ5U3RhdHVzID09PSBudWxsKSB7XG5cdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGJhdGNoU3RhdHVzLmFkZChlbnRyeVN0YXR1cyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtiYXRjaFN0YXR1czogYmF0Y2hTdGF0dXMsIHN1Y2Nlc3M6IHN1Y2Nlc3N9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvciBldmVyeSBpdGVtIElEIGZpbmQgdGhlIHN0YXR1cyBvZiB0aGUgSXRlbUVudHJ5IGFuZCByZXNvbHZlIHRoZSBwcm9taXNlcyBzbyB0aGUgcmVzdWx0IGlzXG5cdCAqIGEgdXNhYmxlIEl0ZW1FbnRyeVxuXHQgKi9cblx0ZmV0Y2hJdGVtczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0b3B0aW9uczogSXRlbUVudHJ5T3B0aW9ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+PiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBvcHRpb25zLmNvbHVtbnM7XG5cblx0XHRjb25zdCB7YmF0Y2hTdGF0dXMsIHN1Y2Nlc3N9ID0gdGhpcy5jcmVhdGVCYXRjaFN0YXR1cyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdG9wdGlvbnMucGFyZW50LFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRvcHRpb25zLmRlZmVyUmVxdWVzdCxcblx0XHRcdGxvY2FsSXRlbUNhY2hlLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cblx0XHRsZXQgcmVzcG9uc2VQcm9taXNlOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB8IG51bGw7XG5cdFx0bGV0IGNvbHVtbnNQcm9taXNlOiBQcm9taXNlSW50ZXJmYWNlPFJlc3BvbnNlQ29sdW1uTWFwPiB8IG51bGw7XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzUmVxdWVzdHMoKSkge1xuXHRcdFx0cmVzcG9uc2VQcm9taXNlID0gdGhpcy5yZXF1ZXN0SXRlbXMoaXRlbVR5cGUsIGJhdGNoU3RhdHVzLmdldFJlcXVlc3RJZHMoKSwgcmVxdWVzdENvbHVtbnMpO1xuXHRcdFx0Y29sdW1uc1Byb21pc2UgPSByZXNwb25zZVByb21pc2UudGhlbihcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdC8vIG5vIGl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQsIHNvIGNsZWFyaW5nIGlzIHN1ZmZpY2llbnQgaGVyZVxuXHRcdFx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFx0XHRcdFtFTlRSWV9TVEFUVVMuUkVTT0xWRV0sXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkgPT4gdGhpcy5jbGVhckl0ZW0oaXRlbUVudHJ5LCBsb2NhbEl0ZW1DYWNoZSlcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhiYXRjaFN0YXR1cy5sb2NhbEV4cGFuZFN0YXR1cykpIHtcblx0XHRcdHJlc3BvbnNlUHJvbWlzZSA9IG51bGw7XG5cdFx0XHRjb2x1bW5zUHJvbWlzZSA9IHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXNwb25zZVByb21pc2UgPSBudWxsO1xuXHRcdFx0Y29sdW1uc1Byb21pc2UgPSBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChcblx0XHRcdHtcblx0XHRcdFx0ZW50cmllczogYmF0Y2hTdGF0dXMuZ2V0UHJvbWlzZXMoKSxcblx0XHRcdFx0cmVzcG9uc2U6IHJlc3BvbnNlUHJvbWlzZSxcblx0XHRcdFx0Y29sdW1uczogY29sdW1uc1Byb21pc2Vcblx0XHRcdH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUJhdGNoUmVzcG9uc2UoXG5cdFx0XHRcdFx0YmF0Y2hTdGF0dXMsXG5cdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRcdFx0cmVzb2x2ZWQucmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzb2x2ZWQuY29sdW1uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQocmVzb2x2ZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRcdFx0cmV0dXJuIHJlc29sdmVkICYmIHN1Y2Nlc3MgPyBiYXRjaFN0YXR1cy5nZXRBcnJheSgpIDogZXJyb3JIYW5kbGVyLnJlamVjdCgpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0aGFuZGxlQmF0Y2hSZXNwb25zZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGJhdGNoU3RhdHVzOiBCYXRjaFN0YXR1czxJdGVtVHlwZVR5cGUsIEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2VQcm9jZXNzb3IgfCBudWxsLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAgfCBudWxsLFxuXHRcdGNvbHVtbkV4cGFuc2lvbj86IENvbHVtbkV4cGFuc2lvbjxJdGVtVHlwZVR5cGU+XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gYmF0Y2hTdGF0dXMuaXRlbVR5cGU7XG5cblx0XHRsZXQgc3VjY2VzcyA9IHRydWU7XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLlJFU09MVkVdKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMhKTtcblxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkVdLFxuXHRcdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRcdGlmICghdGhpcy5yZXNvbHZlUmVtb3RlKGl0ZW1FbnRyeSwgY29sdW1uSW5mbywgcmVzcG9uc2UhLCBsb2NhbEl0ZW1DYWNoZSkpXG5cdFx0XHRcdFx0XHRzdWNjZXNzID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0W0VOVFJZX1NUQVRVUy5SRVNPTFZFX1ZBTFVFU10sXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMucmVzb2x2ZVJlbW90ZVZhbHVlcyhpdGVtRW50cnksIHJlc3BvbnNlISkpXG5cdFx0XHRcdFx0c3VjY2VzcyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMpKSB7XG5cdFx0XHRpZiAoY29sdW1uRXhwYW5zaW9uID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMhKTtcblxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0XHRiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMsXG5cdFx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUV4cGFuc2lvbihpdGVtRW50cnksIGNvbHVtbkV4cGFuc2lvbiEsIHJlc3BvbnNlISk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoYmF0Y2hTdGF0dXMubG9jYWxFeHBhbmRTdGF0dXMpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRMb2NhbEVudHJpZXMoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRiYXRjaFN0YXR1cy5nZXRBcnJheShiYXRjaFN0YXR1cy5sb2NhbEV4cGFuZFN0YXR1cyksXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbnMhLFxuXHRcdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdFx0KS50aGVuKFxuXHRcdFx0XHRpdGVtRW50cmllcyA9PiB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVzb2x2ZSgpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHN1Y2Nlc3M7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHN1Y2Nlc3MpO1xuXHR9XG5cblx0cmVzb2x2ZUNhY2hlZDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0c3RhdHVzOiBFTlRSWV9TVEFUVVMsXG5cdFx0b3B0aW9uczogSXRlbUVudHJ5T3B0aW9ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCByZWplY3RJdGVtRW50cnkgPSAoZXJyb3I6IGFueSkgPT4geyBpdGVtRW50cnkucmVqZWN0KGVycm9yKTsgfTtcblx0XHRsZXQgY29sdW1uRGlmZmVyZW5jZTogQXBpUmVxdWVzdENvbHVtbnM7XG5cblx0XHRzd2l0Y2ggKHN0YXR1cykge1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuTE9DQUw6IC8vIGhlcmUgZm9yIGNvbXBsZXRpb25cblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkNBQ0hFRDpcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtRW50cnkpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxuXHRcdFx0XHRjb2x1bW5EaWZmZXJlbmNlID0gdGhpcy5nZXRDb2x1bW5EaWZmZXJlbmNlKGl0ZW1FbnRyeSwgb3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1FbnRyeSwgY29sdW1uRGlmZmVyZW5jZSkudGhlbihcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVFeHBhbnNpb24oXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uRGlmZmVyZW5jZSxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KS5jYXRjaCggLy8gb25mdWxmaWxsZWQgbWlnaHQgcHJvZHVjZSBhbiBlcnJvclxuXHRcdFx0XHRcdHJlamVjdEl0ZW1FbnRyeVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EX0xPQ0FMOlxuXHRcdFx0XHRjb2x1bW5EaWZmZXJlbmNlID0gdGhpcy5nZXRDb2x1bW5EaWZmZXJlbmNlKGl0ZW1FbnRyeSwgb3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbUVudHJ5Lml0ZW1UeXBlLCBjb2x1bW5EaWZmZXJlbmNlKS50aGVuKFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRMb2NhbEVudHJpZXMoXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0W2l0ZW1FbnRyeV0sXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkRpZmZlcmVuY2UsXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGVcblx0XHRcdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRcdFx0KCkgPT4gaXRlbUVudHJ5LnJlc29sdmUoKSxcblx0XHRcdFx0XHRcdFx0cmVqZWN0SXRlbUVudHJ5XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVqZWN0SXRlbUVudHJ5XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRQcm9taXNlKCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRfTE9DQUw6XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUNhY2hlZChcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNvbHVtblN1YnNldENhY2hlRmFjdG9yeS5jb25zdHJ1Y3Qob3B0aW9ucy5jb2x1bW5zKVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlJFU09MVkVfVkFMVUVTOlxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1FbnRyeSkudGhlbihcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVSZW1vdGVWYWx1ZXMoaXRlbUVudHJ5LCByZXNwb25zZSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCkuY2F0Y2goIC8vIG9uZnVsZmlsbGVkIG1pZ2h0IHByb2R1Y2UgYW4gZXJyb3Jcblx0XHRcdFx0XHRyZWplY3RJdGVtRW50cnlcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmdldFByb21pc2UoKTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlJFU09MVkU6XG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW0oaXRlbUVudHJ5KS50aGVuKFxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZVJlbW90ZShcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5yZXNvbHZlKHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKSxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpLmNhdGNoKCAvLyBvbmZ1bGZpbGxlZCBtaWdodCBwcm9kdWNlIGFuIGVycm9yXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5jbGVhckl0ZW0oaXRlbUVudHJ5LCBsb2NhbEl0ZW1DYWNoZSk7XG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRQcm9taXNlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRDb2x1bW5EaWZmZXJlbmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+LCByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBBcGlSZXF1ZXN0Q29sdW1ucyB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3QsIHJlcXVlc3RDb2x1bW5zKS5kaWZmZXJlbmNlO1xuXHR9XG5cblx0cmVzb2x2ZUxvY2FsPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGU8SXRlbVR5cGVUeXBlPixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFRlbXBsYXRlSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgaXRlbUlkQ29udmVyc2lvbiA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgdGVtcGxhdGUucmVzcG9uc2UpO1xuXG5cdFx0aXRlbUVudHJ5LmNvbHVtbnMgPSB0ZW1wbGF0ZS5jb2x1bW5zO1xuXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcblx0XHRcdGl0ZW1FbnRyeS5zZXRQYXJlbnQocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkKTsgLy8gY3JlYXRlIG5ldyBvYmplY3RcblxuXHRcdGl0ZW1FbnRyeS5zZXRMb2NhbEZpZWxkcyh0ZW1wbGF0ZS5maWVsZHMsIGl0ZW1JZENvbnZlcnNpb24pLnJlc29sdmUoKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRtYWluOiBpdGVtRW50cnksXG5cdFx0XHRsaW5rZWQ6IHRoaXMuY3JlYXRlTG9jYWxFbnRyaWVzKGl0ZW1UeXBlLCBpdGVtSWQsIHRlbXBsYXRlLCBpdGVtSWRDb252ZXJzaW9uLCBsb2NhbEl0ZW1DYWNoZSlcblx0XHR9O1xuXHR9XG5cblx0cmVzb2x2ZUV4cGFuc2lvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0Y29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb248SXRlbVR5cGVUeXBlPixcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2Vcblx0KTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XG5cblx0XHQvLyBBbm90aGVyIHJlcXVlc3QgYWxyZWFkeSByZXF1ZXN0ZWQgdGhlIGNvbHVtbnMgd2UgbmVlZCBoZXJlLCBubyBuZWVkIHRvIGV4cGFuZCB0aGUgaXRlbSBhbmQgcmVzb2x2ZSBpdCAoYWxyZWFkeSBkb25lIGJ5IG90aGVyIHJlcXVlc3QpXG5cdFx0aWYgKGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBpdGVtRW50cnk7XG5cblx0XHRpdGVtRW50cnkuZXhwYW5kKFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCkhLFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLnJvb3QpLFxuXHRcdFx0ZXhwYW5zaW9uUmVzdWx0XG5cdFx0KTtcblxuXHRcdHJldHVybiBpdGVtRW50cnkucmVzb2x2ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBjbGVhckl0ZW0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5PGFueT4sIGxvY2FsQ2FjaGU6IEl0ZW1DYWNoZSk6IHZvaWQge1xuXHRcdHRoaXMuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xuXHRcdGxvY2FsQ2FjaGUuY2xlYXIoaXRlbUVudHJ5KTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVJlbW90ZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0bG9jYWxDYWNoZTogSXRlbUNhY2hlXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJlc3BvbnNlRmllbGRzID0gdGhpcy5nZXRSZXNwb25zZUZpZWxkcyhpdGVtRW50cnksIGNvbHVtblNldCwgcmVzcG9uc2UpO1xuXG5cdFx0aWYgKHJlc3BvbnNlRmllbGRzID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLmNsZWFySXRlbShpdGVtRW50cnksIGxvY2FsQ2FjaGUpO1xuXHRcdFx0aXRlbUVudHJ5LnJlamVjdCgpO1xuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChyZXNwb25zZUZpZWxkcy5pbml0aWFsLCByZXNwb25zZUZpZWxkcy5kZXJpdmVkLCBjb2x1bW5TZXQpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVSZW1vdGVWYWx1ZXMgKGl0ZW1FbnRyeTogSXRlbUVudHJ5PGFueT4sIHJlc3BvbnNlOiBBcGlSZXNwb25zZSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJlc3BvbnNlRmllbGRzID0gdGhpcy5nZXRSZXNwb25zZUZpZWxkcyhpdGVtRW50cnksIGl0ZW1FbnRyeS5jb2x1bW5zLCByZXNwb25zZSk7XG5cblx0XHRpZiAocmVzcG9uc2VGaWVsZHMgPT09IG51bGwpIHtcblx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoKTtcblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGl0ZW1FbnRyeS51cGRhdGVGaWVsZHMocmVzcG9uc2VGaWVsZHMuaW5pdGlhbCwgcmVzcG9uc2VGaWVsZHMuZGVyaXZlZCwgZmFsc2UpLnJlc29sdmUoKTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZXNwb25zZUZpZWxkczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2Vcblx0KToge2luaXRpYWw6IEZpZWxkTWFwLCBkZXJpdmVkOiBGaWVsZE1hcH0gfCBudWxsIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXHRcdGNvbnN0IGluaXRpYWwgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdGlmIChpbml0aWFsID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRpbml0aWFsOiBpbml0aWFsLFxuXHRcdFx0ZGVyaXZlZDogcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldC5yb290KVxuXHRcdH07XG5cdH1cblxuXHRmZXRjaFRlbXBsYXRlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHR0ZW1wbGF0ZU9wdGlvbnM6IGFueSA9IHt9LFxuXHRcdHRlbXBsYXRlQ29sdW1uczogYW55ID0ge31cblx0KTogUHJvbWlzZUludGVyZmFjZTxUZW1wbGF0ZTxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0Y29uc3QgaGFzVGVtcGxhdGVPcHRpb25zID0gaGFzUHJvcGVydGllcyh0ZW1wbGF0ZU9wdGlvbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkl0ZW1UeXBlID0gZ2V0Rmlyc3RQcm9wZXJ0eSh0ZW1wbGF0ZUNvbHVtbnMpOyAvLyBpdCdzIHBvc3NpYmxlIHRvIGFkZCBjb2x1bW5zIHRvIGxpbmtlZCBpdGVtc1xuXG5cdFx0aWYgKCFoYXNUZW1wbGF0ZU9wdGlvbnMpIHtcblx0XHRcdGNvbnN0IGNhY2hlZFRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXNbaXRlbVR5cGVdO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNhY2hlZFRlbXBsYXRlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0KFxuXHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5VdGlsLnJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZShcblx0XHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0dGVtcGxhdGVDb2x1bW5zW2NvbHVtbkl0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdGNhY2hlZFRlbXBsYXRlLnJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY2FjaGVkVGVtcGxhdGUgYXMgVGVtcGxhdGU8SXRlbVR5cGVUeXBlPik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFxuXHRcdFx0e1xuXHRcdFx0XHR0ZW1wbGF0ZTogdGhpcy5hcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgdGVtcGxhdGVPcHRpb25zKSxcblx0XHRcdFx0YWRkaXRpb25hbENvbHVtbnM6IGNvbHVtbkl0ZW1UeXBlID09PSBudWxsID9cblx0XHRcdFx0XHR7fSA6XG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGNvbHVtbkl0ZW1UeXBlLCB0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdKVxuXHRcdFx0fVxuXHRcdCkudGhlbihcblx0XHRcdHJlc29sdmVkID0+IHtcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGVSZXNwb25zZSA9IHJlc29sdmVkLnRlbXBsYXRlO1xuXG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZUZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCB0ZW1wbGF0ZVJlc3BvbnNlLCByZXNvbHZlZC5hZGRpdGlvbmFsQ29sdW1ucyk7XG5cblx0XHRcdFx0aWYgKCFoYXNUZW1wbGF0ZU9wdGlvbnMgJiYgdGVtcGxhdGVSZXNwb25zZS5jYWNoZWFibGUpXG5cdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZXNbaXRlbVR5cGVdID0gdGVtcGxhdGU7XG5cblx0XHRcdFx0cmV0dXJuIHRlbXBsYXRlO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRFbnRyeVN0YXR1czxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXG5cdFx0ZGVmZXJSZXF1ZXN0OiBib29sZWFuLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0YWRkVG9Mb2NhbENhY2hlOiBib29sZWFuLFxuXHRcdGNvbHVtblN1YnNldENhY2hlOiBDb2x1bW5TdWJzZXRDYWNoZTxJdGVtVHlwZVR5cGU+XG5cdCk6IEVudHJ5U3RhdHVzPEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiB8IG51bGwge1xuXHRcdGxldCBpdGVtRW50cnk7XG5cblx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChpdGVtSWQpKSB7XG5cdFx0XHRpdGVtRW50cnkgPSBsb2NhbEl0ZW1DYWNoZS5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogaXRlbUVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBjb2x1bW5TdWJzZXRDYWNoZSl9O1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpdGVtRW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKSB7IC8vIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHJlbW90ZSBpdGVtIHRoYXQgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGdsb2JhbCBjYWNoZVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZW50cnk6IGFkZFRvTG9jYWxDYWNoZSA/IGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpIDogaXRlbUVudHJ5LFxuXHRcdFx0XHRzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBjb2x1bW5TdWJzZXRDYWNoZSlcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKCAvLyBjcmVhdGUgYSBuZXcgcmVtb3RlIGl0ZW1cblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0Y29sdW1uU3Vic2V0Q2FjaGUucmVxdWVzdENvbHVtbnMsXG5cdFx0XHRkZWZlclJlcXVlc3Rcblx0XHQpO1xuXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcblx0XHRcdGl0ZW1FbnRyeS5zZXRQYXJlbnQocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkKTtcblxuXHRcdGlmIChhZGRUb0xvY2FsQ2FjaGUpXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdHRoaXMuZW50cmllcy5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRlbnRyeTogaXRlbUVudHJ5LFxuXHRcdFx0c3RhdHVzOiBkZWZlclJlcXVlc3QgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOiBFTlRSWV9TVEFUVVMuUkVTT0xWRVxuXHRcdH07XG5cdH1cblxuXHRnZXRDYWNoZWRFbnRyeVN0YXR1czxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0Y29sdW1uU3Vic2V0Q2FjaGU6IENvbHVtblN1YnNldENhY2hlPEl0ZW1UeXBlVHlwZT5cblx0KTogRU5UUllfU1RBVFVTIHtcblx0XHRjb25zdCBjb2x1bW5TZXQgPSBpdGVtRW50cnkuY29sdW1ucztcblxuXHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XG5cdFx0XHRpZiAoaXRlbUVudHJ5LmRlZmVyUmVxdWVzdCkge1xuXHRcdFx0XHRjb2x1bW5TZXQuZXhwYW5kUmVxdWVzdENvbHVtbnMoY29sdW1uU3Vic2V0Q2FjaGUucmVxdWVzdENvbHVtbnMpO1xuXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNvbHVtblN1YnNldENhY2hlLnJ1bihjb2x1bW5TZXQpKVxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlBST01JU0VEO1xuXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmlzTG9jYWwoKSA/IEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRfTE9DQUwgOiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xuXHRcdH1cblxuXHRcdGlmICghY29sdW1uU3Vic2V0Q2FjaGUucnVuKGNvbHVtblNldCkpIHtcblx0XHRcdGl0ZW1FbnRyeS5kZWZlcigpO1xuXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmlzTG9jYWwoKSA/IEVOVFJZX1NUQVRVUy5FWFBBTkRfTE9DQUwgOiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xuXHRcdH1cblxuXHRcdGlmIChpdGVtRW50cnkucmVsb2FkUXVldWVkKSB7XG5cdFx0XHRpdGVtRW50cnkucmVsb2FkUXVldWVkID0gZmFsc2U7XG5cblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcblxuXHRcdFx0aXRlbUVudHJ5LmRlZmVyKCk7XG5cblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XG5cdH1cblxuXHRmZXRjaFRpdGxlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0ZGVmZXJSZXF1ZXN0OiBib29sZWFuID0gdHJ1ZSxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgdGl0bGVGaWVsZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKGl0ZW1UeXBlKTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoSXRlbShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0bmV3IEl0ZW1FbnRyeU9wdGlvbnMoe2NvbHVtbnM6IFt0aXRsZUZpZWxkXSwgZGVmZXJSZXF1ZXN0OiBkZWZlclJlcXVlc3R9KSxcblx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRGaWVsZHMoKVt0aXRsZUZpZWxkXTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Y3JlYXRlTG9jYWxFbnRyaWVzIChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRsb2NhbFBhcmVudElkOiBJdGVtSWQsXG5cdFx0dGVtcGxhdGU6IFRlbXBsYXRlPEl0ZW1UeXBlPixcblx0XHRpdGVtSWRDb252ZXJzaW9uOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXG5cdFx0ZmlsdGVySXRlbUVudHJ5OiAoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGU+KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZSAvLyByZXR1cm4gdHJ1ZSB0byBpbmNsdWRlIGl0ZW1cblx0KTogQXJyYXk8TGlua2VkSXRlbUVudHJ5TWFwPEl0ZW1UeXBlPj4ge1xuXHRcdGNvbnN0IGFwaVJlc3BvbnNlID0gdGVtcGxhdGUucmVzcG9uc2U7XG5cdFx0Y29uc3QgaXRlbUVudHJ5TWFwOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGU+Pn0gPSB7fTtcblx0XHRjb25zdCBjb2x1bW5TZXRNYXA6IHtbaXRlbVR5cGU6IHN0cmluZ106IENvbHVtblNldDxJdGVtVHlwZT59ID0ge307XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxMaW5rZWRJdGVtRW50cnlNYXA8SXRlbVR5cGU+PiA9IFtdO1xuXG5cdFx0Y29uc3QgY3JlYXRlRW50cmllcyA9IChfcGFyZW50VHlwZTogSXRlbVR5cGUsIF9sb2NhbFBhcmVudElkOiBJdGVtSWQsIGFwaVBhcmVudElkOiBJdGVtSWQpID0+IHtcblx0XHRcdGNvbnN0IHBhcmVudCA9IHtpdGVtVHlwZTogX3BhcmVudFR5cGUsIGl0ZW1JZDogX2xvY2FsUGFyZW50SWR9O1xuXHRcdFx0Y29uc3QgbGlua3MgPSBhcGlSZXNwb25zZS5pdGVtc1tfcGFyZW50VHlwZV1bYXBpUGFyZW50SWRdLmxpbmtzO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxpbmtzKSB7XG5cdFx0XHRcdGlmICghbGlua3MuaGFzT3duUHJvcGVydHkoaXRlbVR5cGUpKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdC8vIHRoZSBpdGVtIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByZXN1bHQgaW4gdG9wLWRvd24gb3JkZXJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyaWVzOiBpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0gW10sXG5cdFx0XHRcdFx0XHRcdGNvbHVtblNldDogY29sdW1uU2V0TWFwW2l0ZW1UeXBlXSA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBsaW5rc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbEl0ZW1JZCA9IGl0ZW1JZENvbnZlcnNpb25baXRlbVR5cGVdW2FwaUl0ZW1JZF07XG5cblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0TG9jYWxMaW5rZWQoXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdGxvY2FsSXRlbUlkLFxuXHRcdFx0XHRcdFx0YXBpUmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGFwaUl0ZW1JZCkhLFxuXHRcdFx0XHRcdFx0cGFyZW50LFxuXHRcdFx0XHRcdFx0Y29sdW1uU2V0TWFwW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdGl0ZW1JZENvbnZlcnNpb25cblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKCFmaWx0ZXJJdGVtRW50cnkoaXRlbUVudHJ5KSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0aXRlbUVudHJ5TWFwW2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0XHRjcmVhdGVFbnRyaWVzKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCwgYXBpSXRlbUlkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjcmVhdGVFbnRyaWVzKHBhcmVudFR5cGUsIGxvY2FsUGFyZW50SWQsIGFwaVJlc3BvbnNlLmxpbmtzW3BhcmVudFR5cGVdWzBdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRleHBhbmRMb2NhbEVudHJpZXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pj4ge1xuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1FbnRyaWVzKTtcblxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsKVxuXHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kTG9jYWwoZXhwYW5zaW9uUmVzdWx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlRGVyaXZlZFZhbHVlcyhpdGVtRW50cmllcywgY29sdW1uRXhwYW5zaW9uLmFnZ3JlZ2F0ZVJvb3RDb2x1bW5zKCksIGxvY2FsSXRlbUNhY2hlKTtcblx0fVxuXG5cdHJlc29sdmVEZXJpdmVkVmFsdWVzPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRjb2x1bW5zOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+LFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4+IHtcblx0XHRjb25zdCBwcm9taXNlczogQXJyYXk8UHJvbWlzZUludGVyZmFjZTxhbnk+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcblx0XHRcdHByb21pc2VzLnB1c2godGhpcy5mZXRjaERlcml2ZWRWYWx1ZXNCeUNvbHVtbihpdGVtRW50cmllcywgY29sdW1uLCBsb2NhbEl0ZW1DYWNoZSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKFxuXHRcdFx0KCkgPT4gaXRlbUVudHJpZXMsXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXREZWZhdWx0VmFsdWVzQnlDb2x1bW48SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJvb3RDb2x1bW46IENvbHVtbkluZm88SXRlbVR5cGVUeXBlPlxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBjaGlsZENvbHVtbnMgPSByb290Q29sdW1uLmNoaWxkcmVuO1xuXG5cdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHQvLyBubyBuZWVkIHRvIGRvIGEgcmVjdXJzaXZlIGNhbGwgaGVyZSwgZnVuY3Rpb24gd2lsbCBnZXQgY2FsbGVkIG11bHRpcGxlIHRpbWVzXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY2hpbGRDb2x1bW5zKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdFx0aXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRJdGVtSWRCeUNvbHVtbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0Y29sdW1uOiBDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT5cblx0KTogSXRlbUlkIHtcblx0XHRpZiAoY29sdW1uLmxldmVsID09PSAwKSB7XG5cdFx0XHRpZiAoY29sdW1uLmFwaUNvbHVtbi50eXBlID09PSAnbGluaycgJiYgaXRlbUVudHJ5LnBhcmVudCAhPT0gbnVsbClcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5wYXJlbnQuaXRlbUlkO1xuXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmdldEZpZWxkcygpW2NvbHVtbi5wYXRoXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdO1xuXHR9XG5cblx0cHJpdmF0ZSBmZXRjaERlcml2ZWRWYWx1ZXNCeUNvbHVtbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0cm9vdENvbHVtbjogQ29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+LFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTx2b2lkIHwgQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+PiB7XG5cdFx0Y29uc3QgY2hpbGRDb2x1bW5zID0gcm9vdENvbHVtbi5jaGlsZHJlbjtcblxuXHRcdGlmIChjaGlsZENvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0Y29uc3QgZmlyc3RDaGlsZCA9IGNoaWxkQ29sdW1uc1swXTtcblxuXHRcdGlmIChjaGlsZENvbHVtbnMubGVuZ3RoID09PSAxICYmIGZpcnN0Q2hpbGQuYXBpQ29sdW1uLnR5cGUgPT09ICdpZCcpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0XHRpdGVtRW50cnkuZGVyaXZlZFtmaXJzdENoaWxkLnBhdGhdID0gdGhpcy5nZXRJdGVtSWRCeUNvbHVtbihpdGVtRW50cnksIHJvb3RDb2x1bW4pO1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXRlbUlkTWFwOiB7W2l0ZW1JZDogc3RyaW5nXTogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+fSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkQnlDb2x1bW4oaXRlbUVudHJ5LCByb290Q29sdW1uKTtcblxuXHRcdFx0aWYgKGl0ZW1JZE1hcFtpdGVtSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdID0gW107XG5cblx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdLnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRpZiAoaXRlbUlkTWFwLm51bGwgIT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuc2V0RGVmYXVsdFZhbHVlc0J5Q29sdW1uKGl0ZW1JZE1hcC5udWxsLCByb290Q29sdW1uKTtcblxuXHRcdGNvbnN0IGl0ZW1JZHM6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtSWRNYXApIHtcblx0XHRcdGlmIChpdGVtSWQgPT09ICdudWxsJylcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGl0ZW1JZHMucHVzaCgraXRlbUlkKTtcblx0XHR9XG5cblx0XHRpZiAoaXRlbUlkcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cblx0XHRjb25zdCBjb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjaGlsZENvbHVtbnMpXG5cdFx0XHRjb2x1bW5JZHMucHVzaChjb2x1bW4uaWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hJdGVtcyhcblx0XHRcdHJvb3RDb2x1bW4uaXRlbVR5cGUhLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKHtjb2x1bW5zOiBjb2x1bW5JZHN9KSxcblx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0KS50aGVuKFxuXHRcdFx0c291cmNlSXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBzb3VyY2VJdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeUZpZWxkcyA9IGl0ZW1FbnRyeS5nZXRGaWVsZHMoKTtcblx0XHRcdFx0XHRjb25zdCBkZXN0aW5hdGlvbkl0ZW1FbnRyaWVzID0gaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBkZXN0aW5hdGlvbkl0ZW1FbnRyeSBvZiBkZXN0aW5hdGlvbkl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjaGlsZENvbHVtbnMpXG5cdFx0XHRcdFx0XHRcdGRlc3RpbmF0aW9uSXRlbUVudHJ5LmRlcml2ZWRbY29sdW1uLnBhdGhdID0gaXRlbUVudHJ5RmllbGRzW2NvbHVtbi5pZF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIGNoaWxkQ29sdW1ucywgbG9jYWxJdGVtQ2FjaGUpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0SXRlbSAoaXRlbUVudHJ5OiBJdGVtRW50cnk8YW55PiwgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zID0gaXRlbUVudHJ5LmNvbHVtbnMucmVxdWVzdCkge1xuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RJdGVtcyhpdGVtRW50cnkuaXRlbVR5cGUsIFtpdGVtRW50cnkuaXRlbUlkXSwgcmVxdWVzdENvbHVtbnMpO1xuXHR9XG5cblx0cmVxdWVzdEl0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZHM6IEl0ZW1JZFtdLCBjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiBpdGVtSWRzfSwge1tpdGVtVHlwZV06IGNvbHVtbnN9KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IsIENvbHVtbkV4cGFuc2lvbiwgQ29sdW1uU2V0LCBJdGVtSGFuZGxlciwgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBBcGlRdWVyeSwgQXBpUmVxdWVzdENvbHVtbnMsIEFwaVJlc3BvbnNlLCBFbnRyeVBhcmVudE51bGwsIEl0ZW1JZCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IHBhdGhFeGlzdHMgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlcXVlc3RTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdHJlcXVlc3RJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHtpZDogaXRlbUlkfSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zXG5cdFx0KTtcblx0fVxuXG5cdHJlcXVlc3RJdGVtczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0cXVlcnk6IEFwaVF1ZXJ5ID0gY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCxcblx0XHRjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnNcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKFxuXHRcdFx0e1xuXHRcdFx0XHRyZXF1ZXN0VHlwZTogJ3F1ZXJ5Jyxcblx0XHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0XHRjb2x1bW5zOiB7W2l0ZW1UeXBlXTogY29sdW1uc30sXG5cdFx0XHRcdHF1ZXJ5OiBxdWVyeSxcblx0XHRcdFx0bGltaXQ6IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmxpbWl0XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdHJlcXVlc3RMaW5rSXRlbXMgKFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRxdWVyeTogQXBpUXVlcnksXG5cdFx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbnNcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgP1xuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0e2lkOiBwYXJlbnRJZEFycmF5fSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHRcdCkgOlxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHR7bGlua2VkVG86IHBhcmVudFR5cGUsIHF1ZXJ5OiB7aWQ6IHBhcmVudElkQXJyYXl9fVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyAvLyBzaG91bGQgY29udGFpbiBhIGRlcml2ZWQgY29sdW1uIHRoYXQgcmVmZXJzIHRvIHRoZSBwYXJlbnRcblx0XHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzRXhwYW5zaW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj5cblx0KSB7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oaXRlbUVudHJ5LCByZXNwb25zZSwgY29sdW1uRXhwYW5zaW9uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uO1xuXHR9XG5cblx0cHJvY2Vzc1Jlc3BvbnNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4sXG5cdFx0Y29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb248SXRlbVR5cGVUeXBlPiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRjb2x1bW5TZXQuaXRlbVR5cGUsXG5cdFx0XHRjb2x1bW5TZXQucmVxdWVzdENvbHVtbnNUcnVlID8gdHJ1ZSA6IGNvbHVtblNldC5yZXF1ZXN0LFxuXHRcdFx0Y29sdW1uU2V0LnJlc3BvbnNlXG5cdFx0KVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pj4ge1xuXHRcdGNvbnN0IGl0ZW1IYW5kbGVyID0gdGhpcy5pdGVtSGFuZGxlcjtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtblNldC5pdGVtVHlwZTtcblx0XHRjb25zdCByb290Q29sdW1ucyA9IGNvbHVtblNldC5yb290O1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+PiA9IFtdO1xuXG5cdFx0Ly8gc2hvdWxkIGJlIGZhc3QuLi5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpZEFycmF5KSB7XG5cdFx0XHRsZXQgaXRlbUVudHJ5ID0gaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGl0ZW1JZCxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSEsXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcblx0XHRcdFx0XHRjb2x1bW5TZXRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpdGVtSGFuZGxlci5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xuXHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSkge1xuXHRcdFx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XG5cdFx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpISxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtblNldFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5LmdldFByb21pc2UoKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWxvYWRRdWV1ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRpdGVtRW50cnkudXBkYXRlRmllbGRzKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCkhLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcblx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2godGhpcy5oYW5kbGVDYWNoZWRJdGVtKGl0ZW1FbnRyeSwgcmVzcG9uc2UsIGNvbHVtbkV4cGFuc2lvbikpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZEVudHJpZXMgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHJlc29sdmVkRW50cnkgb2YgcmVzb2x2ZWRFbnRyaWVzKSB7XG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWRFbnRyeSxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGhhbmRsZUNhY2hlZEl0ZW08SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbjxJdGVtVHlwZVR5cGU+XG5cdCkge1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbCA/XG5cdFx0XHRpdGVtRW50cnkgOlxuXHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkKSEsXG5cdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChcblx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdFx0XHRleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290XG5cdFx0XHRcdCksXG5cdFx0XHRcdGV4cGFuc2lvblJlc3VsdFxuXHRcdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NMaW5rUmVzcG9uc2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBhbnlcblx0KSB7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0Y29uc3QgY29sdW1uU2V0ID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0XHRjb25zdCBwYXJlbnRJdGVtcyA9IHJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGVdO1xuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0cHJvbWlzZXNbcGFyZW50SWRdID0gcGF0aEV4aXN0cyhwYXJlbnRJdGVtcywgW3BhcmVudElkLCAnbGlua3MnLCBpdGVtVHlwZV0pID9cblx0XHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cGFyZW50SXRlbXNbcGFyZW50SWRdLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHR7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9LFxuXHRcdFx0XHRcdGNvbHVtblNldCxcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0KSA6XG5cdFx0XHRcdFtdO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcykudGhlbihcblx0XHRcdHJlc29sdmVkID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRpdGVtczogcmVzb2x2ZWQsXG5cdFx0XHRcdFx0Y29sdW1uczogY29sdW1uU2V0LFxuXHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvbjogY29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgRFVQTElDQVRFX0tFWVdPUkQsIERVUExJQ0FURV9QUkVGSVgsIE5FV19LRVlXT1JELCBORVdfUFJFRklYIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEl0ZW1JZCwgU3RhdGVLZXksIFN0YXRlS2V5VHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEtleVNlcnZpY2Uge1xuXHRzZXBhcmF0b3I6IHN0cmluZyA9ICc6JztcblxuXHRjb25zdHJ1Y3RvciAoKSB7fVxuXG5cdGdldFNpbmdsZUtleSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBpdGVtVHlwZSArIHRoaXMuc2VwYXJhdG9yICsgaXRlbUlkO1xuXHR9XG5cblx0Z2V0Q3NzS2V5ICguLi5hcmdzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYXJncy5qb2luKCdfJyk7XG5cdH1cblxuXHRwYXJzZVN0YXRlS2V5IChzdGF0ZUtleTogc3RyaW5nKTogU3RhdGVLZXkgfCBudWxsIHtcblx0XHRzdGF0ZUtleSA9IHN0YXRlS2V5LnRvU3RyaW5nKCk7XG5cblx0XHRpZiAoc3RhdGVLZXkuc3Vic3RyaW5nKDAsIE5FV19LRVlXT1JELmxlbmd0aCkgPT09IE5FV19LRVlXT1JEKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogU3RhdGVLZXlUeXBlLk5ldyxcblx0XHRcdFx0dGVtcGxhdGU6IHN0YXRlS2V5LnN1YnN0cmluZyhORVdfS0VZV09SRC5sZW5ndGgpIC8vIFRPRE86IHRoaXMgaXMgY3VycmVudGx5IG5vdCBiZWluZyB1c2VkLCByZWV2YWx1YXRlXG5cdFx0XHR9O1xuXG5cdFx0aWYgKHN0YXRlS2V5LnN1YnN0cmluZygwLCBEVVBMSUNBVEVfS0VZV09SRC5sZW5ndGgpID09PSBEVVBMSUNBVEVfS0VZV09SRClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IFN0YXRlS2V5VHlwZS5EdXBsaWNhdGUsXG5cdFx0XHRcdGl0ZW1JZDogK3N0YXRlS2V5LnN1YnN0cmluZyhEVVBMSUNBVEVfS0VZV09SRC5sZW5ndGgpXG5cdFx0XHR9O1xuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXREdXBsaWNhdGVTdGF0ZUtleSAoaXRlbUlkOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuXHRcdHJldHVybiBEVVBMSUNBVEVfS0VZV09SRCArIGl0ZW1JZDtcblx0fVxuXG5cdGdldE5ld1N0YXRlS2V5ICh0ZW1wbGF0ZVR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIE5FV19LRVlXT1JEICsgdGVtcGxhdGVUeXBlO1xuXHR9XG5cblx0Z2V0TG9jYWxJZCAoKTogSXRlbUlkIHtcblx0XHRyZXR1cm4gKyhORVdfUFJFRklYICsgdGhpcy5nZXRSYW5kb21TdHJpbmcoKSk7XG5cdH1cblxuXHRnZXRMb2NhbER1cGxpY2F0ZUlkICgpOiBJdGVtSWQge1xuXHRcdHJldHVybiArKERVUExJQ0FURV9QUkVGSVggKyB0aGlzLmdldFJhbmRvbVN0cmluZygpKTtcblx0fVxuXG5cdGdldFJhbmRvbVN0cmluZyAoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKCcnICsgTWF0aC5yYW5kb20oKSkuc3BsaXQoJy4nKVsxXS5zdWJzdHIoMCwgOCk7XG5cdH1cblxuXHQvLyBub3RlOiB0aGUgY2hhbmdlcyBjb21waWxlciB1c2VzIHRoaXNcblx0Ly8gbWlnaHQgYmUgY2FsbGVkIHdpdGggdW5kZWZpbmVkIChpdGVtSGFuZGxlci5jcmVhdGVSZXF1ZXN0KVxuXHRpc0xvY2FsSWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGl0ZW1JZCAhPT0gdW5kZWZpbmVkICYmICh0aGlzLmlzTmV3SWQoaXRlbUlkKSB8fCB0aGlzLmlzRHVwbGljYXRlSWQoaXRlbUlkKSk7XG5cdH1cblxuXHRpc05ld0lkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBpdGVtSWQgPT09IE5FV19LRVlXT1JEIHx8ICgnJyArIGl0ZW1JZCkuc3Vic3RyaW5nKDAsIE5FV19QUkVGSVgubGVuZ3RoKSA9PT0gTkVXX1BSRUZJWDtcblx0fVxuXG5cdGlzRHVwbGljYXRlSWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGl0ZW1JZCA9PT0gRFVQTElDQVRFX0tFWVdPUkQgfHwgKCcnICsgaXRlbUlkKS5zdWJzdHJpbmcoMCwgRFVQTElDQVRFX1BSRUZJWC5sZW5ndGgpID09PSBEVVBMSUNBVEVfUFJFRklYO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciwgQ29sbGVjdGlvbk1hdGNoZXIsIENvbHVtblNldCwgTG9jYWxDYWNoZSwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeSxcblx0Q29sbGVjdGlvbkVudHJ5T3B0aW9ucyxcblx0Q29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSxcblx0Q29sbGVjdGlvblJlc291cmNlLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRJdGVtRW50cnksXG5cdEl0ZW1FbnRyeU9wdGlvbnNJbnRlcmZhY2UsXG5cdEl0ZW1SZXNvdXJjZSxcblx0SXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxufSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgdHlwZSBFbnRyeVBhcmVudCA9IHtpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlcn07XG5cbmV4cG9ydCB0eXBlIEVudHJ5UGFyZW50TnVsbCA9IEVudHJ5UGFyZW50IHwgbnVsbDtcblxuLy8gIF9JdGVtVHlwZVR5cGUgaXMgcHVyZWx5IHRoZXJlIHRvIGF1dG9tYXRpY2FsbHkgaW5mZXIgdGhlIEl0ZW1UeXBlIG9mIEl0ZW1FbnRyaWVzIGluIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW86XG4vLyBjb25zdCBJdGVtRW50cnkgPSBjb3JlLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KCA8LSBJdGVtRW50cnkgd2lsbCBiZSBvZiBJdGVtVHlwZSAnRmlsZXMnIGJlY2F1c2Ugb2YgJ3Jlc3BvbnNlUHJvY2Vzc29yLmZldGNoT2JqZWN0J1xuLy8gXHRpdGVtSWQsXG4vLyBcdHJlc3BvbnNlUHJvY2Vzc29yLmZldGNoT2JqZWN0KCdGaWxlcycsIGl0ZW1JZCksXG4vLyBcdHt9LFxuLy8gXHRjb2x1bW5JbmZvXG4vLyApO1xuZXhwb3J0IHR5cGUgRmllbGRNYXA8X0l0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlID0gYW55PiA9IHtcblx0W2tleTogc3RyaW5nXTogYW55XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtT3B0aW9uc0ludGVyZmFjZSA9IEl0ZW1FbnRyeU9wdGlvbnNJbnRlcmZhY2UgJiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlO1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSA9IGFueT4gPVxuXHRDb2xsZWN0aW9uRW50cnlPcHRpb25zSW50ZXJmYWNlXG5cdCYgQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25EZWZpbml0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlID0gYW55PiB7XG5cdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGU7XG5cdG9wdGlvbnM6IHtlbnRyeTogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucywgcmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnM8SXRlbVR5cGVUeXBlPn07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlua0NvbGxlY3Rpb25EZWZpbml0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlID0gYW55PiBleHRlbmRzIENvbGxlY3Rpb25EZWZpbml0aW9uPEl0ZW1UeXBlVHlwZT4ge1xuXHRsaW5rRmllbGQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgT25DaGFuZ2VGdW5jdGlvbjxJdGVtUmVzb3VyY2VUeXBlIGV4dGVuZHMgSXRlbVJlc291cmNlPGFueT4gPSBJdGVtUmVzb3VyY2U8YW55Pj4gPSAoXG5cdGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlVHlwZSxcblx0cHJldmlvdXM/OiBGaWVsZE1hcFxuKSA9PiB2b2lkO1xuXG5leHBvcnQgY29uc3QgZW51bSBTdGF0ZUtleVR5cGUge1xuXHROZXcgPSAnbmV3Jyxcblx0RHVwbGljYXRlID0gJ2R1cGxpY2F0ZSdcbn1cblxuZXhwb3J0IHR5cGUgU3RhdGVLZXkgPSB7dHlwZTogU3RhdGVLZXlUeXBlLCB0ZW1wbGF0ZT86IHN0cmluZywgaXRlbUlkPzogbnVtYmVyfTtcblxuZXhwb3J0IHR5cGUgT25TYXZlQ2FsbGJhY2sgPSAobG9jYWxDYWNoZTogTG9jYWxDYWNoZSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gYW55O1xuXG5leHBvcnQgZW51bSBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24ge1xuXHRBbHdheXMgPSAnYWx3YXlzJyxcblx0T25DbG9zZSA9ICdvbkNsb3NlJyxcblx0U2tpcE9uQ2xvc2UgPSAnc2tpcE9uQ2xvc2UnXG59XG5cbmV4cG9ydCB0eXBlIExvY2FsQ2FjaGVDYWxsYmFja3M8VD4gPSB7XG5cdGFsd2F5czoge1trZXk6IHN0cmluZ106IFR9LFxuXHRvbkNsb3NlOiB7W2tleTogc3RyaW5nXTogVH0sXG5cdHNraXBPbkNsb3NlOiB7W2tleTogc3RyaW5nXTogVH1cbn07XG5cbmV4cG9ydCB0eXBlIFNvY2tldE1lc3NhZ2VUeXBlID0gJ2V2ZW50JyB8ICdub3RpZmljYXRpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvY2tldE1lc3NhZ2Uge1xuXHRoZWFkZXI6IHtcblx0XHRkb21haW46IHN0cmluZyxcblx0XHRhY2NvdW50OiBzdHJpbmcsXG5cdFx0c2VuZGVyOiB7XG5cdFx0XHRkaXNwbGF5bmFtZTogc3RyaW5nLFxuXHRcdFx0aXRlbVR5cGU6ICdNZWRld2Vya2VyJyxcblx0XHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdFx0YXV0aG9yaXplZDogYm9vbGVhbixcblx0XHRcdHNlc3Npb246IHN0cmluZ1xuXHRcdH0sXG5cdFx0bWVzc2FnZUlkOiB7XG5cdFx0XHRJZDogc3RyaW5nLFxuXHRcdFx0c2VxdWVuY2U6IG51bWJlcixcblx0XHRcdGJhdGNoOiBudW1iZXIsXG5cdFx0XHRyZXF1ZXN0OiBudW1iZXJcblx0XHR9LFxuXHRcdHNlbnQ6IHN0cmluZyxcblx0XHRmb3JjZUV2YWx1YXRlOiBib29sZWFuXG5cdH07XG5cdGJvZHk6IGFueTtcblx0bWVzc2FnZVR5cGU6IFNvY2tldE1lc3NhZ2VUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmVTb2NrZXRNZXNzYWdlIGV4dGVuZHMgU29ja2V0TWVzc2FnZSB7XG5cdGJvZHk6IHtcblx0XHRpdGVtVHlwZTogJ0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUnLFxuXHRcdFtrZXk6IHN0cmluZ106IGFueVxuXHR9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJdGVtIHJlc291cmNlXG5cbmV4cG9ydCB0eXBlIEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcDxUIGV4dGVuZHMgSXRlbVJlc291cmNlPGFueT4gPSBJdGVtUmVzb3VyY2U8YW55Pj4gPSB7XG5cdFtpdGVtSWQ6IG51bWJlcl06IFRcbn07XG5cbmV4cG9ydCB0eXBlIEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxUIGV4dGVuZHMgSXRlbVJlc291cmNlPGFueT4gPSBJdGVtUmVzb3VyY2U8YW55Pj4gPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXTogVFtdXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJdGVtIEVudHJ5XG5cbmV4cG9ydCB0eXBlIEl0ZW1JZCA9IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgSXRlbVR5cGUgPSBzdHJpbmc7XG5cbmV4cG9ydCB0eXBlIEl0ZW1NYXA8VD4gPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFtpdGVtSWQ6IHN0cmluZ106IFRcblx0fVxufTtcblxuZXhwb3J0IHR5cGUgSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiA9IEl0ZW1NYXA8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+O1xuXG5leHBvcnQgdHlwZSBMaW5rZWRJdGVtRW50cnlNYXA8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUgPSBhbnk+ID0ge1xuXHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRjb2x1bW5TZXQ6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+XG59O1xuXG5leHBvcnQgdHlwZSBFbnRyeVN0YXR1c01hcDxUPiA9IHtcblx0W2VudHJ5U3RhdHVzOiBzdHJpbmddOiBUW107XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtRW50cnlQYXJlbnRJZE1hcDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gPSB7XG5cdFtwYXJlbnRJZDogbnVtYmVyXTogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+O1xufTtcblxuZXhwb3J0IHR5cGUgQ29udmVyc2lvbk1hcCA9IHtcblx0W2l0ZW1JZDogbnVtYmVyXTogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgSXRlbUlkQ29udmVyc2lvbk1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBDb252ZXJzaW9uTWFwXG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwPFQgPSBhbnk+ID0gSXRlbU1hcDxUPjtcblxuZXhwb3J0IHR5cGUgSXRlbUVycm9yID0ge21lc3NhZ2U6IHN0cmluZ307XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENvbGxlY3Rpb24gRW50cnlcblxuZXhwb3J0IHR5cGUgUXVlcnlQYXJhbXMgPSBhbnk7IC8vIFRPRE9cblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblF1ZXJ5ID0ge29iamVjdDogb2JqZWN0LCBzdHJpbmc6IHN0cmluZ307XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q2FsbGJhY2sgPSAocXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zKSA9PiBRdWVyeVBhcmFtcztcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ID0ge1xuXHRbcGFyZW50SWQ6IG51bWJlcl06IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+XG59O1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxUIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPGFueT4gPSBDb2xsZWN0aW9uUmVzb3VyY2U8YW55Pj4gPSB7XG5cdFtwYXJlbnRJZDogbnVtYmVyXTogVFxufTtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbk1hdGNoUmVzdWx0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiA9IHtcblx0Zml0dGluZzogQXJyYXk8Q29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRub3RmaXR0aW5nOiBBcnJheTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdG1heWJlOiBBcnJheTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj5cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IGV4dGVuZHMgQ29sbGVjdGlvbk1hdGNoUmVzdWx0PEl0ZW1UeXBlVHlwZT4ge1xuXHRjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IHtcblx0W2NvbGxlY3Rpb25JZDogbnVtYmVyXTogRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8SXRlbVR5cGVUeXBlPjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ29sdW1uc1xuXG5leHBvcnQgdHlwZSBSZXNwb25zZUNvbHVtbiA9IGFueTsgLy8gVE9ET1xuXG5leHBvcnQgdHlwZSBSZXNwb25zZUNvbHVtbk1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiB7XG5cdFx0W2NvbHVtbklkOiBzdHJpbmddOiBSZXNwb25zZUNvbHVtblxuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBDb2x1bW5FeHBhbnNpb25SZXN1bHQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ID0ge1xuXHRtZXJnZWQ6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+LFxuXHRkaWZmZXJlbmNlOiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPlxufTtcblxuZXhwb3J0IHR5cGUgUm9vdENvbHVtbk1hcCA9IHtbY29sdW1uSWQ6IHN0cmluZ106IHthcGlDb2x1bW46IFJlc3BvbnNlQ29sdW1uLCBjaGlsZHJlbjogUm9vdENvbHVtbk1hcH19O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBcGkgcmVmZXJlbmNlXG5cbmV4cG9ydCB0eXBlIEFwaVJlc3BvbnNlID0gQXBpUmVzcG9uc2VQcm9jZXNzb3I7IC8vIFRPRE9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQXBpIHRlbXBsYXRlIHJlc3BvbnNlXG5leHBvcnQgdHlwZSBUZW1wbGF0ZUl0ZW1SZXNvdXJjZU1hcDxUIGV4dGVuZHMgSXRlbVJlc291cmNlPGFueT4+ID0ge1xuXHRtYWluOiBUO1xuXHRsaW5rZWQ6IEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcFxufTtcblxuZXhwb3J0IHR5cGUgVGVtcGxhdGVJdGVtRW50cnlNYXA8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ID0ge1xuXHRtYWluOiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPjtcblx0bGlua2VkOiBBcnJheTxMaW5rZWRJdGVtRW50cnlNYXA8SXRlbVR5cGU+Pjtcbn07XG5cbmV4cG9ydCB0eXBlIEl0ZW1UeXBlTWFwID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIEVudHJ5U3RhdHVzPFQ+ID0ge1xuXHRlbnRyeTogVDtcblx0c3RhdHVzOiBFTlRSWV9TVEFUVVM7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBcGkgcmVxdWVzdFxuXG5leHBvcnQgdHlwZSBBcGlRdWVyeSA9IGFueTsgLy8gVE9ET1xuXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0SXRlbVZhbHVlcyA9IHtcblx0dmFsdWVzPzogYW55LFxuXHRsaW5rcz86IHtcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1JZFtdXG5cdH1cbn07XG5cbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RJdGVtTWFwID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRbaXRlbUlkOiBudW1iZXJdOiBBcGlSZXF1ZXN0SXRlbVZhbHVlc1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdENvbHVtbiA9IHN0cmluZyB8IHtbY29sdW1uSWQ6IHN0cmluZ106IEFwaVJlcXVlc3RDb2x1bW5bXX07XG5cbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RDb2x1bW5zID0gQXBpUmVxdWVzdENvbHVtbltdIHwgdHJ1ZTtcblxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdENvbHVtbk1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBBcGlSZXF1ZXN0Q29sdW1uc1xufTtcblxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdExpbWl0ID0ge1xuXHRmaWVsZDogc3RyaW5nLFxuXHRsaW1pdDogbnVtYmVyLFxuXHRvZmZzZXQ/OiBudW1iZXIsXG5cdG9yZGVyPzogJ2Rlc2MnIHwgJ2FzYydcbn07XG5cbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RNb3ZlSXRlbXMgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXTogSXRlbUlkW11cbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENyZWF0ZSByZXF1ZXN0XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVJlcXVlc3RFbnRyeTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gPSB7XG5cdHJlcXVlc3Q6IHtcblx0XHRyZXF1ZXN0VHlwZTogJ2NyZWF0ZScsXG5cdFx0aXRlbVR5cGU/OiBJdGVtVHlwZVR5cGUsXG5cdFx0cGFyZW50VHlwZT86IEl0ZW1UeXBlLFxuXHRcdHBhcmVudElkPzoge1tpdGVtSWQ6IHN0cmluZ106IEl0ZW1JZH0sXG5cdFx0aXRlbXM6IEFwaVJlcXVlc3RJdGVtTWFwLFxuXHRcdGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5NYXBcblx0fSxcblx0Y29sdW1uczogUmVxdWVzdENvbHVtbkV4cGFuc2lvbixcblx0aXRlbXM6IEl0ZW1FbnRyeU1hcDxJdGVtVHlwZVR5cGU+LFxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbk1hdGNoZXI8SXRlbVR5cGVUeXBlPlxufTtcbiIsImV4cG9ydCAqIGZyb20gJy4vSXRlbVR5cGVzQ29sbGVjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL1Byb21pc2VJbnRlcmZhY2UnO1xuIiwiaW1wb3J0IHsgQ2hhbmdlc1Byb2Nlc3NvciwgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUsIExvY2tTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LCBJdGVtQ2FjaGVGYWN0b3J5LCBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FZGl0UmVzb3VyY2UsXG5cdENvbGxlY3Rpb25FbnRyeSxcblx0Q29sbGVjdGlvblJlc291cmNlLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRDb2xsZWN0aW9uVmlld1Jlc291cmNlLFxuXHRFZGl0UmVzb3VyY2UsXG5cdEl0ZW1FbnRyeSxcblx0SXRlbVJlc291cmNlLFxuXHRMb2NhbFZpZXdSZXNvdXJjZSxcblx0UmVtb3RlVmlld1Jlc291cmNlXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAsXG5cdENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRJdGVtVHlwZSxcblx0TG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLFxuXHRMb2NhbENhY2hlQ2FsbGJhY2tzLFxuXHRPblNhdmVDYWxsYmFjayxcblx0UHJvbWlzZUludGVyZmFjZVxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlIHtcblx0cHVibGljIHJlYWRvbmx5IGl0ZW1zOiBJdGVtQ2FjaGU7XG5cdHB1YmxpYyByZWFkb25seSBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXHRwdWJsaWMgcmVhZG9ubHkgZGVmZXJyZWRDb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXG5cdHB1YmxpYyByb290SXRlbTogSXRlbUVudHJ5PGFueT4gfCB1bmRlZmluZWQ7XG5cdHB1YmxpYyB0YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xuXG5cdHB1YmxpYyBpc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdHByaXZhdGUgY2FsbGJhY2tzOiB7XG5cdFx0b25CZWZvcmVTYXZlOiBMb2NhbENhY2hlQ2FsbGJhY2tzPChsb2NhbENhY2hlOiBMb2NhbENhY2hlKSA9PiBhbnk+LFxuXHRcdG9uU2F2ZVN1Y2Nlc3M6IExvY2FsQ2FjaGVDYWxsYmFja3M8T25TYXZlQ2FsbGJhY2s+LFxuXHR9ID0ge1xuXHRcdG9uQmVmb3JlU2F2ZToge2Fsd2F5czoge30sIG9uQ2xvc2U6IHt9LCBza2lwT25DbG9zZToge319LFxuXHRcdG9uU2F2ZVN1Y2Nlc3M6IHthbHdheXM6IHt9LCBvbkNsb3NlOiB7fSwgc2tpcE9uQ2xvc2U6IHt9fVxuXHR9O1xuXG5cdHByaXZhdGUgY2hhbmdlc0ludGVydmFsOiBudWxsIHwgbnVtYmVyID0gbnVsbDtcblx0cHVibGljIGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGV4Y2VwdGlvbkhhbmRsZXI6IEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwdWJsaWMgaWQ6IHN0cmluZyxcblx0XHRwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFJlc291cmNlTGV2ZWw6IG51bWJlclxuXHQpIHtcblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZUl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KTogRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT47XG5cblx0cHVibGljIGNyZWF0ZUl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpOiBSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPjtcblxuXHRwdWJsaWMgY3JlYXRlSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpOiBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+O1xuXG5cdHB1YmxpYyBjcmVhdGVJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxldmVsOiBudW1iZXIgPSB0aGlzLmRlZmF1bHRSZXNvdXJjZUxldmVsLFxuXHRcdGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpIHtcblx0XHRpZiAoaXNSb290KVxuXHRcdFx0dGhpcy5yb290SXRlbSA9IGl0ZW1FbnRyeTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGl0ZW1FbnRyeSwgb3B0aW9ucywgbGV2ZWwsIHRoaXMsIGlzTmV3KTtcblx0fVxuXG5cdHB1YmxpYyBjcmVhdGVJdGVtUmVzb3VyY2VzPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBBcnJheTxFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0cHVibGljIGNyZWF0ZUl0ZW1SZXNvdXJjZXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQXJyYXk8UmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdHB1YmxpYyBjcmVhdGVJdGVtUmVzb3VyY2VzPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBBcnJheTxMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwdWJsaWMgY3JlYXRlSXRlbVJlc291cmNlczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw6IG51bWJlciA9IHRoaXMuZGVmYXVsdFJlc291cmNlTGV2ZWxcblx0KTogQXJyYXk8SXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3RvcjxJdGVtVHlwZVR5cGU+KG9wdGlvbnMsIGxldmVsLCB0aGlzKTtcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaChjb25zdHJ1Y3RvcihpdGVtRW50cnkpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0SXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdHB1YmxpYyBjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge3JlbW90ZUl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwdWJsaWMgY3JlYXRlQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdHB1YmxpYyBjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwdWJsaWMgY3JlYXRlQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtyZW1vdGVJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwdWJsaWMgY3JlYXRlQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPixcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0cHVibGljIGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw6IG51bWJlciA9IHRoaXMuZGVmYXVsdFJlc291cmNlTGV2ZWxcblx0KTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSwgSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChjb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucywgbGV2ZWwsIHRoaXMpO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0SXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+PjtcblxuXHRwdWJsaWMgY3JlYXRlQ29sbGVjdGlvblJlc291cmNlczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcDxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge3JlbW90ZUl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0cHVibGljIGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+PjtcblxuXHRwdWJsaWMgY3JlYXRlQ29sbGVjdGlvblJlc291cmNlczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcDxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0cHVibGljIGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtyZW1vdGVJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0cHVibGljIGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPixcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+O1xuXG5cdHB1YmxpYyBjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPEl0ZW1UeXBlVHlwZT4sXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSwgSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+PiB7XG5cdFx0Y29uc3QgcmVzdWx0OiB7W3BhcmVudElkOiBzdHJpbmddOiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPn0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbkVudHJpZXMpXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gdGhpcy5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoY29sbGVjdGlvbkVudHJpZXNbcGFyZW50SWRdLCByZXNvdXJjZU9wdGlvbnMsIGxldmVsKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXJJdGVtIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZTxhbnk+KTogdm9pZCB7XG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtUmVzb3VyY2UuZW50cnkpO1xuXHR9XG5cblx0cHVibGljIGNsZWFySXRlbUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+KTogdm9pZCB7XG5cdFx0dGhpcy5pdGVtcy5jbGVhcihpdGVtRW50cnkpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5jYWNoZS5jbGVhckVudHJ5KGl0ZW1FbnRyeSk7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXJDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZTxhbnk+KTogdm9pZCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvblJlc291cmNlLmVudHJ5O1xuXG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5jbGVhcihjb2xsZWN0aW9uRW50cnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeS5jYWNoZS5jbGVhckVudHJ5KGNvbGxlY3Rpb25FbnRyeSk7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXJEZWZlcnJlZENvbGxlY3Rpb25zICgpOiB2b2lkIHtcblx0XHR0aGlzLmRlZmVycmVkQ29sbGVjdGlvbnMuY2xlYXIoKTtcblx0fVxuXG5cdHB1YmxpYyB1cGRhdGVTaW5nbGVJdGVtcyAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBvbGRJdGVtSWQgaW4gY29udmVyc2lvbk1hcFtpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtcy5nZXQoaXRlbVR5cGUsIHBhcnNlSW50KG9sZEl0ZW1JZCwgMTApKTtcblxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0dGhpcy5pdGVtcy51cGRhdGVJdGVtSWQoaXRlbUVudHJ5LCBwYXJzZUludChvbGRJdGVtSWQsIDEwKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmVzb3VyY2VzIHdpbGwgYmUgY2xlYXJlZCBsYXRlciAoY2xlYXIgZnVuY3Rpb24pXG5cdHB1YmxpYyByZXZlcnRDaGFuZ2VzICgpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHR0aGlzLml0ZW1zLmZvckVhY2goXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGU+KSA9PiBpdGVtRW50cnkucmVzZXRNb2RpZmllZCgpXG5cdFx0KTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbnMuZm9yRWFjaChcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZT4pID0+IHRoaXMucmVzZXRDb2xsZWN0aW9uKGNvbGxlY3Rpb25FbnRyeSlcblx0XHQpO1xuXG5cdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5pc0xvY2thYmxlKCkgP1xuXHRcdFx0dGhpcy5sb2NrU2VydmljZS5kZWxldGVMb2NrKHRoaXMucm9vdEl0ZW0hKSA6XG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdHB1YmxpYyByZXNldENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PGFueT4pOiB2b2lkIHtcblx0XHQvLyByZXZlcnQgY2hhbmdlcyBmb3IgKmFsbCogY29sbGVjdGlvbnMsIGl0ZW1zIG1pZ2h0IGhhdmUgYmVlbiBhZGRlZCBvbiByZXNvbHZlXG5cdFx0Y29sbGVjdGlvbkVudHJ5Lml0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmluaXRpYWwuc2xpY2UoKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyeS5pdGVtcylcblx0XHRcdFx0aXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZGV0ZWN0Q2hhbmdlcyAoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuaGFzQ2hhbmdlcylcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKHRoaXMuaXRlbXMuc29tZSgoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGU+KSA9PiBpdGVtRW50cnkuaGFzQ2hhbmdlcygpKSlcblx0XHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuaGFzQ2hhbmdlcyA9IHRoaXMuY29sbGVjdGlvbnMuc29tZSgoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGU+KSA9PiB0aGlzLmNvbGxlY3Rpb25IYXNDaGFuZ2VzKGNvbGxlY3Rpb25FbnRyeSkpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFzQ2hhbmdlcyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8YW55Pik6IGJvb2xlYW4ge1xuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcyAmJiAoY29sbGVjdGlvbkVudHJ5Lmhhc0FkZGVkSXRlbXMoKSB8fCBjb2xsZWN0aW9uRW50cnkuaGFzUmVtb3ZlZEl0ZW1zKCkpKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzICYmIGNvbGxlY3Rpb25FbnRyeS5oYXNVcGRhdGVkSXRlbXMoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0xvY2thYmxlICgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMucm9vdEl0ZW0uaXNMb2NrYWJsZSgpO1xuXHR9XG5cblx0cHVibGljIHNhdmUgKFxuXHRcdGNsb3NlVGFiID0gZmFsc2UsXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHt9LFxuXHRcdGJyZWFrVXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtSWRDb252ZXJzaW9uTWFwPiB7XG5cdFx0aWYgKHRoaXMuaXNTYXZpbmcpXG5cdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KCk7XG5cblx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcblxuXHRcdHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XG5cblx0XHRyZXR1cm4gKHRoaXMuaXNMb2NrYWJsZSgpID8gdGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2sodGhpcy5yb290SXRlbSEpIDogdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCkpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja0V2ZW50KHRoaXMuY2FsbGJhY2tzLm9uQmVmb3JlU2F2ZSwgY2FsbGJhY2sgPT4gY2FsbGJhY2sodGhpcyksIGNsb3NlVGFiKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RQYXJhbWV0ZXJzID0gZXh0ZW5kKHt9LCB0aGlzLnRhYlJlcXVlc3RQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzKTtcblxuXHRcdFx0XHR0aGlzLnRhYlJlcXVlc3RQYXJhbWV0ZXJzID0ge307XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3Nvci5leGVjdXRlKFxuXHRcdFx0XHRcdHRoaXMuaXRlbXMudG9BcnJheSgpLFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbnMudG9BcnJheSgpLFxuXHRcdFx0XHRcdHJlcXVlc3RQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJyZWFrVXBCeVBhcmVudCxcblx0XHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2tcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xvY2thYmxlKCkpXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5jbGVhckxvY2sodGhpcy5yb290SXRlbSEpO1xuXG5cdFx0XHRcdHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmICghY2xvc2VUYWIpXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVTaW5nbGVJdGVtcyhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tFdmVudChcblx0XHRcdFx0XHR0aGlzLmNhbGxiYWNrcy5vblNhdmVTdWNjZXNzLFxuXHRcdFx0XHRcdGNhbGxiYWNrID0+IGNhbGxiYWNrKHRoaXMsIGNvbnZlcnNpb25NYXApLFxuXHRcdFx0XHRcdGNsb3NlVGFiXG5cdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIWNsb3NlVGFiKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmVuYWJsZUNoYW5nZXNXYXRjaGVyKCk7XG5cblx0XHRcdFx0XHRcdHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKChlcnJvcjogYW55KSA9PiB7XG5cdFx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XG5cblx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIG9uQmVmb3JlU2F2ZSAoXG5cdFx0a2V5OiBzdHJpbmcsXG5cdFx0Y2FsbGJhY2s6IChsb2NhbENhY2hlOiBMb2NhbENhY2hlKSA9PiBhbnksXG5cdFx0Y29uZGl0aW9uOiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24gPSBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uQWx3YXlzXG5cdCk6ICgpID0+IHZvaWQge1xuXHRcdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzLm9uQmVmb3JlU2F2ZVtjb25kaXRpb25dO1xuXG5cdFx0Y2FsbGJhY2tzW2tleV0gPSBjYWxsYmFjaztcblxuXHRcdHJldHVybiAoKSA9PiBkZWxldGUgY2FsbGJhY2tzW2tleV07XG5cdH1cblxuXHRwdWJsaWMgb25TYXZlU3VjY2VzcyAoXG5cdFx0a2V5OiBzdHJpbmcsXG5cdFx0Y2FsbGJhY2s6IE9uU2F2ZUNhbGxiYWNrLFxuXHRcdGNvbmRpdGlvbjogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uID0gTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLkFsd2F5c1xuXHQpOiAoKSA9PiB2b2lkIHtcblx0XHRjb25zdCBjYWxsYmFja3MgPSB0aGlzLmNhbGxiYWNrcy5vblNhdmVTdWNjZXNzW2NvbmRpdGlvbl07XG5cblx0XHRjYWxsYmFja3Nba2V5XSA9IGNhbGxiYWNrO1xuXG5cdFx0cmV0dXJuICgpID0+IGRlbGV0ZSBjYWxsYmFja3Nba2V5XTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZUNhbGxiYWNrRXZlbnQ8VD4gKFxuXHRcdGNhbGxiYWNrczogTG9jYWxDYWNoZUNhbGxiYWNrczxUPixcblx0XHRleGVjdXRlOiAoY2FsbGJhY2s6IFQpID0+IGFueSxcblx0XHRjbG9zZVRhYjogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPGFueT4ge1xuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja3MoY2FsbGJhY2tzW0xvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5BbHdheXNdLCBleGVjdXRlKS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tzKFxuXHRcdFx0XHRcdGNhbGxiYWNrc1tjbG9zZVRhYiA/IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5PbkNsb3NlIDogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLlNraXBPbkNsb3NlXSxcblx0XHRcdFx0XHRleGVjdXRlXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZUNhbGxiYWNrczxUPiAoY2FsbGJhY2tzOiB7W2tleTogc3RyaW5nXTogVH0sIGV4ZWN1dGU6IChjYWxsYmFjazogVCkgPT4gYW55KSB7XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gY2FsbGJhY2tzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXN1bHRba2V5XSA9IGV4ZWN1dGUoY2FsbGJhY2tzW2tleV0pO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0dGhpcy5leGNlcHRpb25IYW5kbGVyKGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVzdWx0KTtcblx0fVxuXG5cdHB1YmxpYyBlbmFibGVDaGFuZ2VzV2F0Y2hlciAoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsICE9PSBudWxsKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0NoYW5nZXMgd2F0Y2hlciBhbHJlYWR5IHJ1bm5pbmchJywgdGhpcyk7XG5cdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2hhbmdlc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5kZXRlY3RDaGFuZ2VzKCkpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XG5cblx0XHRcdFx0aWYgKHRoaXMuaXNMb2NrYWJsZSgpKVxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKHRoaXMucm9vdEl0ZW0hKTtcblx0XHRcdH0sXG5cdFx0XHQzMDAwXG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBkaXNhYmxlQ2hhbmdlc1dhdGNoZXIgKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCA9PT0gbnVsbClcblx0XHRcdHJldHVybjtcblxuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy5jaGFuZ2VzSW50ZXJ2YWwpO1xuXHRcdHRoaXMuY2hhbmdlc0ludGVydmFsID0gbnVsbDtcblx0fVxuXG5cdHB1YmxpYyBvbkRlYWN0aXZhdGVJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+KTogdm9pZCB7XG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtRW50cnkpO1xuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG5cdH1cblxuXHRwdWJsaWMgb25BY3RpdmF0ZUl0ZW0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5PGFueT4pOiB2b2lkIHtcblx0XHR0aGlzLml0ZW1zLmFkZChpdGVtRW50cnkpO1xuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG5cdH1cbn1cbiIsImltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbUlkLCBJdGVtTWFwLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IHR5cGUgTG9ja1Rva2VuID0ge2lzRm9yZWlnbjogZmFsc2UsIGlkOiBudW1iZXIsIHRva2VuOiBzdHJpbmd9IHwge2lzRm9yZWlnbjogdHJ1ZSwgbWVzc2FnZTogc3RyaW5nfTtcblxuZXhwb3J0IGNsYXNzIExvY2tTZXJ2aWNlIHtcblx0bG9ja0l0ZW1zOiBJdGVtTWFwPExvY2tUb2tlbj4gPSB7fTtcblxuXHRwcm9taXNlczogSXRlbU1hcDxQcm9taXNlSW50ZXJmYWNlPExvY2tUb2tlbj4+ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRwcml2YXRlIGdldFZhbHVlPFQ+IChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+LCBtYXA6IEl0ZW1NYXA8VD4pOiB1bmRlZmluZWQgfCBUIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XG5cdH1cblxuXHRwcml2YXRlIHNldFZhbHVlPFQ+IChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+LCB2YWx1ZTogVCwgbWFwOiBJdGVtTWFwPFQ+KTogVCB7XG5cdFx0cmV0dXJuIGNyZWF0ZVBhdGgoXG5cdFx0XHRtYXAsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwgdmFsdWVdXG5cdFx0KTtcblx0fVxuXG5cdGdldExvY2tzICgpOiB0aGlzWydsb2NrSXRlbXMnXSB7XG5cdFx0cmV0dXJuIHRoaXMubG9ja0l0ZW1zO1xuXHR9XG5cblx0aGFzTG9jayAobG9ja1Rva2VuSWQ6IEl0ZW1JZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGxvY2tJdGVtcyA9IHRoaXMubG9ja0l0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsb2NrSXRlbXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGxvY2tJdGVtc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgbG9ja0l0ZW0gPSBsb2NrSXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcblx0XHRcdFx0aWYgKCFsb2NrSXRlbS5pc0ZvcmVpZ24gJiYgbG9ja0l0ZW0uaWQgPT0gbG9ja1Rva2VuSWQpXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gc2hvdWxkIGJlIGZhc3QgKHdhdGNoZWQpXG5cdGlzTG9ja2VkIChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xuXG5cdFx0aWYgKGxvY2tJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gbG9ja0l0ZW0uaXNGb3JlaWduO1xuXHR9XG5cblx0Z2V0TWVzc2FnZSAoaXRlbUVudHJ5OiBJdGVtRW50cnk8YW55Pik6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG5cdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xuXG5cdFx0aWYgKGxvY2tJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFsb2NrSXRlbS5pc0ZvcmVpZ24pXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIGxvY2tJdGVtLm1lc3NhZ2U7XG5cdH1cblxuXHQvLyBkb2VzIG5vdCByZWplY3Qgd2hlbiBhIGZvcmVpZ24gbG9jayBpcyBlbmNvdW50ZXJlZFxuXHQvLyBpcyBhbHNvIHVzZWQgYnkgZGVsZXRlTG9ja1xuXHRmZXRjaENhY2hlZExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5PGFueT4pOiBQcm9taXNlSW50ZXJmYWNlPHVuZGVmaW5lZCB8IExvY2tUb2tlbj4ge1xuXHRcdGNvbnN0IGxvY2sgPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xuXG5cdFx0aWYgKGxvY2sgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4obG9jayk7XG5cblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMucHJvbWlzZXMpO1xuXG5cdFx0aWYgKHByb21pc2UgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBwcm9taXNlO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHR9XG5cblx0ZmV0Y2hMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+KTogUHJvbWlzZUludGVyZmFjZTxzdHJpbmc+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoQ2FjaGVkTG9jayhpdGVtRW50cnkpLnRoZW4oXG5cdFx0XHRsb2NrSXRlbSA9PiB7XG5cdFx0XHRcdGlmIChsb2NrSXRlbSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJldHVybiBsb2NrSXRlbTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0TG9jayhpdGVtRW50cnkpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRsb2NrSXRlbSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ24gP1xuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3QobG9ja0l0ZW0ubWVzc2FnZSkgOlxuXHRcdFx0XHRcdGxvY2tJdGVtLnRva2VuO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5PGFueT4pOiBQcm9taXNlSW50ZXJmYWNlPExvY2tUb2tlbj4ge1xuXHRcdGNvbnN0IHtpdGVtVHlwZSwgaXRlbUlkfSA9IGl0ZW1FbnRyeTtcblxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShcblx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdHtpdGVtdHlwZTogaXRlbVR5cGUsIGl0ZW06IGl0ZW1JZH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxuXHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChcblx0XHRcdFx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3MuTG9ja3Rva2VuWzBdXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRcdFx0aWYgKGVycm9yLmNvZGUgPT09IDMwMSkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpc0ZvcmVpZ246IHRydWUsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoaXRlbUVudHJ5LCBwcm9taXNlLCB0aGlzLnByb21pc2VzKTtcblx0fVxuXG5cdGRlbGV0ZUxvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5PGFueT4pOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKFxuXHRcdFx0Y2FjaGVkTG9jayA9PiB7XG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrID09PSB1bmRlZmluZWQpIC8vIHVuZGVmaW5lZDogbm90IHJlcXVlc3RlZCB5ZXRcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0aWYgKGNhY2hlZExvY2suaXNGb3JlaWduKSB7XG5cdFx0XHRcdFx0dGhpcy5jbGVhckxvY2soaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZSgnTG9ja3Rva2VuJywgW2NhY2hlZExvY2suaWRdKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Y2xlYXJMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbG9ja0l0ZW1zID0gdGhpcy5sb2NrSXRlbXNbaXRlbUVudHJ5Lml0ZW1UeXBlXTtcblxuXHRcdGlmIChsb2NrSXRlbXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBkZWxldGUgbG9ja0l0ZW1zW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RJdGVtTWFwLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XG5cbmNvbnN0IEVNUFRZX0VOVFJZID0ge307XG5cbmV4cG9ydCB0eXBlIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvblJlc3VsdCA9IHtcblx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRpdGVtSWQ6IEl0ZW1JZCxcblx0aXRlbXM6IEFwaVJlcXVlc3RJdGVtTWFwXG59O1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uPFJvb3RJdGVtRW50cnlJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4ge1xuXHRwYXJlbnRNYXA6IGFueSA9IHt9O1xuXHRkZXN0aW5hdGlvbjogQXBpUmVxdWVzdEl0ZW1NYXAgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSByb290SXRlbUVudHJ5OiBJdGVtRW50cnk8Um9vdEl0ZW1FbnRyeUl0ZW1UeXBlVHlwZT4sXG5cdFx0cHJpdmF0ZSBzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCkge1xuXHR9XG5cblx0cHJvY2VzcyAoKTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uUmVzdWx0IHtcblx0XHR0aGlzLnBhcmVudE1hcCA9IHRoaXMuY3JlYXRlUGFyZW50TWFwKHRoaXMuc2luZ2xlSXRlbUNhY2hlKTtcblx0XHR0aGlzLnByb2Nlc3NJdGVtcyh0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsIFt0aGlzLnJvb3RJdGVtRW50cnldLCB7fSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdGl0ZW1JZDogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdGl0ZW1zOiB0aGlzLmRlc3RpbmF0aW9uXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlUGFyZW50TWFwIChpdGVtQ2FjaGU6IEl0ZW1DYWNoZSkge1xuXHRcdGNvbnN0IHJlc3VsdDoge1xuXHRcdFx0W3BhcmVudFR5cGU6IHN0cmluZ106IHtcblx0XHRcdFx0W3BhcmVudElkOiBudW1iZXJdOiB7XG5cdFx0XHRcdFx0W2l0ZW1UeXBlOiBzdHJpbmddOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGU+PlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSA9IHt9O1xuXG5cdFx0aXRlbUNhY2hlLmZvckVhY2goXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0XHRpZiAocGFyZW50ID09PSBudWxsKSAvLyB3ZSBkb24ndCBjYXJlIGZvciBpdGVtcyB0aGF0IGFyZSBub3QgbGlua2VkIHRvIHRoZSByb290IGl0ZW1cblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0Y29uc3QgcGFyZW50VHlwZSA9IHBhcmVudC5pdGVtVHlwZTtcblx0XHRcdFx0Y29uc3QgcGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbcGFyZW50VHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV0gPSB7fTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdW3BhcmVudElkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRUeXBlXVtwYXJlbnRJZF0gPSB7fTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdW3BhcmVudElkXVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRcdHJlc3VsdFtwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW1zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdGxpbmtBY2N1bXVsYXRvcjoge1tpdGVtVHlwZTogc3RyaW5nXTogSXRlbUlkW119XG5cdCkge1xuXHRcdGlmICh0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGlmIChsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdFx0Ly8gZWFjaCBpdGVtIG9ubHkgaGFzIGEgc2luZ2xlIHBhcmVudCwgc28gd2UgY2FuIHNhZmVseSBkbyB0aGlzXG5cdFx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXS5wdXNoKGl0ZW1JZCk7XG5cblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gPSB0aGlzLnByb2Nlc3NJdGVtKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzSXRlbTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4pOiB7dmFsdWVzPzogRmllbGRNYXAsIGxpbmtzPzoge1tpdGVtVHlwZTogc3RyaW5nXTogSXRlbUlkW119fSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBjaGlsZEl0ZW1zID0gdGhpcy5nZXRJdGVtc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdGNvbnN0IGNoaWxkQ29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZS5nZXRDb2xsZWN0aW9uc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdGNvbnN0IHZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XG5cdFx0Y29uc3QgbGlua3MgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkSXRlbXMpXG5cdFx0XHR0aGlzLnByb2Nlc3NJdGVtcyhjaGlsZFR5cGUsIGNoaWxkSXRlbXNbY2hpbGRUeXBlXSwgbGlua3MpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY2hpbGRDb2xsZWN0aW9ucykge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLnF1ZXJ5ICE9PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkuaXRlbXMsIGxpbmtzKTtcblx0XHR9XG5cblx0XHRjb25zdCBoYXNWYWx1ZXMgPSBoYXNQcm9wZXJ0aWVzKHZhbHVlcyk7XG5cdFx0Y29uc3QgaGFzTGlua3MgPSBoYXNQcm9wZXJ0aWVzKGxpbmtzKTtcblxuXHRcdGlmIChoYXNWYWx1ZXMgJiYgaGFzTGlua3MpXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzLCBsaW5rczogbGlua3N9O1xuXG5cdFx0aWYgKGhhc1ZhbHVlcylcblx0XHRcdHJldHVybiB7dmFsdWVzOiB2YWx1ZXN9O1xuXG5cdFx0aWYgKGhhc0xpbmtzKVxuXHRcdFx0cmV0dXJuIHtsaW5rczogbGlua3N9O1xuXG5cdFx0cmV0dXJuIEVNUFRZX0VOVFJZO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRJdGVtc0J5UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCkge1xuXHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5wYXJlbnRNYXBbcGFyZW50VHlwZV07XG5cblx0XHRpZiAobWFwRW50cnkgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdHJldHVybiBtYXBFbnRyeVtwYXJlbnRJZF07XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBBcGlGb3JtYXR0ZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVF1ZXJ5LCBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XG5cbmNvbnN0IE1BWUJFID0gJ21heWJlJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cHVibGljIGZpZWxkczogRmllbGRNYXAsXG5cdFx0cHVibGljIHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbFxuXHQpIHtcblxuXHR9XG5cblx0cHJpdmF0ZSBjb21wYXJlVmFsdWVzICh2YWx1ZTogYW55LCBxdWVyeVZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHF1ZXJ5VmFsdWUpKVxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVNb21lbnRPYmplY3RzKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcblxuXHRcdGlmIChtb21lbnQuaXNEdXJhdGlvbihxdWVyeVZhbHVlKSlcblx0XHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRHVyYXRpb25zKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcblxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0cmV0dXJuIHF1ZXJ5VmFsdWUgPT0gdmFsdWU7XG5cdH1cblxuXHRtYXRjaFF1ZXJ5IChxdWVyeTogQXBpUXVlcnkpOiBib29sZWFuIHwgJ21heWJlJyB7XG5cdFx0aWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0aWYgKHF1ZXJ5LmN1c3RvbSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0Ly8gbGlua2VkVG8gYWxzbyBjb250YWlucyAucXVlcnlcblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoTGlua2VkVG9RdWVyeShxdWVyeSk7XG5cblx0XHRpZiAocXVlcnkucXVlcnkgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaENvbXBsZXhRdWVyeShxdWVyeSk7XG5cblx0XHRpZiAocXVlcnkua2V5ICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHRoaXMuZmllbGRzW3F1ZXJ5LmtleV0sIHF1ZXJ5KTtcblxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBxdWVyeSEgUGFyc2VkPycpO1xuXHR9XG5cblx0cHJpdmF0ZSBtYXRjaExpbmtlZFRvUXVlcnkgKHF1ZXJ5OiBBcGlRdWVyeSk6IGJvb2xlYW4gfCAnbWF5YmUnIHtcblx0XHRpZiAocXVlcnkucmV2ZXJzZSlcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXHRcdGxldCBtYXRjaDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xuXHRcdGVsc2UgaWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSBwYXJlbnQuaXRlbVR5cGUpXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xuXHRcdGVsc2Vcblx0XHRcdG1hdGNoID0gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHBhcmVudC5pdGVtSWQsIHF1ZXJ5LnF1ZXJ5KTtcblxuXHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRyZXR1cm4gcXVlcnkubm90ID8gIW1hdGNoIDogISFtYXRjaDtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hDb21wbGV4UXVlcnkgKHF1ZXJ5OiBBcGlRdWVyeSk6IGJvb2xlYW4gfCAnbWF5YmUnIHtcblx0XHRjb25zdCBjb25kaXRpb25zID0gcXVlcnkuY29uZGl0aW9ucztcblxuXHRcdGxldCByZXN1bHQ7XG5cdFx0bGV0IHRlcm1pbmFsO1xuXG5cdFx0c3dpdGNoIChxdWVyeS5vcGVyYXRvcikge1xuXHRcdFx0Y2FzZSAnQU5EJzpcblx0XHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0dGVybWluYWwgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdPUic6XG5cdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHR0ZXJtaW5hbCA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIG9wZXJhdG9yJyk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucykge1xuXHRcdFx0Y29uc3QgbWF0Y2ggPSB0aGlzLm1hdGNoUXVlcnkoY29uZGl0aW9uKTtcblxuXHRcdFx0aWYgKG1hdGNoID09PSB0ZXJtaW5hbClcblx0XHRcdFx0cmV0dXJuIHF1ZXJ5Lm5vdCA/ICF0ZXJtaW5hbCA6IHRlcm1pbmFsO1xuXG5cdFx0XHRpZiAobWF0Y2ggPT09IE1BWUJFKVxuXHRcdFx0XHRyZXN1bHQgPSBNQVlCRTtcblx0XHR9XG5cblx0XHRpZiAocmVzdWx0ID09PSBNQVlCRSlcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdHJldHVybiBxdWVyeS5ub3QgPyAhcmVzdWx0IDogcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBtYXRjaFNpbXBsZVF1ZXJ5ICh2YWx1ZTogYW55LCBxdWVyeTogQXBpUXVlcnkpOiBib29sZWFuIHwgJ21heWJlJyB7XG5cdFx0Y29uc3Qga2V5ID0gcXVlcnkua2V5O1xuXHRcdGxldCBxdWVyeVZhbHVlID0gcXVlcnkudmFsdWU7XG5cblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKSAvLyBDb3VsZCBiZSBsaW5rZWRUbyBhbiBlbXB0eSBvYmplY3Rcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignUmVxdWlyZWQgZmllbGQnLCBrZXksICdub3QgZm91bmQgZm9yJywgdGhpcy5pdGVtVHlwZSk7XG5cblx0XHRcdHJldHVybiBNQVlCRTtcblx0XHR9XG5cblx0XHRpZiAocXVlcnlWYWx1ZSA9PT0gJ05PVycpXG5cdFx0XHRxdWVyeVZhbHVlID0gbW9tZW50KCk7XG5cblx0XHRzd2l0Y2ggKHF1ZXJ5LmNvbXBhcmF0b3IpIHtcblx0XHRcdGNhc2UgJz0nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlVmFsdWVzKHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGNhc2UgJyE9Jzpcblx0XHRcdFx0cmV0dXJuICF0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0Y2FzZSAnPCc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICc8PSc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8PSBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnPic6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICc+PSc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+PSBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnSU4nOlxuXHRcdFx0XHQvLyBPbmx5IElOIHN1cHBvcnRzIE5PVCwgYWxsIG90aGVyIGNvbXBhcmF0b3JzIGFyZSBmbGlwcGVkIGluIHRoZSBRdWVyeVBhcnNlclxuXHRcdFx0XHRjb25zdCByZXMgPSBpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcblxuXHRcdFx0XHRyZXR1cm4gcXVlcnkubm90ID8gIXJlcyA6IHJlcztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBjb21wYXJhdG9yOiAnICsgcXVlcnkuY29tcGFyYXRvciArICcgaW4gcXVlcnkgJyArIHF1ZXJ5KTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSB9IGZyb20gJy4vVXRpbCc7XG5pbXBvcnQgeyBBcGlRdWVyeSwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmVudW0gQ09OU1RBTlRTIHtcblx0T0JKID0gMCxcblx0U1RSID0gMSxcblx0U0VQID0gJzonXG59XG5cbmV4cG9ydCBlbnVtIE9QRVJBVE9SUyB7XG5cdE9SID0gJ09SJyxcblx0QU5EID0gJ0FORCdcbn1cblxuZXhwb3J0IHR5cGUgT1BFUkFUT1JTX1RZUEUgPSAnT1InIHwgJ0FORCcgfCAnb3InIHwgJ2FuZCcgfCBPUEVSQVRPUlM7XG5cbmV4cG9ydCBlbnVtIENPTVBBUkFUT1JTIHtcblx0RVFVQUxTID0gJz0nLFxuXHROT1RfRVFVQUxTID0gJyE9Jyxcblx0TEVTU19USEFOID0gJzwnLFxuXHRNT1JFX1RIQU4gPSAnPicsXG5cdExFU1NfT1JfRVFVQUxfVEhBTiA9ICc8PScsXG5cdEVRVUFMX09SX01PUkVfVEhBTiA9ICc+PScsXG5cdElOID0gJ0lOJ1xufVxuXG5jb25zdCBWQUxJRF9DT01QQVJBVE9SUyA9IE9iamVjdC5rZXlzKENPTVBBUkFUT1JTKS5tYXAoa2V5ID0+IENPTVBBUkFUT1JTW2tleV0pO1xuXG5leHBvcnQgdHlwZSBDT01QQVJBVE9SU19UWVBFID0gJz0nIHwgJyE9JyB8ICc8JyB8ICc+JyB8ICc8PScgfCAnPj0nIHwgJ0lOJyB8IENPTVBBUkFUT1JTO1xuXG5jb25zdCBPUFBPU0lURV9DT01QQVJBVE9SX01BUDoge1trZXkgaW4gQ09NUEFSQVRPUlNdOiBDT01QQVJBVE9SU30gPSB7XG5cdFtDT01QQVJBVE9SUy5FUVVBTFNdOiBDT01QQVJBVE9SUy5OT1RfRVFVQUxTLFxuXHRbQ09NUEFSQVRPUlMuTk9UX0VRVUFMU106IENPTVBBUkFUT1JTLkVRVUFMUyxcblx0W0NPTVBBUkFUT1JTLk1PUkVfVEhBTl06IENPTVBBUkFUT1JTLkxFU1NfT1JfRVFVQUxfVEhBTixcblx0W0NPTVBBUkFUT1JTLkxFU1NfVEhBTl06IENPTVBBUkFUT1JTLkVRVUFMX09SX01PUkVfVEhBTixcblx0W0NPTVBBUkFUT1JTLkxFU1NfT1JfRVFVQUxfVEhBTl06IENPTVBBUkFUT1JTLk1PUkVfVEhBTixcblx0W0NPTVBBUkFUT1JTLkVRVUFMX09SX01PUkVfVEhBTl06IENPTVBBUkFUT1JTLkxFU1NfVEhBTixcblx0Ly8gSW4gdXNlcyAnbm90OiB0cnVlJyBpbnN0ZWFkIG9mIHJldmVyc2luZyB0aGUgcXVlcnlcblx0W0NPTVBBUkFUT1JTLklOXTogQ09NUEFSQVRPUlMuSU5cbn07XG5cbmV4cG9ydCBjbGFzcyBRdWVyeVBhcnNlciB7XG5cdHF1ZXJ5OiBBcGlRdWVyeTtcblx0cGFyYW1ldGVyczogYW55O1xuXG5cdGNvbnN0cnVjdG9yIChxdWVyeTogQXBpUXVlcnksIHBhcmFtZXRlcnM/OiBvYmplY3QpIHtcblx0XHR0aGlzLnF1ZXJ5ID0gcXVlcnk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblx0fVxuXG5cdHByaXZhdGUgY29tcGFyZVBhcnNlZFF1ZXJpZXMgKGE6IFtvYmplY3QsIHN0cmluZ10sIGI6IFtvYmplY3QsIHN0cmluZ10pIHtcblx0XHRpZiAoYVtDT05TVEFOVFMuU1RSXSA9PT0gYltDT05TVEFOVFMuU1RSXSlcblx0XHRcdHJldHVybiAwO1xuXG5cdFx0cmV0dXJuIGFbQ09OU1RBTlRTLlNUUl0gPiBiW0NPTlNUQU5UUy5TVFJdID8gMSA6IC0xO1xuXHR9XG5cblx0cGFyc2UgKHF1ZXJ5OiBBcGlRdWVyeSA9IHRoaXMucXVlcnkpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VMaW5rZWRUb1F1ZXJ5KFxuXHRcdFx0XHRxdWVyeS5saW5rZWRUbyxcblx0XHRcdFx0cXVlcnkucXVlcnksXG5cdFx0XHRcdHF1ZXJ5LnJldmVyc2UsXG5cdFx0XHRcdHF1ZXJ5Lm5vdFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlQ3VzdG9tUXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmN1c3RvbSxcblx0XHRcdFx0cXVlcnkucGFyYW1ldGVycyxcblx0XHRcdFx0cXVlcnkubm90XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU2VhcmNoUXVlcnkocXVlcnkuc2VhcmNoLCBxdWVyeS5ub3QpO1xuXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDb21wbGV4UXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmNvbmRpdGlvbnMsXG5cdFx0XHRcdHF1ZXJ5Lm9wZXJhdG9yLFxuXHRcdFx0XHRxdWVyeS5ub3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHF1ZXJ5Lml0ZW1UeXBlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU3ViRmllbGRRdWVyeShcblx0XHRcdFx0cXVlcnkua2V5LFxuXHRcdFx0XHRxdWVyeS5pdGVtVHlwZSxcblx0XHRcdFx0cXVlcnkuZmllbGQsXG5cdFx0XHRcdHF1ZXJ5LnF1ZXJ5LFxuXHRcdFx0XHRxdWVyeS5ub3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodHlwZW9mIHF1ZXJ5LnF1ZXJ5ID09PSAnb2JqZWN0Jylcblx0XHRcdFx0cmV0dXJuIHRoaXMucGFyc2VTdWJRdWVyeShxdWVyeS5rZXksIHF1ZXJ5LnF1ZXJ5LCBxdWVyeS5ub3QpO1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KFxuXHRcdFx0XHRxdWVyeS5rZXksXG5cdFx0XHRcdHF1ZXJ5LnZhbHVlLFxuXHRcdFx0XHRxdWVyeS5jb21wYXJhdG9yLFxuXHRcdFx0XHRxdWVyeS5ub3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qga2V5ID0gZ2V0Rmlyc3RQcm9wZXJ0eShxdWVyeSk7XG5cblx0XHRpZiAoa2V5ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIFt7fSwgJ3t9J107XG5cblx0XHRjb25zdCB2YWx1ZSA9IHF1ZXJ5W2tleV07XG5cblx0XHQvLyB0eXBlb2YgbnVsbCBpcyBhbiBvYmplY3QgOnRoaW5raW5nOlxuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBPYmplY3QpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVN1YlF1ZXJ5KGtleSwgdmFsdWUsIGZhbHNlKTtcblxuXHRcdHJldHVybiB0aGlzLnBhcnNlU2ltcGxlUXVlcnkoa2V5LCB2YWx1ZSwgcXVlcnkuY29tcGFyYXRvciwgcXVlcnkubm90KTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VTdWJRdWVyeSAoa2V5OiBzdHJpbmcsIHN1YlF1ZXJ5OiBvYmplY3QsIG5vdDogYm9vbGVhbiA9IGZhbHNlKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnBhcnNlKHN1YlF1ZXJ5KTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7a2V5LCBxdWVyeTogcGFyc2VkUXVlcnlbQ09OU1RBTlRTLk9CSl0sIG5vdH0sXG5cdFx0XHQnWycgKyAnc3ViJyArIENPTlNUQU5UUy5TRVAgKyBrZXkgKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUXVlcnlbQ09OU1RBTlRTLlNUUl0gKyBDT05TVEFOVFMuU0VQICsgbm90ICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VTdWJGaWVsZFF1ZXJ5IChrZXk6IHN0cmluZyA9ICcnLCBpdGVtVHlwZTogSXRlbVR5cGUgPSAnJywgZmllbGQ6IHN0cmluZyA9ICcnLCBxdWVyeTogQXBpUXVlcnksIG5vdDogYm9vbGVhbiA9IGZhbHNlKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnBhcnNlKHF1ZXJ5KTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7a2V5LCBpdGVtVHlwZSwgZmllbGQsIHF1ZXJ5OiBwYXJzZWRRdWVyeVtDT05TVEFOVFMuT0JKXSwgbm90fSxcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcblx0XHRcdCdbJyArICdzdWJGaWVsZCcgKyBDT05TVEFOVFMuU0VQICsga2V5ICsgQ09OU1RBTlRTLlNFUCArIGl0ZW1UeXBlICsgQ09OU1RBTlRTLlNFUCArIGZpZWxkICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlU2VhcmNoUXVlcnkgKHZhbHVlOiBhbnksIG5vdDogYm9vbGVhbiA9IGZhbHNlKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7c2VhcmNoOiB2YWx1ZVtDT05TVEFOVFMuT0JKXSwgbm90fSxcblx0XHRcdCdbJyArICdzZWFyY2gnICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUXVlcnkgKGN1c3RvbTogc3RyaW5nLCBwYXJhbWV0ZXJzOiBhbnksIG5vdDogYm9vbGVhbiA9IGZhbHNlKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0aWYgKHBhcmFtZXRlcnMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0e2N1c3RvbSwgbm90fSxcblx0XHRcdFx0J1snICsgY3VzdG9tICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdFx0XTtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJzZWRQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUN1c3RvbVBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2N1c3RvbSwgcGFyYW1ldGVyczogcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuT0JKXSwgbm90fSxcblx0XHRcdCdbJyArIGN1c3RvbSArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUGFyYW1ldGVycyAocGFyYW1ldGVyczogYW55KTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpLnNvcnQoKTtcblxuXHRcdGNvbnN0IHF1ZXJ5OiBBcGlRdWVyeSA9IHt9IGFzIEFwaVF1ZXJ5O1xuXHRcdGxldCBzdHJpbmcgPSAnJztcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qga2V5ID0ga2V5c1tpXTtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShwYXJhbWV0ZXJzW2tleV0pO1xuXG5cdFx0XHRxdWVyeVtrZXldID0gdmFsdWVbQ09OU1RBTlRTLk9CSl07XG5cblx0XHRcdGlmIChpID4gMClcblx0XHRcdFx0c3RyaW5nICs9IENPTlNUQU5UUy5TRVA7XG5cblx0XHRcdHN0cmluZyArPSB2YWx1ZVtDT05TVEFOVFMuU1RSXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gW3F1ZXJ5LCBzdHJpbmddO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZVNpbXBsZVF1ZXJ5IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgY29tcGFyYXRvcj86IENPTVBBUkFUT1JTX1RZUEUsIG5vdDogYm9vbGVhbiA9IGZhbHNlKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcblxuXHRcdGlmIChjb21wYXJhdG9yID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb21wYXJhdG9yID0gQXJyYXkuaXNBcnJheSh2YWx1ZVtDT05TVEFOVFMuT0JKXSkgPyBDT01QQVJBVE9SUy5JTiA6IENPTVBBUkFUT1JTLkVRVUFMUztcblxuXHRcdGlmIChWQUxJRF9DT01QQVJBVE9SUy5pbmRleE9mKGNvbXBhcmF0b3IpID09PSAtMSlcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjb21wYXJhdG9yICcke2NvbXBhcmF0b3J9JywgaXQgbWlnaHQgYmUgdGhhdCB0aGUgYmFja2VuZCBzdXBwb3J0cyBpdCBidXQgdGhlIGZyb250ZW5kIGRvZXNuJ3QgIWApO1xuXG5cdFx0aWYgKG5vdClcblx0XHRcdGNvbXBhcmF0b3IgPSBPUFBPU0lURV9DT01QQVJBVE9SX01BUFtjb21wYXJhdG9yIV07XG5cblx0XHQvLyBBbGwgb3RoZXIgY29tcGFyYXRvcnMgY2FuIGJlIGludmVydGVkXG5cdFx0Y29uc3QgaXNOb3RJbiA9IGNvbXBhcmF0b3IgPT09IENPTVBBUkFUT1JTLklOICYmIG5vdDtcblxuXHRcdGNvbnN0IHJlc3VsdDogW29iamVjdCwgc3RyaW5nXSA9IFtcblx0XHRcdHtrZXksIHZhbHVlOiB2YWx1ZVtDT05TVEFOVFMuT0JKXSwgY29tcGFyYXRvciwgbm90OiBpc05vdElufSxcblx0XHRcdCdbJyArIGNvbXBhcmF0b3IgKyBDT05TVEFOVFMuU0VQICsga2V5ICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblxuXHRcdGlmIChpc05vdEluKSB7XG5cdFx0XHRyZXN1bHRbMV0gPSByZXN1bHRbMV0uc2xpY2UoMCwgLTEpO1xuXHRcdFx0cmVzdWx0WzFdICs9IENPTlNUQU5UUy5TRVAgKyBub3QgKyAnXSc7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VMaW5rZWRUb1F1ZXJ5IChsaW5rZWRUbzogYW55LCBxdWVyeTogQXBpUXVlcnkgPSB7fSBhcyBBcGlRdWVyeSwgcmV2ZXJzZTogYm9vbGVhbiA9IGZhbHNlLCBub3Q6IGJvb2xlYW4gPSBmYWxzZSk6IFtvYmplY3QsIHN0cmluZ10ge1xuXHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5wYXJzZShxdWVyeSk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2xpbmtlZFRvOiBsaW5rZWRUbywgcXVlcnk6IHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5PQkpdLCByZXZlcnNlOiByZXZlcnNlLCBub3Q6IG5vdH0sXG5cdFx0XHQnWycgKyAnbGlua2VkVG8nICsgQ09OU1RBTlRTLlNFUCArIGxpbmtlZFRvICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIHJldmVyc2UgKyBDT05TVEFOVFMuU0VQICsgbm90ICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VDb21wbGV4UXVlcnkgKGNvbmRpdGlvbnM6IGFueVtdLCBvcGVyYXRvcjogT1BFUkFUT1JTX1RZUEUgPSBPUEVSQVRPUlMuQU5ELCBub3Q6IGJvb2xlYW4gPSBmYWxzZSk6IFtvYmplY3QsIHN0cmluZ10ge1xuXHRcdG9wZXJhdG9yID0gb3BlcmF0b3IudG9VcHBlckNhc2UoKSBhcyBPUEVSQVRPUlM7XG5cblx0XHRjb25zdCBwYXJzZWRDb25kaXRpb25zID0gdGhpcy5wYXJzZUNvbmRpdGlvbnMoY29uZGl0aW9ucyk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2NvbmRpdGlvbnM6IHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLk9CSl0sIG9wZXJhdG9yLCBub3R9LFxuXHRcdFx0J1snICsgb3BlcmF0b3IgKyBwYXJzZWRDb25kaXRpb25zW0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ29uZGl0aW9ucyAoY29uZGl0aW9uczogYW55W10pOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRsZXQgcGFyc2VkQ29uZGl0aW9uczogQXJyYXk8W29iamVjdCwgc3RyaW5nXT4gPSBbXTtcblx0XHRjb25zdCBxdWVyeTogb2JqZWN0W10gPSBbXTtcblx0XHRsZXQgc3RyaW5nID0gJyc7XG5cblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKVxuXHRcdFx0cGFyc2VkQ29uZGl0aW9ucy5wdXNoKHRoaXMucGFyc2UoY29uZGl0aW9uKSk7XG5cblx0XHRwYXJzZWRDb25kaXRpb25zID0gcGFyc2VkQ29uZGl0aW9ucy5zb3J0KChhLCBiKSA9PiB0aGlzLmNvbXBhcmVQYXJzZWRRdWVyaWVzKGEsIGIpKTtcblxuXHRcdGZvciAoY29uc3QgcGFyc2VkQ29uZGl0aW9uIG9mIHBhcnNlZENvbmRpdGlvbnMpIHtcblx0XHRcdHF1ZXJ5LnB1c2gocGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5PQkpdKTtcblx0XHRcdHN0cmluZyArPSBwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLlNUUl07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcblx0fVxuXG5cdHByaXZhdGUgZm9ybWF0VmFsdWU8VD4gKHZhbHVlOiBUKTogW1QsIHN0cmluZ10ge1xuXHRcdGxldCBwcm9jZXNzZWRWYWx1ZTtcblxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyYnKSB7XG5cdFx0XHRjb25zdCBrZXkgPSB2YWx1ZS5zdWJzdHJpbmcoMSk7XG5cblx0XHRcdHZhbHVlID0gdGhpcy5wYXJhbWV0ZXJzW2tleV07XG5cblx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5UGFyc2VyOiBVbmRlZmluZWQgdGVtcGxhdGUgcGFyYW1ldGVyIFxcJycgKyBrZXkgKyAnXFwnJyk7XG5cblx0XHRcdHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCBrZXkgKyAnPicgKyB2YWx1ZV07XG5cdFx0fVxuXG5cdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XG5cblx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCAnJyArIHByb2Nlc3NlZFZhbHVlXTtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1ZhbHVlPFQ+ICh2YWx1ZTogVFtdKTogVFtdO1xuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZSAodmFsdWU6IG1vbWVudC5Nb21lbnQpOiBtb21lbnQuTW9tZW50O1xuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZSAodmFsdWU6IG1vbWVudC5EdXJhdGlvbik6IG1vbWVudC5EdXJhdGlvbjtcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWU8VD4gKHZhbHVlOiBUKTogVDtcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWU8VD4gKHZhbHVlOiBUIHwgVFtdIHwgbW9tZW50Lk1vbWVudCB8IG1vbWVudC5EdXJhdGlvbikge1xuXHRcdC8vIGFsZ29yaXRobSBpcyBub3QgaW1wb3J0YW50LCBhcyBsb25nIGFzIGFsbCBhcnJheXMgYXJlIHNvcnRlZCB0aGUgc2FtZSB3YXlcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG5cdFx0XHRyZXR1cm4gdmFsdWUuc2xpY2UoKS5zb3J0KCk7XG5cblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcblx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xuXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHZhbHVlKSlcblx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUpO1xuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlRdWVyeSwgRW50cnlQYXJlbnROdWxsLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBDT01QQVJBVE9SUywgT1BFUkFUT1JTIH0gZnJvbSAnLi9RdWVyeVBhcnNlcic7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeVNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRhZGRBbmRDb25kaXRpb24gKHF1ZXJ5OiBBcGlRdWVyeSwgY29uZGl0aW9uOiBBcGlRdWVyeSk6IEFwaVF1ZXJ5IHtcblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHF1ZXJ5Lm9wZXJhdG9yID09PSBPUEVSQVRPUlMuT1IpXG5cdFx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IFtxdWVyeSwgY29uZGl0aW9uXX07XG5cblx0XHQvLyB3ZSBoYXZlIGFuICdhbmQnIGNvbmRpdGlvblxuXHRcdHJldHVybiB7Y29uZGl0aW9uczogcXVlcnkuY29uZGl0aW9ucy5jb25jYXQoY29uZGl0aW9uKX07XG5cdH1cblxuXHRhZGRPckNvbmRpdGlvbiAocXVlcnk6IEFwaVF1ZXJ5LCBjb25kaXRpb246IEFwaVF1ZXJ5KTogQXBpUXVlcnkge1xuXHRcdGlmIChxdWVyeS5vcGVyYXRvciA9PT0gT1BFUkFUT1JTLk9SKVxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcblxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl0sIG9wZXJhdG9yOiBPUEVSQVRPUlMuT1J9O1xuXHR9XG5cblx0YWRkUGFyZW50Q29uZGl0aW9uIChxdWVyeTogQXBpUXVlcnksIHBhcmVudDogRW50cnlQYXJlbnROdWxsKTogQXBpUXVlcnkge1xuXHRcdGxldCBsaW5rZWRUb1F1ZXJ5O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBxdWVyeTtcblxuXHRcdGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHBhcmVudC5pdGVtSWR9O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID8gbGlua2VkVG9RdWVyeSA6IHRoaXMuYWRkQW5kQ29uZGl0aW9uKHF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcblx0fVxuXG5cdGNyZWF0ZU5vdEluIChpZEFycmF5OiBJdGVtSWRbXSkge1xuXHRcdHJldHVybiB7Y29tcGFyYXRvcjogQ09NUEFSQVRPUlMuSU4sIGtleTogJ2lkJywgdmFsdWU6IGlkQXJyYXksIG5vdDogdHJ1ZX07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxudHlwZSBSZXNvdXJjZSA9IEl0ZW1SZXNvdXJjZTxhbnk+IHwgQ29sbGVjdGlvblJlc291cmNlPGFueT47XG50eXBlIENhY2hlTGV2ZWw8VCBleHRlbmRzIFJlc291cmNlPiA9IFtudW1iZXIsIHtbZW50cnlJZDogbnVtYmVyXTogVFtdfV07XG5cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUNhY2hlPFQgZXh0ZW5kcyBSZXNvdXJjZT4ge1xuXHRwcml2YXRlIGNhY2hlOiBBcnJheTxDYWNoZUxldmVsPFQ+PiA9IFtdO1xuXG5cdHB1YmxpYyBzZXQ8VSBleHRlbmRzIFQ+IChyZXNvdXJjZTogVSwgbGV2ZWw6IG51bWJlcik6IFUge1xuXHRcdGNvbnN0IGVudHJ5SWQgPSByZXNvdXJjZS5lbnRyeS5pZDtcblxuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMuZ2V0Q2FjaGVMZXZlbChsZXZlbClbMV07XG5cblx0XHRpZiAocmVzb3VyY2VzW2VudHJ5SWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXNvdXJjZXNbZW50cnlJZF0gPSBbXTtcblxuXHRcdHJlc291cmNlc1tlbnRyeUlkXS5wdXNoKHJlc291cmNlKTtcblxuXHRcdHJldHVybiByZXNvdXJjZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJZiBhbiBhcnJheSBvZiByZXNvdXJjZXMgYWxyZWFkeSBleGlzdHMgZm9yIHRoZSBzcGVjaWZpZWQgbGV2ZWwsIHJldHVybiB0aGF0LiBPdGhlcndpc2UgaW5zZXJ0IGEgbmV3IHR1cGxlIGF0IHRoZVxuXHQgKiByaWdodCBwbGFjZSBpbiB0aGUgJ2xldmVscycgYXJyYXkuXG5cdCAqL1xuXHRwcml2YXRlIGdldENhY2hlTGV2ZWwgKGRlc3RpbmF0aW9uTGV2ZWw6IG51bWJlcik6IENhY2hlTGV2ZWw8VD4ge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRcdC8vIGNoYW5jZXMgYXJlIHRoZSBsZXZlbCB3ZSdyZSBsb29raW5nIGZvciBpcyB0aGUgaGlnaGVzdCwgc28gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXlcblx0XHRmb3IgKGxldCBpID0gY2FjaGUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdGNvbnN0IGxldmVsID0gY2FjaGVbaV07XG5cblx0XHRcdGlmIChsZXZlbFswXSA9PT0gZGVzdGluYXRpb25MZXZlbClcblx0XHRcdFx0cmV0dXJuIGxldmVsO1xuXG5cdFx0XHRpZiAobGV2ZWxbMF0gPCBkZXN0aW5hdGlvbkxldmVsKVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVDYWNoZUxldmVsKGkgKyAxLCBkZXN0aW5hdGlvbkxldmVsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5jcmVhdGVDYWNoZUxldmVsKDAsIGRlc3RpbmF0aW9uTGV2ZWwpO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVDYWNoZUxldmVsIChpbmRleDogbnVtYmVyLCBsZXZlbDogbnVtYmVyKTogQ2FjaGVMZXZlbDxUPiB7XG5cdFx0Y29uc3QgY2FjaGVMZXZlbDogQ2FjaGVMZXZlbDxUPiA9IFtsZXZlbCwge31dO1xuXG5cdFx0dGhpcy5jYWNoZS5zcGxpY2UoaW5kZXgsIDAsIGNhY2hlTGV2ZWwpO1xuXG5cdFx0cmV0dXJuIGNhY2hlTGV2ZWw7XG5cdH1cblxuXHRwdWJsaWMgaGFzUmVzb3VyY2VzIChlbnRyeTogVFsnZW50cnknXSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRcdC8vIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5XG5cdFx0Zm9yIChsZXQgaSA9IGNhY2hlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRpZiAoY2FjaGVbaV1bMV1bZW50cnkuaWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgKGVudHJ5OiBUWydlbnRyeSddKTogVFtdIHtcblx0XHRjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBsZXZlbCBvZiB0aGlzLmNhY2hlKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZXMgPSBsZXZlbFsxXVtlbnRyeS5pZF07XG5cblx0XHRcdGlmIChyZXNvdXJjZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKVxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHB1YmxpYyBnZXRMYXRlc3QgKGVudHJ5OiBUWydlbnRyeSddKTogVCB8IG51bGwge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRcdGZvciAobGV0IGkgPSBjYWNoZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VzID0gY2FjaGVbaV1bMV1bZW50cnkuaWRdO1xuXG5cdFx0XHRpZiAocmVzb3VyY2VzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VzW3Jlc291cmNlcy5sZW5ndGggLSAxXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgYSBzcGVjaWZpYyByZXNvdXJjZS5cblx0ICovXG5cdHB1YmxpYyBjbGVhclJlc291cmNlIChyZXNvdXJjZTogVCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0XHRjb25zdCBlbnRyeUlkID0gcmVzb3VyY2UuZW50cnkuaWQ7XG5cblx0XHRsZXQgcmVzb3VyY2VJbmRleCA9IC0xO1xuXHRcdGxldCBsZXZlbEluZGV4ID0gY2FjaGUubGVuZ3RoO1xuXG5cdFx0d2hpbGUgKHJlc291cmNlSW5kZXggPT09IC0xICYmIGxldmVsSW5kZXggPiAwKSB7XG5cdFx0XHRsZXZlbEluZGV4LS07XG5cblx0XHRcdGNvbnN0IHJlc291cmNlcyA9IGNhY2hlW2xldmVsSW5kZXhdWzFdW2VudHJ5SWRdO1xuXG5cdFx0XHRpZiAocmVzb3VyY2VzICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc291cmNlSW5kZXggPSByZXNvdXJjZXMuaW5kZXhPZihyZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlc291cmNlSW5kZXggPT09IC0xKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Y29uc3QgcmVzb3VyY2VNYXAgPSBjYWNoZVtsZXZlbEluZGV4XVsxXTtcblxuXHRcdGlmIChyZXNvdXJjZU1hcFtlbnRyeUlkXS5sZW5ndGggPT09IDEpXG5cdFx0XHRkZWxldGUgcmVzb3VyY2VNYXBbZW50cnlJZF07XG5cdFx0ZWxzZVxuXHRcdFx0cmVzb3VyY2VNYXBbZW50cnlJZF0uc3BsaWNlKHJlc291cmNlSW5kZXgsIDEpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbGwgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhIGxldmVsIG9mICdsZXZlbCcgb3IgaGlnaGVyLlxuXHQgKi9cblx0cHVibGljIGNsZWFyUmVzb3VyY2VzIChsZXZlbDogbnVtYmVyKTogdm9pZCB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdFx0bGV0IGkgPSBjYWNoZS5sZW5ndGg7XG5cblx0XHR3aGlsZSAoaSA+IDAgJiYgY2FjaGVbaSAtIDFdWzBdID49IGxldmVsKVxuXHRcdFx0aS0tO1xuXG5cdFx0Y2FjaGUubGVuZ3RoID0gaTtcblx0fVxuXG5cdHB1YmxpYyBjbGVhckVudHJ5IChlbnRyeTogVFsnZW50cnknXSk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgbGV2ZWwgb2YgdGhpcy5jYWNoZSlcblx0XHRcdGRlbGV0ZSBsZXZlbFtlbnRyeS5pZF07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblNldCwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIFJlcXVlc3RDb2x1bW5NYXAgPSB7W2l0ZW1UeXBlOiBzdHJpbmddOiBBcGlSZXF1ZXN0Q29sdW1uc307XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIHtcblx0cHJpdmF0ZSBjb2x1bW5zOiBSZXF1ZXN0Q29sdW1uTWFwID0ge307XG5cdHByaXZhdGUgY29sdW1uU2V0SWRNYXA6IHtbY29sdW1uU2V0SWQ6IG51bWJlcl06IGJvb2xlYW59ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdGV4cGFuZDxUIGV4dGVuZHMgQ29sdW1uU2V0PEl0ZW1UeXBlPj4gKGNvbHVtblNldDogVCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNvbHVtblNldElkTWFwW2NvbHVtblNldC5pZF0pXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sdW1uU2V0Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKGNvbHVtbnNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb2x1bW5zW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0Y29sdW1uc1tpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblV0aWxcblx0XHRcdC5tZXJnZVJlcXVlc3RDb2x1bW5zKGNvbHVtbnNbaXRlbVR5cGVdLCBjb2x1bW5TZXQucmVxdWVzdClcblx0XHRcdC5tZXJnZWQ7XG5cblx0XHR0aGlzLmNvbHVtblNldElkTWFwW2NvbHVtblNldC5pZF0gPSB0cnVlO1xuXHR9XG5cblx0Z2V0ICgpOiBSZXF1ZXN0Q29sdW1uTWFwIHtcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5zO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbGxlY3Rpb25IYW5kbGVyLCBJdGVtSGFuZGxlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0Q29sdW1ucyxcblx0QXBpUmVzcG9uc2UsXG5cdENvbGxlY3Rpb25NYXRjaFJlc3VsdCxcblx0RmllbGRNYXAsXG5cdEZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmVTb2NrZXRNZXNzYWdlLFxuXHRHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsXG5cdEl0ZW1JZCxcblx0SXRlbVR5cGUsXG5cdFByb21pc2VJbnRlcmZhY2UsXG5cdFJlc3BvbnNlQ29sdW1uLFxuXHRTb2NrZXRNZXNzYWdlXG59IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgU29ja2V0Q29sbGVjdGlvbk1hcDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gPSB7W2l0ZW1JZDogbnVtYmVyXTogQ29sbGVjdGlvbk1hdGNoUmVzdWx0PEl0ZW1UeXBlVHlwZT59O1xuXG5leHBvcnQgY2xhc3MgU29ja2V0TWVzc2FnZUhhbmRsZXIge1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRvbk1lc3NhZ2VSZWNlaXZlZCAobWVzc2FnZTogU29ja2V0TWVzc2FnZSk6IGFueSB7XG5cdFx0c3dpdGNoIChtZXNzYWdlLmJvZHkuZXZlbnRUeXBlKSB7XG5cdFx0XHRjYXNlICd1cGRhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGUobWVzc2FnZSk7XG5cdFx0XHRjYXNlICdjcmVhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVDcmVhdGUobWVzc2FnZSk7XG5cdFx0XHRjYXNlICdkZWxldGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVEZWxldGUobWVzc2FnZSk7XG5cdFx0XHRjYXNlICdsaW5rVG8nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVMaW5rTW92ZSgvKiBtZXNzYWdlICovKTtcblx0XHR9XG5cdH1cblxuXHRmb3JtYXRNZXNzYWdlVmFsdWVzICh2YWx1ZXM6IGFueSwgY29sdW1uczogUmVzcG9uc2VDb2x1bW5bXSk6IEZpZWxkTWFwIHtcblx0XHRjb25zdCByZXN1bHQ6IEZpZWxkTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGNvbHVtbnMpXG5cdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW5zW2NvbHVtbklkXS50eXBlLCB2YWx1ZXNbY29sdW1uSWRdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjcmVhdGVDb2xsZWN0aW9uTWFwPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtczoge1tpdGVtSWQ6IG51bWJlcl06IGFueX0sXG5cdFx0Y29sdW1uczogUmVzcG9uc2VDb2x1bW5bXVxuXHQpOiBTb2NrZXRDb2xsZWN0aW9uTWFwPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdGNvbnN0IHJlc3VsdDogU29ja2V0Q29sbGVjdGlvbk1hcDxJdGVtVHlwZVR5cGU+ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtcykge1xuXHRcdFx0Y29uc3QgaXRlbSA9IGl0ZW1zW2l0ZW1JZF07XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtLnBhcmVudCAhPT0gbnVsbCA/IGl0ZW0ucGFyZW50IDoge307XG5cblx0XHRcdHJlc3VsdFtpdGVtSWRdID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Rml0dGluZ0l0ZW0oXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHR0aGlzLmZvcm1hdE1lc3NhZ2VWYWx1ZXMoaXRlbS52YWx1ZXMsIGNvbHVtbnMpLFxuXHRcdFx0XHRwYXJlbnRcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdyb3VwQnlDb2xsZWN0aW9uSWQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGNvbGxlY3Rpb25NYXA6IFNvY2tldENvbGxlY3Rpb25NYXA8SXRlbVR5cGVUeXBlPlxuXHQpOiBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgcmVzdWx0OiBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8SXRlbVR5cGVUeXBlPiA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoUmVzdWx0ID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBjb2xsZWN0aW9uTWF0Y2hSZXN1bHQpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSBjb2xsZWN0aW9uTWF0Y2hSZXN1bHRbc3RhdHVzIGFzIGtleW9mIENvbGxlY3Rpb25NYXRjaFJlc3VsdDxJdGVtVHlwZVR5cGU+XTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb25FbnRyeS5pZDtcblxuXHRcdFx0XHRcdGlmIChyZXN1bHRbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXSA9IHtcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogY29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0XHRcdFx0XHRmaXR0aW5nOiBbXSxcblx0XHRcdFx0XHRcdFx0bm90Zml0dGluZzogW10sXG5cdFx0XHRcdFx0XHRcdG1heWJlOiBbXVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXVtzdGF0dXNdLnB1c2goXG5cdFx0XHRcdFx0XHRzdGF0dXMgPT09ICdmaXR0aW5nJyA/IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCkgOiBpdGVtSWRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFJlcXVlc3RDb2x1bW5zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRjb2xsZWN0aW9uTWFwOiBTb2NrZXRDb2xsZWN0aW9uTWFwPEl0ZW1UeXBlVHlwZT5cblx0KSB7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXHRcdFx0Y29uc3QgZml0dGluZ0NvbGxlY3Rpb25zID0gY29sbGVjdGlvbnMuZml0dGluZztcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgZml0dGluZ0NvbGxlY3Rpb24gb2YgZml0dGluZ0NvbGxlY3Rpb25zKVxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGZpdHRpbmdDb2xsZWN0aW9uLmNvbHVtbnMpO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XG5cdH1cblxuXHRkZWZlckVudHJ5PFQgZXh0ZW5kcyBJdGVtRW50cnk8YW55Pj4gKGl0ZW1FbnRyeTogVCk6IFQgfCBQcm9taXNlSW50ZXJmYWNlPFQ+IHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IGl0ZW1FbnRyeS5kZWZlcnJlZDtcblxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcigpO1xuXG5cdFx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UudGhlbihcblx0XHRcdHRoaXMuZGVmZXJFbnRyeS5iaW5kKHRoaXMpLFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NNZXNzYWdlPFQgZXh0ZW5kcyBTb2NrZXRNZXNzYWdlWydib2R5J10+IChib2R5OiBUKTogUHJvbWlzZUludGVyZmFjZTxHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8VFsnaXRlbVR5cGUnXT4+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGJvZHkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtVHlwZSwgYm9keS5pdGVtc1tpdGVtVHlwZV0sIGJvZHkuY29sdW1uc1tpdGVtVHlwZV0pO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1ucyhpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8VFsnaXRlbVR5cGUnXT4gfCBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeTxUWydpdGVtVHlwZSddPj4+ID0gW107XG5cdFx0Y29uc3QgcmVxdWVzdElkczogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkU3RyaW5nIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZFN0cmluZyk7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSAraXRlbUlkU3RyaW5nO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2godGhpcy5kZWZlckVudHJ5KGl0ZW1FbnRyeSkpO1xuXHRcdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2l0ZW1JZF0uZml0dGluZy5sZW5ndGggPT09IDApXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKFxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoaXRlbVR5cGUsIGl0ZW1JZCwgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCBmYWxzZSlcblx0XHRcdCk7XG5cblx0XHRcdHJlcXVlc3RJZHMucHVzaChpdGVtSWQpO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSk7IC8vIGNvbGxlY3Rpb25NYXAgbWlnaHQgY29udGFpbiAnbWF5YmUnIG1hdGNoZXNcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCB7aWQ6IHJlcXVlc3RJZHN9LCByZXF1ZXN0Q29sdW1ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZShpdGVtVHlwZSwgcmVxdWVzdElkcywgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlPFQgZXh0ZW5kcyBTb2NrZXRNZXNzYWdlWydib2R5J10+IChib2R5OiBUKTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXRlbXMgPSBib2R5Lml0ZW1zLkZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmU7XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8VFsnaXRlbVR5cGUnXT4gfCBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeTxUWydpdGVtVHlwZSddPj4+ID0gW107XG5cdFx0Y29uc3QgcmVxdWVzdElkczogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XG5cdFx0XHRjb25zdCBmdW5jdGlvbklkID0gaXRlbXNbaXRlbUlkXS5wYXJlbnQuaXRlbUlkO1xuXHRcdFx0Y29uc3QgZnVuY3Rpb25FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBmdW5jdGlvbklkKTtcblxuXHRcdFx0aWYgKGZ1bmN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCB8fCBmdW5jdGlvbkVudHJ5LmNvbHVtbnMucmVzcG9uc2UuRnVuY3RpZS5uZXdjaGFuZ2VzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaCh0aGlzLmRlZmVyRW50cnkoZnVuY3Rpb25FbnRyeSkpO1xuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGZ1bmN0aW9uSWQpO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KCdGdW5jdGllJywge2lkOiByZXF1ZXN0SWRzfSwge0Z1bmN0aWU6IFsnbmV3Y2hhbmdlcyddfSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUlkcyA9IHJlc3BvbnNlLmxpbmtzLkZ1bmN0aWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVzcG9uc2VJZHMpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KCdGdW5jdGllJywgaXRlbUlkKSE7XG5cblx0XHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXG5cdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlVmFsdWUgPSByZXNwb25zZS5mZXRjaFZhbHVlKCdGdW5jdGllJywgaXRlbUlkLCAnbmV3Y2hhbmdlcycpO1xuXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlVmFsdWUgPT09IHByZXZpb3VzLm5ld2NoYW5nZXMpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGl0ZW1FbnRyeVxuXHRcdFx0XHRcdFx0LnNldEluaXRpYWwoe25ld2NoYW5nZXM6IHJlc3BvbnNlVmFsdWV9LCB0cnVlKVxuXHRcdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cylcblx0XHRcdFx0XHRcdC5yZXNvbHZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcblx0fVxuXG5cdGhhbmRsZVJlc3BvbnNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRyZXF1ZXN0SWRzOiBJdGVtSWRbXSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGNvbGxlY3Rpb25NYXA6IFNvY2tldENvbGxlY3Rpb25NYXA8SXRlbVR5cGVUeXBlPlxuXHQpOiBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVxdWVzdElkcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKSE7XG5cdFx0XHRjb25zdCBpc05ldyA9IGl0ZW1FbnRyeS5pbml0aWFsID09PSB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0aWYgKGZpZWxkcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoKTtcblxuXHRcdFx0XHRpZiAoaXNOZXcpXG5cdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRlcml2ZWQgPSByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSW5mby5yb290KTtcblxuXHRcdFx0aWYgKGlzTmV3KVxuXHRcdFx0XHRpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKGZpZWxkcywgZGVyaXZlZCwgY29sdW1uSW5mbyk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XG5cdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhcblx0XHRcdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXG5cdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMubWFpblxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGlmIChleHBhbnNpb25SZXN1bHQgIT09IG51bGwpXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChmaWVsZHMsIGRlcml2ZWQsIGV4cGFuc2lvblJlc3VsdCk7XG5cblx0XHRcdFx0aXRlbUVudHJ5XG5cdFx0XHRcdFx0LnVwZGF0ZUZpZWxkcyhmaWVsZHMsIGRlcml2ZWQsIGZhbHNlKVxuXHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpXG5cdFx0XHRcdFx0LnJlc29sdmUoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKTtcblx0fVxuXG5cdHByaXZhdGUgaXNGdW5jdGlvbkNoYW5nZXNSZXNvbHZlTWVzc2FnZSAobWVzc2FnZTogU29ja2V0TWVzc2FnZSk6IG1lc3NhZ2UgaXMgRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZVNvY2tldE1lc3NhZ2Uge1xuXHRcdHJldHVybiBtZXNzYWdlLmJvZHkuaXRlbVR5cGUgPT09ICdGdW5jdGlvbkNoYW5nZXNSZXNvbHZlJztcblx0fVxuXG5cdGhhbmRsZUNyZWF0ZSAobWVzc2FnZTogRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZVNvY2tldE1lc3NhZ2UpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+O1xuXHRoYW5kbGVDcmVhdGUgKG1lc3NhZ2U6IFNvY2tldE1lc3NhZ2UpOiBQcm9taXNlSW50ZXJmYWNlPG51bGw+O1xuXHRoYW5kbGVDcmVhdGUgKG1lc3NhZ2U6IFNvY2tldE1lc3NhZ2UpOiBhbnkge1xuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XG5cblx0XHRpZiAodGhpcy5pc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmVNZXNzYWdlKG1lc3NhZ2UpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvY2Vzc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUoYm9keSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZShib2R5KS50aGVuKFxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgdHJ1ZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XG5cdH1cblxuXHRoYW5kbGVVcGRhdGUgKG1lc3NhZ2U6IFNvY2tldE1lc3NhZ2UpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZShtZXNzYWdlLmJvZHkpLnRoZW4oXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIucmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XG5cdH1cblxuXHRoYW5kbGVEZWxldGU8VCBleHRlbmRzIFNvY2tldE1lc3NhZ2U+IChtZXNzYWdlOiBUKTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGJvZHkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZXMgPSB0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLmdldEFsbExvY2FsQ2FjaGVzKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcDoge1tjb2xsZWN0aW9uSWQ6IG51bWJlcl06IHtjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnk8VFsnYm9keSddWydpdGVtVHlwZSddPiwgaXRlbXM6IEl0ZW1JZFtdfX0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGJvZHkuaXRlbXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Q29udGFpbmluZ0l0ZW0oaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uSWQgPSBjb2xsZWN0aW9uLmlkO1xuXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbiwgaXRlbXM6IFtdfTtcblxuXHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0uaXRlbXMucHVzaChpdGVtSWQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuY2xlYXJCeUl0ZW1JZChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBsb2NhbENhY2hlIG9mIGxvY2FsQ2FjaGVzKVxuXHRcdFx0XHRsb2NhbENhY2hlLml0ZW1zLmNsZWFyQnlJdGVtSWQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRtYXBFbnRyeS5jb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKG1hcEVudHJ5Lml0ZW1zLCBudWxsLCB0cnVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cdH1cblxuXHQvLyBUT0RPIVxuXHRoYW5kbGVMaW5rTW92ZSAoKTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHR9XG5cblx0LypcdGhhbmRsZUxpbmtNb3ZlIChtZXNzYWdlKSB7XG5cdCBwcm9jZXNzTWVzc2FnZShcblx0IG1lc3NhZ2UsXG5cdCBmdW5jdGlvbiAoY29sbGVjdGlvbiwgaXRlbUVudHJpZXMpIHtcblx0IC8vIGZpdHMgaW4gdGhpcyBjb2xsZWN0aW9uLCB0b2RvOiBnZXQgdGhlIG9sZCBjb2xsZWN0aW9uIGl0IGJlbG9uZ2VkIHRvXG5cdCBjb2xsZWN0aW9uLm1vdmVJdGVtcyhpdGVtRW50cmllcywgbnVsbCwgdHJ1ZSk7XG5cdCB9LFxuXHQgZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XG5cdCAvLyBtYXliZSBmaXRzXG5cdCAvLyB0b2RvOiBhbHNvIHJlbW92ZSB0aGVtIGZyb20gdGhlIG9sZCBjb2xsZWN0aW9uXG5cdCBjb2xsZWN0aW9uLmV4dGVuZChhbmd1bGFyLmlkZW50aXR5LCBmYWxzZSwgZmFsc2UpO1xuXHQgfSxcblx0IGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpZHMpIHtcblx0IC8vIG5vdCBmaXR0aW5nIGluIHRoaXMgY29sbGVjdGlvbiwgcmVtb3ZlIGl0ID9cblx0IGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoaWRzLCBudWxsLCBtZXNzYWdlKTtcblx0IH1cblx0ICk7XG5cdCB9XG5cdCAqL1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9BcGlGb3JtYXR0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXF1ZXN0U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlUHJvY2Vzc29yJztcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXMnO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzUHJvY2Vzc29yJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25IYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbk1hdGNoZXInO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5IYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSW5mbyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblNldCc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblN1YnNldENhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uVXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtQWRtaW5pc3RyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1DYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtSGFuZGxlcic7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXF1ZXN0U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0tleVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Mb2NhbENhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vTG9ja1NlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeU1hdGNoZXInO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVBhcnNlcic7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL1Jlc291cmNlQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uJztcbmV4cG9ydCAqIGZyb20gJy4vU29ja2V0TWVzc2FnZUhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9VdGlsJztcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQXBpUmVzcG9uc2VQcm9jZXNzb3IgfSBmcm9tICcuLi9jbGFzc2VzJztcblxuZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyKSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAocmVzcG9uc2U6IGFueSk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yIHtcblx0XHRyZXR1cm4gbmV3IEFwaVJlc3BvbnNlUHJvY2Vzc29yKHRoaXMuYXBpRm9ybWF0dGVyLCByZXNwb25zZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEJhdGNoU3RhdHVzIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbUlkLCBJdGVtVHlwZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEJhdGNoU3RhdHVzRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSwgVCBleHRlbmRzIEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+IHwgQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGdldEl0ZW1JZDogKGVudHJ5OiBUKSA9PiBJdGVtSWQsXG5cdFx0Z2V0UHJvbWlzZTogKGVudHJ5OiBUKSA9PiBQcm9taXNlSW50ZXJmYWNlPFQ+XG5cdCk6IEJhdGNoU3RhdHVzPEl0ZW1UeXBlVHlwZSwgVD4ge1xuXHRcdHJldHVybiBuZXcgQmF0Y2hTdGF0dXMoXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRnZXRJdGVtSWQsXG5cdFx0XHRnZXRQcm9taXNlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ2hhbmdlc0NvbXBpbGF0aW9uLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4vJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoXG5cdFx0c2luZ2xlSXRlbXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZT4+LFxuXHRcdGNvbGxlY3Rpb25zOiBBcnJheTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGU+PlxuXHQpOiBDaGFuZ2VzQ29tcGlsYXRpb24ge1xuXHRcdHJldHVybiBuZXcgQ2hhbmdlc0NvbXBpbGF0aW9uKFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0c2luZ2xlSXRlbXMsXG5cdFx0XHRjb2xsZWN0aW9uc1xuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSwgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IENvbGxlY3Rpb25DYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uQ2FjaGUoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLCBDb2x1bW5IYW5kbGVyLCBJdGVtRW50cnlTZXJ2aWNlLCBJdGVtSGFuZGxlciwgSXRlbVJlcXVlc3RTZXJ2aWNlLCBLZXlTZXJ2aWNlLCBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzLyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LCBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzLyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy8nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uRW50cnlPcHRpb25zLCBDb2xsZWN0aW9uRW50cnlPcHRpb25zSW50ZXJmYWNlIH0gZnJvbSAnLi4vbW9kZWxzLyc7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzLyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHB1YmxpYyBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHB1YmxpYyBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHB1YmxpYyBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHB1YmxpYyBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgZXhjZXB0aW9uSGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHB1YmxpYyBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZVxuXHQpOiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPiB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPihcblx0XHRcdHRoaXMsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uTWF0Y2hlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3Q8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uQ2FjaGVzOiBDb2xsZWN0aW9uQ2FjaGVbXSxcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuLFxuXHRcdGNhbGxPbkFkZDogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZTogYm9vbGVhblxuXHQpOiBDb2xsZWN0aW9uTWF0Y2hlcjxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25NYXRjaGVyKFxuXHRcdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0Y29sbGVjdGlvbkNhY2hlcyxcblx0XHRcdHVwZGF0ZUluaXRpYWwsXG5cdFx0XHRjYWxsT25BZGQsXG5cdFx0XHRjYWxsT25BY3RpdmF0ZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENoYW5nZXNQcm9jZXNzb3IsIEtleVNlcnZpY2UsIExvY2FsQ2FjaGUsIFJlc291cmNlQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBFeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVkaXRSZXNvdXJjZSxcblx0Q29sbGVjdGlvbkVudHJ5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2UsXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdENvbGxlY3Rpb25WaWV3UmVzb3VyY2UsXG5cdEVkaXRSZXNvdXJjZSxcblx0SXRlbVJlc291cmNlLFxuXHRMb2NhbFZpZXdSZXNvdXJjZSxcblx0UmVtb3RlVmlld1Jlc291cmNlXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnkge1xuXHRwdWJsaWMgcmVhZG9ubHkgY2FjaGU6IFJlc291cmNlQ2FjaGU8Q29sbGVjdGlvblJlc291cmNlPGFueT4+ID0gbmV3IFJlc291cmNlQ2FjaGU8Q29sbGVjdGlvblJlc291cmNlPGFueT4+KCk7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgZXhjZXB0aW9uSGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwdWJsaWMgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge31cblxuXHRwdWJsaWMgY29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdEl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw6IG51bWJlcixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgbnVsbFxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Q8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtyZW1vdGVJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSB8IG51bGxcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwdWJsaWMgY29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSB8IG51bGxcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Q8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0SXRlbXM6IHRydWV9LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSB8IG51bGxcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwdWJsaWMgY29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7cmVtb3RlSXRlbXM6IHRydWV9LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSB8IG51bGxcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwdWJsaWMgY29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw6IG51bWJlcixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgbnVsbFxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0cHVibGljIGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSB8IG51bGwgPSBudWxsXG5cdCk6IENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0Y29uc3Qgb3B0aW9uc0luc3RhbmNlID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRpZiAob3B0aW9uc0luc3RhbmNlLmVkaXRJdGVtcylcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcyA9IHRydWU7XG5cblx0XHRpZiAob3B0aW9uc0luc3RhbmNlLmVkaXRDb2xsZWN0aW9uKSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcyA9IHRydWU7XG5cblx0XHRcdHJldHVybiB0aGlzLmNhY2hlLnNldChcblx0XHRcdFx0bmV3IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPih0aGlzLCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnNJbnN0YW5jZSwgbGV2ZWwsIGxvY2FsQ2FjaGUpLFxuXHRcdFx0XHRsZXZlbFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXQoXG5cdFx0XHRuZXcgQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+KHRoaXMsIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9uc0luc3RhbmNlLCBsZXZlbCwgbG9jYWxDYWNoZSksXG5cdFx0XHRsZXZlbFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkV4cGFuc2lvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkV4cGFuc2lvbkZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3Rvcnlcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogQ29sdW1uRXhwYW5zaW9uPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uRXhwYW5zaW9uKHRoaXMuY29sdW1uSW5mb0ZhY3RvcnksIGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uSW5mbyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uLCBSb290Q29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mb0ZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoKSB7fVxuXG5cdGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGFwaUNvbHVtbjogUmVzcG9uc2VDb2x1bW4sXG5cdFx0cGFyZW50OiBDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4gfCBudWxsXG5cdCk6IENvbHVtbkluZm88SXRlbVR5cGVUeXBlPiB7XG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5JbmZvKGFwaUNvbHVtbiwgcGFyZW50KTtcblx0fVxuXG5cdGNvbnN0cnVjdEZyb21Sb290TWFwPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0cm9vdENvbHVtbk1hcDogUm9vdENvbHVtbk1hcCxcblx0XHRwYXJlbnQ6IENvbHVtbkluZm88SXRlbVR5cGVUeXBlPiB8IG51bGwgPSBudWxsXG5cdCkge1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByb290Q29sdW1uTWFwKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5NYXBFbnRyeSA9IHJvb3RDb2x1bW5NYXBbY29sdW1uSWRdO1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29uc3RydWN0PEl0ZW1UeXBlVHlwZT4oY29sdW1uTWFwRW50cnkuYXBpQ29sdW1uLCBwYXJlbnQpO1xuXHRcdFx0Y29uc3QgY2hpbGRDb2x1bW5zID0gdGhpcy5jb25zdHJ1Y3RGcm9tUm9vdE1hcDxJdGVtVHlwZVR5cGU+KGNvbHVtbk1hcEVudHJ5LmNoaWxkcmVuLCBjb2x1bW5JbmZvKTtcblxuXHRcdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2x1bW5JbmZvLnNldENoaWxkcmVuKGNvbHVtbkluZm8uYXBpQ29sdW1uLml0ZW1UeXBlLCBjaGlsZENvbHVtbnMpO1xuXG5cdFx0XHRyZXN1bHQucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW5zLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXRGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3RTdHViPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnNcblx0KTogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4ge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4oXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXG5cdFx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5LFxuXHRcdFx0dGhpcyxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHQpO1xuXHR9XG5cblx0Y29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCxcblx0XHRlbmFibGVDYWNoaW5nPzogYm9vbGVhbixcblx0XHRpbmNsdWRlSWRDb2x1bW4/OiBib29sZWFuXG5cdCk6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykucmVzb2x2ZShyZXNwb25zZUNvbHVtbnMsIGVuYWJsZUNhY2hpbmcsIGluY2x1ZGVJZENvbHVtbik7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblN1YnNldENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucywgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TdWJzZXRDYWNoZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoKSB7fVxuXG5cdGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IENvbHVtblN1YnNldENhY2hlPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uU3Vic2V0Q2FjaGU8SXRlbVR5cGVUeXBlPihyZXF1ZXN0Q29sdW1ucyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbkhhbmRsZXIsIENyZWF0ZUNvbXBpbGF0aW9uLCBDcmVhdGVSZXF1ZXN0LCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdEZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbXBpbGF0aW9uOiBDcmVhdGVDb21waWxhdGlvbixcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdHBhcmFtZXRlck1hcDogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0XHRicmVha3VwQnlQYXJlbnQ/OiBib29sZWFuXG5cdCk6IENyZWF0ZVJlcXVlc3Q8SXRlbVR5cGVUeXBlPiB7XG5cdFx0cmV0dXJuIG5ldyBDcmVhdGVSZXF1ZXN0KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdGNvbXBpbGF0aW9uLFxuXHRcdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0XHRwYXJhbWV0ZXJNYXAsXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IEl0ZW1DYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBJdGVtQ2FjaGUodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2x1bW5TZXQsIEl0ZW1FbnRyeVNlcnZpY2UsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnksIEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXV0aEludGVyZmFjZSwgRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMsIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtRW50cnlGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwdWJsaWMgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgZXhjZXB0aW9uSGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge31cblxuXHRjb25zdHJ1Y3RTdHViPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRjb2x1bW5TZXRTdHViOiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPlxuXHQpOiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPiB7XG5cdFx0cmV0dXJuIG5ldyBJdGVtRW50cnkodGhpcywgaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0U3R1Yik7XG5cdH1cblxuXHRjb25zdHJ1Y3RMb2NhbExpbmtlZDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0aW5pdGlhbDogRmllbGRNYXA8SXRlbVR5cGVUeXBlPixcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+LFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcblx0KTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4ge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY29uc3RydWN0U3R1YjxJdGVtVHlwZVR5cGU+KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldCk7XG5cblx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5zZXRMb2NhbEZpZWxkcyhpbml0aWFsLCBjb252ZXJzaW9uTWFwKTtcblx0fVxuXG5cdGNvbnN0cnVjdExvY2FsPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0dGVtcGxhdGU6IFRlbXBsYXRlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bW9kaWZpZWQ6IEZpZWxkTWFwPEl0ZW1UeXBlVHlwZT4sXG5cdFx0ZGVyaXZlZDogRmllbGRNYXAsXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsLFxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4gPSB0ZW1wbGF0ZS5jb2x1bW5zLFxuXHRcdGNvbnZlcnNpb25NYXA/OiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRlbXBsYXRlLmNvbHVtbnMuaXRlbVR5cGU7XG5cblx0XHRpZiAoY29udmVyc2lvbk1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y29udmVyc2lvbk1hcCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgdGVtcGxhdGUucmVzcG9uc2UpO1xuXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViPEl0ZW1UeXBlVHlwZT4oaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0KTtcblxuXHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5XG5cdFx0XHQuc2V0TG9jYWxGaWVsZHModGVtcGxhdGUuZmllbGRzLCBjb252ZXJzaW9uTWFwLCB0ZW1wbGF0ZS5jb2x1bW5zKVxuXHRcdFx0LnNldE1vZGlmaWVkKG1vZGlmaWVkKVxuXHRcdFx0LnNldERlcml2ZWQoZGVyaXZlZCk7XG5cdH1cblxuXHRjb25zdHJ1Y3REZWZlcnJlZDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhblxuXHQpOiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U3R1YiA9IHRoaXMuY29uc3RydWN0U3R1YjxJdGVtVHlwZVR5cGU+KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0U3R1YjxJdGVtVHlwZVR5cGU+KFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0aXRlbUVudHJ5U3R1Yi5kZWZlcihkZWZlclJlcXVlc3QpO1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeVN0dWI7XG5cdH1cblxuXHRjb25zdHJ1Y3Q8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRpbml0aWFsOiBGaWVsZE1hcDxJdGVtVHlwZVR5cGU+LFxuXHRcdGRlcml2ZWQ6IEZpZWxkTWFwLFxuXHRcdGNvbHVtbkluZm86IENvbHVtblNldDxJdGVtVHlwZVR5cGU+XG5cdCk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdHViPEl0ZW1UeXBlVHlwZT4oXG5cdFx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLCAvLyBpbml0aWFsLmlkICh3aGVuIGluaXRpYWwgaXMgbm90IGEgdGVtcGxhdGUpXG5cdFx0XHRjb2x1bW5JbmZvXG5cdFx0KS5zZXRGaWVsZHMoXG5cdFx0XHRpbml0aWFsLCAvLyBjYW4gYWxzbyBiZSBhIHRlbXBsYXRlXG5cdFx0XHRkZXJpdmVkXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDaGFuZ2VzUHJvY2Vzc29yLCBMb2NhbENhY2hlLCBMb2NrU2VydmljZSwgUmVzb3VyY2VDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRWRpdFJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgSXRlbVJlc291cmNlT3B0aW9ucywgTG9jYWxWaWV3UmVzb3VyY2UsIFJlbW90ZVZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtT3B0aW9uc0ludGVyZmFjZSwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFJlc291cmNlQ29uc3RydWN0b3I8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUsIFQgZXh0ZW5kcyBJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gPSAoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPikgPT4gVDtcblxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZUZhY3Rvcnkge1xuXHRwdWJsaWMgcmVhZG9ubHkgY2FjaGU6IFJlc291cmNlQ2FjaGU8SXRlbVJlc291cmNlPGFueT4+ID0gbmV3IFJlc291cmNlQ2FjaGU8SXRlbVJlc291cmNlPGFueT4+KCk7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwdWJsaWMgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuXHRcdHB1YmxpYyBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdHB1YmxpYyBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge31cblxuXHRwdWJsaWMgZ2V0Q29uc3RydWN0b3I8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCBudWxsXG5cdCk6IFJlc291cmNlQ29uc3RydWN0b3I8SXRlbVR5cGVUeXBlLCBFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0cHVibGljIGdldENvbnN0cnVjdG9yPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCBudWxsXG5cdCk6IFJlc291cmNlQ29uc3RydWN0b3I8SXRlbVR5cGVUeXBlLCBSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0cHVibGljIGdldENvbnN0cnVjdG9yPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw6IG51bWJlcixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgbnVsbFxuXHQpOiBSZXNvdXJjZUNvbnN0cnVjdG9yPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0cHVibGljIGdldENvbnN0cnVjdG9yPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw6IG51bWJlcixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgbnVsbFxuXHQpOiBSZXNvdXJjZUNvbnN0cnVjdG9yPEl0ZW1UeXBlVHlwZSwgSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBvcHRpb25zSW5zdGFuY2UgPSBuZXcgSXRlbVJlc291cmNlT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdHJldHVybiAoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPikgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0V2l0aE9wdGlvbnM8SXRlbVR5cGVUeXBlPihpdGVtRW50cnksIG9wdGlvbnNJbnN0YW5jZSwgbGV2ZWwsIGxvY2FsQ2FjaGUpO1xuXHRcdH07XG5cdH1cblxuXHRwdWJsaWMgY29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdGxvY2FsQ2FjaGU/OiBMb2NhbENhY2hlIHwgbnVsbCxcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KTogRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT47XG5cblx0cHVibGljIGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdGxvY2FsQ2FjaGU/OiBMb2NhbENhY2hlIHwgbnVsbCxcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KTogTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPjtcblxuXHRwdWJsaWMgY29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdGxvY2FsQ2FjaGU/OiBMb2NhbENhY2hlIHwgbnVsbCxcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KTogUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT47XG5cblx0cHVibGljIGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw6IG51bWJlcixcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZSB8IG51bGwsXG5cdFx0aXNOZXc/OiBib29sZWFuXG5cdCk6IEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RXaXRoT3B0aW9ucyhpdGVtRW50cnksIG5ldyBJdGVtUmVzb3VyY2VPcHRpb25zKG9wdGlvbnMpLCBsZXZlbCwgbG9jYWxDYWNoZSwgaXNOZXcpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb25zdHJ1Y3RXaXRoT3B0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9ucyxcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCBudWxsID0gbnVsbCxcblx0XHRpc05ldzogYm9vbGVhbiA9IGZhbHNlXG5cdCk6IEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXQoXG5cdFx0XHRvcHRpb25zLmVkaXQgP1xuXHRcdFx0XHRuZXcgRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4odGhpcywgaXRlbUVudHJ5LCBvcHRpb25zLCBpc05ldywgbG9jYWxDYWNoZSkgOlxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0b3B0aW9ucy5yZW1vdGUgP1xuXHRcdFx0XHRcdFx0bmV3IFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+KHRoaXMsIGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNOZXcsIGxvY2FsQ2FjaGUpIDpcblx0XHRcdFx0XHRcdG5ldyBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+KHRoaXMsIGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNOZXcsIGxvY2FsQ2FjaGUpXG5cdFx0XHRcdCksXG5cdFx0XHRsZXZlbFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENoYW5nZXNQcm9jZXNzb3IsIExvY2FsQ2FjaGUsIExvY2tTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LCBJdGVtQ2FjaGVGYWN0b3J5LCBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIExvY2FsQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBleGNlcHRpb25IYW5kbGVyOiBFeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoaWQ6IHN0cmluZywgZGVmYXVsdFJlc291cmNlTGV2ZWw6IG51bWJlcik6IExvY2FsQ2FjaGUge1xuXHRcdHJldHVybiBuZXcgTG9jYWxDYWNoZShcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5leGNlcHRpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXG5cdFx0XHRpZCxcblx0XHRcdGRlZmF1bHRSZXNvdXJjZUxldmVsXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUsIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdHJvb3RJdGVtOiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxuXHQpOiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb248SXRlbVR5cGVUeXBlPiB7XG5cdFx0cmV0dXJuIG5ldyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24ocm9vdEl0ZW0sIHNpbmdsZUl0ZW1DYWNoZSwgY29sbGVjdGlvbkNhY2hlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBRdWVyeU1hdGNoZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlNYXRjaGVyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpOiBRdWVyeU1hdGNoZXIge1xuXHRcdHJldHVybiBuZXcgUXVlcnlNYXRjaGVyKFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGZpZWxkcyxcblx0XHRcdHBhcmVudFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IFF1ZXJ5UGFyc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlRdWVyeSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAocXVlcnk6IEFwaVF1ZXJ5LCBwYXJhbWV0ZXJzPzogYW55KTogUXVlcnlQYXJzZXIge1xuXHRcdHJldHVybiBuZXcgUXVlcnlQYXJzZXIocXVlcnksIHBhcmFtZXRlcnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsLCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb24ge1xuXHRcdHJldHVybiBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbihcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHt9XG5cblx0Y29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0YWRkaXRpb25hbENvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IFRlbXBsYXRlPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdHJldHVybiBuZXcgVGVtcGxhdGU8SXRlbVR5cGVUeXBlPih0aGlzLCBpdGVtVHlwZSwgcmVzcG9uc2UsIGFkZGl0aW9uYWxDb2x1bW5zKTtcblx0fVxufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9BcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1c0ZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uTWF0Y2hlckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkluZm9GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0RmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblN1YnNldENhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3RGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUNhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxDYWNoZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlNYXRjaGVyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vVGVtcGxhdGVGYWN0b3J5JztcbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0QXBpUmVxdWVzdFNlcnZpY2UsXG5cdENoYW5nZXNQcm9jZXNzb3IsXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRDb2x1bW5DYWNoZSxcblx0Q29sdW1uSGFuZGxlcixcblx0Q29sdW1uVXRpbCxcblx0SXRlbUFkbWluaXN0cmF0b3IsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1IYW5kbGVyLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdExvY2tTZXJ2aWNlLFxuXHRRdWVyeVNlcnZpY2UsXG5cdFNvY2tldE1lc3NhZ2VIYW5kbGVyXG59IGZyb20gJy4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnksXG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0Q29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5JbmZvRmFjdG9yeSxcblx0Q29sdW1uU2V0RmFjdG9yeSxcblx0Q29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LFxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbUVudHJ5RmFjdG9yeSxcblx0SXRlbVJlc291cmNlRmFjdG9yeSxcblx0TG9jYWxDYWNoZUZhY3RvcnksXG5cdE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFRlbXBsYXRlRmFjdG9yeVxufSBmcm9tICcuL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0QXV0aEludGVyZmFjZSxcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRFeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLFxuXHRMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0UHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFJtQ29yZSB7XG5cdHZlcnNpb246IHN0cmluZztcblx0bm9vcCA9IG5vb3A7XG5cblx0YXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXI7XG5cdGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZTtcblx0YXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk7XG5cdGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5O1xuXHRjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xuXHRjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yO1xuXHRjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5O1xuXHRjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5O1xuXHRjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XG5cdGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5O1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5O1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlO1xuXHRjb2x1bW5DYWNoZTogQ29sdW1uQ2FjaGU7XG5cdGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XG5cdGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXI7XG5cdGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeTtcblx0Y29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeTtcblx0Y29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5OiBDb2x1bW5TdWJzZXRDYWNoZUZhY3Rvcnk7XG5cdGNvbHVtblV0aWw6IENvbHVtblV0aWw7XG5cdGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeTtcblx0aXRlbUFkbWluaXN0cmF0b3I6IEl0ZW1BZG1pbmlzdHJhdG9yO1xuXHRpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5O1xuXHRpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5O1xuXHRpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlO1xuXHRpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXI7XG5cdGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlO1xuXHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5O1xuXHRrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlO1xuXHRsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3Rvcnk7XG5cdGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZTtcblx0bW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTtcblx0cXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeTtcblx0cXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3Rvcnk7XG5cdHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlO1xuXHRyZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XG5cdHNvY2tldE1lc3NhZ2VIYW5kbGVyOiBTb2NrZXRNZXNzYWdlSGFuZGxlcjtcblx0dGVtcGxhdGVGYWN0b3J5OiBUZW1wbGF0ZUZhY3Rvcnk7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdGFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdGVycm9ySGFuZGxlckludGVyZmFjZTogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdGV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2U6IEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblx0XHR0aGlzLnZlcnNpb24gPSAnMS43LjMnO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIgPSBuZXcgQXBpRm9ybWF0dGVyKCk7XG5cdFx0dGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgPSBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlID0gbmV3IEFwaVJlcXVlc3RTZXJ2aWNlKGFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSk7XG5cblx0XHR0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSA9IG5ldyBCYXRjaFN0YXR1c0ZhY3RvcnkocHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UpO1xuXHRcdHRoaXMua2V5U2VydmljZSA9IG5ldyBLZXlTZXJ2aWNlKCk7XG5cdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5TWF0Y2hlckZhY3RvcnkodGhpcy5hcGlGb3JtYXR0ZXIpO1xuXHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5UGFyc2VyRmFjdG9yeSgpO1xuXHRcdHRoaXMucXVlcnlTZXJ2aWNlID0gbmV3IFF1ZXJ5U2VydmljZSgpO1xuXG5cdFx0dGhpcy5jb2x1bW5VdGlsID0gbmV3IENvbHVtblV0aWwoKTtcblx0XHR0aGlzLmNvbHVtbkNhY2hlID0gbmV3IENvbHVtbkNhY2hlKHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jb2x1bW5IYW5kbGVyID0gbmV3IENvbHVtbkhhbmRsZXIoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmNvbHVtbkNhY2hlLFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsXG5cdFx0KTtcblx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5ID0gbmV3IENvbHVtbkluZm9GYWN0b3J5KCk7XG5cdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5ID0gbmV3IENvbHVtbkV4cGFuc2lvbkZhY3RvcnkodGhpcy5jb2x1bW5JbmZvRmFjdG9yeSk7XG5cdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5ID0gbmV3IENvbHVtblNldEZhY3RvcnkodGhpcy5jb2x1bW5IYW5kbGVyLCB0aGlzLmNvbHVtblV0aWwsIHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkpO1xuXHRcdHRoaXMuY29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5ID0gbmV3IENvbHVtblN1YnNldENhY2hlRmFjdG9yeSgpO1xuXG5cdFx0dGhpcy5sb2NrU2VydmljZSA9IG5ldyBMb2NrU2VydmljZShcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy50ZW1wbGF0ZUZhY3RvcnkgPSBuZXcgVGVtcGxhdGVGYWN0b3J5KHRoaXMuY29sdW1uU2V0RmFjdG9yeSwgdGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UgPSBuZXcgSXRlbUVudHJ5U2VydmljZShhdXRoSW50ZXJmYWNlLCB0aGlzLmtleVNlcnZpY2UpO1xuXHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSA9IG5ldyBJdGVtQ2FjaGVGYWN0b3J5KHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XG5cdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5ID0gbmV3IEl0ZW1SZXNvdXJjZUZhY3RvcnkoXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3IsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkoXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRleGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSA9IG5ldyBJdGVtRW50cnlGYWN0b3J5KFxuXHRcdFx0YXV0aEludGVyZmFjZSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UgPSBuZXcgQ29sbGVjdGlvbkVudHJ5U2VydmljZSh0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSwgdGhpcy5xdWVyeVNlcnZpY2UpO1xuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlKCk7XG5cdFx0dGhpcy5pdGVtSGFuZGxlciA9IG5ldyBJdGVtSGFuZGxlcihcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMudGVtcGxhdGVGYWN0b3J5XG5cdFx0KTtcblx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSA9IG5ldyBJdGVtUmVxdWVzdFNlcnZpY2UoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0ZXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2Vcblx0XHQpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5XG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyID0gbmV3IENvbGxlY3Rpb25IYW5kbGVyKFxuXHRcdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5ID0gbmV3IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSA9IG5ldyBDcmVhdGVSZXF1ZXN0RmFjdG9yeShcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0XHQpO1xuXHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSA9IG5ldyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5KHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSwgdGhpcy5rZXlTZXJ2aWNlKTtcblx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3IgPSBuZXcgQ2hhbmdlc1Byb2Nlc3Nvcihcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHRcdCk7XG5cblx0XHR0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5ID0gbmV3IExvY2FsQ2FjaGVGYWN0b3J5KFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0ZXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5ID0gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkoKTtcblxuXHRcdHRoaXMuaXRlbUFkbWluaXN0cmF0b3IgPSBuZXcgSXRlbUFkbWluaXN0cmF0b3IoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0YXV0aEludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdGxvY2FsQ2FjaGVNYW5hZ2VyLFxuXHRcdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLnNvY2tldE1lc3NhZ2VIYW5kbGVyID0gbmV3IFNvY2tldE1lc3NhZ2VIYW5kbGVyKFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHRsb2NhbENhY2hlTWFuYWdlcixcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AgKCkge1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vY29yZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzJztcbmV4cG9ydCAqIGZyb20gJy4vZmFjdG9yaWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
7865
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0l0ZW1FbnRyeU9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2VPcHRpb25zLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvSXRlbUVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvSXRlbVJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvRWRpdFJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5T3B0aW9ucy50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9Db2xsZWN0aW9uVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVkaXRSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL1RlbXBsYXRlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvUmVtb3RlVmlld1Jlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvTG9jYWxWaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uU3Vic2V0Q2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1BZG1pbmlzdHJhdG9yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1SZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9LZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy90eXBlcy9JdGVtVHlwZXNDb2xsZWN0aW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy90eXBlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Mb2NhbENhY2hlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2tTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeU1hdGNoZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUXVlcnlQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUXVlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1Jlc291cmNlQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbkVudHJ5RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uSW5mb0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5TZXRGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ3JlYXRlUmVxdWVzdEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbUVudHJ5RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1SZXNvdXJjZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Mb2NhbENhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeU1hdGNoZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvUXVlcnlQYXJzZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9UZW1wbGF0ZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29yZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7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QUNuRCxJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsSUFBSSxDQUFDLHNCQUFzQixFQUMzQixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLHFCQUFxQixFQUNyQixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIsSUFBSSxDQUFDLDZCQUE2QixDQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUNGLGFBQUM7QUFBRCxDQUFDOztBQUVLLFNBQVUsSUFBSTtBQUNwQixDQUFDO0FBRUssU0FBVSxRQUFRLENBQUUsS0FBSztJQUM5QixPQUFPLEtBQUssQ0FBQztBQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL1NzQjtBQUNLO0FBQ0g7QUFFQztBQUNFO0FBQ0oiLCJmaWxlIjoicm0tY29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJtb21lbnRcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUm1Db3JlXCJdID0gZmFjdG9yeShyZXF1aXJlKFwibW9tZW50XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSbUNvcmVcIl0gPSBmYWN0b3J5KHJvb3RbXCJtb21lbnRcIl0pO1xufSkod2luZG93LCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXzsiLCJleHBvcnQgZnVuY3Rpb24gaW5zdGFudGlhdGVPcHRpb25zIChvcHRpb25zOiB7W2tleTogc3RyaW5nXTogYW55fSwgdmFsdWVzOiBvYmplY3QpOiB2b2lkIHtcblx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XG5cdFx0aWYgKCEoa2V5IGluIG9wdGlvbnMpKVxuXHRcdFx0Y29udGludWU7XG5cblx0XHRpZiAodmFsdWVzW2tleV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0b3B0aW9uc1trZXldID0gdmFsdWVzW2tleV07XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dNZXJnZSAob2JqZWN0LCBkZWZhdWx0cykge1xuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIGRlZmF1bHRzO1xuXG5cdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRzKSB7XG5cdFx0cmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdGRlZmF1bHRzW2tleV0gOiBvYmplY3Rba2V5XTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNQcm9wZXJ0aWVzIChvYmplY3QpIHtcblx0Ly8gQHRzLWlnbm9yZVxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpXG5cdFx0cmV0dXJuIHRydWU7XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmlyc3RQcm9wZXJ0eSAob2JqZWN0KSB7XG5cdGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0Jylcblx0XHRyZXR1cm4gbnVsbDtcblxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpXG5cdFx0cmV0dXJuIGtleTtcblxuXHRyZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluQXJyYXkgKG5lZWRsZSwgaGF5c3RhY2spIHtcblx0Zm9yIChjb25zdCBoYXkgb2YgaGF5c3RhY2spIHtcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdGlmIChuZWVkbGUgPT0gaGF5KVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBcnJheTxUPiAoc291cmNlOiBUW10sIGNhbGxiYWNrOiAoZWxlbTogVCkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJlZDogVFtdID0gW107XG5cblx0Zm9yIChjb25zdCBzcmMgb2Ygc291cmNlKSB7XG5cdFx0aWYgKGNhbGxiYWNrKHNyYykpXG5cdFx0XHRmaWx0ZXJlZC5wdXNoKHNyYyk7XG5cdH1cblxuXHRpZiAoZmlsdGVyZWQubGVuZ3RoID09PSBzb3VyY2UubGVuZ3RoKVxuXHRcdHJldHVybiBmYWxzZTtcblxuXHRlbXB0eUFycmF5KHNvdXJjZSk7XG5cblx0Zm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVyZWQpXG5cdFx0c291cmNlLnB1c2goZmlsdGVyKTtcblxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5QXJyYXkgKGFycmF5KTogdm9pZCB7XG5cdGFycmF5LnNwbGljZSgwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhFeGlzdHMgKHNvdXJjZSwgcGF0aCkge1xuXHRpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3VuZGVmaW5lZCcpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XG5cdFx0aWYgKHR5cGVvZiBzb3VyY2VbcF0gPT09ICd1bmRlZmluZWQnKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0c291cmNlID0gc291cmNlW3BdO1xuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRoPFQ+IChvYmplY3Q6IGFueSwgcGF0aDogQXJyYXk8bnVtYmVyIHwgc3RyaW5nPiwgZGVmYXVsdHM6IGFueVtdKTogVCB7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHZhbHVlID0gcGF0aFtpXTtcblxuXHRcdGlmIChvYmplY3RbdmFsdWVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRvYmplY3RbdmFsdWVdID0gZGVmYXVsdHNbaV07XG5cblx0XHRvYmplY3QgPSBvYmplY3RbdmFsdWVdO1xuXHR9XG5cblx0cmV0dXJuIG9iamVjdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdGggKG9iamVjdDoge30sIHBhdGg6IEFycmF5PG51bWJlciB8IHN0cmluZz4sIGNyZWF0ZTogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcblx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0Zm9yIChjb25zdCBwIG9mIHBhdGgpIHtcblx0XHRvYmplY3QgPSBvYmplY3RbcF07IC8vIHdvbid0IGFsdGVyIHRoZSBjYWxsZXIncyB2YXJcblxuXHRcdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZCAmJiAhY3JlYXRlKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHVybiBvYmplY3Q7XG59XG5cbi8vIFRha2VuIGZyb20gQW5ndWxhckpTLCBhZGRlZCBjb21tZW50cyB0byBpZ25vcmUgVHlwZVNjcmlwdCBlcnJvcnNcbmZ1bmN0aW9uIGJhc2VFeHRlbmQgKGRzdCwgb2JqcywgZGVlcCkge1xuXHRmb3IgKGxldCBpID0gMCwgaWkgPSBvYmpzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcblx0XHRjb25zdCBvYmogPSBvYmpzW2ldO1xuXG5cdFx0aWYgKCFpc09iamVjdChvYmopICYmICFpc0Z1bmN0aW9uKG9iaikpXG5cdFx0XHRjb250aW51ZTtcblxuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuXG5cdFx0Zm9yIChsZXQgaiA9IDAsIGpqID0ga2V5cy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2pdO1xuXHRcdFx0Y29uc3Qgc3JjID0gb2JqW2tleV07XG5cblx0XHRcdGlmIChkZWVwICYmIGlzT2JqZWN0KHNyYykpIHtcblx0XHRcdFx0aWYgKGlzRGF0ZShzcmMpKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBuZXcgRGF0ZShzcmMudmFsdWVPZigpKTtcblx0XHRcdFx0fSBlbHNlIGlmIChpc1JlZ0V4cChzcmMpKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBuZXcgUmVnRXhwKHNyYyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc3JjLm5vZGVOYW1lKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmVOb2RlKHRydWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGlzRWxlbWVudChzcmMpKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmUoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoIWlzT2JqZWN0KGRzdFtrZXldKSlcblx0XHRcdFx0XHRcdGRzdFtrZXldID0gaXNBcnJheShzcmMpID8gW10gOiB7fTtcblxuXHRcdFx0XHRcdGJhc2VFeHRlbmQoZHN0W2tleV0sIFtzcmNdLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZHN0W2tleV0gPSBzcmM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGRzdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZCAoZHN0LCAuLi5hcmdzKSB7XG5cdHJldHVybiBiYXNlRXh0ZW5kKGRzdCwgYXJncywgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UgKGRzdCwgLi4uYXJncykge1xuXHRyZXR1cm4gYmFzZUV4dGVuZChkc3QsIGFyZ3MsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QgKHZhbHVlKSB7XG5cdC8vIGh0dHA6Ly9qc3BlcmYuY29tL2lzb2JqZWN0NFxuXHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQmxhbmtPYmplY3QgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcgKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIgKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlICh2YWx1ZSkge1xuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbjxUPiAodmFsdWU6IGFueSk6IHZhbHVlIGlzIFQge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWdFeHAgKHZhbHVlKSB7XG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4gKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudCAobm9kZSkge1xuXHRyZXR1cm4gISEobm9kZSAmJlxuXHRcdChcblx0XHRcdG5vZGUubm9kZU5hbWUgIC8vIFdlIGFyZSBhIGRpcmVjdCBlbGVtZW50LlxuXHRcdFx0fHwgKG5vZGUucHJvcCAmJiBub2RlLmF0dHIgJiYgbm9kZS5maW5kKVxuXHRcdClcblx0KTsgIC8vIFdlIGhhdmUgYW4gb24gYW5kIGZpbmQgbWV0aG9kIHBhcnQgb2YgalF1ZXJ5IEFQSS5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2luZG93IChvYmopIHtcblx0cmV0dXJuIG9iaiAmJiBvYmoud2luZG93ID09PSBvYmo7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluZWQgKHZhbHVlKSB7XG5cdHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzIChvMSwgbzIpIHtcblx0aWYgKG8xID09PSBvMilcblx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRpZiAobzEgPT09IG51bGwgfHwgbzIgPT09IG51bGwpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcblx0aWYgKG8xICE9PSBvMSAmJiBvMiAhPT0gbzIpXG5cdFx0cmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXG5cblx0Y29uc3QgdDEgPSB0eXBlb2YgbzE7XG5cdGNvbnN0IHQyID0gdHlwZW9mIG8yO1xuXG5cdGxldCBsZW5ndGg7XG5cdGxldCBrZXk7XG5cdGxldCBrZXlTZXQ7XG5cblx0aWYgKHQxID09PSB0MiAmJiB0MSA9PT0gJ29iamVjdCcpIHtcblx0XHRpZiAoaXNBcnJheShvMSkpIHtcblx0XHRcdGlmICghaXNBcnJheShvMikpXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0bGVuZ3RoID0gbzEubGVuZ3RoO1xuXG5cdFx0XHRpZiAobzEubGVuZ3RoID09PSBvMi5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChrZXkgPSAwOyBrZXkgPCBsZW5ndGg7IGtleSsrKSB7XG5cdFx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzRGF0ZShvMSkpIHtcblx0XHRcdGlmICghaXNEYXRlKG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gc2ltcGxlQ29tcGFyZShvMS5nZXRUaW1lKCksIG8yLmdldFRpbWUoKSk7XG5cdFx0fSBlbHNlIGlmIChpc1JlZ0V4cChvMSkpIHtcblx0XHRcdGlmICghaXNSZWdFeHAobzIpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdHJldHVybiBvMS50b1N0cmluZygpID09PSBvMi50b1N0cmluZygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoaXNXaW5kb3cobzEpIHx8IGlzV2luZG93KG8yKSB8fCBpc0FycmF5KG8yKSB8fCBpc0RhdGUobzIpIHx8IGlzUmVnRXhwKG8yKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRrZXlTZXQgPSBjcmVhdGVNYXAoKTtcblx0XHRcdGZvciAoa2V5IGluIG8xKSB7XG5cdFx0XHRcdGlmIChpc0Z1bmN0aW9uKG8xW2tleV0pKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0XHRrZXlTZXRba2V5XSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoa2V5IGluIG8yKSB7XG5cdFx0XHRcdGlmICghKGtleSBpbiBrZXlTZXQpICYmIGlzRGVmaW5lZChvMltrZXldKSAmJiAhaXNGdW5jdGlvbihvMltrZXldKSlcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWFwICgpIHtcblx0cmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbmZ1bmN0aW9uIHNpbXBsZUNvbXBhcmUgKGEsIGIpIHtcblx0cmV0dXJuIGEgPT09IGIgfHwgKGEgIT09IGEgJiYgYiAhPT0gYik7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRPYmplY3RNYXhEZXB0aCAobWF4RGVwdGgpIHtcblx0cmV0dXJuIGlzTnVtYmVyKG1heERlcHRoKSAmJiBtYXhEZXB0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChzb3VyY2UsIGRlc3RpbmF0aW9uPywgbWF4RGVwdGg/KSB7XG5cdGNvbnN0IHN0YWNrU291cmNlID0gW107XG5cdGNvbnN0IHN0YWNrRGVzdCA9IFtdO1xuXG5cdG1heERlcHRoID0gaXNWYWxpZE9iamVjdE1heERlcHRoKG1heERlcHRoKSA/IG1heERlcHRoIDogTmFOO1xuXG5cdGlmIChkZXN0aW5hdGlvbikge1xuXHRcdGlmIChzb3VyY2UgPT09IGRlc3RpbmF0aW9uKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgaWRlbnRpY2FsLicpO1xuXHRcdH1cblxuXHRcdC8vIEVtcHR5IHRoZSBkZXN0aW5hdGlvbiBvYmplY3Rcblx0XHRpZiAoaXNBcnJheShkZXN0aW5hdGlvbikpIHtcblx0XHRcdGRlc3RpbmF0aW9uLmxlbmd0aCA9IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGRlc3RpbmF0aW9uKVxuXHRcdFx0XHRkZWxldGUgZGVzdGluYXRpb25ba2V5XTtcblx0XHR9XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0c3RhY2tTb3VyY2UucHVzaChzb3VyY2UpO1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGFja0Rlc3QucHVzaChkZXN0aW5hdGlvbik7XG5cblx0XHRyZXR1cm4gY29weVJlY3Vyc2Uoc291cmNlLCBkZXN0aW5hdGlvbiwgbWF4RGVwdGgpO1xuXHR9XG5cblx0cmV0dXJuIGNvcHlFbGVtZW50KHNvdXJjZSwgbWF4RGVwdGgpO1xuXG5cdGZ1bmN0aW9uIGNvcHlSZWN1cnNlIChfc291cmNlLCBfZGVzdGluYXRpb24sIF9tYXhEZXB0aCkge1xuXHRcdF9tYXhEZXB0aC0tO1xuXG5cdFx0aWYgKF9tYXhEZXB0aCA8IDApXG5cdFx0XHRyZXR1cm4gJy4uLic7XG5cblx0XHRpZiAoaXNBcnJheShfc291cmNlKSkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlpID0gX3NvdXJjZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG5cdFx0XHRcdF9kZXN0aW5hdGlvbi5wdXNoKGNvcHlFbGVtZW50KF9zb3VyY2VbaV0sIF9tYXhEZXB0aCkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNCbGFua09iamVjdChfc291cmNlKSkge1xuXHRcdFx0Ly8gY3JlYXRlTWFwKCkgZmFzdCBwYXRoIC0tLSBTYWZlIHRvIGF2b2lkIGhhc093blByb3BlcnR5IGNoZWNrIGJlY2F1c2UgcHJvdG90eXBlIGNoYWluIGlzIGVtcHR5XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XG5cdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoX3NvdXJjZSAmJiB0eXBlb2YgX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gU2xvdyBwYXRoLCB3aGljaCBtdXN0IHJlbHkgb24gaGFzT3duUHJvcGVydHlcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcblx0XHRcdFx0aWYgKF9zb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFNsb3dlc3QgcGF0aCAtLS0gaGFzT3duUHJvcGVydHkgY2FuJ3QgYmUgY2FsbGVkIGFzIGEgbWV0aG9kXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XG5cdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX3NvdXJjZSwga2V5KSkge1xuXHRcdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIF9kZXN0aW5hdGlvbjtcblx0fVxuXG5cdGZ1bmN0aW9uIGNvcHlFbGVtZW50IChfc291cmNlLCBfbWF4RGVwdGggPSA1KSB7XG5cdFx0Ly8gU2ltcGxlIHZhbHVlc1xuXHRcdGlmICghaXNPYmplY3QoX3NvdXJjZSkpXG5cdFx0XHRyZXR1cm4gX3NvdXJjZTtcblxuXHRcdC8vIEFscmVhZHkgY29waWVkIHZhbHVlc1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCBpbmRleCA9IHN0YWNrU291cmNlLmluZGV4T2YoX3NvdXJjZSk7XG5cblx0XHRpZiAoaW5kZXggIT09IC0xKVxuXHRcdFx0cmV0dXJuIHN0YWNrRGVzdFtpbmRleF07XG5cblx0XHRpZiAoaXNXaW5kb3coX3NvdXJjZSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBNYWtpbmcgY29waWVzIG9mIFdpbmRvdyBpbnN0YW5jZXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcblx0XHR9XG5cblx0XHRsZXQgbmVlZHNSZWN1cnNlID0gZmFsc2U7XG5cdFx0bGV0IF9kZXN0aW5hdGlvbiA9IGNvcHlUeXBlKF9zb3VyY2UpO1xuXG5cdFx0aWYgKF9kZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRfZGVzdGluYXRpb24gPSBpc0FycmF5KF9zb3VyY2UpID8gW10gOiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihfc291cmNlKSk7XG5cdFx0XHRuZWVkc1JlY3Vyc2UgPSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGFja1NvdXJjZS5wdXNoKF9zb3VyY2UpO1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGFja0Rlc3QucHVzaChfZGVzdGluYXRpb24pO1xuXG5cdFx0cmV0dXJuIG5lZWRzUmVjdXJzZVxuXHRcdFx0PyBjb3B5UmVjdXJzZShfc291cmNlLCBfZGVzdGluYXRpb24sIF9tYXhEZXB0aClcblx0XHRcdDogX2Rlc3RpbmF0aW9uO1xuXHR9XG5cblx0ZnVuY3Rpb24gY29weVR5cGUgKF9zb3VyY2UpIHtcblx0XHRzd2l0Y2ggKHRvU3RyaW5nLmNhbGwoX3NvdXJjZSkpIHtcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50OEFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDE2QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MzJBcnJheV0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBGbG9hdDMyQXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQ4QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDE2QXJyYXldJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDMyQXJyYXldJzpcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKGNvcHlFbGVtZW50KF9zb3VyY2UuYnVmZmVyKSwgX3NvdXJjZS5ieXRlT2Zmc2V0LCBfc291cmNlLmxlbmd0aCk7XG5cblx0XHRcdGNhc2UgJ1tvYmplY3QgQXJyYXlCdWZmZXJdJzpcblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUxMFxuXHRcdFx0XHRpZiAoIV9zb3VyY2Uuc2xpY2UpIHtcblx0XHRcdFx0XHQvLyBJZiB3ZSdyZSBpbiB0aGlzIGNhc2Ugd2Uga25vdyB0aGUgZW52aXJvbm1lbnQgc3VwcG9ydHMgQXJyYXlCdWZmZXJcblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuXHRcdFx0XHRcdGNvbnN0IGNvcGllZCA9IG5ldyBBcnJheUJ1ZmZlcihfc291cmNlLmJ5dGVMZW5ndGgpO1xuXHRcdFx0XHRcdG5ldyBVaW50OEFycmF5KGNvcGllZCkuc2V0KG5ldyBVaW50OEFycmF5KF9zb3VyY2UpKTtcblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlICovXG5cdFx0XHRcdFx0cmV0dXJuIGNvcGllZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gX3NvdXJjZS5zbGljZSgwKTtcblxuXHRcdFx0Y2FzZSAnW29iamVjdCBCb29sZWFuXSc6XG5cdFx0XHRjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxuXHRcdFx0Y2FzZSAnW29iamVjdCBTdHJpbmddJzpcblx0XHRcdGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoX3NvdXJjZS52YWx1ZU9mKCkpO1xuXG5cdFx0XHRjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxuXHRcdFx0XHRjb25zdCByZSA9IG5ldyBSZWdFeHAoX3NvdXJjZS5fc291cmNlLCBfc291cmNlLnRvU3RyaW5nKCkubWF0Y2goL1teL10qJC8pWzBdKTtcblxuXHRcdFx0XHRyZS5sYXN0SW5kZXggPSBfc291cmNlLmxhc3RJbmRleDtcblxuXHRcdFx0XHRyZXR1cm4gcmU7XG5cblx0XHRcdGNhc2UgJ1tvYmplY3QgQmxvYl0nOlxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoW19zb3VyY2VdLCB7dHlwZTogX3NvdXJjZS50eXBlfSk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzRnVuY3Rpb24oX3NvdXJjZS5jbG9uZU5vZGUpKSB7XG5cdFx0XHRyZXR1cm4gX3NvdXJjZS5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgQ29sdW1uSW5mbyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRmllbGRNYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGNvcHksIGVxdWFscyB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBBcGlGb3JtYXR0ZXIge1xuXHRNT01FTlRfSU5WQUxJRCA9ICdJbnZhbGlkIGRhdGUnO1xuXHRTRVJWRVJfREFURVRJTUVfRk9STUFUID0gJ1lZWVktTU0tRERbVF1ISDptbTpzc1onO1xuXHRTRVJWRVJfVElNRV9GT1JNQVQgPSAnSEg6bW06c3MnO1xuXHRTRVJWRVJfREFURV9GT1JNQVQgPSAnWVlZWS1NTS1ERCc7XG5cblx0Y29uc3RydWN0b3IgKCkge1xuXG5cdH1cblxuXHRmb3JtYXRSZXNwb25zZSAoZmllbGRzOiBGaWVsZE1hcCwgY29sdW1uczogQXJyYXk8Q29sdW1uSW5mbzxhbnk+Pik6IEZpZWxkTWFwIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKVxuXHRcdFx0ZmllbGRzW2NvbHVtbi5wYXRoXSA9IHRoaXMuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW4ucGF0aF0pO1xuXG5cdFx0cmV0dXJuIGZpZWxkcztcblx0fVxuXG5cdGV4cGFuZFJlc3BvbnNlIChjdXJyZW50OiBGaWVsZE1hcCwgZXhwYW5kZWQ6IEZpZWxkTWFwLCBjb2x1bW5zOiBBcnJheTxDb2x1bW5JbmZvPGFueT4+KTogRmllbGRNYXAge1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXG5cdFx0XHRjdXJyZW50W2NvbHVtbi5wYXRoXSA9IHRoaXMuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGV4cGFuZGVkW2NvbHVtbi5wYXRoXSk7XG5cblx0XHRyZXR1cm4gY3VycmVudDtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3QgKGluaXRpYWw6IEZpZWxkTWFwLCBtb2RpZmllZDogRmllbGRNYXAsIGNvbHVtbnM6IEFycmF5PENvbHVtbkluZm88YW55Pj4pOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2NvbHVtbklkOiBzdHJpbmddOiBhbnl9ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cdFx0XHRjb25zdCBjb2x1bW5UeXBlID0gYXBpQ29sdW1uLnR5cGU7XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcblx0XHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuZm9ybWF0UmVxdWVzdFZhbHVlKGNvbHVtblR5cGUsIG1vZGlmaWVkW2NvbHVtbklkXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3RMb2NhbCAoZmllbGRzOiBGaWVsZE1hcCwgY29sdW1uczogQXJyYXk8Q29sdW1uSW5mbzxhbnk+Pik6IEZpZWxkTWFwIHtcblx0XHRjb25zdCByZXN1bHQ6IHtbY29sdW1uSWQ6IHN0cmluZ106IGFueX0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcblxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmZvcm1hdFJlcXVlc3RWYWx1ZShhcGlDb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbklkXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGhhc0NoYW5nZXMgKGluaXRpYWw6IEZpZWxkTWFwLCBtb2RpZmllZDogRmllbGRNYXAsIGNvbHVtbnM6IEFycmF5PENvbHVtbkluZm88YW55Pj4pOiBib29sZWFuIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XG5cblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldENoYW5nZXMgKGluaXRpYWw6IEZpZWxkTWFwLCBtb2RpZmllZDogRmllbGRNYXAsIGNvbHVtbnM6IEFycmF5PENvbHVtbkluZm88YW55Pj4pOiBGaWVsZE1hcCB7XG5cdFx0Y29uc3QgcmVzdWx0OiBvYmplY3RbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKSB7XG5cdFx0XHRcdHJlc3VsdC5wdXNoKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG9sZFZhbHVlOiBpbml0aWFsW2NvbHVtbklkXSxcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBtb2RpZmllZFtjb2x1bW5JZF0sXG5cdFx0XHRcdFx0XHRjb2x1bW46IGNvbHVtbi5hcGlDb2x1bW5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNvcHlGaWVsZHMgKHNvdXJjZTogRmllbGRNYXAsIGRlc3RpbmF0aW9uOiBGaWVsZE1hcCwgY29sdW1uczogQXJyYXk8Q29sdW1uSW5mbzxhbnk+Pik6IEZpZWxkTWFwIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XG5cblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gdGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIHNvdXJjZVtjb2x1bW5QYXRoXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0c2hhbGxvd0NvcHlGaWVsZHMgKFxuXHRcdHNoYWxsb3dTb3VyY2U6IEZpZWxkTWFwLFxuXHRcdGRlZXBTb3VyY2U6IEZpZWxkTWFwLFxuXHRcdGRlc3RpbmF0aW9uOiBGaWVsZE1hcCxcblx0XHRjb2x1bW5zOiBBcnJheTxDb2x1bW5JbmZvPGFueT4+XG5cdCk6IEZpZWxkTWFwIHtcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XG5cblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gc2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0c2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSA6XG5cdFx0XHRcdHRoaXMuY2xvbmUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBkZWVwU291cmNlW2NvbHVtblBhdGhdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVzdGluYXRpb247XG5cdH1cblxuXHRzZXREZWZhdWx0VmFsdWVzIChkZXN0aW5hdGlvbjogRmllbGRNYXAsIGNvbHVtbnM6IEFycmF5PENvbHVtbkluZm88YW55Pj4pOiBGaWVsZE1hcCB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbi5pZF0gPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0Y29tcGFyZUZpZWxkcyAoY29sdW1uVHlwZTogc3RyaW5nLCBmaXJzdD86IGFueSwgc2Vjb25kPzogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYgKGZpcnN0ID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gc2Vjb25kID09PSB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2Vjb25kID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVNb21lbnRPYmplY3RzKGZpcnN0LCBzZWNvbmQpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRHVyYXRpb25zKGZpcnN0LCBzZWNvbmQpO1xuXHRcdFx0Y2FzZSAnaWQnOiAvLyBpZCB0eXBlc1xuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdsaW5rJzpcblx0XHRcdGNhc2UgJ2NoaWxkJzpcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdFx0XHRyZXR1cm4gZmlyc3QgPT0gc2Vjb25kOyAvLyB1c2Ugbm9uLXN0cmljdCBjb21wYXJpc29uXG5cdFx0XHRjYXNlICdjdXJyZW50Jzpcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XG5cdFx0XHRjYXNlICdkb3VibGUnOiAvLyBmbG9hdGluZyBwb2ludCB0eXBlc1xuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ3F1YW50aXR5Jzpcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZsb2F0cyhmaXJzdCwgc2Vjb25kKTtcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcblx0XHRcdGNhc2UgJ2Jvb2wnOiAvLyBib29sZWFuIHR5cGVzXG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdGNhc2UgJ2VtYWlsJzogLy8gc3RyaW5nIHR5cGVzXG5cdFx0XHRjYXNlICdwaG9uZSc6XG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdjb2xvcic6XG5cdFx0XHRjYXNlICdvcmRlcic6XG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PT0gc2Vjb25kO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGVxdWFscyhmaXJzdCwgc2Vjb25kKTtcblx0XHR9XG5cdH1cblxuXHRjb21wYXJlRmxvYXRzIChhOiBudW1iZXIsIGI6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFic0EgPSBNYXRoLmFicyhhKTtcblx0XHRjb25zdCBhYnNCID0gTWF0aC5hYnMoYik7XG5cdFx0Y29uc3QgZGlmZiA9IE1hdGguYWJzKGEgLSBiKTtcblxuXHRcdGNvbnN0IEVQU0lMT04gPSAxLjE5ZS0wNztcblxuXHRcdC8vIHNob3J0Y3V0LCBoYW5kbGVzIGluZmluaXRpZXNcblx0XHRpZiAoYSA9PT0gYikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIGlmIChhID09PSAwIHx8IGIgPT09IDAgfHwgZGlmZiA8IE51bWJlci5NSU5fVkFMVUUpIHtcblx0XHRcdC8vIGEgb3IgYiBpcyB6ZXJvIG9yIGJvdGggYXJlIGV4dHJlbWVseSBjbG9zZSB0byBpdFxuXHRcdFx0Ly8gcmVsYXRpdmUgZXJyb3IgaXMgbGVzcyBtZWFuaW5nZnVsIGhlcmVcblx0XHRcdHJldHVybiBkaWZmIDwgKEVQU0lMT04gKiBOdW1iZXIuTUlOX1ZBTFVFKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gdXNlIHJlbGF0aXZlIGVycm9yXG5cdFx0XHRyZXR1cm4gZGlmZiAvIE1hdGgubWluKChhYnNBICsgYWJzQiksIE51bWJlci5NQVhfVkFMVUUpIDwgRVBTSUxPTjtcblx0XHR9XG5cdH1cblxuXHRjb21wYXJlTW9tZW50T2JqZWN0cyAoZmlyc3Q6IG1vbWVudC5Nb21lbnQsIHNlY29uZDogbW9tZW50Lk1vbWVudCk6IGJvb2xlYW4ge1xuXHRcdGlmICghZmlyc3QuaXNWYWxpZCgpKVxuXHRcdFx0cmV0dXJuICFzZWNvbmQuaXNWYWxpZCgpO1xuXG5cdFx0aWYgKCFzZWNvbmQuaXNWYWxpZCgpKVxuXHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBmaXJzdCBJUyB2YWxpZFxuXG5cdFx0cmV0dXJuIGZpcnN0LmlzU2FtZShzZWNvbmQpO1xuXHR9XG5cblx0Y29tcGFyZUR1cmF0aW9ucyAoZmlyc3Q6IG1vbWVudC5EdXJhdGlvbiwgc2Vjb25kOiBtb21lbnQuRHVyYXRpb24pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmlyc3QuYXNNaWxsaXNlY29uZHMoKSA9PT0gc2Vjb25kLmFzTWlsbGlzZWNvbmRzKCk7XG5cdH1cblxuXHRmb3JtYXRSZXNwb25zZVZhbHVlIChjb2x1bW5UeXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZURhdGUodmFsdWUpO1xuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUNvbG9yKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEdXJhdGlvbih2YWx1ZSk7XG5cdFx0XHRjYXNlICdqc29uJzpcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcnID8gSlNPTi5wYXJzZSh2YWx1ZSkgOiB2YWx1ZTtcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZTtcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcblx0XHRcdFx0cmV0dXJuIHZhbHVlIC8gMTAwMDAwMDtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0VmFsdWUgKGNvbHVtblR5cGU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RGF0ZVRpbWUodmFsdWUpO1xuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdENvbG9yKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdER1cmF0aW9uKHZhbHVlKTtcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRmb3JtYXRSZXNwb25zZURhdGUgKHZhbHVlOiBudWxsIHwgYW55KTogbW9tZW50Lk1vbWVudCB7XG5cdFx0cmV0dXJuIHZhbHVlID09PSBudWxsID8gbW9tZW50LmludmFsaWQoKSA6IG1vbWVudCh2YWx1ZSk7XG5cdH1cblxuXHRmb3JtYXRSZXNwb25zZUR1cmF0aW9uICh2YWx1ZTogbnVsbCB8IG51bWJlcik6IG1vbWVudC5EdXJhdGlvbiB7XG5cdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbih2YWx1ZSA9PT0gbnVsbCA/IDAgOiB2YWx1ZSwgJ3NlY29uZHMnKTtcblx0fVxuXG5cdGZvcm1hdFJlc3BvbnNlQ29sb3IgKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcjJyA/IHZhbHVlIDogJyMnICsgdmFsdWU7XG5cdH1cblxuXHRmb3JtYXRSZXF1ZXN0RGF0ZVRpbWUgKHZhbHVlOiBtb21lbnQuTW9tZW50KTogc3RyaW5nIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlLmZvcm1hdCh0aGlzLlNFUlZFUl9EQVRFVElNRV9GT1JNQVQpIDogbnVsbDtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3REYXRlICh2YWx1ZTogbW9tZW50Lk1vbWVudCk6IHN0cmluZyB8IG51bGwge1xuXHRcdHJldHVybiB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZS5mb3JtYXQodGhpcy5TRVJWRVJfREFURV9GT1JNQVQpIDogbnVsbDtcblx0fVxuXG5cdGZvcm1hdFJlcXVlc3REdXJhdGlvbiAodmFsdWU6IG1vbWVudC5EdXJhdGlvbik6IG51bWJlciB7XG5cdFx0cmV0dXJuIHZhbHVlLmFzU2Vjb25kcygpO1xuXHR9XG5cblx0Zm9ybWF0UmVxdWVzdENvbG9yICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdmFsdWUuY2hhckF0KDApID09PSAnIycgPyB2YWx1ZS5zdWJzdHJpbmcoMSkgOiB2YWx1ZTtcblx0fVxuXG5cdGdldERlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZTogc3RyaW5nKTogYW55IHtcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcblx0XHRcdGNhc2UgJ2ludCc6XG5cdFx0XHRjYXNlICdkb3VibGUnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdvcmRlcic6XG5cdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0Y2FzZSAnaXRlbSc6XG5cdFx0XHRjYXNlICdsaW5rJzpcblx0XHRcdGNhc2UgJ2NoaWxkJzpcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRjYXNlICdlbnVtJzpcblx0XHRcdFx0cmV0dXJuICcwJztcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAndGltZSc6XG5cdFx0XHRcdHJldHVybiBtb21lbnQuaW52YWxpZCgpO1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKCk7XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0XHRyZXR1cm4gJyMwMDAwMDAnO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0Ly8gXHRcdFx0XHRcdGVtYWlsXG5cdFx0XHQvLyBcdFx0XHRcdFx0dXJsXG5cdFx0XHQvLyBcdFx0XHRcdFx0aHRtbFxuXHRcdFx0Ly8gXHRcdFx0XHRcdGpzb25cblx0XHRcdC8vIFx0XHRcdFx0XHRkYXRhXG5cdFx0fVxuXHR9XG5cblx0aXNEZWZhdWx0VmFsdWUgKGNvbHVtblR5cGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmNvbXBhcmVGaWVsZHMoY29sdW1uVHlwZSwgdmFsdWUsIHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtblR5cGUpKTtcblx0fVxuXG5cdGNsb25lIChjb2x1bW5UeXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnkge1xuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZUR1cmF0aW9uKHZhbHVlKTtcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0XHRyZXR1cm4gbW9tZW50KHZhbHVlKTtcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0XHRyZXR1cm4gY29weSh2YWx1ZSk7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q2xvbmVGdW5jdGlvbiAoY29sdW1uVHlwZTogc3RyaW5nKSB7XG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRHVyYXRpb247XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEYXRlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHRoaXMuaWRlbnRpdHk7XG5cdFx0fVxuXHR9XG5cblx0Y2xvbmVEdXJhdGlvbiAoZHVyYXRpb246IG1vbWVudC5EdXJhdGlvbikge1xuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oZHVyYXRpb24pO1xuXHR9XG5cblx0Y2xvbmVEYXRlIChkYXRlOiBtb21lbnQuTW9tZW50KTogbW9tZW50Lk1vbWVudCB7XG5cdFx0cmV0dXJuIGRhdGUuY2xvbmUoKTtcblx0fVxuXG5cdGlkZW50aXR5PFQ+IChpbnB1dDogVCk6IFQge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbk1hcCwgQXBpUmVxdWVzdEl0ZW1NYXAsIEFwaVJlcXVlc3RMaW1pdCwgSXRlbUlkLCBJdGVtVHlwZSwgUHJvbWlzZUludGVyZmFjZVxufSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBBcGlSZXF1ZXN0U2VydmljZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnlcblx0KSB7XG5cblx0fVxuXG5cdHRlbXBsYXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIHBhcmFtczogYW55KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHBhcmFtcykpO1xuXHR9XG5cblx0Y3JlYXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCB2YWx1ZXM6IGFueSwgcGFyZW50VHlwZT86IEl0ZW1UeXBlLCBwYXJlbnRJZD86IEl0ZW1JZCk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShpdGVtVHlwZSwgaXRlbUlkLCB2YWx1ZXMsIHBhcmVudFR5cGUsIHBhcmVudElkKSk7XG5cdH1cblxuXHRkZWxldGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkczogSXRlbUlkW10pOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoaXRlbVR5cGUsIGl0ZW1JZHMpKTtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1zOiBBcGlSZXF1ZXN0SXRlbU1hcCwgY29sdW1uczogYW55KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSk7XG5cdH1cblxuXHRyZXF1ZXN0U2tlbGV0b24gKHBhcmFtczogYW55LCByZXF1ZXN0Q2FuY2VsZXI/OiBQcm9taXNlSW50ZXJmYWNlPGFueT4pOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocGFyYW1zLCByZXF1ZXN0Q2FuY2VsZXIpKTtcblx0fVxuXG5cdG1vdmVJdGVtcyAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1zOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXX0pOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1zKSk7XG5cdH1cblxuXHRjb2x1bW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5NYXAsIHBhcmFtcz86IGFueSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIGNvbHVtbnMsIHBhcmFtcykpO1xuXHR9XG5cblx0cXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnk6IGFueSwgY29sdW1uczogQXBpUmVxdWVzdENvbHVtbk1hcCwgbGltaXQ/OiBBcGlSZXF1ZXN0TGltaXQpOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwgcXVlcnksIGNvbHVtbnMsIGxpbWl0KSk7XG5cdH1cblxuXHRwcm9jZXNzUmVzcG9uc2UgKHJlcXVlc3Q6IGFueSk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gcmVxdWVzdC50aGVuKChyZXNwb25zZTogYW55KSA9PiB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QocmVzcG9uc2UpKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtVHlwZSwgSXRlbVR5cGVNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3Ige1xuXHRjb2x1bW5zOiBJdGVtVHlwZU1hcDtcblx0aXRlbXM6IHtcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IGFueVxuXHRcdH1cblx0fTtcblx0bGlua3M6IEl0ZW1UeXBlTWFwO1xuXHRjYWNoZWFibGU6IGJvb2xlYW47XG5cdG1hcDogYW55O1xuXG5cdGNvbHVtbkluZGV4TWFwOiBhbnkgPSB7fTtcblx0Y29sdW1uTWFwOiBhbnkgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHVibGljIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyByZXNwb25zZTogYW55XG5cdCkge1xuXHRcdHRoaXMuY29sdW1ucyA9IHJlc3BvbnNlLmNvbHVtbnM7XG5cdFx0dGhpcy5pdGVtcyA9IHJlc3BvbnNlLml0ZW1zO1xuXHRcdHRoaXMubGlua3MgPSByZXNwb25zZS5saW5rcztcblx0XHR0aGlzLmNhY2hlYWJsZSA9IHJlc3BvbnNlLmNhY2hlYWJsZTtcblx0XHR0aGlzLm1hcCA9IHJlc3BvbnNlLm1hcDtcblxuXHRcdHRoaXMuY3JlYXRlQ29sdW1uTWFwcygpO1xuXHR9XG5cblx0Y3JlYXRlQ29sdW1uTWFwcyAoKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW5UeXBlIGluIHRoaXMuY29sdW1ucykge1xuXHRcdFx0dGhpcy5jb2x1bW5JbmRleE1hcFtjb2x1bW5UeXBlXSA9IHt9O1xuXHRcdFx0dGhpcy5jb2x1bW5NYXBbY29sdW1uVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnNbY29sdW1uVHlwZV0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zW2NvbHVtblR5cGVdW2ldO1xuXHRcdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBpO1xuXHRcdFx0XHR0aGlzLmNvbHVtbk1hcFtjb2x1bW5UeXBlXVtjb2x1bW4uaWRdID0gY29sdW1uO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZldGNoVmFsdWUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGNvbHVtbklkOiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGFbdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdXTtcblx0fVxuXG5cdGZldGNoRGVyaXZlZE9iamVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgcm9vdENvbHVtbnM6IFJlc3BvbnNlQ29sdW1uW10pIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhcblx0XHRcdFx0dGhpcy5mZXRjaFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbi5pZCksXG5cdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0cmVzdWx0XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaERlcml2ZWRWYWx1ZXMgKHZhbHVlOiBhbnksIGNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIGRlc3RpbmF0aW9uOiBhbnkpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xuXHRcdFx0bGV0IGNoaWxkVmFsdWU7XG5cblx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRjaGlsZFZhbHVlID0gbnVsbDtcblx0XHRcdFx0ZGVzdGluYXRpb25bY2hpbGRDb2x1bW4ucGF0aF0gPSB0aGlzLmFwaUZvcm1hdHRlci5nZXREZWZhdWx0VmFsdWUoY2hpbGRDb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IHRoaXMuZmV0Y2hWYWx1ZShjb2x1bW4uaXRlbVR5cGUsIHZhbHVlLCBjaGlsZENvbHVtbi5pZCk7XG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gY2hpbGRWYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNoaWxkQ29sdW1uLmlzTGVhZilcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzKGNoaWxkVmFsdWUsIGNoaWxkQ29sdW1uLCBkZXN0aW5hdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0ZmV0Y2hPYmplY3Q8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1JZDogc3RyaW5nIHwgSXRlbUlkLFxuXHRcdGluY2x1ZGVMaW5rczogYm9vbGVhbiA9IGZhbHNlXG5cdCk6IEZpZWxkTWFwPEl0ZW1UeXBlVHlwZT4gfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLml0ZW1zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0aWYgKGl0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBkYXRhID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXS5kYXRhO1xuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0ge307XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdHJlc3VsdFt0aGlzLmNvbHVtbnNbaXRlbVR5cGVdW2ldLmlkXSA9IGRhdGFbaV07XG5cdFx0fVxuXG5cdFx0aWYgKGluY2x1ZGVMaW5rcykge1xuXHRcdFx0Y29uc3QgbGlua3MgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmxpbmtzO1xuXHRcdFx0cmVzdWx0Ll9fbGlua3MgPSB7fTtcblxuXHRcdFx0Zm9yIChjb25zdCBsaW5rVHlwZSBpbiBsaW5rcylcblx0XHRcdFx0cmVzdWx0Ll9fbGlua3NbbGlua1R5cGVdID1cblx0XHRcdFx0XHR0aGlzLmZldGNoT2JqZWN0QXJyYXkobGlua1R5cGUsIGluY2x1ZGVMaW5rcywgbGlua3NbbGlua1R5cGVdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hPYmplY3RBcnJheTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aW5jbHVkZUxpbmtzPzogYm9vbGVhbixcblx0XHRpZEFycmF5PzogSXRlbUlkW10gfCBudWxsXG5cdCk6IEFycmF5PEZpZWxkTWFwPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG5cblx0XHRpZiAoaWRBcnJheSA9PT0gbnVsbCkge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzKSk7XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXG5cdFx0aWYgKGlkQXJyYXkgPT09IHVuZGVmaW5lZClcblx0XHRcdGlkQXJyYXkgPSB0aGlzLmxpbmtzW2l0ZW1UeXBlXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkhKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaE9iamVjdE1hcCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5JZDogc3RyaW5nLCBpbmNsdWRlTGlua3M/OiBib29sZWFuLCByZXR1cm5LZXlzPzogYm9vbGVhbikge1xuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdO1xuXHRcdGNvbnN0IHJlc3VsdDoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcblx0XHRjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pIHtcblx0XHRcdGNvbnN0IGtleSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YVtjb2x1bW5JbmRleF07XG5cdFx0XHRrZXlzLnB1c2goa2V5KTtcblx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpO1xuXHRcdH1cblxuXHRcdGlmIChyZXR1cm5LZXlzKVxuXHRcdFx0cmV0dXJuIHtyZXN1bHQ6IHJlc3VsdCwga2V5czoga2V5c307XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoRmllbGRNYXA8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChpdGVtVHlwZTogSXRlbVR5cGVUeXBlLCBjb2x1bW5JZDogc3RyaW5nKTogRmllbGRNYXA8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2l0ZW1JZDogbnVtYmVyXTogRmllbGRNYXA8SXRlbVR5cGVUeXBlPn0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXG5cdFx0XHRyZXN1bHRbaWRdID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmRhdGFbaW5kZXhdO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZldGNoQ29sdW1uQXJyYXkgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IFJlc3BvbnNlQ29sdW1uW10ge1xuXHRcdGNvbnN0IHJlc3VsdDogUmVzcG9uc2VDb2x1bW5bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBhcGlDb2x1bW4gb2YgdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSlcblx0XHRcdHJlc3VsdC5wdXNoKGFwaUNvbHVtbik7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZmV0Y2hDb2x1bW5PYmplY3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IFJlc3BvbnNlQ29sdW1uIHtcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5NYXBbaXRlbVR5cGVdO1xuXHR9XG5cblx0ZmV0Y2hDb2x1bW5zT2JqZWN0ICgpOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBSZXNwb25zZUNvbHVtbn0ge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcDtcblx0fVxuXG5cdGNyZWF0ZVJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpZDogSXRlbUlkXG5cdCk6IHtvYmplY3Q6IEZpZWxkTWFwPEl0ZW1UeXBlVHlwZT4gfCB1bmRlZmluZWQsIGxpbmtzOiBhbnl9IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0b2JqZWN0OiB0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpZCksXG5cdFx0XHRsaW5rczogdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmxpbmtzXG5cdFx0fTtcblx0fVxuXG5cdGhhc0l0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUpOiBib29sZWFuIHtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldElkQXJyYXkgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IEl0ZW1JZFtdIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xuXHRcdFx0cmVzdWx0LnB1c2gocGFyc2VJbnQoaXRlbUlkLCAxMCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn1cbiIsImV4cG9ydCBlbnVtIEVOVFJZX1NUQVRVUyB7XG5cdENBQ0hFRCA9ICdjYWNoZWQnLFxuXHRMT0NBTCA9ICdsb2NhbCcsXG5cdFBST01JU0VEID0gJ3Byb21pc2VkJyxcblx0RVhQQU5EID0gJ2V4cGFuZCcsXG5cdFBST01JU0VEX0VYUEFORCA9ICdwcm9taXNlZC1leHBhbmQnLFxuXHRFWFBBTkRfTE9DQUwgPSAnZXhwYW5kLWxvY2FsJyxcblx0UFJPTUlTRURfRVhQQU5EX0xPQ0FMID0gJ3Byb21pc2VkLWV4cGFuZC1sb2NhbCcsXG5cdFJFU09MVkUgPSAncmVzb2x2ZScsXG5cdFJFU09MVkVfVkFMVUVTID0gJ3Jlc29sdmUtdmFsdWVzJ1xufVxuXG5leHBvcnQgY29uc3QgQUxMX1BFUk1JU1NJT05TID0gJzcnO1xuXG5leHBvcnQgY29uc3QgQ09MVU1OX1NFUEVSQVRPUiA9ICc+JztcbmV4cG9ydCBjb25zdCBSRU5ERVJfQVNfU0VQRVJBVE9SID0gJzonO1xuXG5leHBvcnQgY29uc3QgTkVXX1BSRUZJWDogc3RyaW5nID0gJy0xJztcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfUFJFRklYOiBzdHJpbmcgPSAnLTInO1xuXG5leHBvcnQgY29uc3QgTkVXX0tFWVdPUkQ6IHN0cmluZyA9ICduZXctJztcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfS0VZV09SRDogc3RyaW5nID0gJ2R1cC0nO1xuIiwiaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBFbnRyeVN0YXR1cywgRW50cnlTdGF0dXNNYXAsIEl0ZW1JZCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1czxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSwgVCBleHRlbmRzIEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+IHwgQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4+IHtcblx0cmVhZG9ubHkgcmVxdWVzdFN0YXR1cyA9IFtcblx0XHRFTlRSWV9TVEFUVVMuUkVTT0xWRSxcblx0XHRFTlRSWV9TVEFUVVMuUkVTT0xWRV9WQUxVRVMsXG5cdFx0RU5UUllfU1RBVFVTLkVYUEFORCxcblx0XHRFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXG5cdF07XG5cblx0cmVhZG9ubHkgcmVtb3RlRXhwYW5kU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdO1xuXG5cdHJlYWRvbmx5IGxvY2FsRXhwYW5kU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5FWFBBTkRfTE9DQUwsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRfTE9DQUxdO1xuXG5cdGVudHJpZXM6IEVudHJ5U3RhdHVzTWFwPFQ+ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdHB1YmxpYyBnZXRJdGVtSWQ6IChpdGVtRW50cnk6IFQpID0+IEl0ZW1JZCxcblx0XHRwdWJsaWMgZ2V0UHJvbWlzZTogKGl0ZW1FbnRyeTogVCkgPT4gUHJvbWlzZUludGVyZmFjZTxUPlxuXHQpIHtcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBFTlRSWV9TVEFUVVMpXG5cdFx0XHR0aGlzLmVudHJpZXNbRU5UUllfU1RBVFVTW3N0YXR1c11dID0gW107XG5cdH1cblxuXHRhZGQgKGVudHJ5U3RhdHVzOiBFbnRyeVN0YXR1czxUPik6IHZvaWQge1xuXHRcdHRoaXMuZW50cmllc1tlbnRyeVN0YXR1cy5zdGF0dXNdLnB1c2goZW50cnlTdGF0dXMuZW50cnkpO1xuXHR9XG5cblx0aGFzRW50cmllcyAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdKTogYm9vbGVhbiB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXS5sZW5ndGggPiAwKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRoYXNSZXF1ZXN0cyAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaGFzRW50cmllcyh0aGlzLnJlcXVlc3RTdGF0dXMpO1xuXHR9XG5cblx0Zm9yRWFjaEVudHJ5IChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10sIGNhbGxiYWNrOiAoZW50cnk6IFQsIGl0ZW1JZDogSXRlbUlkKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSwgdGhpcy5nZXRJdGVtSWQoc3RhdHVzRW50cnkpKTtcblx0XHR9XG5cdH1cblxuXHRyZWR1Y2VFbnRyaWVzPFU+IChcblx0XHRzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10sXG5cdFx0Y2FsbGJhY2s6IChlbnRyeTogVCwgaXRlbUlkOiBJdGVtSWQsIGRlc3RpbmF0aW9uOiBVKSA9PiB2b2lkLFxuXHRcdGRlc3RpbmF0aW9uOiBVXG5cdCk6IFUge1xuXHRcdGZvciAoY29uc3Qgc3RhdHVzIG9mIHN0YXR1c0FycmF5KSB7XG5cdFx0XHRjb25zdCBzdGF0dXNFbnRyaWVzID0gdGhpcy5lbnRyaWVzW3N0YXR1c107XG5cblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzRW50cnkgb2Ygc3RhdHVzRW50cmllcylcblx0XHRcdFx0Y2FsbGJhY2soc3RhdHVzRW50cnksIHRoaXMuZ2V0SXRlbUlkKHN0YXR1c0VudHJ5KSwgZGVzdGluYXRpb24pO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcblx0fVxuXG5cdHJlZHVjZUFsbEVudHJpZXM8VT4gKFxuXHRcdGNhbGxiYWNrOiAoZW50cnk6IFQsIGl0ZW1JZDogSXRlbUlkLCBkZXN0aW5hdGlvbjogVSkgPT4gdm9pZCxcblx0XHRkZXN0aW5hdGlvbjogVVxuXHQpOiBVIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IGVudHJpZXNbc3RhdHVzXTtcblxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSwgdGhpcy5nZXRJdGVtSWQoc3RhdHVzRW50cnkpLCBkZXN0aW5hdGlvbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHR9XG5cblx0Z2V0UHJvbWlzZXMgKCk6IFByb21pc2VJbnRlcmZhY2U8VFtdPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFxuXHRcdFx0dGhpcy5yZWR1Y2VFbnRyaWVzKFxuXHRcdFx0XHRbRU5UUllfU1RBVFVTLlBST01JU0VELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcblx0XHRcdFx0KGVudHJ5OiBULCBfaXRlbUlkOiBJdGVtSWQsIGRlc3RpbmF0aW9uKSA9PiB7XG5cdFx0XHRcdFx0ZGVzdGluYXRpb24ucHVzaCh0aGlzLmdldFByb21pc2UoZW50cnkpKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0W10gYXMgQXJyYXk8UHJvbWlzZUludGVyZmFjZTxUPj5cblx0XHRcdClcblx0XHQpO1xuXHR9XG5cblx0Z2V0SXRlbUlkcyAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdKTogSXRlbUlkW10ge1xuXHRcdHJldHVybiB0aGlzLnJlZHVjZUVudHJpZXMoXG5cdFx0XHRzdGF0dXNBcnJheSxcblx0XHRcdChfLCBpdGVtSWQsIGRlc3RpbmF0aW9uKSA9PiB7XG5cdFx0XHRcdGRlc3RpbmF0aW9uLnB1c2goaXRlbUlkKTtcblx0XHRcdH0sXG5cdFx0XHRbXSBhcyBJdGVtSWRbXVxuXHRcdCk7XG5cdH1cblxuXHRnZXRSZXF1ZXN0SWRzICgpOiBJdGVtSWRbXSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0SXRlbUlkcyh0aGlzLnJlcXVlc3RTdGF0dXMpO1xuXHR9XG5cblx0Z2V0QXJyYXkgKHN0YXR1c0FycmF5PzogRU5UUllfU1RBVFVTW10pOiBUW10ge1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gKGVudHJ5OiBULCBfaXRlbUlkOiBJdGVtSWQsIGRlc3RpbmF0aW9uOiBUW10pID0+IHtcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2goZW50cnkpO1xuXHRcdH07XG5cblx0XHRpZiAoc3RhdHVzQXJyYXkgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnJlZHVjZUFsbEVudHJpZXMoY2FsbGJhY2ssIFtdKTtcblxuXHRcdHJldHVybiB0aGlzLnJlZHVjZUVudHJpZXMoc3RhdHVzQXJyYXksIGNhbGxiYWNrLCBbXSk7XG5cdH1cblxuXHRnZXRNYXAgKCk6IHtbaXRlbUlkOiBzdHJpbmddOiBUfSB7XG5cdFx0cmV0dXJuIHRoaXMucmVkdWNlQWxsRW50cmllcyhcblx0XHRcdChlbnRyeTogVCwgaXRlbUlkOiBJdGVtSWQsIGRlc3RpbmF0aW9uOiB7W2l0ZW1JZDogbnVtYmVyXTogVH0pID0+IHtcblx0XHRcdFx0ZGVzdGluYXRpb25baXRlbUlkXSA9IGVudHJ5O1xuXHRcdFx0fSxcblx0XHRcdHt9XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEVudHJ5UGFyZW50LCBFbnRyeVBhcmVudE51bGwsIEl0ZW1FbnRyeU1hcCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY3JlYXRlUGF0aCwgZ2V0UGF0aCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCB0eXBlIERlbGV0ZU1hcEVudHJ5PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiA9IHtpdGVtOiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPiwgcGFyZW50OiBFbnRyeVBhcmVudE51bGx9O1xuXG5leHBvcnQgdHlwZSBNb3ZlTWFwRW50cnk8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ID0ge2l0ZW06IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LCBwYXJlbnQ6IEVudHJ5UGFyZW50fTtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlQ29tcGlsYXRpb24gPSB7XG5cdFtwYXJlbnRUeXBlOiBzdHJpbmddOiB7XG5cdFx0W3BhcmVudElkOiBudW1iZXJdOiBJdGVtRW50cnlNYXA8SXRlbVR5cGU+XG5cdH1cbn07XG5cbmV4cG9ydCB0eXBlIERlbGV0ZUNvbXBpbGF0aW9uID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZT4+XG59O1xuXG5leHBvcnQgdHlwZSBVcGRhdGVDb21waWxhdGlvbiA9IEl0ZW1FbnRyeU1hcDxJdGVtVHlwZT47XG5cbmV4cG9ydCB0eXBlIE1vdmVDb21waWxhdGlvbiA9IHtcblx0W3BhcmVudFR5cGU6IHN0cmluZ106IHtcblx0XHRbcGFyZW50SWQ6IG51bWJlcl06IEFycmF5PE1vdmVNYXBFbnRyeTxhbnk+PlxuXHR9XG59O1xuXG5leHBvcnQgY2xhc3MgQ2hhbmdlc0NvbXBpbGF0aW9uIHtcblx0Y29tcGlsYXRpb246IHtcblx0XHRjcmVhdGU6IENyZWF0ZUNvbXBpbGF0aW9uLFxuXHRcdGRlbGV0ZTogRGVsZXRlQ29tcGlsYXRpb24sXG5cdFx0dXBkYXRlOiBVcGRhdGVDb21waWxhdGlvbixcblx0XHRtb3ZlOiBNb3ZlQ29tcGlsYXRpb25cblx0fSA9IHtcblx0XHRjcmVhdGU6IHt9LFxuXHRcdGRlbGV0ZToge30sXG5cdFx0dXBkYXRlOiB7fSxcblx0XHRtb3ZlOiB7fVxuXHR9O1xuXG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XG5cblx0cHJpdmF0ZSBtb3ZlQXJyYXk6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZT4+ID0gW107XG5cblx0cHJpdmF0ZSBkZWxldGVNYXA6IHtcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IERlbGV0ZU1hcEVudHJ5PEl0ZW1UeXBlPlxuXHRcdH1cblx0fSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBzaW5nbGVJdGVtczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlPj4sXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IEFycmF5PENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZT4+XG5cdCkge1xuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cblx0XHR0aGlzLnByb2Nlc3NTaW5nbGVJdGVtcygpO1xuXHRcdHRoaXMucHJvY2Vzc0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25FbnRyaWVzKTtcblx0XHR0aGlzLnBvc3RQcm9jZXNzKCk7XG5cdH1cblxuXHRnZXREZWZhdWx0UGFyZW50ICgpOiBFbnRyeVBhcmVudCB7XG5cdFx0cmV0dXJuIHtpdGVtVHlwZTogJ1ZvaWQnLCBpdGVtSWQ6IDB9O1xuXHR9XG5cblx0YWRkTW92ZUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZT4pOiB2b2lkIHtcblx0XHR0aGlzLm1vdmVBcnJheS5wdXNoKGl0ZW1FbnRyeSk7XG5cdH1cblxuXHRhZGREZWxldGVFbnRyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGU+LCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCk6IHZvaWQge1xuXHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHR0aGlzLmRlbGV0ZU1hcCxcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0W3t9LCB7aXRlbTogaXRlbUVudHJ5LCBwYXJlbnQ6IHBhcmVudH1dXG5cdFx0KTtcblx0fVxuXG5cdGFkZFVwZGF0ZUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZT4pOiB2b2lkIHtcblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi51cGRhdGUsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRhZGRDcmVhdGVFbnRyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGU+KTogdm9pZCB7XG5cdFx0bGV0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cGFyZW50ID0gdGhpcy5nZXREZWZhdWx0UGFyZW50KCk7XG5cblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi5jcmVhdGUsXG5cdFx0XHRbcGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0W3t9LCB7fSwge30sIGl0ZW1FbnRyeV1cblx0XHQpO1xuXHR9XG5cblx0Y29udGFpbnNDcmVhdGVFbnRyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGNyZWF0ZUNvbXBpbGF0aW9uID0gdGhpcy5jb21waWxhdGlvbi5jcmVhdGU7XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY3JlYXRlQ29tcGlsYXRpb24pIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY3JlYXRlQ29tcGlsYXRpb25bcGFyZW50VHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0gY3JlYXRlQ29tcGlsYXRpb25bcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXTtcblxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5TWFwID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gaXRlbUVudHJ5TWFwKSB7XG5cdFx0XHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtrZXldLml0ZW1JZCA9PT0gaXRlbUlkKVxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZURlbGV0ZUNvbXBpbGF0aW9uICgpOiB2b2lkIHtcblx0XHRjb25zdCBkZWxldGVNYXAgPSB0aGlzLmRlbGV0ZU1hcDtcblx0XHRjb25zdCBkZWxldGVDb21waWxhdGlvbiA9IHRoaXMuY29tcGlsYXRpb24uZGVsZXRlO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBkZWxldGVNYXApIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGRlbGV0ZU1hcFtpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGU+ID0gZGVsZXRlTWFwW2l0ZW1UeXBlXVtpdGVtSWRdLml0ZW07XG5cblx0XHRcdFx0aWYgKGRlbGV0ZUNvbXBpbGF0aW9uW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGRlbGV0ZUNvbXBpbGF0aW9uW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRcdGRlbGV0ZUNvbXBpbGF0aW9uW2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cG9zdFByb2Nlc3MgKCk6IHZvaWQge1xuXHRcdGNvbnN0IGRlbGV0ZU1hcCA9IHRoaXMuZGVsZXRlTWFwO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5tb3ZlQXJyYXkpIHtcblx0XHRcdGNvbnN0IGRlbGV0ZUVudHJ5OiBEZWxldGVNYXBFbnRyeTxJdGVtVHlwZT4gPSBnZXRQYXRoKGRlbGV0ZU1hcCwgW2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0pO1xuXG5cdFx0XHRpZiAoZGVsZXRlRW50cnkgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIGFzc3VtZSB0aGUgaXRlbUVudHJ5IGhhcyBhIHBhcmVudCAob3Igc29tZXRoaW5nIHdlbnQgc2VyaW91c2x5IHdyb25nKVxuXHRcdFx0Y29uc3Qge2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfSA9IGl0ZW1FbnRyeS5wYXJlbnQhO1xuXG5cdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkgJiYgIXRoaXMuY29udGFpbnNDcmVhdGVFbnRyeShwYXJlbnRUeXBlLCBwYXJlbnRJZCkpIHtcblx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IGRlbGV0ZUVudHJ5LnBhcmVudDtcblxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y3JlYXRlUGF0aDxBcnJheTxEZWxldGVNYXBFbnRyeTxJdGVtVHlwZT4+Pih0aGlzLmNvbXBpbGF0aW9uLm1vdmUsIFtwYXJlbnRUeXBlLCBwYXJlbnRJZF0sIFt7fSwgW11dKS5wdXNoKGRlbGV0ZUVudHJ5KTtcblxuXHRcdFx0ZGVsZXRlIGRlbGV0ZU1hcFtpdGVtRW50cnkuaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXHRcdH1cblxuXHRcdHRoaXMuY3JlYXRlRGVsZXRlQ29tcGlsYXRpb24oKTtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1NpbmdsZUl0ZW1zICgpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiB0aGlzLnNpbmdsZUl0ZW1zKSB7XG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcblx0XHRcdFx0dGhpcy5hZGRDcmVhdGVFbnRyeShpdGVtRW50cnkpO1xuXHRcdFx0ZWxzZSBpZiAoaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSlcblx0XHRcdFx0dGhpcy5hZGRVcGRhdGVFbnRyeShpdGVtRW50cnkpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uRW50cmllczogQXJyYXk8Q29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlPj4pOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcykge1xuXHRcdFx0dGhpcy5jb2xsZWN0aW9ucy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRsZXQgYWRkZWRJdGVtczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlPj47XG5cdFx0XHRsZXQgcmVtb3ZlZEl0ZW1zOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGU+PjtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpIHtcblx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtcztcblx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gW107XG5cdFx0XHR9IGVsc2UgaWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzKSB7XG5cdFx0XHRcdGFkZGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0QWRkZWRJdGVtcygpO1xuXHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0UmVtb3ZlZEl0ZW1zKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRlZEl0ZW1zID0gW107XG5cdFx0XHRcdHJlbW92ZWRJdGVtcyA9IFtdO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbSBvZiBhZGRlZEl0ZW1zKSB7IC8vIGl0IGlzIHBvc3NpYmxlIHRvIG1vdmUgYW4gZXhpc3RpbmcgaXRlbSB0byBhIG5ldyBjb2xsZWN0aW9uXG5cdFx0XHRcdGlmIChhZGRlZEl0ZW0uaXNMb2NhbCgpKVxuXHRcdFx0XHRcdHRoaXMuYWRkQ3JlYXRlRW50cnkoYWRkZWRJdGVtKTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRoaXMuYWRkTW92ZUVudHJ5KGFkZGVkSXRlbSk7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW0gb2YgcmVtb3ZlZEl0ZW1zKVxuXHRcdFx0XHR0aGlzLmFkZERlbGV0ZUVudHJ5KHJlbW92ZWRJdGVtLCBjb2xsZWN0aW9uRW50cnkucGFyZW50KTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcykge1xuXHRcdFx0XHRjb25zdCB1cGRhdGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1zKCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCB1cGRhdGVkSXRlbSBvZiB1cGRhdGVkSXRlbXMpXG5cdFx0XHRcdFx0dGhpcy5hZGRVcGRhdGVFbnRyeSh1cGRhdGVkSXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQge1xuXHRBcGlGb3JtYXR0ZXIsXG5cdENoYW5nZXNDb21waWxhdGlvbixcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdENvbHVtbkluZm8sXG5cdERlbGV0ZUNvbXBpbGF0aW9uLFxuXHRJdGVtSGFuZGxlcixcblx0TW92ZUNvbXBpbGF0aW9uLFxuXHRNb3ZlTWFwRW50cnksXG5cdFVwZGF0ZUNvbXBpbGF0aW9uXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdE1vdmVJdGVtcyxcblx0QXBpUmVzcG9uc2UsXG5cdENyZWF0ZVJlcXVlc3RFbnRyeSxcblx0Q3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0RW50cnlQYXJlbnQsXG5cdEZpZWxkTWFwLFxuXHRJdGVtSWQsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdEl0ZW1UeXBlLFxuXHRQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY3JlYXRlUGF0aCwgZ2V0UGF0aCwgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XG5cbnR5cGUgQ29sbGVjdGlvbk1hcDxUPiA9IHtcblx0W3BhcmVudFR5cGU6IHN0cmluZ106IHtcblx0XHRbcGFyZW50SWQ6IHN0cmluZ106IHtcblx0XHRcdFtpdGVtVHlwZTogc3RyaW5nXTogVFtdXG5cdFx0fVxuXHR9XG59O1xuXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRidWlsZE1vdmVSZXF1ZXN0IChjb21waWxhdGlvbkVudHJpZXM6IEFycmF5PE1vdmVNYXBFbnRyeTxhbnk+Pik6IEFwaVJlcXVlc3RNb3ZlSXRlbXMge1xuXHRcdGNvbnN0IHJlc3VsdDogQXBpUmVxdWVzdE1vdmVJdGVtcyA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gY29tcGlsYXRpb25FbnRyeS5pdGVtO1xuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRcdGlmIChyZXN1bHRbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc3VsdFtpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0cmVzdWx0W2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRNYXBWYWx1ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgbWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKTogSXRlbUlkIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAobWFwID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlQ3JlYXRlUmVxdWVzdHMgKFxuXHRcdGNoYW5nZXNDb21waWxhdGlvbjogQ2hhbmdlc0NvbXBpbGF0aW9uLFxuXHRcdHBhcmFtZXRlcnM6IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCxcblx0XHRicmVha3VwQnlQYXJlbnQ/OiBib29sZWFuLFxuXHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz86IChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiB2b2lkXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUlkQ29udmVyc2lvbk1hcD4ge1xuXHRcdGNvbnN0IHJlcXVlc3RzID0gdGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRjaGFuZ2VzQ29tcGlsYXRpb24uY29tcGlsYXRpb24uY3JlYXRlLFxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLmNvbGxlY3Rpb25zLFxuXHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdGJyZWFrdXBCeVBhcmVudFxuXHRcdCkucnVuKCk7XG5cblx0XHRjb25zdCByZXNwb25zZXM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8YW55Pj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cylcblx0XHRcdHJlc3BvbnNlcy5wdXNoKHRoaXMuZXhlY3V0ZUNyZWF0ZVJlcXVlc3QocmVxdWVzdCwgY29udmVyc2lvbk1hcCkudGhlbihub3RpZnkpKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXNwb25zZXMpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cblx0XHRmdW5jdGlvbiBub3RpZnkgKHJlc3VsdDogYW55KSB7XG5cdFx0XHRpZiAob25BZnRlckNyZWF0ZUNhbGxiYWNrICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayhjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVDcmVhdGVSZXF1ZXN0IChcblx0XHRyZXF1ZXN0UmVzb3VyY2U6IENyZWF0ZVJlcXVlc3RFbnRyeTxhbnk+LFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcblx0KTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZU1hcCA9IHJlc3BvbnNlLm1hcDtcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gcmVxdWVzdFJlc291cmNlLml0ZW1zO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdC5jb2x1bW5zW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3SXRlbUlkID0gdGhpcy5nZXRNYXBWYWx1ZShpdGVtVHlwZSwgcGFyc2VJbnQoaXRlbUlkLCAxMCksIHJlc3BvbnNlTWFwKTtcblxuXHRcdFx0XHRcdFx0aWYgKG5ld0l0ZW1JZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignQ3JlYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCk7XG5cdFx0XHRcdFx0XHRjb25zdCBleHBhbmRSZXNvdXJjZSA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkID0gbmV3SXRlbUlkO1xuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUZpZWxkcyhcblx0XHRcdFx0XHRcdFx0ZmllbGRzLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCwgaXRlbUVudHJ5LmNvbHVtbnMucm9vdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kKFxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkcyxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcblx0XHRcdFx0XHRcdFx0XHRleHBhbmRSZXNvdXJjZVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zLmFkZFRvQ29sbGVjdGlvbnMoKTtcblxuXHRcdFx0XHQvLyBleHRlbmQgY29udmVyc2lvbiBtYXBcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiByZXNwb25zZU1hcCkge1xuXHRcdFx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHJlc3BvbnNlTWFwW2l0ZW1UeXBlXSlcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdW3BhcnNlSW50KGl0ZW1JZCwgMTApXSA9IHJlc3BvbnNlTWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzIChjb21waWxhdGlvbjogVXBkYXRlQ29tcGlsYXRpb24sIHBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlPj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKHRoaXMuZXhlY3V0ZVVwZGF0ZVJlcXVlc3QoaXRlbVR5cGUsIGNvbXBpbGF0aW9uW2l0ZW1UeXBlXSwgcGFyYW1ldGVycykpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3Q8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiB7W2l0ZW1JZDogbnVtYmVyXTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT59LFxuXHRcdHBhcmFtZXRlck1hcDogYW55XG5cdCkge1xuXHRcdGNvbnN0IHJlcXVlc3Q6IHtbaXRlbVR5cGU6IHN0cmluZ106IHtbaXRlbUlkOiBudW1iZXJdOiBGaWVsZE1hcDxJdGVtVHlwZVR5cGU+fX0gPSB7fTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmdldENvbGxlY3Rpb25NYXRjaGVyPEl0ZW1UeXBlVHlwZT4oKTtcblxuXHRcdHJlcXVlc3RbaXRlbVR5cGVdID0ge307XG5cblx0XHQvLyB3ZSBuZWVkIHRvIGRvIHRoZSBmb3JtYXRSZXF1ZXN0IGNhbGwgaGVyZSAoZmllbGRzIG1pZ2h0IGhhdmUgYmVlbiB1cGRhdGVkKVxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xuXHRcdFx0Ly8gUk1Db3JlIHRvZG86IHR5cGVcblx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0W2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aChwYXJhbWV0ZXJNYXAsIFtpdGVtVHlwZSwgaXRlbUlkXSk7XG5cblx0XHRcdGl0ZW1SZXF1ZXN0LnZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XG5cblx0XHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zID0gY29sbGVjdGlvbk1hdGNoZXIuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKVxuXHRcdFx0cmVxdWVzdENvbHVtbnMuZXhwYW5kKGNvbGxlY3Rpb24uY29sdW1ucyk7XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS51cGRhdGVJdGVtcyhpdGVtVHlwZSwgcmVxdWVzdCwgcmVxdWVzdENvbHVtbnMuZ2V0KCkpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMuZ2V0KClbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xuXHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRcdFx0aWYgKGZpZWxkcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1VwZGF0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhpdGVtRW50cnkuaW5pdGlhbCwge30sIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xuXG5cdFx0XHRcdFx0aXRlbUVudHJ5XG5cdFx0XHRcdFx0XHQudXBkYXRlRmllbGRzKGZpZWxkcywgcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGl0ZW1FbnRyeS5jb2x1bW5zLnJvb3QpKVxuXHRcdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XG5cblx0XHRcdFx0XHRjb25zdCBleHBhbmRSZXNvdXJjZSA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0XHRcdFx0aWYgKGV4cGFuZFJlc291cmNlID09PSBudWxsKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kKFxuXHRcdFx0XHRcdFx0ZmllbGRzLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGV4cGFuZFJlc291cmNlLmRpZmZlcmVuY2Uucm9vdCksXG5cdFx0XHRcdFx0XHRleHBhbmRSZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucygpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVEZWxldGVSZXF1ZXN0cyAoY29tcGlsYXRpb246IERlbGV0ZUNvbXBpbGF0aW9uKSB7XG5cdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8dm9pZD4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbXBpbGF0aW9uKSAvLyBjbGVhcmluZyBub3QgbmVjZXNzYXJ5XG5cdFx0XHRyZXF1ZXN0cy5wdXNoKHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3QoaXRlbVR5cGUsIGNvbXBpbGF0aW9uW2l0ZW1UeXBlXSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZURlbGV0ZVJlcXVlc3Q8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj5cblx0KSB7XG5cdFx0Y29uc3QgaWRBcnJheTogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0aWRBcnJheS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKGl0ZW1UeXBlLCBpZEFycmF5KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUlkQXJyYXkgPSByZXNwb25zZS5pdGVtcztcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmdldENvbGxlY3Rpb25NYXRjaGVyPEl0ZW1UeXBlVHlwZT4oKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRcdGlmICghaW5BcnJheShpdGVtRW50cnkuaXRlbUlkLCByZXNwb25zZUlkQXJyYXkpKVxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdEZWxldGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLnJlbW92ZUZyb21Db2xsZWN0aW9ucygpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVNb3ZlUmVxdWVzdHMgKGNvbXBpbGF0aW9uOiBNb3ZlQ29tcGlsYXRpb24sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZUludGVyZmFjZTx2b2lkPj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb21waWxhdGlvbltwYXJlbnRUeXBlXSlcblx0XHRcdFx0ZXhlY3V0ZU1vdmVSZXF1ZXN0KHBhcmVudFR5cGUsICtwYXJlbnRJZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcblxuXHRcdGZ1bmN0aW9uIGV4ZWN1dGVNb3ZlUmVxdWVzdCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQpIHtcblx0XHRcdC8vIG9ubHkgdGhlIHBhcmVudCBpZCBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZFxuXHRcdFx0Y29uc3QgY29tcGlsYXRpb25FbnRyaWVzID0gY29tcGlsYXRpb25bcGFyZW50VHlwZV1bcGFyZW50SWRdO1xuXHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSBzZWxmLmdldE1hcFZhbHVlKHBhcmVudFR5cGUsIHBhcmVudElkLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0cmVxdWVzdHMucHVzaChcblx0XHRcdFx0c2VsZi5hcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMoXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkID8gbmV3UGFyZW50SWQgOiBwYXJlbnRJZCxcblx0XHRcdFx0XHRzZWxmLmJ1aWxkTW92ZVJlcXVlc3QoY29tcGlsYXRpb25FbnRyaWVzKVxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0c2VsZi5wcm9jZXNzTW92ZVJlc3BvbnNlKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllcyk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRzZWxmLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NNb3ZlUmVzcG9uc2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ICgvKiByZXNwb25zZSwgKi9cblx0XHRjb21waWxhdGlvbkVudHJpZXM6IEFycmF5PE1vdmVNYXBFbnRyeTxJdGVtVHlwZVR5cGU+Pik6IHZvaWQge1xuXHRcdC8vIFRPRE86IHByb2Nlc3MgcmVzcG9uc2VcblxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblx0XHRjb25zdCByZW1vdmVDb2xsZWN0aW9uTWFwID0ge307XG5cdFx0Y29uc3QgYWRkQ29sbGVjdGlvbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gY29tcGlsYXRpb25FbnRyeS5pdGVtO1xuXG5cdFx0XHR0aGlzLmFkZENvbGxlY3Rpb25NYXBFbnRyeShcblx0XHRcdFx0cmVtb3ZlQ29sbGVjdGlvbk1hcCxcblx0XHRcdFx0Y29tcGlsYXRpb25FbnRyeS5wYXJlbnQuaXRlbUlkLFxuXHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWRcblx0XHRcdCk7XG5cblx0XHRcdHRoaXMuYWRkQ29sbGVjdGlvbk1hcEVudHJ5KFxuXHRcdFx0XHRhZGRDb2xsZWN0aW9uTWFwLFxuXHRcdFx0XHQoaXRlbUVudHJ5LnBhcmVudCBhcyBFbnRyeVBhcmVudCkuaXRlbUlkLFxuXHRcdFx0XHRpdGVtRW50cnksXG5cdFx0XHRcdGl0ZW1FbnRyeVxuXHRcdFx0KTtcblxuXHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb248SXRlbUlkPihcblx0XHRcdHJlbW92ZUNvbGxlY3Rpb25NYXAsXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBpdGVtSWRzKSA9PiB7XG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhcblx0XHRcdFx0XHRpdGVtSWRzLFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uPEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pihcblx0XHRcdGFkZENvbGxlY3Rpb25NYXAsXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBhZGRlZEVudHJpZXMpID0+IHtcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKFxuXHRcdFx0XHRcdGFkZGVkRW50cmllcyxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBhZGRDb2xsZWN0aW9uTWFwRW50cnk8VSBleHRlbmRzIEl0ZW1FbnRyeTxhbnk+LCBUIGV4dGVuZHMgSXRlbUlkIHwgVT4gKFxuXHRcdGNvbGxlY3Rpb25NYXA6IENvbGxlY3Rpb25NYXA8VD4sXG5cdFx0cGFyZW50SWQ6IEl0ZW1JZCxcblx0XHRpdGVtRW50cnk6IFUsXG5cdFx0dmFsdWU6IFRcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcEVudHJ5ID0gY3JlYXRlUGF0aDxUW10+KFxuXHRcdFx0Y29sbGVjdGlvbk1hcCxcblx0XHRcdFtpdGVtRW50cnkucGFyZW50IS5pdGVtVHlwZSwgcGFyZW50SWQsIGl0ZW1FbnRyeS5pdGVtVHlwZV0sXG5cdFx0XHRbe30sIHt9LCBbXV1cblx0XHQpO1xuXG5cdFx0Y29sbGVjdGlvbk1hcEVudHJ5LnB1c2godmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBmb3JFYWNoQ29sbGVjdGlvbjxUIGV4dGVuZHMgSXRlbUlkIHwgSXRlbUVudHJ5PGFueT4+IChcblx0XHRjb2xsZWN0aW9uTWFwOiBDb2xsZWN0aW9uTWFwPFQ+LFxuXHRcdGNhbGxiYWNrOiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8YW55PiwgaXRlbXM6IFRbXSkgPT4gdm9pZFxuXHQpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF0pIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlQYXJlbnQocGFyZW50VHlwZSwgK3BhcmVudElkLCBpdGVtVHlwZSk7XG5cblx0XHRcdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0XHRjYWxsYmFjayhjb2xsZWN0aW9uRW50cnksIGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBub3RlOiB3aXRoIHRoZSBuZXcgaXRlbSBzdHJ1Y3R1cmUsICphbGwqIGxvY2FsIGl0ZW1zIGFyZSBpbiB0aGUgc2luZ2xlIGl0ZW0gY2FjaGVcblx0cHJpdmF0ZSBvbkl0ZW1zQ3JlYXRlZCAoXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCxcblx0XHRzaW5nbGVJdGVtczogQXJyYXk8SXRlbUVudHJ5PGFueT4+LFxuXHRcdGNvbGxlY3Rpb25zOiBBcnJheTxDb2xsZWN0aW9uRW50cnk8YW55Pj5cblx0KSB7XG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbnZlcnNpb25NYXApKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbnMpIHtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XG5cdFx0XHRjb25zdCB1cGRhdGVkQ29sdW1uczoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mbzxhbnk+fSA9XG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5nZXRVcGRhdGVkSXRlbUNvbHVtbnMoY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSB0aGlzLmdldE1hcFZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRcdFx0aWYgKG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zKTtcblxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWhhc1Byb3BlcnRpZXModXBkYXRlZENvbHVtbnMpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHVwZGF0ZWRDb2x1bW5zLmlkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwW2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV0pO1xuXG5cdFx0XHQvLyB3aGVuIHVwZGF0aW5nIGFuIGl0ZW0gdG8gcmVmZXIgdG8gYSBuZXdseSBjcmVhdGVkIGl0ZW0sIHRoZSB1cGRhdGVkIGl0ZW0gd2lsbCAqbm90KiBiZSBhZGRlZCB0b1xuXHRcdFx0Ly8gc2luZ2xlIGl0ZW1zIChlLmcuIG1vdmluZyBhIGZ1bmN0aW9uIHRvIGEgbmV3bHkgY3JlYXRlZCBmdW5jdGlvbiBncm91cClcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyeS5pdGVtcylcblx0XHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2Ygc2luZ2xlSXRlbXMpIHtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdGl0ZW1FbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHBhcmVudC5pdGVtSWQgPSBuZXdQYXJlbnRJZDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBwcm9wZXIgb3JkZXI6IGNyZWF0ZSAtIG1vdmUgLSBkZWxldGUgLSB1cGRhdGVcblx0ZXhlY3V0ZSAoXG5cdFx0c2luZ2xlSXRlbXM6IEFycmF5PEl0ZW1FbnRyeTxhbnk+Pixcblx0XHRjb2xsZWN0aW9uczogQXJyYXk8Q29sbGVjdGlvbkVudHJ5PGFueT4+LFxuXHRcdHBhcmFtZXRlcnM6IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgPSB7fSxcblx0XHRicmVha3VwQnlQYXJlbnQ/OiBib29sZWFuLFxuXHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz86IChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiB2b2lkXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUlkQ29udmVyc2lvbk1hcD4ge1xuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuZXJyb3JIYW5kbGVyO1xuXHRcdGNvbnN0IGNoYW5nZXNDb21waWxhdGlvbiA9IHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS5jb25zdHJ1Y3Qoc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcblx0XHRjb25zdCBjb21waWxhdGlvbiA9IGNoYW5nZXNDb21waWxhdGlvbi5jb21waWxhdGlvbjtcblx0XHRjb25zdCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge307XG5cblx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ3JlYXRlUmVxdWVzdHMoXG5cdFx0XHRjaGFuZ2VzQ29tcGlsYXRpb24sXG5cdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0Y29udmVyc2lvbk1hcCxcblx0XHRcdGJyZWFrdXBCeVBhcmVudCxcblx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFja1xuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVNb3ZlUmVxdWVzdHMoY29tcGlsYXRpb24ubW92ZSwgY29udmVyc2lvbk1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHR0aGlzLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XG5cblx0XHRcdFx0cmV0dXJuIGVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLnVwZGF0ZSwgcGFyYW1ldGVycyk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLmRlbGV0ZSk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksIFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoUmVzdWx0LCBDb2xsZWN0aW9uUXVlcnksIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmVudW0gQ09OU1RBTlRTIHtcblx0TUFZQkUgPSAnbWF5YmUnXG59XG5cbnR5cGUgQ29sbGVjdGlvbkVudHJ5TWFwID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRbY29sbGVjdGlvbkVudHJ5SWQ6IG51bWJlcl06IENvbGxlY3Rpb25FbnRyeTxhbnk+XG5cdH1cbn07XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGUge1xuXHRwcml2YXRlIGVudHJpZXM6IENvbGxlY3Rpb25FbnRyeU1hcCA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XG5cdCkge31cblxuXHRjb250YWlucyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8YW55Pik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gZW50cmllc1tjb2xsZWN0aW9uRW50cnkuaWRdICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHRzb21lIChjYWxsYmFjazogKGVudHJ5OiBDb2xsZWN0aW9uRW50cnk8YW55PikgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRpZiAoY2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF0pKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeTxhbnk+KSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRjYWxsYmFjayhlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSk7XG5cdFx0fVxuXHR9XG5cblx0LypcdGZpbHRlciAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiBib29sZWFuKTogdm9pZCB7XG5cdCBjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXHQgY29uc3QgZmlsdGVyZWRFbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlNYXAgID0ge307XG5cblx0IGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHQgZmlsdGVyZWRFbnRyaWVzW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdCBmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcblx0IGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdO1xuXG5cdCBpZiAoY2FsbGJhY2soY29sbGVjdGlvbkVudHJ5KSlcblx0IGZpbHRlcmVkRW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF0gPSBjb2xsZWN0aW9uRW50cnk7XG5cdCB9XG5cdCB9XG5cblx0IHRoaXMuZW50cmllcyA9IGZpbHRlcmVkRW50cmllcztcblx0IH1cblx0ICovXG5cdHRvQXJyYXkgKCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxDb2xsZWN0aW9uRW50cnk8YW55Pj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKVxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGFkZDxUIGV4dGVuZHMgQ29sbGVjdGlvbkVudHJ5PGFueT4+IChjb2xsZWN0aW9uRW50cnk6IFQpOiBUIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKGVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRlbnRyaWVzW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0cmV0dXJuIGVudHJpZXNbaXRlbVR5cGVdW2NvbGxlY3Rpb25FbnRyeS5pZF0gPSBjb2xsZWN0aW9uRW50cnk7XG5cdH1cblxuXHRjbGVhciAoY29sbGVjdGlvbkVudHJ5PzogQ29sbGVjdGlvbkVudHJ5PGFueT4pOiBib29sZWFuIHtcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuZW50cmllcyA9IHt9O1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuY29udGFpbnMoY29sbGVjdGlvbkVudHJ5KSlcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBkZWxldGUgdGhpcy5lbnRyaWVzW2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV1bY29sbGVjdGlvbkVudHJ5LmlkXTtcblx0fVxuXG5cdGdldEJ5SXRlbVR5cGU8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChpdGVtVHlwZTogSXRlbVR5cGVUeXBlKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2VudHJ5SWRdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtYXRjaFBhcmVudCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8YW55PiwgaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBJdGVtSWQpIHtcblx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0cmV0dXJuIHBhcmVudC5pdGVtVHlwZSA9PT0gaXRlbVR5cGUgJiYgcGFyZW50Lml0ZW1JZCA9PSBpdGVtSWQ7XG5cdH1cblxuXHQvLyBUT0RPOiB0aGluayBvZiBiZXR0ZXIgbmFtZVxuXHRnZXRCeVBhcmVudDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtVHlwZTogSXRlbVR5cGVUeXBlKTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4gfCBudWxsIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRpZiAodGhpcy5tYXRjaFBhcmVudChlbnRyaWVzW2VudHJ5SWRdLCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXG5cdFx0XHRcdHJldHVybiBlbnRyaWVzW2VudHJ5SWRdO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2V0UmVzb3VyY2VCeVBhcmVudDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtVHlwZTogSXRlbVR5cGVUeXBlKTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4gfCBudWxsIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmdldEJ5UGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LmNhY2hlLmdldExhdGVzdChjb2xsZWN0aW9uRW50cnkpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbnNCeVBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8Q29sbGVjdGlvbkVudHJ5PGFueT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXTtcblxuXHRcdFx0XHRpZiAodGhpcy5tYXRjaFBhcmVudChjb2xsZWN0aW9uRW50cnksIHBhcmVudFR5cGUsIHBhcmVudElkKSlcblx0XHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogT25seSByZXNvdXJjZXNcblx0ICogQHBhcmFtIHtTdHJpbmd9IGl0ZW1UeXBlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IGl0ZW1JZFxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBcnJheSBvZiBjb2xsZWN0aW9ucy5cblx0ICovXG5cdGdldEJ5Q29udGFpbmluZ0l0ZW08SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChpdGVtVHlwZTogSXRlbVR5cGVUeXBlLCBpdGVtSWQ6IEl0ZW1JZCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8Q29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2VudHJ5SWRdO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmdldEl0ZW1CeUlkKGl0ZW1JZCkgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYW4gYXJyYXkgb2YgY29sbGVjdGlvbnMgdGhlIGl0ZW0gJ2JlbG9uZ3MnIGluLlxuXHQgKi9cblx0Z2V0QnlGaXR0aW5nSXRlbTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsIGZpZWxkczogRmllbGRNYXAsIHBhcmVudDogRW50cnlQYXJlbnROdWxsKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8SXRlbVR5cGVUeXBlPiA9IHtmaXR0aW5nOiBbXSwgbm90Zml0dGluZzogW10sIG1heWJlOiBbXX07XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdC8vIGNvbnNvbGUudGltZSgnZ2V0QnlGaXR0aW5nSXRlbScpO1xuXG5cdFx0Y29uc3QgcXVlcnlNYXRjaGVyID0gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZmllbGRzLCBwYXJlbnQpO1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XG5cdFx0XHRjb25zdCBtYXRjaFJlc3VsdCA9IHF1ZXJ5TWF0Y2hlci5tYXRjaFF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QpO1xuXG5cdFx0XHQvLyBUT0RPOiBtYXliZT9cblx0XHRcdGlmIChtYXRjaFJlc3VsdCA9PT0gdHJ1ZSkgLy8gbWlnaHQgYWxzbyByZXR1cm4gJ21heWJlJ1xuXHRcdFx0XHRyZXN1bHQuZml0dGluZy5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0XHRlbHNlIGlmIChtYXRjaFJlc3VsdCA9PT0gQ09OU1RBTlRTLk1BWUJFKVxuXHRcdFx0XHRyZXN1bHQubWF5YmUucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXN1bHQubm90Zml0dGluZy5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0fVxuXG5cdFx0Ly8gY29uc29sZS50aW1lRW5kKCdnZXRCeUZpdHRpbmdJdGVtJyk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlRdWVyeTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsIHF1ZXJ5OiBDb2xsZWN0aW9uUXVlcnkpOiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPiB8IG51bGwge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkucXVlcnkuc3RyaW5nID09PSBxdWVyeS5zdHJpbmcpXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXRCeUtleTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsIGVudHJ5S2V5OiBzdHJpbmcpOiBBcnJheTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj4ge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8Q29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2VudHJ5SWRdO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuZW50cnlLZXkgPT09IGVudHJ5S2V5KVxuXHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRSZXNvdXJjZUJ5S2V5PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSwgcmVzb3VyY2VLZXk6IHN0cmluZyk6IEFycmF5PENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeS5jYWNoZS5nZXQoZW50cmllc1tlbnRyeUlkXSk7XG5cblx0XHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XG5cdFx0XHRcdGlmIChyZXNvdXJjZS5vcHRpb25zLnJlc291cmNlS2V5ID09PSByZXNvdXJjZUtleSlcblx0XHRcdFx0XHRyZXN1bHQucHVzaChyZXNvdXJjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufVxuIiwiaW1wb3J0IHsgaW5zdGFudGlhdGVPcHRpb25zIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1uTWFwLCBBcGlSZXF1ZXN0Q29sdW1ucywgRW50cnlQYXJlbnROdWxsIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBJdGVtRW50cnlPcHRpb25zSW50ZXJmYWNlID0gUGFydGlhbDxJdGVtRW50cnlPcHRpb25zPjtcblxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeU9wdGlvbnMge1xuXHRwdWJsaWMgY29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMgPSB0cnVlO1xuXHRwdWJsaWMgcGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xuXHRwdWJsaWMgdGVtcGxhdGVPcHRpb25zOiBhbnkgPSB7fTsgLy8gVE9ET1xuXHRwdWJsaWMgdGVtcGxhdGVDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uTWFwID0ge307XG5cdHB1YmxpYyBkZWZlclJlcXVlc3Q6IGJvb2xlYW4gPSBmYWxzZTtcblx0cHVibGljIGlzRHVwbGljYXRlOiBib29sZWFuID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IgKHZhbHVlczogSXRlbUVudHJ5T3B0aW9uc0ludGVyZmFjZSkge1xuXHRcdGluc3RhbnRpYXRlT3B0aW9ucyh0aGlzLCB2YWx1ZXMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBpbnN0YW50aWF0ZU9wdGlvbnMgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IE9uQ2hhbmdlRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tICcuL0l0ZW1SZXNvdXJjZSc7XG5cbmV4cG9ydCB0eXBlIEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVJlc291cmNlVHlwZSBleHRlbmRzIEl0ZW1SZXNvdXJjZTxhbnk+ID0gSXRlbVJlc291cmNlPGFueT4+ID0gUGFydGlhbDxJdGVtUmVzb3VyY2VPcHRpb25zPEl0ZW1SZXNvdXJjZVR5cGU+PjtcblxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZU9wdGlvbnM8SXRlbVJlc291cmNlVHlwZSBleHRlbmRzIEl0ZW1SZXNvdXJjZTxhbnk+ID0gSXRlbVJlc291cmNlPGFueT4+IHtcblx0cHVibGljIGVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0cHVibGljIHJlbW90ZTogYm9vbGVhbiA9IGZhbHNlO1xuXHRwdWJsaWMgb25DaGFuZ2U6IE9uQ2hhbmdlRnVuY3Rpb248SXRlbVJlc291cmNlVHlwZT4gPSBub29wO1xuXG5cdGNvbnN0cnVjdG9yICh2YWx1ZXM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVJlc291cmNlVHlwZT4pIHtcblx0XHRpbnN0YW50aWF0ZU9wdGlvbnModGhpcywgdmFsdWVzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uSW5mbywgQ29sdW1uU2V0IH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IERlZmVycmVkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UsIExvY2FsVmlld1Jlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdENvbHVtbkV4cGFuc2lvblJlc3VsdCxcblx0RW50cnlQYXJlbnROdWxsLFxuXHRGaWVsZE1hcCxcblx0SXRlbUVycm9yLFxuXHRJdGVtSWQsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdEl0ZW1UeXBlLFxuXHRQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4uL3R5cGVzJztcblxubGV0IGN1cnJlbnRJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBJdGVtRW50cnk8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUgPSBhbnk+IHtcblx0cHVibGljIGlkOiBudW1iZXIgPSArK2N1cnJlbnRJZDtcblxuXHRwdWJsaWMgcmVsb2FkUXVldWVkOiBib29sZWFuID0gZmFsc2U7XG5cdHB1YmxpYyBkZWZlclJlcXVlc3Q6IGJvb2xlYW4gPSBmYWxzZTtcblx0cHVibGljIGRlZmVycmVkPzogRGVmZXJyZWQ8dGhpcz47XG5cblx0cHVibGljIHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbDtcblxuXHRwdWJsaWMgaW5pdGlhbDogRmllbGRNYXA8SXRlbVR5cGVUeXBlPjtcblx0cHVibGljIG1vZGlmaWVkOiBGaWVsZE1hcDxJdGVtVHlwZVR5cGU+O1xuXHRwdWJsaWMgZGVyaXZlZDogRmllbGRNYXA8SXRlbVR5cGVUeXBlPjtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdHB1YmxpYyBpdGVtSWQ6IEl0ZW1JZCxcblx0XHRwdWJsaWMgY29sdW1uczogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT5cblx0KSB7XG5cdH1cblxuXHRwcml2YXRlIGdldFJlc291cmNlcyAoKTogQXJyYXk8SXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5Lml0ZW1SZXNvdXJjZUZhY3RvcnkuY2FjaGUuZ2V0KHRoaXMpO1xuXHR9XG5cblx0cHVibGljIHF1ZXVlUmVsb2FkICgpOiB0aGlzIHtcblx0XHR0aGlzLnJlbG9hZFF1ZXVlZCA9IHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBkZWZlciAoZGVmZXJSZXF1ZXN0OiBib29sZWFuID0gZmFsc2UpOiB0aGlzIHtcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XG5cdFx0dGhpcy5kZWZlclJlcXVlc3QgPSBkZWZlclJlcXVlc3Q7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBnZXRQcm9taXNlICgpOiBQcm9taXNlSW50ZXJmYWNlPHRoaXM+IHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XG5cblx0XHRpZiAoZGVmZXJyZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzKTtcblxuXHRcdHJldHVybiBkZWZlcnJlZC5wcm9taXNlO1xuXHR9XG5cblx0cHVibGljIHJlc29sdmUgKCk6IHRoaXMge1xuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcblxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyB0aGUgcmVzb2x2ZSBmdW5jdGlvbiBtaWdodCBkZWZlciB0aGUgaXRlbSBhZ2Fpbiwgc28gZGVsZXRlIHRoZSBwcm9wZXJ0aWVzIGZpcnN0XG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xuXG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHJlc29sdmVEZWZlcnJlZCAoaW5pdGlhbDogRmllbGRNYXAsIGRlcml2ZWQ6IEZpZWxkTWFwLCBjb2x1bW5zOiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPik6IHRoaXMge1xuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XG5cdFx0dGhpcy5zZXRGaWVsZHMoaW5pdGlhbCwgZGVyaXZlZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlKCk7XG5cdH1cblxuXHRwdWJsaWMgaXNEZWZlcnJlZCAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmZXJyZWQgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdHB1YmxpYyByZWplY3QgKGVycm9yOiBJdGVtRXJyb3IgPSB0aGlzLmZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVVbmZvdW5kUmVtb3RlSXRlbUVycm9yKCkpOiB0aGlzIHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XG5cblx0XHRpZiAoZGVmZXJyZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0ZGVmZXJyZWQucmVqZWN0KGVycm9yKTtcblxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xuXHRcdGRlbGV0ZSB0aGlzLmRlZmVyUmVxdWVzdDtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHNldEZpZWxkcyAoaW5pdGlhbDogRmllbGRNYXA8SXRlbVR5cGVUeXBlPiwgZGVyaXZlZDogRmllbGRNYXApOiB0aGlzIHtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IGZvcm1hdHRlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZm9ybWF0dGVkO1xuXG5cdFx0dGhpcy5pbml0aWFsID0gYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKGluaXRpYWwsIGZvcm1hdHRlZENvbHVtbnMubWFpbik7XG5cdFx0dGhpcy5kZXJpdmVkID0gYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKGRlcml2ZWQsIGZvcm1hdHRlZENvbHVtbnMuZGVyaXZlZCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8vIFdlIHNob3VsZCBjcmVhdGUgYSBjb3B5IG9mIGluaXRpYWwgaGVyZSwgYmVjYXVzZSBpbiBtb3N0IGluc3RhbmNlcyBpdCB3aWxsIGJlIGEgdGVtcGxhdGUuXG5cdHB1YmxpYyBzZXRMb2NhbEZpZWxkcyAoXG5cdFx0aW5pdGlhbFZhbHVlczogRmllbGRNYXAsXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCxcblx0XHRjb2x1bW5zOiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPiA9IHRoaXMuY29sdW1uc1xuXHQpOiB0aGlzIHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGluaXRpYWwgPSBmYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2UuZ2V0TG9jYWxEZWZhdWx0VmFsdWVzKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zLm1haW4pIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXG5cdFx0XHRpbml0aWFsW2NvbHVtbklkXSA9IGluaXRpYWxWYWx1ZXNbY29sdW1uSWRdO1xuXHRcdH1cblxuXHRcdHRoaXMuaW5pdGlhbCA9IGZhY3RvcnkuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKGluaXRpYWwsIGNvbHVtbnMuZm9ybWF0dGVkLm1haW4pO1xuXHRcdHRoaXMuZGVyaXZlZCA9IHsnY3JlYXRvcj5kaXNwbGF5bmFtZSc6IGZhY3RvcnkuYXV0aEludGVyZmFjZS5nZXRVc2VyRGlzcGxheW5hbWUoKX07XG5cblx0XHRyZXR1cm4gdGhpcy51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xuXHR9XG5cblx0cHVibGljIGNsb25lIChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge30pOiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSBmYWN0b3J5LmFwaUZvcm1hdHRlcjtcblx0XHRjb25zdCBpdGVtRW50cnlTZXJ2aWNlID0gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlO1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cdFx0Y29uc3QgbmV3SXRlbUlkID0gaXRlbUVudHJ5U2VydmljZS5leHBhbmRDb252ZXJzaW9uTWFwKHRoaXMsIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0Ly8gd2UnbGwgY29weSBtb2RpZmllZCB0byByZXN1bHQuaW5pdGlhbCAoaW5pdGlhbCBtYXkgYmUgYSB0ZW1wbGF0ZSlcblx0XHRjb25zdCBjbG9uZWRFbnRyeSA9IGZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0bmV3SXRlbUlkLFxuXHRcdFx0YXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5nZXRGaWVsZHMoKSwge30sIGNvbHVtbnMubWFpbiksXG5cdFx0XHRhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmRlcml2ZWQsIHt9LCBjb2x1bW5zLmRlcml2ZWQpLFxuXHRcdFx0Y29sdW1uc1xuXHRcdCk7XG5cblx0XHRjbG9uZWRFbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0Y2xvbmVkRW50cnkubW9kaWZpZWQgPSBhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhjbG9uZWRFbnRyeS5pbml0aWFsLCB7fSwgY29sdW1ucy5tYWluKTtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4gY2xvbmVkRW50cnk7XG5cblx0XHRjb25zdCBwYXJlbnRJZCA9IGl0ZW1FbnRyeVNlcnZpY2UuZ2V0Q29udmVyc2lvblZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XG5cblx0XHRjbG9uZWRFbnRyeS5zZXRQYXJlbnQoXG5cdFx0XHRwYXJlbnQuaXRlbVR5cGUsXG5cdFx0XHRwYXJlbnRJZCA9PT0gdW5kZWZpbmVkID8gcGFyZW50Lml0ZW1JZCA6IHBhcmVudElkXG5cdFx0KTtcblxuXHRcdHJldHVybiBjbG9uZWRFbnRyeTtcblx0fVxuXG5cdHB1YmxpYyByZXNldERlcml2ZWQgKGNvbHVtbklkczogc3RyaW5nW10pOiB0aGlzIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGNvbnN0IHJvb3RDb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJvb3Q7XG5cdFx0Y29uc3QgZmlsdGVyZWRDb2x1bW5zOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiByb290Q29sdW1ucykge1xuXHRcdFx0aWYgKGNvbHVtbklkcy5pbmRleE9mKGNvbHVtbi5pZCkgIT09IC0xKVxuXHRcdFx0XHRmaWx0ZXJlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdH1cblxuXHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGZpbHRlcmVkQ29sdW1ucyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGZ1bmN0aW9uIHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5IChjb2x1bW5zOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG5cdFx0XHRcdGlmICghY29sdW1uLmlzTGVhZilcblx0XHRcdFx0XHRyZXNldERlcml2ZWRSZWN1cnNpdmVseShjb2x1bW4uY2hpbGRyZW4pO1xuXG5cdFx0XHRcdGRlbGV0ZSBzZWxmLmRlcml2ZWRbY29sdW1uLnBhdGhdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRGaWVsZHMgKCk6IEZpZWxkTWFwPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdGlmICh0aGlzLm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tb2RpZmllZDtcblxuXHRcdHJldHVybiB0aGlzLmluaXRpYWw7XG5cdH1cblxuXHQvLyBzaG91bGQgYmUgZmFzdFxuXHRwdWJsaWMgZXhwYW5kIChcblx0XHRtYWluOiBGaWVsZE1hcCxcblx0XHRkZXJpdmVkOiBGaWVsZE1hcCxcblx0XHRjb2x1bW5FeHBhbnNpb25SZXN1bHQ6IENvbHVtbkV4cGFuc2lvblJlc3VsdDxJdGVtVHlwZVR5cGU+XG5cdCk6IHRoaXMge1xuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uUmVzdWx0Lm1lcmdlZDtcblxuXHRcdGFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZSh0aGlzLmluaXRpYWwsIG1haW4sIGRpZmZlcmVuY2UubWFpbik7XG5cdFx0YXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKHRoaXMuZGVyaXZlZCwgZGVyaXZlZCwgZGlmZmVyZW5jZS5kZXJpdmVkKTtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZSh0aGlzLm1vZGlmaWVkLCBtYWluLCBkaWZmZXJlbmNlLm1haW4pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZXhwYW5kTG9jYWwgKGNvbHVtbkV4cGFuc2lvblJlc3VsdDogQ29sdW1uRXhwYW5zaW9uUmVzdWx0PEl0ZW1UeXBlVHlwZT4pOiB0aGlzIHtcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLm1haW47XG5cblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQubWVyZ2VkO1xuXG5cdFx0aWYgKG1haW5Db2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0dGhpcy5zZXRMb2NhbFZhbHVlcyh0aGlzLmluaXRpYWwsIG1haW5Db2x1bW5zKTtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdHRoaXMuc2V0TG9jYWxWYWx1ZXModGhpcy5tb2RpZmllZCwgbWFpbkNvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwcml2YXRlIHNldExvY2FsVmFsdWVzIChmaWVsZHM6IEZpZWxkTWFwLCBjb2x1bW5zOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+KTogdm9pZCB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xuXG5cdFx0XHRpZiAoZmllbGRzW2NvbHVtbklkXSAhPT0gdW5kZWZpbmVkKSAvLyBwYXJlbnQgY29sdW1ucyBtaWdodCBhbHNvIGJlIGluY2x1ZGVkIGluIHRoZSBkaWZmZXJlbmNlXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb25zdCBjb2x1bW5UeXBlID0gY29sdW1uLmFwaUNvbHVtbi50eXBlO1xuXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gY29sdW1uVHlwZSA9PT0gJ2xpbmsnICYmIHBhcmVudCAhPT0gbnVsbCA/XG5cdFx0XHRcdHBhcmVudC5pdGVtSWQgOlxuXHRcdFx0XHRmYWN0b3J5LmFwaUZvcm1hdHRlci5nZXREZWZhdWx0VmFsdWUoY29sdW1uVHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgaW5pdGlhbCwgbW9kaWZpZWQsIGRlcml2ZWQgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBzZXQuIEl0IHdpbGwgdXBkYXRlIHRoZSB2YWx1ZXNcblx0ICogdGhlbXNlbHZlcyB0byBwcmVzZXJ2ZSByZWZlcmVuY2VzIGluIGV4aXN0aW5nIGl0ZW0gcmVzb3VyY2VzLlxuXHQgKi9cblx0cHVibGljIHVwZGF0ZUZpZWxkcyAoXG5cdFx0ZmllbGRzOiBGaWVsZE1hcDxJdGVtVHlwZVR5cGU+LFxuXHRcdGRlcml2ZWQ6IEZpZWxkTWFwIHwgbnVsbCA9IG51bGwsXG5cdFx0b3ZlcndyaXRlOiBib29sZWFuID0gdHJ1ZVxuXHQpOiB0aGlzIHtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IG1haW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLm1haW47XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQ7XG5cblx0XHQvLyBmb3Igc29tZSB3ZWlyZCByZWFzb24gdGhpcyBmdW5jdGlvbiBpcyBub3QgYXRvbWljLCBzbyBvdmVyd3JpdGUgdGhlIHZhbHVlcyB3aXRoIHRoZWlyIGZvcm1hdHRlZCBjb3VudGVycGFydHNcblx0XHQvLyBpbW1lZGlhdGVseVxuXHRcdGlmIChtb2RpZmllZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBtYWluQ29sdW1ucykge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblx0XHRcdFx0Y29uc3QgY29sdW1uVHlwZSA9IGNvbHVtbi5hcGlDb2x1bW4udHlwZTtcblxuXHRcdFx0XHRpZiAob3ZlcndyaXRlIHx8IGFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRcdG1vZGlmaWVkW2NvbHVtbklkXSA9IGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtblR5cGUsIGZpZWxkc1tjb2x1bW5JZF0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIG1haW5Db2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcblxuXHRcdFx0aW5pdGlhbFtjb2x1bW5JZF0gPSBhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0pO1xuXHRcdH1cblxuXHRcdGlmIChkZXJpdmVkICE9PSBudWxsKVxuXHRcdFx0dGhpcy5zZXREZXJpdmVkKGRlcml2ZWQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZUl0ZW1WYWx1ZXMgKFxuXHRcdGZpZWxkczogRmllbGRNYXAsXG5cdFx0aXRlbUNvbHVtbnM6IEFycmF5PENvbHVtbkluZm88SXRlbVR5cGVUeXBlPj4sXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBpdGVtRW50cnlTZXJ2aWNlID0gdGhpcy5mYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2U7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xuXG5cdFx0XHQvLyBUT0RPOiB3ZSBjYW4gcmVjb25zaWRlciB0aGlzIG9uY2UgYWxsIGNvbHVtbnMgYXJlIHJlc3BlY3RlZCBmb3IgbG9jYWwgaXRlbXMgW1JNNC0xMDM3OF1cblx0XHRcdGxldCBuZXdWYWx1ZTtcblxuXHRcdFx0aWYgKGFwaUNvbHVtbi50eXBlID09PSAnbGluaycgJiYgZmllbGRzW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdFx0bmV3VmFsdWUgPSBwYXJlbnQuaXRlbUlkO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdG5ld1ZhbHVlID0gaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUoYXBpQ29sdW1uLml0ZW1UeXBlLCBmaWVsZHNbY29sdW1uSWRdLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdFx0aWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGZpZWxkc1tjb2x1bW5JZF0gPSBuZXdWYWx1ZTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgdXBkYXRlSXRlbUZpZWxkcyAoXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCxcblx0XHRjb2x1bW5zOiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPiA9IHRoaXMuY29sdW1uc1xuXHQpOiB0aGlzIHtcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IGNvbHVtbnMuaXRlbTtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQ7XG5cblx0XHR0aGlzLnVwZGF0ZUl0ZW1WYWx1ZXModGhpcy5pbml0aWFsLCBpdGVtQ29sdW1ucywgY29udmVyc2lvbk1hcCk7XG5cblx0XHRpZiAobW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0dGhpcy51cGRhdGVJdGVtVmFsdWVzKG1vZGlmaWVkLCBpdGVtQ29sdW1ucywgY29udmVyc2lvbk1hcCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBmb3JtYXRSZXF1ZXN0ICgpOiBGaWVsZE1hcDxJdGVtVHlwZVR5cGU+IHtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGNvbnN0IG1haW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLm1haW47XG5cblx0XHRpZiAodGhpcy5pc0xvY2FsKCkpXG5cdFx0XHRyZXR1cm4gYXBpRm9ybWF0dGVyLmZvcm1hdFJlcXVlc3RMb2NhbCh0aGlzLmdldEZpZWxkcygpLCBtYWluQ29sdW1ucyk7XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHt9O1xuXG5cdFx0cmV0dXJuIGFwaUZvcm1hdHRlci5mb3JtYXRSZXF1ZXN0KHRoaXMuaW5pdGlhbCwgdGhpcy5tb2RpZmllZCwgbWFpbkNvbHVtbnMpO1xuXHR9XG5cblx0cHVibGljIHNldERpc3BsYXlOYW1lICgpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdldERpc3BsYXlOYW1lKCk7XG5cblx0XHRpZiAocmVzdWx0KVxuXHRcdFx0dGhpcy5tb2RpZmllZC5kaXNwbGF5bmFtZSA9IHJlc3VsdDtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGdldERpc3BsYXlOYW1lICgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeVNlcnZpY2UgPSB0aGlzLmZhY3RvcnkuaXRlbUVudHJ5U2VydmljZTtcblx0XHRjb25zdCBmaWVsZHMgPSB0aGlzLmdldEZpZWxkcygpO1xuXG5cdFx0c3dpdGNoICh0aGlzLml0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdDb250YWN0Jzpcblx0XHRcdFx0cmV0dXJuIGZpZWxkcy50eXBlID09PSAnYmVkcmlqZicgP1xuXHRcdFx0XHRcdGZpZWxkcy5iZWRyaWpmIDogaXRlbUVudHJ5U2VydmljZS5nZXRGdWxsTmFtZShcblx0XHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcblx0XHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxuXHRcdFx0XHRcdFx0ZmllbGRzLm5hYW1cblx0XHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcic6XG5cdFx0XHRjYXNlICdQZXJzb24nOlxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5U2VydmljZS5nZXRGdWxsTmFtZShcblx0XHRcdFx0XHRmaWVsZHMudm9vcm5hYW0sXG5cdFx0XHRcdFx0ZmllbGRzLnR1c3NlbnZvZWdzZWwsXG5cdFx0XHRcdFx0ZmllbGRzLmFjaHRlcm5hYW1cblx0XHRcdFx0KTtcblx0XHRcdGNhc2UgJ1JlcGFyYXRpZSc6XG5cdFx0XHRcdHJldHVybiB0aGlzLmRlcml2ZWRbJ21hdGVyaWFhbD5uYWFtJ107IC8vIFRPRE8hXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmllbGRzW2l0ZW1FbnRyeVNlcnZpY2UuZ2V0VGl0bGVGaWVsZCh0aGlzLml0ZW1UeXBlKV07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gcmV0dXJuQWxsIFJldHVybnMgYWxsIGluaXRpYWwgdmFsdWVzIGlmIHRydWVcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdHB1YmxpYyBnZXRDaGFuZ2VzIChyZXR1cm5BbGw6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQgJiYgIXJldHVybkFsbClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmdldENoYW5nZXMoXG5cdFx0XHR0aGlzLmluaXRpYWwsXG5cdFx0XHRyZXR1cm5BbGwgPyB7fSA6IHRoaXMubW9kaWZpZWQsXG5cdFx0XHR0aGlzLmNvbHVtbnMubWFpblxuXHRcdCk7XG5cdH1cblxuXHRwdWJsaWMgaXNMb2NhbCAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZCh0aGlzLml0ZW1JZCk7XG5cdH1cblxuXHRwdWJsaWMgaXNMb2NrYWJsZSAoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuaXNMb2NhbCgpKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0c3dpdGNoICh0aGlzLml0ZW1UeXBlKSB7XG5cdFx0XHRjYXNlICdQcm9qZWN0Jzpcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdDb250YWN0Jzpcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXInOlxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgaGFzQ2hhbmdlcyAoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmhhc0NoYW5nZXMoXG5cdFx0XHR0aGlzLmluaXRpYWwsXG5cdFx0XHR0aGlzLm1vZGlmaWVkLFxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cblx0XHQpO1xuXHR9XG5cblx0cHVibGljIHJlc2V0TW9kaWZpZWQgKCk6IHRoaXMge1xuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcblxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uLmlkXSA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY2xvbmUoXG5cdFx0XHRcdGNvbHVtbi5hcGlDb2x1bW4udHlwZSxcblx0XHRcdFx0dGhpcy5pbml0aWFsW2NvbHVtbi5pZF1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgc2V0SW5pdGlhbCAodmFsdWVzOiBGaWVsZE1hcCwgZW5hYmxlQ2FsbGJhY2tzOiBib29sZWFuID0gZmFsc2UpOiB0aGlzIHtcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xuXHRcdGxldCBwcmV2aW91cztcblxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5pbml0aWFsW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxuXHRcdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmluaXRpYWwsIHt9LCB0aGlzLmNvbHVtbnMubWFpbikpO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRwcmV2aW91cyA9IGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMubW9kaWZpZWQsIHt9LCB0aGlzLmNvbHVtbnMubWFpbik7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcblxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MpXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBEb2VzIGEgc2hhbGxvdyBjb3B5IG9mIHZhbHVlcyFcblx0ICovXG5cdHB1YmxpYyBzZXRNb2RpZmllZCAodmFsdWVzPzogRmllbGRNYXA8SXRlbVR5cGVUeXBlPik6IHRoaXMge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSBjb2x1bW5zLnJlc3BvbnNlW3RoaXMuaXRlbVR5cGVdO1xuXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZCA9IHRoaXMuaXNMb2NhbCgpID8gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmdldExvY2FsRGVmYXVsdFZhbHVlcygpIDoge307XG5cblx0XHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0YXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMubWFpbik7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0YXBpRm9ybWF0dGVyLnNoYWxsb3dDb3B5RmllbGRzKHZhbHVlcywgaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMubWFpbik7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcblx0XHRcdFx0XHRpZiAocmVzcG9uc2VDb2x1bW5zW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHQvLyB0b2RvOiBkZXYgbW9kZSBjb25zdGFudFxuXHRcdFx0XHRcdFx0Ly8gaWYgKERFVl9NT0RFKVxuXHRcdFx0XHRcdFx0Ly8gXHRjb25zb2xlLndhcm4oJ3NldE1vZGlmaWVkOiBubyBjb2x1bW4gZm91bmQgZm9yJywgY29sdW1uSWQpO1xuXG5cdFx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHRoaXMuZ2V0UmVzb3VyY2VzKCkpIHtcblx0XHRcdFx0aWYgKHJlc291cmNlIGluc3RhbmNlb2YgTG9jYWxWaWV3UmVzb3VyY2UpXG5cdFx0XHRcdFx0cmVzb3VyY2UuZmllbGRzID0gbW9kaWZpZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXG5cdFx0XHR0aGlzLm1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBzZXREZXJpdmVkICh2YWx1ZXM6IEZpZWxkTWFwKTogdGhpcyB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKVxuXHRcdFx0dGhpcy5kZXJpdmVkW2tleV0gPSB2YWx1ZXNba2V5XTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHNldFBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQpOiB0aGlzIHtcblx0XHR0aGlzLnBhcmVudCA9IHtcblx0XHRcdGl0ZW1UeXBlOiBwYXJlbnRUeXBlLFxuXHRcdFx0aXRlbUlkOiBwYXJlbnRJZFxuXHRcdH07XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBjYWxsT25DaGFuZ2UgKHByZXZpb3VzPzogRmllbGRNYXA8SXRlbVR5cGVUeXBlPik6IHRoaXMge1xuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIHRoaXMuZ2V0UmVzb3VyY2VzKCkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5vcHRpb25zLm9uQ2hhbmdlKGl0ZW1SZXNvdXJjZSwgcHJldmlvdXMpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0dGhpcy5mYWN0b3J5LmV4Y2VwdGlvbkhhbmRsZXIoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHRvSlNPTiAoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkOiB0aGlzLmlkLFxuXHRcdFx0cGFyZW50OiB0aGlzLnBhcmVudCxcblx0XHRcdGluaXRpYWw6IHRoaXMuaW5pdGlhbCxcblx0XHRcdG1vZGlmaWVkOiB0aGlzLm1vZGlmaWVkLFxuXHRcdFx0ZGVyaXZlZDogdGhpcy5kZXJpdmVkLFxuXHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5zXG5cdFx0fTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgRmllbGRNYXAsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSA9IGFueT4ge1xuXHRwdWJsaWMgY29sdW1uczoge1tjb2x1bW5JZDogc3RyaW5nXTogUmVzcG9uc2VDb2x1bW59O1xuXHRwdWJsaWMgZmllbGRzOiBGaWVsZE1hcDxJdGVtVHlwZVR5cGU+O1xuXHRwdWJsaWMgZGVyaXZlZDogRmllbGRNYXA8SXRlbVR5cGVUeXBlPjtcblxuXHRwcm90ZWN0ZWQgY29uc3RydWN0b3IgKFxuXHRcdHByb3RlY3RlZCByZWFkb25seSBmYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHB1YmxpYyByZWFkb25seSBlbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0cHVibGljIHJlYWRvbmx5IG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnM8SXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHByb3RlY3RlZCByZWFkb25seSBfaXNOZXc6IGJvb2xlYW4sXG5cdFx0cHJvdGVjdGVkIHJlYWRvbmx5IGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCBudWxsXG5cdCkge1xuXHRcdHRoaXMuZGVyaXZlZCA9IGVudHJ5LmRlcml2ZWQ7XG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZVtlbnRyeS5jb2x1bW5zLml0ZW1UeXBlXTtcblx0fVxuXG5cdHB1YmxpYyBpc05ldyAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzTmV3O1xuXHR9XG5cblx0cHVibGljIGlzTG9jYWwgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmVudHJ5LmlzTG9jYWwoKTtcblx0fVxuXG5cdHB1YmxpYyBjbGVhclJlc291cmNlICgpOiB2b2lkIHtcblx0XHR0aGlzLmZhY3RvcnkuY2FjaGUuY2xlYXJSZXNvdXJjZSh0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBkZWFjdGl2YXRlICgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5sb2NhbENhY2hlID09PSBudWxsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlLm9uRGVhY3RpdmF0ZUl0ZW0odGhpcy5lbnRyeSk7XG5cdH1cblxuXHRwdWJsaWMgdG9KU09OICgpIHtcblx0XHRjb25zdCBjb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHRoaXMuY29sdW1ucylcblx0XHRcdGNvbHVtbklkcy5wdXNoKGNvbHVtbklkKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjb2x1bW5zOiBjb2x1bW5JZHMsXG5cdFx0XHRmaWVsZHM6IHRoaXMuZmllbGRzLFxuXHRcdFx0ZGVyaXZlZDogdGhpcy5kZXJpdmVkLFxuXHRcdFx0ZW50cnk6IHRoaXMuZW50cnlcblx0XHR9O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlLCBJdGVtUmVzb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSA9IGFueT4gZXh0ZW5kcyBJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPiB7XG5cdGZpZWxkczogUmVhZG9ubHk8RmllbGRNYXA8SXRlbVR5cGVUeXBlPj47XG5cblx0cHJvdGVjdGVkIGNvbnN0cnVjdG9yIChcblx0XHRmYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdGVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zPFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pixcblx0XHRpc05ldzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgbnVsbFxuXHQpIHtcblx0XHRzdXBlcihmYWN0b3J5LCBlbnRyeSwgb3B0aW9ucywgaXNOZXcsIGxvY2FsQ2FjaGUpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVQYXRoLCBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlLCBJdGVtUmVzb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpZWxkTWFwLCBJdGVtVHlwZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSA9IGFueT4gZXh0ZW5kcyBJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPiB7XG5cdHByb3RlY3RlZCBsb2NhbENvcGllczogQXJyYXk8RmllbGRNYXA8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblx0cHJvdGVjdGVkIHRyYW5zYWN0aW9uczogbnVtYmVyID0gMDtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRlbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9ucyxcblx0XHRpc05ldzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgbnVsbFxuXHQpIHtcblx0XHRzdXBlcihmYWN0b3J5LCBlbnRyeSwgb3B0aW9ucywgaXNOZXcsIGxvY2FsQ2FjaGUpO1xuXG5cdFx0ZW50cnkuc2V0TW9kaWZpZWQoKTtcblxuXHRcdHRoaXMuZmllbGRzID0gZW50cnkubW9kaWZpZWQ7XG5cdH1cblxuXHRwdWJsaWMgaXNOZXcgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9pc05ldyAmJiB0aGlzLnRyYW5zYWN0aW9ucyA9PT0gMDtcblx0fVxuXG5cdHB1YmxpYyBzdGFydCAoKTogdGhpcyB7XG5cdFx0aWYgKHRoaXMubG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMubG9jYWxDb3BpZXMgPSBbXTtcblxuXHRcdHRoaXMubG9jYWxDb3BpZXMucHVzaCh0aGlzLmNvcHlGaWVsZHMoKSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyByb2xsYmFjayAoKTogdGhpcyB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmxvY2FsQ29waWVzLnBvcCgpISwgaXRlbUVudHJ5Lm1vZGlmaWVkLCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcblxuXHRcdGlmICh0aGlzLmlzTmV3KCkgJiYgdGhpcy5sb2NhbENvcGllcy5sZW5ndGggPT09IDAgJiYgdGhpcy5sb2NhbENhY2hlICE9PSBudWxsKVxuXHRcdFx0dGhpcy5sb2NhbENhY2hlLm9uRGVhY3RpdmF0ZUl0ZW0odGhpcy5lbnRyeSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBjb21taXQgKGNhbGxPbkNoYW5nZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcblx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMubG9jYWxDb3BpZXMucG9wKCk7XG5cblx0XHRpZiAoY2FsbE9uQ2hhbmdlKVxuXHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xuXG5cdFx0dGhpcy50cmFuc2FjdGlvbnMrKzsgLy8gY29tcGxldGVkIHRyYW5zYWN0aW9uc1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TG9jYWxDb3B5ICgpOiBGaWVsZE1hcDxJdGVtVHlwZVR5cGU+IHwgbnVsbCB7XG5cdFx0Y29uc3QgbG9jYWxDb3BpZXMgPSB0aGlzLmxvY2FsQ29waWVzO1xuXG5cdFx0aWYgKGxvY2FsQ29waWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGlmIChsb2NhbENvcGllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdHJldHVybiBsb2NhbENvcGllc1tsb2NhbENvcGllcy5sZW5ndGggLSAxXTtcblx0fVxuXG5cdHB1YmxpYyBjb3B5RmllbGRzIChkZXN0aW5hdGlvbjogRmllbGRNYXA8SXRlbVR5cGVUeXBlPiA9IHt9KTogRmllbGRNYXA8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcblxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5Lm1vZGlmaWVkLCBkZXN0aW5hdGlvbiwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XG5cdH1cblxuXHRwdWJsaWMgc2V0RmllbGRzICh2YWx1ZXM6IEZpZWxkTWFwPEl0ZW1UeXBlVHlwZT4sIGNhbGxPbkNoYW5nZTogYm9vbGVhbiA9IHRydWUpOiB0aGlzIHtcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRzO1xuXHRcdGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG5cdFx0bGV0IHByZXZpb3VzO1xuXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSlcblx0XHRcdHByZXZpb3VzID0gdGhpcy5jb3B5RmllbGRzKCk7XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gY29sdW1uc1tjb2x1bW5JZF07XG5cblx0XHRcdGlmIChjb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ3NldEZpZWxkczogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvbXBhcmVGaWVsZHMoY29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0sIHZhbHVlc1tjb2x1bW5JZF0pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XG5cdFx0XHRoYXNDaGFuZ2VzID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoY2FsbE9uQ2hhbmdlICYmIGhhc0NoYW5nZXMpXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBjYWxsT25DaGFuZ2UgKHByZXZpb3VzPzogRmllbGRNYXA8SXRlbVR5cGVUeXBlPik6IHRoaXMge1xuXHRcdHRoaXMuZW50cnkuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHNhdmUgKHBhcmFtZXRlcnM/OiBhbnkpOiBQcm9taXNlSW50ZXJmYWNlPHRoaXM+IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XG5cdFx0Y29uc3QgcGFyYW1ldGVyTWFwID0ge307XG5cblx0XHRpZiAocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0XHRwYXJhbWV0ZXJNYXAsXG5cdFx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0XHRbe30sIHBhcmFtZXRlcnNdXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHRpdGVtRW50cnkuaXNMb2NrYWJsZSgpID9cblx0XHRcdFx0ZmFjdG9yeS5sb2NrU2VydmljZS5mZXRjaExvY2soaXRlbUVudHJ5KSA6XG5cdFx0XHRcdGZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbigpXG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHQvLyBhZGRUb0NvbGxlY3Rpb25zIGlzIGNhbGxlZCBpbiBjaGFuZ2VzUHJvY2Vzc29yXG5cdFx0XHRcdHJldHVybiBmYWN0b3J5LmNoYW5nZXNQcm9jZXNzb3IuZXhlY3V0ZShbaXRlbUVudHJ5XSwgW10sIHBhcmFtZXRlck1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBpbnN0YW50aWF0ZU9wdGlvbnMgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVF1ZXJ5LCBBcGlSZXF1ZXN0Q29sdW1ucywgQXBpUmVxdWVzdExpbWl0LCBFbnRyeVBhcmVudE51bGwgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25FbnRyeU9wdGlvbnNJbnRlcmZhY2UgPSBQYXJ0aWFsPENvbGxlY3Rpb25FbnRyeU9wdGlvbnM+O1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyB7XG5cdGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zID0gW107XG5cdHF1ZXJ5OiBBcGlRdWVyeSB8IG51bGwgPSBudWxsO1xuXHRxdWVyeVBhcmFtczogYW55ID0ge307IC8vIFRPRE9cblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xuXHRkZWZlclJlcXVlc3Q6IGJvb2xlYW4gPSBmYWxzZTtcblx0bGltaXQ6IEFwaVJlcXVlc3RMaW1pdCB8IG51bGwgPSBudWxsO1xuXHRlbnRyeUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblx0Y29uc3RydWN0b3IgKHZhbHVlczogQ29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSkge1xuXHRcdGluc3RhbnRpYXRlT3B0aW9ucyh0aGlzLCB2YWx1ZXMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBpbnN0YW50aWF0ZU9wdGlvbnMgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSwgT25DaGFuZ2VGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlQ2FsbGJhY2s8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ID0gKFxuXHRpdGVtUmVzb3VyY2VzOiBBcnJheTxJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4sXG5cdGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT5cbikgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblJlc291cmNlSW5pdGlhbENhbGxiYWNrPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiA9IChcblx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPlxuKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBPbkl0ZW1zQ3JlYXRlZENhbGxiYWNrID0gKGNvbnZlcnNpb25NYXA6IENvbnZlcnNpb25NYXApID0+IHZvaWQ7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ID0gUGFydGlhbDxDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zPEl0ZW1UeXBlVHlwZT4+O1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlT3B0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4ge1xuXHRlZGl0SXRlbXM6IGJvb2xlYW4gPSBmYWxzZTtcblx0cmVtb3RlSXRlbXM6IGJvb2xlYW4gPSBmYWxzZTtcblx0ZWRpdENvbGxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcblx0bW9kSW5zdGFudDogYm9vbGVhbiA9IGZhbHNlO1xuXHRlbmFibGVTYXZlOiBib29sZWFuID0gdHJ1ZTtcblx0b25JdGVtc0NyZWF0ZWQ6IE9uSXRlbXNDcmVhdGVkQ2FsbGJhY2sgPSBub29wO1xuXHRvbkNoYW5nZTogT25DaGFuZ2VGdW5jdGlvbiA9IG5vb3A7XG5cdG9uQWRkOiBDb2xsZWN0aW9uUmVzb3VyY2VDYWxsYmFjazxJdGVtVHlwZVR5cGU+ID0gbm9vcDtcblx0b25SZW1vdmU6IENvbGxlY3Rpb25SZXNvdXJjZUNhbGxiYWNrPEl0ZW1UeXBlVHlwZT4gPSBub29wO1xuXHRvbkFkZEluaXRpYWw6IENvbGxlY3Rpb25SZXNvdXJjZUluaXRpYWxDYWxsYmFjazxJdGVtVHlwZVR5cGU+ID0gbm9vcDtcblx0b25SZW1vdmVJbml0aWFsOiBDb2xsZWN0aW9uUmVzb3VyY2VJbml0aWFsQ2FsbGJhY2s8SXRlbVR5cGVUeXBlPiA9IG5vb3A7XG5cdHJlc291cmNlS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0Y3VzdG9tOiBhbnkgPSBudWxsO1xuXG5cdGNvbnN0cnVjdG9yICh2YWx1ZXM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPikge1xuXHRcdGluc3RhbnRpYXRlT3B0aW9ucyh0aGlzLCB2YWx1ZXMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBCYXRjaFN0YXR1cywgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5JbmZvLCBDb2x1bW5TZXQsIGluQXJyYXksIEl0ZW1DYWNoZSwgTG9jYWxDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRGVmZXJyZWQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0Q29sdW1ucyxcblx0Q29sbGVjdGlvblF1ZXJ5LFxuXHRDb252ZXJzaW9uTWFwLFxuXHRFbnRyeVBhcmVudE51bGwsXG5cdEZpZWxkTWFwLFxuXHRJdGVtSWQsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdEl0ZW1UeXBlLFxuXHRQcm9taXNlSW50ZXJmYWNlLFxuXHRRdWVyeUNhbGxiYWNrXG59IGZyb20gJy4uL3R5cGVzJztcblxubGV0IGN1cnJlbnRJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUgPSBhbnk+IHtcblx0cHVibGljIGlkOiBudW1iZXIgPSBjdXJyZW50SWQrKztcblx0cHVibGljIHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbDtcblx0cHVibGljIHF1ZXJ5OiBDb2xsZWN0aW9uUXVlcnk7XG5cdHB1YmxpYyBjb2x1bW5zOiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPjtcblxuXHRwcml2YXRlIHRlbXBsYXRlQ29sdW1uczogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4gfCBudWxsID0gbnVsbDtcblxuXHRwdWJsaWMgaW5pdGlhbDogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cdHB1YmxpYyBpdGVtczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0ZGVmZXJyZWQ/OiBEZWZlcnJlZDx0aGlzPjtcblx0cHJvbWlzZTogUHJvbWlzZUludGVyZmFjZTx0aGlzPjtcblx0cmVsb2FkUXVldWVkOiBib29sZWFuID0gZmFsc2U7XG5cblx0aGFzRWRpdFJlc291cmNlcyA9IGZhbHNlO1xuXHRoYXNJdGVtRWRpdFJlc291cmNlcyA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0cHVibGljIG9wdGlvbnM6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnNcblx0KSB7XG5cdFx0dGhpcy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblx0XHR0aGlzLnF1ZXJ5ID0gZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHRcdHRoaXMuY29sdW1ucyA9IGZhY3RvcnkuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMpO1xuXG5cdFx0dGhpcy5kZWZlcigpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRSZXNvdXJjZXMgKCk6IEFycmF5PENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0Ly8gQHRzLWlnbm9yZSB0b2RvLCBmaXggaXRlbVR5cGUgaW4gY29sbGVjdGlvbkNhY2hlXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LmNhY2hlLmdldCh0aGlzKSBhcyBBcnJheTxDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cdH1cblxuXHRkZWZlciAoKTogdGhpcyB7XG5cdFx0aWYgKHRoaXMuaXNEZWZlcnJlZCgpKVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5kZWZlcnJlZC5wcm9taXNlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpc0RlZmVycmVkICgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHRfcmVzb2x2ZSAoKTogdGhpcyB7XG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xuXG5cdFx0aWYgKGRlZmVycmVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xuXHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XG5cblx0XHRkZWZlcnJlZC5yZXNvbHZlKHRoaXMpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyZXNvbHZlIChcblx0XHRpdGVtRW50cnlDb21wb3VuZDoge1xuXHRcdFx0Y29sdW1uczogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4sXG5cdFx0XHRpbml0aWFsOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0XHRtb2RpZmllZD86IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PlxuXHRcdH1cblx0KTogdGhpcyB7XG5cdFx0Y29uc3Qge2luaXRpYWwsIG1vZGlmaWVkfSA9IGl0ZW1FbnRyeUNvbXBvdW5kO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gaXRlbUVudHJ5Q29tcG91bmQuY29sdW1ucztcblx0XHR0aGlzLmluaXRpYWwgPSBpbml0aWFsO1xuXHRcdHRoaXMuaXRlbXMgPSBtb2RpZmllZCAhPT0gdW5kZWZpbmVkID8gbW9kaWZpZWQgOiBpbml0aWFsLnNsaWNlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5fcmVzb2x2ZSgpO1xuXHR9XG5cblx0aXNMb2NhbCAoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKTtcblx0fVxuXG5cdG1hdGNoUGFyZW50IChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Ly8gPT0gdG8gY29tcGFyZSBpdGVtSWRzXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcblx0XHRyZXR1cm4gcGFyZW50Lml0ZW1UeXBlID09PSBpdGVtVHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IGl0ZW1JZDtcblx0fVxuXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiB0aGlzWydpdGVtcyddWzBdKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBtb2Qgb2YgbW9kaWZpZWQpXG5cdFx0XHRjYWxsYmFjayhtb2QpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5SWQgKGl0ZW1JZDogSXRlbUlkKTogdGhpc1snaXRlbXMnXVswXSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmIChpdGVtRW50cnkuaXRlbUlkID09PSBpdGVtSWQpXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGdldElkQXJyYXkgKGFjY3VtdWxhdG9yOiBJdGVtSWRbXSA9IFtdKTogSXRlbUlkW10ge1xuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5nZXRJZEFycmF5KHRoaXMuaXRlbXMsIGFjY3VtdWxhdG9yKTtcblx0fVxuXG5cdC8vIHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggcmVzb2x2ZURlcml2ZWRcblx0Y3JlYXRlSXRlbXMgKHZhbHVlc0FycmF5OiBBcnJheTxGaWVsZE1hcDxJdGVtVHlwZVR5cGU+Pik6IFByb21pc2VJbnRlcmZhY2U8QXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+PiB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBjb2x1bW5TZXQgPSB0aGlzLmNvbHVtbnM7XG5cdFx0bGV0IHRlbXBsYXRlOiBUZW1wbGF0ZTxJdGVtVHlwZVR5cGU+O1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuaXRlbUhhbmRsZXIuZmV0Y2hUZW1wbGF0ZSh0aGlzLml0ZW1UeXBlKS50aGVuKFxuXHRcdFx0KHRlbXBsYXRlSW5zdGFuY2U6IFRlbXBsYXRlPEl0ZW1UeXBlVHlwZT4pID0+IHtcblx0XHRcdFx0dGVtcGxhdGUgPSB0ZW1wbGF0ZUluc3RhbmNlO1xuXG5cdFx0XHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRcdFx0aWYgKHRoaXMudGVtcGxhdGVDb2x1bW5zID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZUNvbHVtbnMgPSB0ZW1wbGF0ZS5jb2x1bW5zLm1lcmdlKGNvbHVtblNldCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlcyBvZiB2YWx1ZXNBcnJheSkge1xuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKFxuXHRcdFx0XHRcdFx0ZmFjdG9yeS5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdExvY2FsPEl0ZW1UeXBlVHlwZT4oXG5cdFx0XHRcdFx0XHRcdGZhY3Rvcnkua2V5U2VydmljZS5nZXRMb2NhbElkKCksXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZXMsXG5cdFx0XHRcdFx0XHRcdHt9LFxuXHRcdFx0XHRcdFx0XHR0aGlzLnBhcmVudCxcblx0XHRcdFx0XHRcdFx0dGhpcy50ZW1wbGF0ZUNvbHVtbnNcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdFx0fSxcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRyZXNvbHZlRGVyaXZlZFZhbHVlcyAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+PiB7XG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5pdGVtSGFuZGxlci5yZXNvbHZlRGVyaXZlZFZhbHVlcyhpdGVtRW50cmllcywgdGhpcy5jb2x1bW5zLnJvb3QsIGxvY2FsSXRlbUNhY2hlKTtcblx0fVxuXG5cdGFkZEl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFUsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXTtcblxuXHRhZGRJdGVtcyAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRyZXN1bHRSZXNvdXJjZT86IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogbnVsbDtcblxuXHRhZGRJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXSB8IG51bGw7XG5cblx0YWRkSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4gPSBmYWxzZSxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0Ly8gbG9jYWwgZW50cnkgbWlnaHQgYmUgYWRkZWQgbXVsdGlwbGUgdGltZXMgKGV4dGVuZD8pXG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBbXTtcblxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblx0XHRjb25zdCBwYXJlbnRDb2x1bW4gPSB0aGlzLmNvbHVtbnMubGluaztcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXHRcdGNvbnN0IGVudHJpZXNBZGRlZFRvTW9kaWZpZWQ6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0aWYgKHVwZGF0ZUluaXRpYWwpIHtcblx0XHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdC8vIHdoZW4gc2F2aW5nLCBpdGVtcyB0aGF0IG1pZ2h0IGFscmVhZHkgYmUgaW4gbW9kaWZpZWQgYXJlIGFkZGVkIHRvIGluaXRpYWxcblx0XHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSkge1xuXHRcdFx0XHRcdGluaXRpYWwucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcblx0XHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRcdFx0XHRpZiAocGFyZW50Q29sdW1uICE9PSBudWxsICYmIGl0ZW1FbnRyeS5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5Lm1vZGlmaWVkW3BhcmVudENvbHVtbi5pZF0gPSBwYXJlbnQuaXRlbUlkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bW9kaWZpZWQucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3MoXG5cdFx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWwsXG5cdFx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkLFxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXG5cdFx0XHRjYWxsT25BZGQsXG5cdFx0XHRjYWxsT25BY3RpdmF0ZVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChcblx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFUgfCBudWxsID0gbnVsbCxcblx0XHRjYWxsT25BZGQ6IGJvb2xlYW4gPSB0cnVlLFxuXHRcdGNhbGxPbkFjdGl2YXRlOiBib29sZWFuID0gdHJ1ZVxuXHQpOiBVWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMuZ2V0UmVzb3VyY2VzKCk7XG5cblx0XHRpZiAoZW50cmllc0FkZGVkVG9Jbml0aWFsLmxlbmd0aCA+IDApXG5cdFx0XHR0aGlzLm9uQWRkSW5pdGlhbChlbnRyaWVzQWRkZWRUb0luaXRpYWwpO1xuXG5cdFx0aWYgKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQubGVuZ3RoID09PSAwIHx8IGNvbGxlY3Rpb25SZXNvdXJjZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xuXG5cdFx0bGV0IGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IHJlc3VsdDogVVsnaXRlbXMnXSB8IHVuZGVmaW5lZDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2UubG9jYWxDYWNoZSAhPT0gbnVsbClcblx0XHRcdFx0bG9jYWxDYWNoZSA9IGNvbGxlY3Rpb25SZXNvdXJjZS5sb2NhbENhY2hlO1xuXG5cdFx0XHRjb25zdCBhZGRlZFJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5hZGRJdGVtUmVzb3VyY2VzKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlID09PSByZXN1bHRSZXNvdXJjZSkge1xuXHRcdFx0XHRyZXN1bHQgPSBhZGRlZFJlc291cmNlcztcblxuXHRcdFx0XHRpZiAoY2FsbE9uQWRkKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xuXHRcdH1cblxuXHRcdGlmIChjYWxsT25BY3RpdmF0ZSAmJiBsb2NhbENhY2hlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAoY29uc3QgYWRkZWRJdGVtRW50cnkgb2YgZW50cmllc0FkZGVkVG9Nb2RpZmllZClcblx0XHRcdFx0bG9jYWxDYWNoZS5vbkFjdGl2YXRlSXRlbShhZGRlZEl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcblx0fVxuXG5cdHJlbW92ZUl0ZW1zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHJlc3VsdFJlc291cmNlOiBVLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXTtcblxuXHRyZW1vdmVJdGVtcyAoXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogbnVsbDtcblxuXHRyZW1vdmVJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChcblx0XHRpZEFycmF5OiBJdGVtSWRbXSxcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogVVsnaXRlbXMnXSB8IG51bGw7XG5cblx0cmVtb3ZlSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRpZiAoaWRBcnJheS5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gW107XG5cblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXG5cdFx0XHRpdGVtRW50cnkgPT4gIWluQXJyYXkoaXRlbUVudHJ5Lml0ZW1JZCwgaWRBcnJheSksXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcblx0XHRcdHVwZGF0ZUluaXRpYWwsXG5cdFx0XHRjYWxsT25SZW1vdmVcblx0XHQpO1xuXHR9XG5cblx0Y2xlYXI8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFUsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddO1xuXG5cdGNsZWFyIChcblx0XHRyZXN1bHRSZXNvdXJjZT86IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBudWxsO1xuXG5cdGNsZWFyPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdHJlc3VsdFJlc291cmNlPzogVSB8IG51bGwsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXG5cdFx0XHQoKSA9PiBmYWxzZSxcblx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcblx0XHRcdGNhbGxPblJlbW92ZVxuXHRcdCk7XG5cdH1cblxuXHRoYW5kbGVSZW1vdmVkSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0ZmlsdGVyRnVuY3Rpb246IChpdGVtRW50cnk6IHRoaXNbJ2l0ZW1zJ11bMF0pID0+IGJvb2xlYW4sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFUsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0Y2FsbE9uUmVtb3ZlPzogYm9vbGVhblxuXHQpOiBVWydpdGVtcyddO1xuXG5cdGhhbmRsZVJlbW92ZWRJdGVtcyAoXG5cdFx0ZmlsdGVyRnVuY3Rpb246IChpdGVtRW50cnk6IHRoaXNbJ2l0ZW1zJ11bMF0pID0+IGJvb2xlYW4sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw/OiBib29sZWFuLFxuXHRcdGNhbGxPblJlbW92ZT86IGJvb2xlYW5cblx0KTogbnVsbDtcblxuXHRoYW5kbGVSZW1vdmVkSXRlbXM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0ZmlsdGVyRnVuY3Rpb246IChpdGVtRW50cnk6IHRoaXNbJ2l0ZW1zJ11bMF0pID0+IGJvb2xlYW4sXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBVIHwgbnVsbCxcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsO1xuXG5cdGhhbmRsZVJlbW92ZWRJdGVtczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChcblx0XHRmaWx0ZXJGdW5jdGlvbjogKGl0ZW1FbnRyeTogdGhpc1snaXRlbXMnXVswXSkgPT4gYm9vbGVhbixcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4gPSBmYWxzZSxcblx0XHRjYWxsT25SZW1vdmU/OiBib29sZWFuXG5cdCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlID0gdGhpcy5mYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2U7XG5cdFx0Y29uc3QgcmVtb3ZlZEZyb21Nb2RpZmllZCA9IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pdGVtcywgZmlsdGVyRnVuY3Rpb24pO1xuXHRcdGxldCByZW1vdmVkRnJvbUluaXRpYWw6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PjtcblxuXHRcdGlmICh1cGRhdGVJbml0aWFsKVxuXHRcdFx0cmVtb3ZlZEZyb21Jbml0aWFsID0gY29sbGVjdGlvbkVudHJ5U2VydmljZS5maWx0ZXJBcnJheSh0aGlzLmluaXRpYWwsIGZpbHRlckZ1bmN0aW9uKTtcblx0XHRlbHNlIHtcblx0XHRcdC8vIHJlbW92ZSBhbGwgKmxvY2FsKiBpdGVtcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gbW9kaWZpZWQgZnJvbSBpbml0aWFsLCB0b29cblx0XHRcdGNvbnN0IGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZDogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEVudHJ5IG9mIHJlbW92ZWRGcm9tTW9kaWZpZWQpIHtcblx0XHRcdFx0aWYgKHJlbW92ZWRFbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdFx0bG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkLnB1c2gocmVtb3ZlZEVudHJ5KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJlbW92ZWRGcm9tSW5pdGlhbCA9IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkoXG5cdFx0XHRcdFx0dGhpcy5pbml0aWFsLFxuXHRcdFx0XHRcdGl0ZW1FbnRyeSA9PiBsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHJlbW92ZWRGcm9tSW5pdGlhbCA9IFtdO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzKHJlbW92ZWRGcm9tSW5pdGlhbCwgcmVtb3ZlZEZyb21Nb2RpZmllZCwgcmVzdWx0UmVzb3VyY2UsIGNhbGxPblJlbW92ZSk7XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdHJlbW92ZWRGcm9tSW5pdGlhbDogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJlbW92ZWRGcm9tTW9kaWZpZWQ6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRyZXN1bHRSZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdGNhbGxPblJlbW92ZTogYm9vbGVhbiA9IHRydWVcblx0KTogVVsnaXRlbXMnXSB8IG51bGwge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLmdldFJlc291cmNlcygpO1xuXG5cdFx0aWYgKHJlbW92ZWRGcm9tSW5pdGlhbC5sZW5ndGggPiAwKVxuXHRcdFx0dGhpcy5vblJlbW92ZUluaXRpYWwocmVtb3ZlZEZyb21Jbml0aWFsKTtcblxuXHRcdGlmIChyZW1vdmVkRnJvbU1vZGlmaWVkLmxlbmd0aCA9PT0gMCB8fCBjb2xsZWN0aW9uUmVzb3VyY2VzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcblxuXHRcdGxldCBsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgdW5kZWZpbmVkO1xuXHRcdGxldCByZXN1bHQ6IFVbJ2l0ZW1zJ10gfCB1bmRlZmluZWQ7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlLmxvY2FsQ2FjaGUgIT09IG51bGwpXG5cdFx0XHRcdGxvY2FsQ2FjaGUgPSBjb2xsZWN0aW9uUmVzb3VyY2UubG9jYWxDYWNoZTtcblxuXHRcdFx0Y29uc3QgcmVtb3ZlZFJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5yZW1vdmVJdGVtUmVzb3VyY2VzKHJlbW92ZWRGcm9tTW9kaWZpZWQpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlID09PSByZXN1bHRSZXNvdXJjZSkge1xuXHRcdFx0XHRyZXN1bHQgPSByZW1vdmVkUmVzb3VyY2VzO1xuXG5cdFx0XHRcdGlmIChjYWxsT25SZW1vdmUpXG5cdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uUmVtb3ZlKHJlbW92ZWRSZXNvdXJjZXMpO1xuXHRcdH1cblxuXHRcdGlmIChsb2NhbENhY2hlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW1FbnRyeSBvZiByZW1vdmVkRnJvbU1vZGlmaWVkKVxuXHRcdFx0XHRsb2NhbENhY2hlLm9uRGVhY3RpdmF0ZUl0ZW0ocmVtb3ZlZEl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlQmF0Y2hTdGF0dXMgKFxuXHRcdGl0ZW1JZHM6IEl0ZW1JZFtdLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IEJhdGNoU3RhdHVzPEl0ZW1UeXBlVHlwZSwgSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5Lml0ZW1IYW5kbGVyLmNyZWF0ZUJhdGNoU3RhdHVzKFxuXHRcdFx0dGhpcy5pdGVtVHlwZSxcblx0XHRcdGl0ZW1JZHMsXG5cdFx0XHR0aGlzLnBhcmVudCxcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZSxcblx0XHRcdGZhbHNlXG5cdFx0KS5iYXRjaFN0YXR1cztcblx0fVxuXG5cdHByaXZhdGUgZXhwYW5kTG9jYWwgKFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sdW1uRXhwYW5zaW9uPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IGZhY3RvcnkuZXJyb3JIYW5kbGVyO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcblxuXHRcdHJldHVybiBmYWN0b3J5LmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gZmFjdG9yeS5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCBiYXRjaFN0YXR1cyA9IHRoaXMuY3JlYXRlQmF0Y2hTdGF0dXModGhpcy5nZXRJZEFycmF5KCksIHJlcXVlc3RDb2x1bW5zLCBsb2NhbEl0ZW1DYWNoZSk7XG5cblx0XHRcdFx0cmV0dXJuIGJhdGNoU3RhdHVzLmdldFByb21pc2VzKCkudGhlbihcblx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtSGFuZGxlci5oYW5kbGVCYXRjaFJlc3BvbnNlKFxuXHRcdFx0XHRcdFx0XHRiYXRjaFN0YXR1cyxcblx0XHRcdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IGNvbHVtbkV4cGFuc2lvbixcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZFJlbW90ZSAoXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2x1bW5FeHBhbnNpb248SXRlbVR5cGVUeXBlPj4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gZmFjdG9yeS5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyh0aGlzLCB1bmRlZmluZWQsIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gZmFjdG9yeS5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCBiYXRjaFN0YXR1cyA9IHRoaXMuY3JlYXRlQmF0Y2hTdGF0dXMocmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLCByZXF1ZXN0Q29sdW1ucywgbG9jYWxJdGVtQ2FjaGUpO1xuXG5cdFx0XHRcdHJldHVybiBiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhY3RvcnkuaXRlbUhhbmRsZXIuaGFuZGxlQmF0Y2hSZXNwb25zZShcblx0XHRcdFx0XHRcdFx0YmF0Y2hTdGF0dXMsXG5cdFx0XHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlLFxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJdGVtcyA9IHJlc3BvbnNlLml0ZW1zW2l0ZW1UeXBlXTtcblxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF0gIT09IHVuZGVmaW5lZCB8fCBpdGVtRW50cnkuaXNMb2NhbCgpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHR0aGlzLmFkZEl0ZW1zKFxuXHRcdFx0XHRcdFx0XHRiYXRjaFN0YXR1cy5nZXRBcnJheShbRU5UUllfU1RBVFVTLlJFU09MVkVdKSxcblx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb247XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRleHBhbmQgKG5ld0NvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZUludGVyZmFjZTx0aGlzPiB7XG5cdFx0Y29uc3Qge21lcmdlZCwgZGlmZmVyZW5jZX0gPSB0aGlzLmNvbHVtbnMubWVyZ2VSZXF1ZXN0Q29sdW1ucyhuZXdDb2x1bW5zKTtcblxuXHRcdGlmIChkaWZmZXJlbmNlICE9PSB0cnVlICYmIGRpZmZlcmVuY2UubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKHRoaXMpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdHRoaXMuaXNMb2NhbCgpID9cblx0XHRcdFx0dGhpcy5leHBhbmRMb2NhbChkaWZmZXJlbmNlLCBsb2NhbEl0ZW1DYWNoZSkgOlxuXHRcdFx0XHR0aGlzLmV4cGFuZFJlbW90ZShtZXJnZWQsIGxvY2FsSXRlbUNhY2hlKVxuXHRcdCkudGhlbihcblx0XHRcdGNvbHVtbkV4cGFuc2lvbiA9PiB7XG5cdFx0XHRcdHRoaXMuZXhwYW5kQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRleHRlbmRRdWVyeSAoY2FsbGJhY2s/OiBRdWVyeUNhbGxiYWNrKSB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRoaXMucXVlcnk7XG5cblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gY2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG5cblx0XHRyZXR1cm4gdGhpcy5xdWVyeSA9IHRoaXMuZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xuXHR9XG5cblx0ZXh0ZW5kPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdHF1ZXJ5Q2FsbGJhY2s6IFF1ZXJ5Q2FsbGJhY2ssXG5cdFx0Y29sbGVjdGlvblJlc291cmNlPzogVSxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8VVsnaXRlbXMnXT47XG5cblx0ZXh0ZW5kIChcblx0XHRxdWVyeUNhbGxiYWNrOiBRdWVyeUNhbGxiYWNrLFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZT86IG51bGwsXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPG51bGw+O1xuXG5cdGV4dGVuZDxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChcblx0XHRxdWVyeUNhbGxiYWNrOiBRdWVyeUNhbGxiYWNrLFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZT86IFUgfCBudWxsLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW5cblx0KSB7XG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSBmYWN0b3J5LmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCBleHRlbmRlZFF1ZXJ5ID0gdGhpcy5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKS5vYmplY3Q7XG5cdFx0Y29uc3QgZnVsbFF1ZXJ5ID0gZmFjdG9yeS5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxuXHRcdFx0ZXh0ZW5kZWRRdWVyeSxcblx0XHRcdGZhY3RvcnkucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKHRoaXMuZ2V0SWRBcnJheSgpKVxuXHRcdCk7XG5cblx0XHQvLyB0b2RvOiBhbHNvIGRvIHRoZSBsaW1pdCBjaGVjayBpbiBiYXRjaEV4dGVuZFxuXHRcdGNvbnN0IHByb21pc2UgPSBmYWN0b3J5Lml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoXG5cdFx0XHR0aGlzLFxuXHRcdFx0Ly8gV2hlbiB0aGVyZSdzIGEgbGltaXQgd2Ugd2FudCB0byBmZXRjaCBhbGwgaXRlbXMgYmVjYXVzZSB3ZSB3aWxsIGRvIHNvcnRpbmcgYW5kIHNwbGljaW5nIG9mIHRoZSBleGNlc3MgaXRlbXNcblx0XHRcdHRoaXMub3B0aW9ucy5saW1pdCAhPT0gbnVsbCA/IGV4dGVuZGVkUXVlcnkgOiBmdWxsUXVlcnlcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdC8vIHJlbW92ZUFic2VudEl0ZW1zKHJlc3BvbnNlKTsgVE9ETzogd2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIHJlcXVlc3QgKmFsbCogdGhlIGl0ZW1zXG5cdFx0XHRcdHJldHVybiBmYWN0b3J5Lml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbdGhpcy5pdGVtVHlwZV0sXG5cdFx0XHRcdFx0dGhpcy5wYXJlbnQsXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5zXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhpdGVtRW50cmllcywgY29sbGVjdGlvblJlc291cmNlLCB0cnVlLCBjYWxsT25BZGQsIGZhbHNlKTtcblx0XHRcdH0sXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblxuXHRcdHRoaXMucHJvbWlzZSA9IHByb21pc2UudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cblx0XHRyZXR1cm4gcHJvbWlzZTtcblx0fVxuXG5cdHF1ZXVlUmVsb2FkICgpOiB2b2lkIHtcblx0XHR0aGlzLnJlbG9hZFF1ZXVlZCA9IHRydWU7XG5cdH1cblxuXHRleHBhbmRDb2x1bW5zIChjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbjxJdGVtVHlwZVR5cGU+KTogdm9pZCB7XG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bih0aGlzLmNvbHVtbnMpO1xuXG5cdFx0aWYgKGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbClcblx0XHRcdHJldHVybjtcblxuXHRcdHRoaXMuY29sdW1ucyA9IGV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XG5cdFx0dGhpcy50ZW1wbGF0ZUNvbHVtbnMgPSBudWxsO1xuXHRcdHRoaXMub3B0aW9ucy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJlcXVlc3Q7XG5cdH1cblxuXHRleHBhbmRSZXF1ZXN0Q29sdW1ucyAocmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zKTogdm9pZCB7XG5cdFx0dGhpcy5jb2x1bW5zLmV4cGFuZFJlcXVlc3RDb2x1bW5zKHJlcXVlc3RDb2x1bW5zKTtcblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5yZXF1ZXN0O1xuXHR9XG5cblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkczogdHJ1ZSk6IEl0ZW1JZFtdO1xuXHRnZXRBZGRlZEl0ZW1zIChyZXR1cm5JdGVtSWRzPzogYm9vbGVhbik6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pjtcblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkczogYm9vbGVhbiA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPiB8IEl0ZW1JZD4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XG5cdFx0XHRpZiAoaW5pdGlhbC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKVxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFJlbW92ZWRJdGVtcyAocmV0dXJuSXRlbUlkczogdHJ1ZSk6IEl0ZW1JZFtdO1xuXHRnZXRSZW1vdmVkSXRlbXMgKHJldHVybkl0ZW1JZHM/OiBib29sZWFuKTogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+O1xuXHRnZXRSZW1vdmVkSXRlbXMgKHJldHVybkl0ZW1JZHM6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4gfCBJdGVtSWQ+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpbml0aWFsKSB7XG5cdFx0XHRpZiAobW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcblx0XHRcdFx0cmVzdWx0LnB1c2gocmV0dXJuSXRlbUlkcyA/IGl0ZW1FbnRyeS5pdGVtSWQgOiBpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXRVcGRhdGVkSXRlbXMgKCk6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpICYmIGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGhhc0FkZGVkSXRlbXMgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLml0ZW1zLmxlbmd0aCA+IHRoaXMuaW5pdGlhbC5sZW5ndGg7XG5cdH1cblxuXHRoYXNSZW1vdmVkSXRlbXMgKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmluaXRpYWwubGVuZ3RoID4gdGhpcy5pdGVtcy5sZW5ndGg7XG5cdH1cblxuXHRoYXNVcGRhdGVkSXRlbXMgKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcblxuXHRcdGZvciAoY29uc3QgbW9kaWZpZWRJdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcblx0XHRcdGlmIChtb2RpZmllZEl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVzY3JpcHRpb25cblx0ICogdGhpcyBkb2Vzbid0IHJldmVydCB1cGRhdGVzXG5cdCAqL1xuXHRyZXZlcnRDaGFuZ2VzICgpOiB2b2lkIHtcblx0XHQvLyBzYXZlIHRoZXNlIGJlZm9yZSByZXNldHRpbmcgdGhlIGl0ZW1zIHByb3BlcnR5XG5cdFx0Y29uc3QgYWRkZWRJdGVtcyA9IHRoaXMuZ2V0QWRkZWRJdGVtcygpO1xuXHRcdGNvbnN0IHJlbW92ZWRJdGVtcyA9IHRoaXMuZ2V0UmVtb3ZlZEl0ZW1zKCk7XG5cblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pbml0aWFsLnNsaWNlKCk7XG5cblx0XHR0aGlzLmhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrcyhbXSwgcmVtb3ZlZEl0ZW1zKTtcblx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzKFtdLCBhZGRlZEl0ZW1zKTtcblx0fVxuXG5cdG9uSXRlbXNDcmVhdGVkIChjb252ZXJzaW9uTWFwOiBDb252ZXJzaW9uTWFwKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiB0aGlzLmdldFJlc291cmNlcygpKSB7XG5cdFx0XHRyZXNvdXJjZS5yZWJ1aWxkTWFwKCk7XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc291cmNlLm9wdGlvbnMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHR0aGlzLmZhY3RvcnkuZXhjZXB0aW9uSGFuZGxlcihlcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBvbkFkZEluaXRpYWwgKGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4pOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHRoaXMuZ2V0UmVzb3VyY2VzKCkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc291cmNlLm9wdGlvbnMub25BZGRJbml0aWFsKGl0ZW1FbnRyaWVzLCB0aGlzKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHRoaXMuZmFjdG9yeS5leGNlcHRpb25IYW5kbGVyKGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG9uUmVtb3ZlSW5pdGlhbCAoaXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pik6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgdGhpcy5nZXRSZXNvdXJjZXMoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb3VyY2Uub3B0aW9ucy5vblJlbW92ZUluaXRpYWwoaXRlbUVudHJpZXMsIHRoaXMpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0dGhpcy5mYWN0b3J5LmV4Y2VwdGlvbkhhbmRsZXIoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGdldFVwZGF0ZWRJdGVtQ29sdW1ucyAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IHtbY29sdW1uSWQ6IHN0cmluZ106IENvbHVtbkluZm88SXRlbVR5cGVUeXBlPn0ge1xuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gdGhpcy5jb2x1bW5zLml0ZW07XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2NvbHVtbklkOiBzdHJpbmddOiBDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT59ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xuXHRcdFx0aWYgKGNvbnZlcnNpb25NYXBbY29sdW1uLmFwaUNvbHVtbi5pdGVtVHlwZV0gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmVzdWx0W2NvbHVtbi5pZF0gPSBjb2x1bW47XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGNsb25lIChwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCwgY29udmVyc2lvbk1hcD86IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xuXHRcdGNvbnN0IGNsb25lZEl0ZW1FbnRyaWVzID0gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmJhdGNoQ2xvbmU8SXRlbVR5cGVUeXBlPih0aGlzLml0ZW1zLCBjb252ZXJzaW9uTWFwKTtcblxuXHRcdGZvciAoY29uc3QgY2xvbmVkSXRlbUVudHJ5IG9mIGNsb25lZEl0ZW1FbnRyaWVzKVxuXHRcdFx0Y2xvbmVkSXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcblxuXHRcdHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRmYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY2xvbmVPcHRpb25zKHRoaXMub3B0aW9ucywgcGFyZW50KVxuXHRcdCkucmVzb2x2ZShcblx0XHRcdHtcblx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5zLFxuXHRcdFx0XHRpbml0aWFsOiBjbG9uZWRJdGVtRW50cmllc1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IGZpbHRlckFycmF5LCBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucywgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UsIExvY2FsVmlld1Jlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCwgSXRlbVR5cGUsIE9uQ2hhbmdlRnVuY3Rpb24sIFByb21pc2VJbnRlcmZhY2UsIFF1ZXJ5Q2FsbGJhY2ssIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlID0gYW55LCBUIGV4dGVuZHMgSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4gPSBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiB7XG5cdHB1YmxpYyBpdGVtczogVFtdO1xuXHRwdWJsaWMgY29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXA7XG5cdHByb3RlY3RlZCBpdGVtSWRNYXA6IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcDxUPiA9IHt9O1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgb25DaGFuZ2U6IE9uQ2hhbmdlRnVuY3Rpb247XG5cblx0cHJvdGVjdGVkIGNvbnN0cnVjdG9yIChcblx0XHRwcm90ZWN0ZWQgZmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRwdWJsaWMgZW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHB1YmxpYyBvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zPEl0ZW1UeXBlVHlwZT4sXG5cdFx0cHVibGljIGxldmVsOiBudW1iZXIsXG5cdFx0cHVibGljIGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCBudWxsXG5cdCkge1xuXHRcdHRoaXMuaXRlbXMgPSBbXTtcblx0XHR0aGlzLml0ZW1JZE1hcCA9IHt9O1xuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2U7XG5cblx0XHQvLyB0aGlzIGFsbG93cyB1cyB0byB1cGRhdGUgdGhlIG9uQ2hhbmdlIGZ1bmN0aW9uIGluIHRoZSBvcHRpb25zXG5cdFx0dGhpcy5vbkNoYW5nZSA9IChpdGVtUmVzb3VyY2UsIHByZXZpb3VzKSA9PiB7IHRoaXMub3B0aW9ucy5vbkNoYW5nZShpdGVtUmVzb3VyY2UsIHByZXZpb3VzKTsgfTtcblxuXHRcdHRoaXMuYWRkSXRlbVJlc291cmNlcyhlbnRyeS5pdGVtcyk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0SXRlbUJ5SWQgKGl0ZW1JZDogbnVtYmVyKTogVCB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUlkTWFwW2l0ZW1JZF07XG5cdH1cblxuXHRwdWJsaWMgcmVidWlsZE1hcCAoKTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgaXRlbUlkTWFwOiBJdGVtUmVzb3VyY2VJdGVtSWRNYXA8VD4gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXG5cdFx0XHRpdGVtSWRNYXBbaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XG5cblx0XHR0aGlzLml0ZW1JZE1hcCA9IGl0ZW1JZE1hcDtcblx0fVxuXG5cdHB1YmxpYyBhZGRJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+KTogVFtdIHsgLy8gc2hvdWxkIGJlIGZhc3Rcblx0XHRpZiAoaXRlbUVudHJpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0Y29uc3QgcmVzdWx0OiBUW10gPSBbXTtcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXHRcdGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB0aGlzLml0ZW1JZE1hcDtcblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuZmFjdG9yeS5pdGVtUmVzb3VyY2VGYWN0b3J5LmdldENvbnN0cnVjdG9yPEl0ZW1UeXBlVHlwZT4oXG5cdFx0XHR7ZWRpdDogb3B0aW9ucy5lZGl0SXRlbXMsIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlfSxcblx0XHRcdHRoaXMubGV2ZWwsXG5cdFx0XHR0aGlzLmxvY2FsQ2FjaGVcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRcdGxldCBpdGVtUmVzb3VyY2U7XG5cblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGNvbnN0cnVjdG9yKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdGl0ZW1zLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdFx0aXRlbUlkTWFwW2l0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0aXRlbVJlc291cmNlID0gaXRlbUlkTWFwW2l0ZW1JZF07XG5cblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gaXRlbUVudHJpZXNcblx0ICogQHJldHVybnMge0l0ZW1SZXNvdXJjZVtdfVxuXHQgKlxuXHQgKiBSZXR1cm5zIHRoZSBJdGVtcmVzb3VyY2VzIHRoYXQgd2hlcmUgcmVtb3ZlZCBDb2xsZWN0aW9uLlxuXHQgKiBGaWx0ZXJzIG9uIEl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gSXRlbUVudHJ5XG5cdCAqL1xuXHRwdWJsaWMgcmVtb3ZlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pik6IFRbXSB7XG5cdFx0Y29uc3QgcmVzdWx0OiBUW10gPSBbXTtcblxuXHRcdGZpbHRlckFycmF5KFxuXHRcdFx0dGhpcy5pdGVtcyxcblx0XHRcdGl0ZW1SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRcdFx0aWYgKGl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gaXRlbUVudHJ5KSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwdWJsaWMgY2FsbE9uQWRkIChpdGVtUmVzb3VyY2VzOiBUW10pOiB2b2lkIHtcblx0XHR0cnkge1xuXHRcdFx0dGhpcy5vcHRpb25zLm9uQWRkKGl0ZW1SZXNvdXJjZXMsIHRoaXMpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aGlzLmZhY3RvcnkuZXhjZXB0aW9uSGFuZGxlcihlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGNhbGxPblJlbW92ZSAoaXRlbVJlc291cmNlczogVFtdKTogdm9pZCB7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMub3B0aW9ucy5vblJlbW92ZShpdGVtUmVzb3VyY2VzLCB0aGlzKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0dGhpcy5mYWN0b3J5LmV4Y2VwdGlvbkhhbmRsZXIoZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogVCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcblx0XHRcdGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSk7XG5cdH1cblxuXHRwdWJsaWMgZmlsdGVyIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogVCkgPT4gYm9vbGVhbik6IFRbXSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiBUW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtUmVzb3VyY2UpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwdWJsaWMgZmlyc3QgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBUKSA9PiBib29sZWFuKTogVCB8IG51bGwge1xuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwdWJsaWMgc29tZSAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IFQpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5maXJzdChjYWxsYmFjaykgIT09IG51bGw7XG5cdH1cblxuXHRwdWJsaWMgZ3JvdXBCeSAoYXJndW1lbnQ6IHN0cmluZyB8ICgoaXRlbVJlc291cmNlOiBUKSA9PiBzdHJpbmcgfCBudWxsKSk6IHtba2V5OiBzdHJpbmddOiBUW119IHtcblx0XHRjb25zdCBpdGVtc1Jlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgcmVzdWx0OiB7W2tleTogc3RyaW5nXTogVFtdfSA9IHt9O1xuXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1zUmVzb3VyY2VzKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gaXRlbVJlc291cmNlLmZpZWxkc1thcmd1bWVudF07XG5cblx0XHRcdFx0aWYgKHJlc3VsdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XG5cblx0XHRcdFx0cmVzdWx0W3ZhbHVlXS5wdXNoKGl0ZW1SZXNvdXJjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBhcmd1bWVudChpdGVtUmVzb3VyY2UpO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbClcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFt2YWx1ZV0gPSBbXTtcblxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHVibGljIG1hcDxVPiAoYXJndW1lbnQ6IHN0cmluZyB8ICgoaXRlbVJlc291cmNlOiBUKSA9PiBVKSk6IFVbXSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cdFx0Y29uc3QgbGVuZ3RoID0gaXRlbVJlc291cmNlcy5sZW5ndGg7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdFx0cmVzdWx0W2ldID0gaXRlbVJlc291cmNlc1tpXS5maWVsZHNbYXJndW1lbnRdO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZXNbaV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwdWJsaWMgcmVkdWNlPFU+IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogVCwgdmFsdWU6IFUpID0+IFUsIHZhbHVlOiBVKTogVSB7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0dmFsdWUgPSBjYWxsYmFjayhpdGVtUmVzb3VyY2UsIHZhbHVlKTtcblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdHB1YmxpYyBleHRlbmQgKHF1ZXJ5Q2FsbGJhY2s6IFF1ZXJ5Q2FsbGJhY2ssIHJldHVybkFsbEl0ZW1zOiBib29sZWFuID0gZmFsc2UsIGNhbGxPbkFkZD86IGJvb2xlYW4pOiBQcm9taXNlSW50ZXJmYWNlPFRbXT4ge1xuXHRcdHJldHVybiB0aGlzLmVudHJ5LmV4dGVuZChxdWVyeUNhbGxiYWNrLCB0aGlzLCBjYWxsT25BZGQpLnRoZW4oXG5cdFx0XHRpdGVtUmVzb3VyY2VzID0+IHJldHVybkFsbEl0ZW1zID8gdGhpcy5pdGVtcyA6IGl0ZW1SZXNvdXJjZXNcblx0XHQpO1xuXHR9XG5cblx0cHVibGljIGNsZWFyUmVzb3VyY2UgKCk6IHZvaWQge1xuXHRcdHRoaXMuZmFjdG9yeS5jYWNoZS5jbGVhclJlc291cmNlKHRoaXMpO1xuXHR9XG5cblx0cHVibGljIGRlYWN0aXZhdGUgKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmxvY2FsQ2FjaGUgPT09IG51bGwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHR0aGlzLmxvY2FsQ2FjaGUuY2xlYXJDb2xsZWN0aW9uKHRoaXMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLCBJdGVtUmVzb3VyY2UsIExvY2FsVmlld1Jlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSA9IGFueSwgVCBleHRlbmRzIEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGU+ID0gTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj5cblx0ZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2UgPEl0ZW1UeXBlVHlwZSwgVD4ge1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uczxJdGVtVHlwZVR5cGU+LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSB8IG51bGxcblx0KSB7XG5cdFx0c3VwZXIoY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zLCBsZXZlbCwgbG9jYWxDYWNoZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2UsXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsXG5cdEl0ZW1FbnRyeSxcblx0SXRlbVJlc291cmNlLFxuXHRMb2NhbFZpZXdSZXNvdXJjZVxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlID0gYW55LCBUIGV4dGVuZHMgSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4gPSBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PlxuXHRleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSA8SXRlbVR5cGVUeXBlLCBUPiB7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdGZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw6IG51bWJlcixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgbnVsbFxuXHQpIHtcblx0XHRzdXBlcihmYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMsIGxldmVsLCBsb2NhbENhY2hlKTtcblx0fVxuXG5cdHB1YmxpYyBzYXZlICgpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1JZENvbnZlcnNpb25NYXA+IHtcblx0XHRpZiAoIXRoaXMub3B0aW9ucy5lbmFibGVTYXZlKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBTYXZpbmcgZGlzYWJsZWQnKTtcblxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcblx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbCAmJiBmYWN0b3J5LmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpKVxuXHRcdFx0cmV0dXJuIGZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0cmV0dXJuIGZhY3RvcnkuY2hhbmdlc1Byb2Nlc3Nvci5leGVjdXRlKFtdLCBbY29sbGVjdGlvbkVudHJ5XSk7XG5cdH1cblxuXHQvLyBUT0RPOiB1c2UgY2FsbGJhY2sgZnVuY3Rpb25cblx0cHVibGljIG1vdmVJdGVtcyAoXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXG5cdFx0ZGVzdGluYXRpb246IENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdGVuYWJsZUNhbGxiYWNrcz86IGJvb2xlYW5cblx0KTogVFtdIHtcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJ5O1xuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRpZiAob3B0aW9ucy5lbmFibGVTYXZlIHx8IG9wdGlvbnMubW9kSW5zdGFudClcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ2Fubm90IG1vdmUgaXRlbXM6IHNhdmluZyBlbmFibGVkJyk7XG5cblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlICE9PSBkZXN0aW5hdGlvbi5lbnRyeS5pdGVtVHlwZSlcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ2Fubm90IG1vdmUgaXRlbXM6IGl0ZW1UeXBlIG1pc21hdGNoJyk7XG5cblx0XHRjb25zdCByZW1vdmVkSXRlbVJlc291cmNlcyA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblx0XHRjb25zdCBpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRpZiAocmVtb3ZlZEl0ZW1SZXNvdXJjZXMgIT09IG51bGwpIHtcblx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW1SZXNvdXJjZSBvZiByZW1vdmVkSXRlbVJlc291cmNlcylcblx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChyZW1vdmVkSXRlbVJlc291cmNlLmVudHJ5KTtcblxuXHRcdFx0ZGVzdGluYXRpb24uZW50cnkuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGRlc3RpbmF0aW9uLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVtb3ZlZEl0ZW1SZXNvdXJjZXM7XG5cdH1cblxuXHRwdWJsaWMgcmVtb3ZlSXRlbXMgKGlkQXJyYXk6IEl0ZW1JZFtdLCBjYWxsT25SZW1vdmU6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZUludGVyZmFjZTxUW10+IHtcblx0XHQvLyBjYWxsT25SZW1vdmUgc2hvdWxkIGJlIGZhbHNlIGhlcmUgdG8gcHJldmVudCBvblJlbW92ZSBmcm9tIGJlaW5nIGNhbGxlZCB0d2ljZVxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHRoaXMsIGZhbHNlLCBmYWxzZSk7XG5cblx0XHRpZiAoaXRlbVJlc291cmNlcyA9PT0gbnVsbClcblx0XHRcdHJldHVybiB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbihbXSk7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zLm1vZEluc3RhbnQpXG5cdFx0XHRyZXR1cm4gdGhpcy5zYXZlKCkudGhlbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGlmIChjYWxsT25SZW1vdmUpXG5cdFx0XHRcdFx0XHR0aGlzLmNhbGxPblJlbW92ZShpdGVtUmVzb3VyY2VzKTtcblxuXHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXG5cdFx0aWYgKGNhbGxPblJlbW92ZSlcblx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKGl0ZW1SZXNvdXJjZXMpO1xuXHR9XG5cblx0cHVibGljIHJlbW92ZUl0ZW0gKGl0ZW1JZDogSXRlbUlkLCBjYWxsT25SZW1vdmU/OiBib29sZWFuKTogUHJvbWlzZUludGVyZmFjZTxUPiB7XG5cdFx0cmV0dXJuIHRoaXMucmVtb3ZlSXRlbXMoW2l0ZW1JZF0sIGNhbGxPblJlbW92ZSkudGhlbihcblx0XHRcdGl0ZW1SZXNvdXJjZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlc1swXTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRwdWJsaWMgYWRkSXRlbXMgKFxuXHRcdHZhbHVlc0FycmF5OiBBcnJheTxGaWVsZE1hcDxJdGVtVHlwZVR5cGU+Pixcblx0XHRjYWxsT25BZGQ6IGJvb2xlYW4gPSB0cnVlLFxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFRbXT4ge1xuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XG5cdFx0Y29uc3QgbW9kSW5zdGFudCA9IHRoaXMub3B0aW9ucy5tb2RJbnN0YW50O1xuXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuY3JlYXRlSXRlbXModmFsdWVzQXJyYXkpLnRoZW4oXG5cdFx0XHRpdGVtRW50cmllcyA9PiB7XG5cdFx0XHRcdGlmIChtb2RJbnN0YW50IHx8IHRoaXMubG9jYWxDYWNoZSA9PT0gbnVsbClcblx0XHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZW50cnkucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIHRoaXMubG9jYWxDYWNoZS5pdGVtcyk7XG5cdFx0XHR9XG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xuXHRcdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5hZGRJdGVtcyhcblx0XHRcdFx0XHRpdGVtRW50cmllcyxcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGNhbGxPbkFjdGl2YXRlXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0aWYgKGl0ZW1SZXNvdXJjZXMgPT09IG51bGwpXG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXG5cdFx0XHRcdGlmIChtb2RJbnN0YW50KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oXG5cdFx0XHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChjYWxsT25BZGQpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jYWxsT25BZGQoaXRlbVJlc291cmNlcyk7XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjYWxsT25BZGQpXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BZGQoaXRlbVJlc291cmNlcyk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdFx0XHR9LFxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBhZGRJdGVtIChcblx0XHR2YWx1ZXM6IEZpZWxkTWFwPEl0ZW1UeXBlVHlwZT4sXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxUPiB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkSXRlbXMoW3ZhbHVlc10sIGNhbGxPbkFkZCwgY2FsbE9uQWN0aXZhdGUpLnRoZW4oXG5cdFx0XHRpdGVtUmVzb3VyY2VzID0+IHtcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5mYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHVibGljIGNsZWFyIChlbmFibGVDYWxsYmFja3M6IGJvb2xlYW4pIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5jbGVhcih0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uU2V0IH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEZpZWxkTWFwLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSA9IGFueT4ge1xuXHRmaWVsZHM6IEZpZWxkTWFwPEl0ZW1UeXBlVHlwZT47XG5cdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXA7XG5cdGNvbHVtbnM6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+OyAvLyBUT0RPOiByZW5hbWUgdG8gY29sdW1uU2V0XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdGZhY3Rvcnk6IFRlbXBsYXRlRmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRwdWJsaWMgcmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGFkZGl0aW9uYWxDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpIHtcblx0XHR0aGlzLmZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCByZXNwb25zZS5saW5rc1tpdGVtVHlwZV1bMF0pITtcblxuXHRcdHRoaXMucmVzcG9uc2VDb2x1bW5zID0gZmFjdG9yeS5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKFxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCksXG5cdFx0XHRhZGRpdGlvbmFsQ29sdW1uc1xuXHRcdCkubWVyZ2VkO1xuXG5cdFx0dGhpcy5jb2x1bW5zID0gZmFjdG9yeS5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdHJ1ZSwgdGhpcy5yZXNwb25zZUNvbHVtbnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBMb2NhbENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlT3B0aW9ucywgVmlld1Jlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlID0gYW55PiBleHRlbmRzIFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdGZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnM8UmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+LFxuXHRcdGlzTmV3OiBib29sZWFuLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCBudWxsXG5cdCkge1xuXHRcdHN1cGVyKGZhY3RvcnksIGVudHJ5LCBvcHRpb25zLCBpc05ldywgbG9jYWxDYWNoZSk7XG5cblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5LmluaXRpYWw7XG5cdH1cbn1cbiIsImltcG9ydCB7IExvY2FsQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2VPcHRpb25zLCBWaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSA9IGFueT4gZXh0ZW5kcyBWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPiB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRmYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdGVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zLFxuXHRcdGlzTmV3OiBib29sZWFuLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCBudWxsXG5cdCkge1xuXHRcdHN1cGVyKGZhY3RvcnksIGVudHJ5LCBvcHRpb25zLCBpc05ldywgbG9jYWxDYWNoZSk7XG5cblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQgPyBlbnRyeS5pbml0aWFsIDogZW50cnkubW9kaWZpZWQ7XG5cdH1cbn1cbiIsIi8vIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGRlcGVuZGVuY3khXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeU9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VPcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vVmlld1Jlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vRWRpdFJlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uVmlld1Jlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL1RlbXBsYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vUmVtb3RlVmlld1Jlc291cmNlJztcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxWaWV3UmVzb3VyY2UnO1xuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IFF1ZXJ5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlQYXJzZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSwgQ29sbGVjdGlvblF1ZXJ5LCBFbnRyeVBhcmVudE51bGwsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0Ly8gbm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgY29sdW1ucyBwcm9wZXJ0eSwgaXQgd2lsbCBiZSByZXBsYWNlZCBpbiB3aGVuIGNvbHVtbnMgYXJlIGV4cGFuZGVkXG5cdGNsb25lT3B0aW9ucyAob3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucywgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpIHtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyhvcHRpb25zKTsgLy8gZG9lcyBhIHNoYWxsb3cgY29weVxuXG5cdFx0cmVzdWx0LnF1ZXJ5UGFyYW1zID0gdGhpcy5jbG9uZVF1ZXJ5UGFyYW1zKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXHRcdHJlc3VsdC5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJvY2Vzc09wdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+KTogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpO1xuXHR9XG5cblx0Y2xvbmVRdWVyeVBhcmFtczxUIGV4dGVuZHMgb2JqZWN0PiAocGFyYW1ldGVyczogVCk6IFQge1xuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHBhcmFtZXRlcnNba2V5XTtcblx0XHRcdGxldCBjbG9uZTtcblxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlLnNsaWNlKCk7IC8vIHdlJ3JlIG9ubHkgdXNpbmcgcHJpbWl0aXZlIGFycmF5c1xuXHRcdFx0ZWxzZSBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZS5jbG9uZSgpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlO1xuXG5cdFx0XHRyZXN1bHRba2V5XSA9IGNsb25lO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjcmVhdGVRdWVyeSAob3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyk6IENvbGxlY3Rpb25RdWVyeSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cblx0XHRsZXQgcXVlcnk7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5O1xuXHRcdGVsc2Uge1xuXHRcdFx0Y29uc3QgbGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeToge2lkOiAnJnBhcmVudElkJ319O1xuXHRcdFx0b3B0aW9ucy5xdWVyeVBhcmFtcy5wYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XG5cblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XG5cdFx0XHRcdGxpbmtlZFRvUXVlcnkgOlxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24ob3B0aW9ucy5xdWVyeSwgbGlua2VkVG9RdWVyeSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3QocXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XG5cblx0XHRyZXR1cm4ge29iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV19O1xuXHR9XG5cblx0Z2V0SWRBcnJheSAoaXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxhbnk+PiwgYWNjdW11bGF0b3I6IEl0ZW1JZFtdID0gW10pOiBJdGVtSWRbXSB7XG5cdFx0aWYgKGFjY3VtdWxhdG9yID09PSB1bmRlZmluZWQpXG5cdFx0XHRhY2N1bXVsYXRvciA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRhY2N1bXVsYXRvci5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xuXG5cdFx0cmV0dXJuIGFjY3VtdWxhdG9yO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7SXRlbUVudHJ5W119IGl0ZW1FbnRyaWVzXG5cdCAqIEBwYXJhbSB7KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFufSBjYWxsYmFja1xuXHQgKiBAcmV0dXJucyB7SXRlbUVudHJ5W119XG5cdCAqXG5cdCAqIGZpbHRlciBhbiBhcnJheSBhY2NvcmRpbmcgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBSZXR1cm4gdGhlIGVudHJpZXMgdGhhdCBmYWlsZWQgdGhlIGNvbmRpdGlvblxuXHQgKiBSZXBsYWNlIHRoZSBnaXZlbiBhcnJheSB3aXRoIHRoZSBlbnRyaWVzIHRoYXQgZGlkbid0IGZhaWwgdGhlIGNvbmRpdGlvbi5cblx0ICovXG5cdGZpbHRlckFycmF5PFQgZXh0ZW5kcyBJdGVtRW50cnk8YW55PiA9IEl0ZW1FbnRyeTxhbnk+PiAoXG5cdFx0aXRlbUVudHJpZXM6IFRbXSxcblx0XHRjYWxsYmFjazogKGl0ZW1FbnRyeTogVCkgPT4gYm9vbGVhblxuXHQpOiBUW10ge1xuXHRcdGNvbnN0IGZpbHRlcmVkRW50cmllczogVFtdID0gW107XG5cdFx0Y29uc3QgcmVtb3ZlZEVudHJpZXM6IFRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHQoY2FsbGJhY2soaXRlbUVudHJ5KSA/IGZpbHRlcmVkRW50cmllcyA6IHJlbW92ZWRFbnRyaWVzKS5wdXNoKGl0ZW1FbnRyeSk7XG5cblx0XHRpZiAocmVtb3ZlZEVudHJpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xuXG5cdFx0aXRlbUVudHJpZXMubGVuZ3RoID0gZmlsdGVyZWRFbnRyaWVzLmxlbmd0aDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbUVudHJpZXMubGVuZ3RoOyBpKyspXG5cdFx0XHRpdGVtRW50cmllc1tpXSA9IGZpbHRlcmVkRW50cmllc1tpXTtcblxuXHRcdHJldHVybiByZW1vdmVkRW50cmllcztcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUXVlcnksIENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UsIGlkZW50aXR5LCBpc0Z1bmN0aW9uLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vJztcbmltcG9ydCB7XG5cdEJhdGNoU3RhdHVzLFxuXHRDb2xsZWN0aW9uQ2FjaGUsXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25NYXRjaGVyLFxuXHRDb2x1bW5FeHBhbnNpb24sXG5cdENvbHVtbkhhbmRsZXIsXG5cdENvbHVtblNldCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRRdWVyeVNlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQmF0Y2hTdGF0dXNGYWN0b3J5LCBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LCBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIFF1ZXJ5UGFyc2VyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RDb2x1bW4sXG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCxcblx0RW50cnlTdGF0dXMsXG5cdEl0ZW1FbnRyeVBhcmVudElkTWFwLFxuXHRJdGVtSWQsXG5cdEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCxcblx0SXRlbVR5cGUsXG5cdFF1ZXJ5Q2FsbGJhY2tcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25IYW5kbGVyIHtcblx0ZW50cmllczogQ29sbGVjdGlvbkNhY2hlO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblx0XHR0aGlzLmVudHJpZXMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0ICovXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwOiBhbnkpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeTxhbnk+ID0gZW50cnkuY29sbGVjdGlvbjtcblxuXHRcdFx0Y29sbGVjdGlvbi5yZW1vdmVJdGVtcyhlbnRyeS5ub3RmaXR0aW5nLCBudWxsLCB0cnVlKTtcblx0XHRcdGNvbGxlY3Rpb24uYWRkSXRlbXMoZW50cnkuZml0dGluZywgbnVsbCwgdHJ1ZSk7IC8vIGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBpbml0aWFsXG5cblx0XHRcdGlmIChlbnRyeS5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uLmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbk1hdGNoZXI8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ICgpOiBDb2xsZWN0aW9uTWF0Y2hlcjxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFt0aGlzLmVudHJpZXNdLCB0cnVlLCB0cnVlLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxuXHQgKi9cblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zPFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8YW55PiA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8YW55Pj4gKFxuXHRcdGNvbGxlY3Rpb25NYXAsXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXG5cdFx0cmVzdWx0UmVzb3VyY2U6IFQgfCBudWxsID0gbnVsbFxuXHQpOiBUWydpdGVtcyddIHwgbnVsbCB7XG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgZml0dGluZyA9IG1hcEVudHJ5LmZpdHRpbmc7XG5cdFx0XHRjb25zdCBtYXliZSA9IG1hcEVudHJ5Lm1heWJlO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8YW55PiA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBpZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGZpdHRpbmdJdGVtIG9mIGZpdHRpbmcpXG5cdFx0XHRcdGlkQXJyYXkucHVzaChmaXR0aW5nSXRlbS5pdGVtSWQpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IG1heWJlSXRlbSBvZiBtYXliZSlcblx0XHRcdFx0aWRBcnJheS5wdXNoKG1heWJlSXRlbSk7XG5cblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgbnVsbCwgdXBkYXRlSW5pdGlhbCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8vIFRPRE86IG1heWJlLCBib29sZWFuIGluc3RlYWQgb2YgbWVzc2FnZVxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0ICovXG5cdGFkZFRvQ29sbGVjdGlvbnM8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxhbnk+ID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxhbnk+PiAoXG5cdFx0Y29sbGVjdGlvbk1hcCxcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuLFxuXHRcdHJlc3VsdFJlc291cmNlOiBUIHwgbnVsbCA9IG51bGxcblx0KTogVFsnaXRlbXMnXSB7XG5cdFx0bGV0IHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xuXG5cdFx0XHRpZiAodXBkYXRlSW5pdGlhbCAmJiBtYXBFbnRyeS5tYXliZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB1cGRhdGVJbml0aWFsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YmF0Y2hFeHBhbmQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCxcblx0XHRuZXdDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW11cblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdGlmIChuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sbGVjdGlvbnMpO1xuXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheTogSXRlbUlkW10gPSBbXTtcblx0XHRsZXQgaXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0Ly8gVE9ETzogZmlsdGVyIGxvY2FsIGl0ZW1zP1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cGFyZW50SWRBcnJheS5wdXNoKGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQhLml0ZW1JZCk7XG5cdFx0XHRpdGVtRW50cmllcyA9IGl0ZW1FbnRyaWVzLmNvbmNhdChjb2xsZWN0aW9uRW50cnkuaXRlbXMpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxuXHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdHBhcmVudElkQXJyYXksXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG51bGwsXG5cdFx0XHRuZXdDb2x1bW5zXG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKFxuXHRcdFx0XHRcdG5ld0NvbHVtbnMsXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0aXRlbUVudHJpZXNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XG5cblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5fcmVzb2x2ZSgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25zO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHQvLyB0b2RvW1RTXSBob3cgZG8gd2UgdHlwZSB0aGlzID9cblx0YmF0Y2hFeHRlbmQ8VCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPiAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsXG5cdFx0cXVlcnlDYWxsYmFjazogUXVlcnlDYWxsYmFjayxcblx0XHRjb2xsZWN0aW9uczogVCxcblx0XHRyZXR1cm5BbGxJdGVtczogYm9vbGVhbiA9IGZhbHNlLFxuXHRcdGNhbGxPbkFkZD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2VJdGVtSWRNYXA+IHtcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMoY29sbGVjdGlvbnMpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih7fSk7XG5cblx0XHRjb25zdCBwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xuXHRcdGxldCBpdGVtSWRBcnJheTogSXRlbUlkW10gPSBbXTtcblxuXHRcdG9wdGlvbnMucXVlcnlQYXJhbXMgPSBxdWVyeUNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjayk7XG5cdFx0XHRwYXJlbnRJZEFycmF5LnB1c2goY29sbGVjdGlvbkVudHJ5LnBhcmVudCEuaXRlbUlkKTtcblxuXHRcdFx0aXRlbUlkQXJyYXkgPSBpdGVtSWRBcnJheS5jb25jYXQoY29sbGVjdGlvbkVudHJ5LmdldElkQXJyYXkoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXG5cdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0cGFyZW50SWRBcnJheSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucykub2JqZWN0LFxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5jcmVhdGVOb3RJbihpdGVtSWRBcnJheSlcblx0XHRcdCksXG5cdFx0XHRvcHRpb25zLmNvbHVtbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0cGFyZW50SWRBcnJheSxcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2UgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF07XG5cdFx0XHRcdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeS5hZGRJdGVtcyggLy8gc2hvdWxkIGdvIGZpcnN0XG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZS5pdGVtc1twYXJlbnRJZF0sXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UsXG5cdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0Y2FsbE9uQWRkLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHJldHVybkFsbEl0ZW1zID8gY29sbGVjdGlvblJlc291cmNlLml0ZW1zIDogaXRlbVJlc291cmNlcztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGJhdGNoRmV0Y2g8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSB8ICgoKSA9PiBJdGVtSWRbXSksXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCBiYXRjaFN0YXR1czogQmF0Y2hTdGF0dXM8SXRlbVR5cGVUeXBlLCBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj4gPSB0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiAoY29sbGVjdGlvbkVudHJ5LnBhcmVudCEpLml0ZW1JZCxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiBjb2xsZWN0aW9uRW50cnkucHJvbWlzZVxuXHRcdCk7XG5cblx0XHRpZiAoaXNGdW5jdGlvbjwoKSA9PiBJdGVtSWRbXT4ocGFyZW50SWRBcnJheSkpXG5cdFx0XHRwYXJlbnRJZEFycmF5ID0gcGFyZW50SWRBcnJheSgpO1xuXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XG5cdFx0XHRiYXRjaFN0YXR1cy5hZGQoXG5cdFx0XHRcdHRoaXMuZ2V0RW50cnlTdGF0dXMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNsb25lT3B0aW9ucyhvcHRpb25zLCB7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9KSxcblx0XHRcdFx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZSxcblx0XHRcdFx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RJZHMgPSBiYXRjaFN0YXR1cy5nZXRSZXF1ZXN0SWRzKCk7XG5cdFx0XHRcdGxldCBpdGVtRW50cnlDb21wb3VuZFByb21pc2U7XG5cdFx0XHRcdGxldCBhZGRpdGlvbmFsUXVlcnk7XG5cblx0XHRcdFx0aWYgKG9wdGlvbnMucXVlcnkgPT09IG51bGwpXG5cdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5ID0gbnVsbDtcblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3Qob3B0aW9ucy5xdWVyeSwgb3B0aW9ucy5xdWVyeVBhcmFtcykucGFyc2UoKTtcblx0XHRcdFx0XHRhZGRpdGlvbmFsUXVlcnkgPSB7b2JqZWN0OiBwYXJzZWRRdWVyeVswXSwgc3RyaW5nOiBwYXJzZWRRdWVyeVsxXX07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0aXRlbUVudHJ5Q29tcG91bmRQcm9taXNlID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcblx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRhZGRpdGlvbmFsUXVlcnkgPT09IG51bGwgPyBudWxsIDogYWRkaXRpb25hbFF1ZXJ5Lm9iamVjdCxcblx0XHRcdFx0XHRcdG9wdGlvbnMuY29sdW1uc1xuXHRcdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKFtFTlRSWV9TVEFUVVMuTE9DQUxdKSkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyeUNvbXBvdW5kUHJvbWlzZSA9IHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKS50aGVuKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0cmV0dXJuIGJhdGNoU3RhdHVzLmdldE1hcCgpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnlDb21wb3VuZFByb21pc2UudGhlbihcblx0XHRcdFx0XHRpdGVtRW50cnlDb21wb3VuZCA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBpdGVtQ2FjaGUuYmF0Y2hHZXRMb2NhbEJ5UGFyZW50KFxuXHRcdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxuXHRcdFx0XHRcdFx0XHRwYXJlbnRJZEFycmF5IGFzIEl0ZW1JZFtdLFxuXHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0YWRkaXRpb25hbFF1ZXJ5XG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRsZXQgaXRlbUVudHJ5QXJyYXk6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGl0ZW1FbnRyeU1hcClcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5QXJyYXkgPSBpdGVtRW50cnlBcnJheS5jb25jYXQoaXRlbUVudHJ5TWFwW3BhcmVudElkXSk7XG5cblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmV4cGFuZExvY2FsSXRlbUVudHJpZXMoXG5cdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnlBcnJheSxcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5Q29tcG91bmQuY29sdW1ucyxcblx0XHRcdFx0XHRcdFx0aXRlbUNhY2hlXG5cdFx0XHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0XHRcdCgpID0+IHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShiYXRjaFN0YXR1cywgaXRlbUVudHJ5Q29tcG91bmQsIGl0ZW1FbnRyeU1hcCksXG5cdFx0XHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHQvLyBUT0RPOiBzb21lIHN0YXR1c2VzIGFyZSBub3QgdGFrZW4gaW50byBhY2NvdW50XG5cdGhhbmRsZUJhdGNoUmVzcG9uc2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRiYXRjaFN0YXR1czogQmF0Y2hTdGF0dXM8SXRlbVR5cGVUeXBlLCBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0aXRlbUVudHJ5Q29tcG91bmQ6IHtcblx0XHRcdGNvbHVtbnM6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+LFxuXHRcdFx0Y29sdW1uRXhwYW5zaW9uPzogQ29sdW1uRXhwYW5zaW9uPEl0ZW1UeXBlVHlwZT4sXG5cdFx0XHRpdGVtcz86IEl0ZW1FbnRyeVBhcmVudElkTWFwPEl0ZW1UeXBlVHlwZT5cblx0XHR9LFxuXHRcdGxvY2FsSXRlbXM6IEl0ZW1FbnRyeVBhcmVudElkTWFwPEl0ZW1UeXBlVHlwZT5cblx0KTogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLkNBQ0hFRF0sXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRJZCkgPT4ge1xuXHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5O1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkVdLFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50SWQpID0+IHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSAoaXRlbUVudHJ5Q29tcG91bmQuaXRlbXMhKVtwYXJlbnRJZF07XG5cblx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGluaXRpYWw6IGl0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdFx0bW9kaWZpZWQ6IGl0ZW1FbnRyaWVzLmNvbmNhdChsb2NhbEl0ZW1zW3BhcmVudElkXSksXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMsXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRJZCkgPT4ge1xuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kQ29sdW1ucyhpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5FeHBhbnNpb24hKTtcblx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5fcmVzb2x2ZSgpO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXG5cdFx0XHRbRU5UUllfU1RBVFVTLkxPQ0FMXSxcblx0XHRcdChjb2xsZWN0aW9uRW50cnksIHBhcmVudElkKSA9PiB7XG5cdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpbml0aWFsOiBsb2NhbEl0ZW1zW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbnNcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmZXRjaDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyxcblx0XHRpdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj4ge1xuXHRcdGNvbnN0IHN0YXR1c1Jlc291cmNlID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgbG9jYWxDb2xsZWN0aW9uQ2FjaGUsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcblxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoXG5cdFx0XHRzdGF0dXNSZXNvdXJjZS5lbnRyeSxcblx0XHRcdHN0YXR1c1Jlc291cmNlLnN0YXR1cyxcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHRpdGVtQ2FjaGUsXG5cdFx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZSxcblx0XHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZUNhY2hlZDxUIGV4dGVuZHMgQ29sbGVjdGlvbkVudHJ5PGFueT4+IChcblx0XHRlbnRyeTogVCxcblx0XHRzdGF0dXM6IEVOVFJZX1NUQVRVUyxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFQ+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblxuXHRcdHN3aXRjaCAoc3RhdHVzKSB7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5DQUNIRUQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oZW50cnkpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucywgaXRlbUNhY2hlKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IGVudHJ5Ll9yZXNvbHZlKCksXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0Ly8gdGhlIHN0YXR1cyBjb3VsZCBoYXZlIGNoYW5nZWQgYWxyZWFkeSwgc28gY2FsbCBnZXRDYWNoZWRFbnRyeVN0YXR1cyBhZ2FpblxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHRoaXMucmVzb2x2ZUNhY2hlZChcblx0XHRcdFx0XHRcdGVudHJ5LFxuXHRcdFx0XHRcdFx0dGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhlbnRyeSwgb3B0aW9ucyksXG5cdFx0XHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRcdFx0aXRlbUNhY2hlLFxuXHRcdFx0XHRcdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0XHRcdFx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuTE9DQUw6XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVMb2NhbChlbnRyeSwgaXRlbUNhY2hlKTtcblx0XHRcdGRlZmF1bHQ6IC8vIGNhc2UgRU5UUllfU1RBVFVTLlJFU09MVkU6XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVSZW1vdGUoZW50cnksIGl0ZW1DYWNoZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRDYWNoZWRFbnRyeVN0YXR1cyAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8YW55Pixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zXG5cdCk6IEVOVFJZX1NUQVRVUyB7XG5cdFx0aWYgKCFjb2xsZWN0aW9uRW50cnkuY29sdW1ucy5pc1N1cGVyc2V0T2Yob3B0aW9ucy5jb2x1bW5zKSkge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5FWFBBTkQ7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlBST01JU0VEO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQpIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQgPSBmYWxzZTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xuXHRcdH1cblxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXREZWZlcnJlZEVudHJ5U3RhdHVzPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uRW50cnlPcHRpb25zLFxuXHRcdHF1ZXJ5OiBBcGlRdWVyeSxcblx0XHRkZWZlcnJlZEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZVxuXHQpOiB7ZW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LCBpc0RlZmVycmVkOiBib29sZWFufSB7XG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcblxuXHRcdGlmICghb3B0aW9ucy5kZWZlclJlcXVlc3QpIHtcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xuXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGZhbHNlfTtcblx0XHR9XG5cblx0XHRjb2xsZWN0aW9uRW50cnkgPSBkZWZlcnJlZEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xuXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbCkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4cGFuZFJlcXVlc3RDb2x1bW5zKG9wdGlvbnMuY29sdW1ucyk7XG5cblx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogZmFsc2V9O1xuXHRcdH1cblxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xuXG5cdFx0cmV0dXJuIHtlbnRyeTogZGVmZXJyZWRFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLCBpc0RlZmVycmVkOiB0cnVlfTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0RW50cnlTdGF0dXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMsXG5cdFx0bG9jYWxFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0ZGVmZXJyZWRFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGVcblx0KTogRW50cnlTdGF0dXM8Q29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBxdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcblx0XHRsZXQgY29sbGVjdGlvbkVudHJ5O1xuXHRcdGxldCBpc0RlZmVycmVkO1xuXG5cdFx0aWYgKHRoaXMuaXNMb2NhbChvcHRpb25zKSkge1xuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gbG9jYWxFbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbClcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKX07XG5cblx0XHRcdCh7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZH0gPSB0aGlzLmdldERlZmVycmVkRW50cnlTdGF0dXMoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzXG5cdFx0XHQpKTtcblxuXHRcdFx0aWYgKGlzRGVmZXJyZWQpXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuUFJPTUlTRUR9O1xuXG5cdFx0XHQvLyBuZXcgbG9jYWwgZW50cnkgY3JlYXRlZCwgc2hvdWxkIGJlIGFkZGVkIHRvIGxvY2FsIGNhY2hlIG9ubHlcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuTE9DQUx9O1xuXHRcdH1cblxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XG5cblx0XHQvLyBlbnRyeSBhbHJlYWR5IGV4aXN0cyBpbiBnbG9iYWwgY2FjaGUsIGFkZCB0byBsb2NhbCBjYWNoZVxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlbnRyeTogbG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLFxuXHRcdFx0XHRzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKVxuXHRcdFx0fTtcblxuXHRcdCh7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZH0gPSB0aGlzLmdldERlZmVycmVkRW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIHF1ZXJ5LCBkZWZlcnJlZEVudHJpZXMpKTtcblxuXHRcdGlmIChpc0RlZmVycmVkKVxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRH07XG5cblx0XHQvLyBuZXcgZ2xvYmFsIGVudHJ5IGNyZWF0ZWQsIGFkZCB0byBib3RoIGxvY2FsIGFuZCBnbG9iYWwgY2FjaGVcblx0XHRsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cdFx0dGhpcy5lbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpO1xuXG5cdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5SRVNPTFZFfTtcblx0fVxuXG5cdHJlc29sdmVMb2NhbDxUIGV4dGVuZHMgQ29sbGVjdGlvbkVudHJ5PGFueT4+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IFQsXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxUPiB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnRoZW4oXG5cdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW5TZXQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zLCBmYWxzZSk7XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5kTG9jYWxJdGVtRW50cmllcyhcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRpdGVtQ2FjaGUuZ2V0TG9jYWxCeVF1ZXJ5KGl0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkucXVlcnkpLFxuXHRcdFx0XHRcdGNvbHVtblNldCxcblx0XHRcdFx0XHRpdGVtQ2FjaGVcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdGxvY2FsRW50cmllcyA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoe2luaXRpYWw6IGxvY2FsRW50cmllcywgY29sdW1uczogY29sdW1uU2V0fSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVzb2x2ZVJlbW90ZTxUIGV4dGVuZHMgQ29sbGVjdGlvbkVudHJ5PGFueT4+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IFQsXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxUPiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XG5cblx0XHRsZXQgY29sdW1uU2V0O1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhjb2xsZWN0aW9uRW50cnkpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1ucyxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQsXG5cdFx0XHRcdFx0Y29sdW1uU2V0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdHJlbW90ZUVudHJpZXMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRMb2NhbEl0ZW1FbnRyaWVzKFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGl0ZW1DYWNoZS5nZXRMb2NhbEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXG5cdFx0XHRcdFx0Y29sdW1uU2V0LFxuXHRcdFx0XHRcdGl0ZW1DYWNoZVxuXHRcdFx0XHQpLnRoZW4oXG5cdFx0XHRcdFx0bG9jYWxFbnRyaWVzID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGluaXRpYWw6IHJlbW90ZUVudHJpZXMsXG5cdFx0XHRcdFx0XHRcdFx0bW9kaWZpZWQ6IHJlbW90ZUVudHJpZXMuY29uY2F0KGxvY2FsRW50cmllcyksXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uczogY29sdW1uU2V0XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRpc0xvY2FsIChvcHRpb25zKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZExvY2FsSXRlbUVudHJpZXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+PiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZXhwYW5kTG9jYWxFbnRyaWVzKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtRW50cmllcyxcblx0XHRcdGNvbHVtblNldC5yZXF1ZXN0LFxuXHRcdFx0Y29sdW1uU2V0LnJlc3BvbnNlLFxuXHRcdFx0bG9jYWxJdGVtQ2FjaGVcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBpZGVudGl0eSwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uLyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMvJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25NYXRjaGVyTWF0Y2hlczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gPSB7XG5cdFtpdGVtSWQ6IG51bWJlcl06IHtcblx0XHRpdGVtOiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRpc01hdGNoOiBib29sZWFuIHwgJ21heWJlJ1xuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBHcm91cGVkQ29sbGVjdGlvbk1hdGNoZXJSZXN1bHQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ID0ge1xuXHRmaXR0aW5nOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdG5vdEZpdHRpbmc6IEl0ZW1JZFtdLFxuXHRtYXliZTogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+XG59O1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbk1hdGNoZXI8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IHtcblx0bWFwOiB7XG5cdFx0W2NvbGxlY3Rpb25FbnRyeUlkOiBudW1iZXJdOiB7XG5cdFx0XHRjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPlxuXHRcdFx0bWF0Y2hlczogQ29sbGVjdGlvbk1hdGNoZXJNYXRjaGVzPEl0ZW1UeXBlVHlwZT5cblx0XHR9XG5cdH0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlczogQ29sbGVjdGlvbkNhY2hlW10sXG5cdFx0cHJpdmF0ZSB1cGRhdGVJbml0aWFsOiBib29sZWFuLFxuXHRcdHByaXZhdGUgY2FsbE9uQWRkOiBib29sZWFuLFxuXHRcdHByaXZhdGUgY2FsbE9uQWN0aXZhdGU6IGJvb2xlYW5cblx0KSB7XG5cblx0fVxuXG5cdGV4cGFuZCAoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPik6IHRoaXMge1xuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXG5cdFx0XHRpdGVtRW50cnkucGFyZW50XG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLl9leHBhbmQoXG5cdFx0XHRpdGVtRW50cnksXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPT4gcXVlcnlNYXRjaGVyLm1hdGNoUXVlcnkoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdClcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZXhwYW5kIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG1hdGNoRnVuY3Rpb246IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+KSA9PiBib29sZWFuIHwgJ21heWJlJ1xuXHQpOiB0aGlzIHtcblx0XHRjb25zdCBtYXAgPSB0aGlzLm1hcDtcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uQ2FjaGUgb2YgdGhpcy5jb2xsZWN0aW9uQ2FjaGVzKSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cmllcyA9IGNvbGxlY3Rpb25DYWNoZS5nZXRCeUl0ZW1UeXBlKGl0ZW1FbnRyeS5pdGVtVHlwZSk7XG5cblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKSB7XG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeUlkID0gY29sbGVjdGlvbkVudHJ5LmlkO1xuXHRcdFx0XHRsZXQgbWF0Y2hlcztcblxuXHRcdFx0XHRpZiAobWFwW2NvbGxlY3Rpb25FbnRyeUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdG1hcFtjb2xsZWN0aW9uRW50cnlJZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbkVudHJ5LCBtYXRjaGVzOiB7fX07XG5cblx0XHRcdFx0bWF0Y2hlcyA9IG1hcFtjb2xsZWN0aW9uRW50cnlJZF0ubWF0Y2hlcztcblxuXHRcdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0bWF0Y2hlc1tpdGVtSWRdID0ge2l0ZW06IGl0ZW1FbnRyeSwgaXNNYXRjaDogbWF0Y2hGdW5jdGlvbihjb2xsZWN0aW9uRW50cnkpfTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcyAoKTogQXJyYXk8Q29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblxuXHRcdFx0aWYgKHRoaXMuaGFzRml0dGluZ0l0ZW1zKG1hcEVudHJ5Lm1hdGNoZXMpKVxuXHRcdFx0XHRyZXN1bHQucHVzaChtYXBFbnRyeS5jb2xsZWN0aW9uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YWRkVG9Db2xsZWN0aW9uczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChyZXN1bHRSZXNvdXJjZTogVSk6IFVbJ2l0ZW1zJ107XG5cdGFkZFRvQ29sbGVjdGlvbnMgKHJlc3VsdFJlc291cmNlPzogbnVsbCk6IG51bGw7XG5cdGFkZFRvQ29sbGVjdGlvbnM8VSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAocmVzdWx0UmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPiB8IG51bGwpOiBVWydpdGVtcyddIHwgbnVsbDtcblx0YWRkVG9Db2xsZWN0aW9uczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4gfCBudWxsID0gbnVsbCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRsZXQgcmVzdWx0OiBVWydpdGVtcyddIHwgdW5kZWZpbmVkO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XG5cdFx0XHRjb25zdCBmaXR0aW5nSXRlbUVudHJpZXMgPSBncm91cGVkSXRlbUVudHJpZXMuZml0dGluZztcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSkge1xuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdHJlc3VsdFJlc291cmNlLFxuXHRcdFx0XHRcdHRoaXMudXBkYXRlSW5pdGlhbCxcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZCxcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFjdGl2YXRlXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVJbml0aWFsLFxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkLFxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWN0aXZhdGVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudXBkYXRlSW5pdGlhbCAmJiBncm91cGVkSXRlbUVudHJpZXMubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCA/IFtdIDogbnVsbDtcblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9uczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChyZXN1bHRSZXNvdXJjZTogVSk6IFVbJ2l0ZW1zJ107XG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAocmVzdWx0UmVzb3VyY2U/OiBudWxsKTogbnVsbDtcblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zPFUgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKHJlc3VsdFJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4gfCBudWxsKTogVVsnaXRlbXMnXSB8IG51bGw7XG5cdHJlbW92ZUZyb21Db2xsZWN0aW9uczxVIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4gfCBudWxsID0gbnVsbCk6IFVbJ2l0ZW1zJ10gfCBudWxsIHtcblx0XHRsZXQgcmVzdWx0OiBBcnJheTxJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gfCBudWxsID0gbnVsbDtcblxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xuXHRcdFx0Y29uc3QgZml0dGluZ0l0ZW1JZHMgPSB0aGlzLmdyb3VwSXRlbUlkcyhtYXBFbnRyeS5tYXRjaGVzKS5maXR0aW5nO1xuXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgPT09IG51bGwgfHwgY29sbGVjdGlvbkVudHJ5ICE9PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCByZXN1bHRSZXNvdXJjZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XG5cblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhncm91cGVkSXRlbUVudHJpZXMubm90Rml0dGluZywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0Ly8gZG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIGluaXRpYWxcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhncm91cGVkSXRlbUVudHJpZXMuZml0dGluZywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcblxuXHRcdFx0aWYgKHRoaXMudXBkYXRlSW5pdGlhbCAmJiBncm91cGVkSXRlbUVudHJpZXMubWF5YmUubGVuZ3RoID4gMClcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBncm91cEl0ZW1FbnRyaWVzIChcblx0XHRtYXRjaGVzOiBDb2xsZWN0aW9uTWF0Y2hlck1hdGNoZXM8SXRlbVR5cGVUeXBlPlxuXHQpOiBHcm91cGVkQ29sbGVjdGlvbk1hdGNoZXJSZXN1bHQ8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgZml0dGluZzogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cdFx0Y29uc3Qgbm90Rml0dGluZzogSXRlbUlkW10gPSBbXTtcblx0XHRjb25zdCBtYXliZTogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IG1hdGNoLml0ZW07XG5cdFx0XHRjb25zdCBpc01hdGNoID0gbWF0Y2guaXNNYXRjaDtcblxuXHRcdFx0aWYgKGlzTWF0Y2ggPT09IHRydWUpXG5cdFx0XHRcdGZpdHRpbmcucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0ZWxzZSBpZiAoaXNNYXRjaCA9PT0gZmFsc2UpXG5cdFx0XHRcdG5vdEZpdHRpbmcucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0bWF5YmUucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7Zml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZywgbWF5YmU6IG1heWJlfTtcblx0fVxuXG5cdHByaXZhdGUgZ3JvdXBJdGVtSWRzIChtYXRjaGVzOiBDb2xsZWN0aW9uTWF0Y2hlck1hdGNoZXM8SXRlbVR5cGVUeXBlPikge1xuXHRcdC8vIGFsc28gaW5jbHVkZXMgJ21heWJlJztcblx0XHRjb25zdCBmaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xuXHRcdGNvbnN0IG5vdEZpdHRpbmc6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcblxuXHRcdFx0KG1hdGNoLmlzTWF0Y2ggPT09IGZhbHNlID8gbm90Rml0dGluZyA6IGZpdHRpbmcpLnB1c2gobWF0Y2guaXRlbS5pdGVtSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7Zml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZ307XG5cdH1cblxuXHRwcml2YXRlIGhhc0ZpdHRpbmdJdGVtcyAobWF0Y2hlczogQ29sbGVjdGlvbk1hdGNoZXJNYXRjaGVzPEl0ZW1UeXBlVHlwZT4pIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XG5cdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdLmlzTWF0Y2ggPT09IHRydWUpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucywgQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlIHtcblxuXHRwcm9jZXNzT3B0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPlxuXHQpOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKTtcblx0fVxuXG5cdGdldElkQXJyYXkgKGl0ZW1SZXNvdXJjZXM6IEFycmF5PEl0ZW1SZXNvdXJjZTxhbnk+Pik6IEl0ZW1JZFtdIHtcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW4sIEFwaVJlcXVlc3RDb2x1bW5zLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW4sIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uQ2FjaGUge1xuXHRjYWNoZTogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblx0YWxsQ29sdW1uczoge1tpdGVtVHlwZTogc3RyaW5nXTogYm9vbGVhbn0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0c2V0Q29sdW1uIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uOiBSZXNwb25zZUNvbHVtbik6IFJlc3BvbnNlQ29sdW1uIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0XHRpZiAoY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRjYWNoZVtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGNvbnN0IGVudHJ5ID0gY2FjaGVbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IGNvbHVtbklkID0gcmVzcG9uc2VDb2x1bW4uaWQ7XG5cblx0XHRpZiAoZW50cnlbY29sdW1uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRlbnRyeVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdHJldHVybiBlbnRyeVtjb2x1bW5JZF07XG5cdH1cblxuXHRzZXRDb2x1bW5zIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogUmVzcG9uc2VDb2x1bW5NYXAge1xuXHRcdGNvbnN0IHJlc3VsdDogUmVzcG9uc2VDb2x1bW5NYXAgID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHJlc3BvbnNlVHlwZSBpbiByZXNwb25zZUNvbHVtbnMpIHtcblx0XHRcdGNvbnN0IGNvbHVtbnMgPSByZXNwb25zZUNvbHVtbnNbcmVzcG9uc2VUeXBlXTtcblxuXHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV0gPSB7fTtcblxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxuXHRcdFx0XHRyZXN1bHRbcmVzcG9uc2VUeXBlXVtjb2x1bW5JZF0gPSB0aGlzLnNldENvbHVtbihyZXNwb25zZVR5cGUsIGNvbHVtbnNbY29sdW1uSWRdKTtcblx0XHR9XG5cblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpXG5cdFx0XHR0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID0gdHJ1ZTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRyZXRyaWV2ZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uc1xuXHQpOiB7Y2FjaGVkOiBSZXNwb25zZUNvbHVtbk1hcCwgbWlzc2luZzogQXBpUmVxdWVzdENvbHVtbnN9IHtcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcblx0XHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHRoaXMuZ2V0Q29sdW1ucyhpdGVtVHlwZSksIG1pc3Npbmc6IFtdfTtcblxuXHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHt9LCBtaXNzaW5nOiB0cnVlfTtcblx0XHR9XG5cblx0XHRjb25zdCByZXNwb25zZUFjY3VtdWxhdG9yID0ge307XG5cdFx0Y29uc3QgcmVxdWVzdEFjY3VtdWxhdG9yOiBSZXNwb25zZUNvbHVtbltdID0gW107XG5cblx0XHR0aGlzLnJldHJpZXZlQ29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cblx0XHRyZXR1cm4ge2NhY2hlZDogcmVzcG9uc2VBY2N1bXVsYXRvciwgbWlzc2luZzogcmVxdWVzdEFjY3VtdWxhdG9yfTtcblx0fVxuXG5cdGNvbnRhaW5zQWxsIChpdGVtVHlwZTogSXRlbVR5cGUpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9PT0gdHJ1ZTtcblx0fVxuXG5cdGdldENvbHVtbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IFJlc3BvbnNlQ29sdW1uTWFwIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0XHRyZXR1cm4ge1tpdGVtVHlwZV06IGNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkID8gW10gOiBjYWNoZVtpdGVtVHlwZV19O1xuXHR9XG5cblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbnMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdLFxuXHRcdHJlcXVlc3RBY2N1bXVsYXRvcjogQXBpUmVxdWVzdENvbHVtbltdLFxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IHZvaWQge1xuXHRcdC8vIGFsd2F5cyByZXRyaWV2ZSB0aGUgaWQgY29sdW1uXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgJ2lkJywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucylcblx0XHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW4sIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cdH1cblxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1uIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbixcblx0XHRyZXF1ZXN0QWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uW10sXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcjogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5VdGlsLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uKGl0ZW1UeXBlLCBjb2x1bW4uaWQpO1xuXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKHJlcXVlc3RDb2x1bW4pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV0gPSB7fTtcblxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdW2NvbHVtbi5pZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y29uc3QgbWlzc2luZ0Rlcml2ZWQ6IFJlc3BvbnNlQ29sdW1uW10gPSBbXTtcblxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW5zKHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLCBjb2x1bW4uY2hpbGRyZW4sIG1pc3NpbmdEZXJpdmVkLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblxuXHRcdGlmIChtaXNzaW5nRGVyaXZlZC5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHRyZXF1ZXN0QWNjdW11bGF0b3IucHVzaCh7W2NvbHVtbi5pZF06IG1pc3NpbmdEZXJpdmVkfSk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbHVtbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5JZDogc3RyaW5nKTogUmVzcG9uc2VDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZVtpdGVtVHlwZV07XG5cblx0XHRpZiAoY2FjaGUgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdHJldHVybiBjYWNoZVtjb2x1bW5JZF07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkluZm8sIENvbHVtblNldCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbiwgQXBpUmVxdWVzdENvbHVtbnMsIENvbHVtbkV4cGFuc2lvblJlc3VsdCwgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uTWFwLCBSb290Q29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5IH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkV4cGFuc2lvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4ge1xuXHRleHBhbnNpb25NYXA6IHtbY29sdW1uU2V0SWQ6IHN0cmluZ106IENvbHVtbkV4cGFuc2lvblJlc3VsdDxJdGVtVHlwZVR5cGU+IHwgbnVsbH0gPSB7fTtcblx0ZXhwYW5zaW9uTWFwU2l6ZTogbnVtYmVyID0gMDtcblx0cmVxdWVzdENvbHVtbnNUcnVlOiBib29sZWFuO1xuXHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0cHVibGljIHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KSB7XG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKSB7XG5cdFx0XHQvLyByZXF1ZXN0Q29sdW1ucyBzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5LCB3aGVuIGl0IGlzIHRydWUgZGVyaXZlZCBjb2x1bW4gaW5mb3JtYXRpb24gd2lsbCBiZSBsb3N0XG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRydWU7XG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zID0gW107XG5cblx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSlcblx0XHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucy5wdXNoKGNvbHVtbklkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSBmYWxzZTtcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMgPSByZXF1ZXN0Q29sdW1ucztcblx0XHR9XG5cdH1cblxuXHRydW4gKGNvbHVtblNldDogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4pOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQ8SXRlbVR5cGVUeXBlPiB8IG51bGwge1xuXHRcdGNvbnN0IGV4cGFuc2lvbk1hcCA9IHRoaXMuZXhwYW5zaW9uTWFwO1xuXHRcdGNvbnN0IGNvbHVtblNldElkID0gY29sdW1uU2V0LmlkO1xuXG5cdFx0aWYgKGV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBleHBhbnNpb25NYXBbY29sdW1uU2V0SWRdO1xuXG5cdFx0dGhpcy5leHBhbnNpb25NYXBTaXplKys7XG5cblx0XHRyZXR1cm4gZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSA9IGNvbHVtblNldC5pc1N1cGVyc2V0T2YodGhpcy5yZXF1ZXN0Q29sdW1ucykgP1xuXHRcdFx0bnVsbCA6XG5cdFx0XHRjb2x1bW5TZXQuZXhwYW5kKHRoaXMucmVxdWVzdENvbHVtbnMsIHRoaXMucmVxdWVzdENvbHVtbnNUcnVlLCB0aGlzLnJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cblxuXHRhZ2dyZWdhdGVSb290Q29sdW1ucyAoKTogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0Y29uc3QgZXhwYW5zaW9uTWFwID0gdGhpcy5leHBhbnNpb25NYXA7XG5cblx0XHRpZiAodGhpcy5leHBhbnNpb25NYXBTaXplID09PSAxKSB7XG5cdFx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBleHBhbnNpb25NYXBbZ2V0Rmlyc3RQcm9wZXJ0eShleHBhbnNpb25NYXApIGFzIHN0cmluZ107XG5cblx0XHRcdHJldHVybiBleHBhbnNpb25SZXN1bHQgIT09IG51bGwgPyBleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290IDogW107XG5cdFx0fVxuXG5cdFx0Y29uc3Qgcm9vdENvbHVtbk1hcDogUm9vdENvbHVtbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5TZXRJZCBpbiBleHBhbnNpb25NYXApIHtcblx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IGV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF07XG5cblx0XHRcdGlmIChjb2x1bW5FeHBhbnNpb24gPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmV4cGFuZFJvb3RDb2x1bW5NYXAoY29sdW1uRXhwYW5zaW9uLmRpZmZlcmVuY2Uucm9vdCwgcm9vdENvbHVtbk1hcCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkuY29uc3RydWN0RnJvbVJvb3RNYXAocm9vdENvbHVtbk1hcCk7XG5cdH1cblxuXHRwcml2YXRlIGV4cGFuZFJvb3RDb2x1bW5NYXAgKGNvbHVtbnM6IEFycmF5PENvbHVtbkluZm88SXRlbVR5cGVUeXBlPj4sIGRlc3RpbmF0aW9uOiBSb290Q29sdW1uTWFwKSB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XG5cblx0XHRcdGlmIChkZXN0aW5hdGlvbltjb2x1bW5JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSWRdID0ge2FwaUNvbHVtbjogY29sdW1uLmFwaUNvbHVtbiwgY2hpbGRyZW46IHt9fTtcblxuXHRcdFx0dGhpcy5leHBhbmRSb290Q29sdW1uTWFwKGNvbHVtbi5jaGlsZHJlbiwgZGVzdGluYXRpb25bY29sdW1uSWRdLmNoaWxkcmVuKTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkNhY2hlLCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdENvbHVtbnMsXG5cdEl0ZW1UeXBlLFxuXHRQcm9taXNlSW50ZXJmYWNlLFxuXHRSZXNwb25zZUNvbHVtbixcblx0UmVzcG9uc2VDb2x1bW5NYXBcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSGFuZGxlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY2FjaGU6IENvbHVtbkNhY2hlLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdHNldENvbHVtbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBSZXNwb25zZUNvbHVtbiB7XG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1uKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbik7XG5cdH1cblxuXHRzZXRDb2x1bW5zIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogUmVzcG9uc2VDb2x1bW5NYXAge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHR9XG5cblx0ZmV0Y2hJdGVtVHlwZVRyYW5zbGF0aW9ucyAoaXRlbVR5cGVzOiBJdGVtVHlwZVtdKTogUHJvbWlzZUludGVyZmFjZTx7W2l0ZW1UeXBlOiBzdHJpbmddOiBzdHJpbmd9PiB7XG5cdFx0Y29uc3QgcHJvbWlzZXM6IHtbaXRlbVR5cGU6IHN0cmluZ106IFByb21pc2VJbnRlcmZhY2U8UmVzcG9uc2VDb2x1bW5NYXA+fSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBvZiBpdGVtVHlwZXMpXG5cdFx0XHRwcm9taXNlc1tpdGVtVHlwZV0gPSB0aGlzLmZldGNoKGl0ZW1UeXBlLCBbJ2lkJ10pO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQ6IHtbaXRlbVR5cGU6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gcmVzcG9uc2UpXG5cdFx0XHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gcmVzcG9uc2VbaXRlbVR5cGVdW2l0ZW1UeXBlXS5pZC5uYW1lO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdCAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHBhcmFtcyA9IHtmaWx0ZXI6IGZhbHNlfVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFJlc3BvbnNlQ29sdW1uTWFwPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwge1tpdGVtVHlwZV06IGNvbHVtbnN9LCBwYXJhbXMpLnRoZW4oXG5cdFx0XHRjb2x1bW5SZXNvdXJjZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoXG5cdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0Y29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsIHBhcmFtcz86IGFueSk6IFByb21pc2VJbnRlcmZhY2U8UmVzcG9uc2VDb2x1bW5NYXA+IHtcblx0XHRjb25zdCBjb2x1bW5SZXNvdXJjZSA9IHRoaXMuY2FjaGUucmV0cmlldmUoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKTtcblxuXHRcdGlmIChjb2x1bW5SZXNvdXJjZS5taXNzaW5nICE9PSB0cnVlICYmIGNvbHVtblJlc291cmNlLm1pc3NpbmcubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjb2x1bW5SZXNvdXJjZS5jYWNoZWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdChpdGVtVHlwZSwgY29sdW1uUmVzb3VyY2UubWlzc2luZywgcGFyYW1zKS50aGVuKFxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuY2FjaGVkXG5cdFx0XHRcdCkubWVyZ2VkO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaEFsbCAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogUHJvbWlzZUludGVyZmFjZTxSZXNwb25zZUNvbHVtbk1hcD4ge1xuXHRcdGlmICh0aGlzLmNhY2hlLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5jYWNoZS5nZXRDb2x1bW5zKGl0ZW1UeXBlKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KGl0ZW1UeXBlLCB0cnVlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ09MVU1OX1NFUEVSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlID0gYW55PiB7XG5cdGlkOiBzdHJpbmc7XG5cdGxldmVsOiBudW1iZXI7XG5cdHBhdGg6IHN0cmluZztcblx0dGFpbFBhdGg6IHN0cmluZztcblx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSB8IG51bGwgPSBudWxsO1xuXHRjaGlsZHJlbjogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXHRpc0xlYWY6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRyZWFkb25seSBhcGlDb2x1bW46IFJlc3BvbnNlQ29sdW1uLFxuXHRcdHJlYWRvbmx5IHBhcmVudDogQ29sdW1uSW5mbzxJdGVtVHlwZT4gfCBudWxsID0gbnVsbFxuXHQpIHtcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcblxuXHRcdHRoaXMuaWQgPSBjb2x1bW5JZDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpIHtcblx0XHRcdHRoaXMubGV2ZWwgPSAwO1xuXHRcdFx0dGhpcy5wYXRoID0gY29sdW1uSWQ7XG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gJyc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubGV2ZWwgPSBwYXJlbnQubGV2ZWwgKyAxO1xuXHRcdFx0dGhpcy5wYXRoID0gcGFyZW50LnBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gcGFyZW50LmxldmVsID09PSAwID9cblx0XHRcdFx0Y29sdW1uSWQgOlxuXHRcdFx0XHRwYXJlbnQudGFpbFBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XG5cdFx0fVxuXHR9XG5cblx0c2V0Q2hpbGRyZW4gKGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsIGNoaWxkcmVuOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+KTogdGhpcyB7XG5cdFx0dGhpcy5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xuXHRcdHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcblx0XHR0aGlzLmlzTGVhZiA9IGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkhhbmRsZXIsIENvbHVtbkluZm8sIENvbHVtblV0aWwsIFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnksIENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbiwgQXBpUmVxdWVzdENvbHVtbnMsIENvbHVtbkV4cGFuc2lvblJlc3VsdCwgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uTWFwLCBSb290Q29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBlbXB0eU9iamVjdCA9IHt9O1xubGV0IGN1cnJlbnRJZCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUgPSBhbnk+IHtcblx0aWQgPSArK2N1cnJlbnRJZDtcblxuXHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW47XG5cdHJlc3BvbnNlOiBSZXNwb25zZUNvbHVtbk1hcCA9IGVtcHR5T2JqZWN0O1xuXG5cdGxpbms6IENvbHVtbkluZm88SXRlbVR5cGVUeXBlPiB8IG51bGwgPSBudWxsO1xuXHRtYWluOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cdGRlcml2ZWQ6IEFycmF5PENvbHVtbkluZm88SXRlbVR5cGVUeXBlPj4gPSBbXTtcblx0cm9vdDogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXHRsZWFmOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cdGZvcm1hdHRlZDoge21haW46IEFycmF5PENvbHVtbkluZm88SXRlbVR5cGVUeXBlPj4sIGRlcml2ZWQ6IEFycmF5PENvbHVtbkluZm88SXRlbVR5cGVUeXBlPj59ID0ge21haW46IFtdLCBkZXJpdmVkOiBbXX07XG5cdGZpbHRlcmVkOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cdGN1c3RvbTogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXHRzZWFyY2hhYmxlOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cdGl0ZW06IEFycmF5PENvbHVtbkluZm88SXRlbVR5cGVUeXBlPj4gPSBbXTtcblx0bm90SXRlbTogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRwdWJsaWMgcmVxdWVzdDogQXBpUmVxdWVzdENvbHVtbnNcblx0KSB7XG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0aGlzLnJlcXVlc3QgPT09IHRydWU7XG5cdH1cblxuXHR0b0pTT04gKCkge1xuXHRcdGNvbnN0IHBhcnNlQ29sdW1ucyA9IChjb2x1bW5zOiBBcnJheTxDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4+KSA9PiBjb2x1bW5zLm1hcChjID0+IGMuaWQpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG1haW46IHBhcnNlQ29sdW1ucyh0aGlzLm1haW4pLFxuXHRcdFx0ZGVyaXZlZDogcGFyc2VDb2x1bW5zKHRoaXMuZGVyaXZlZClcblx0XHR9O1xuXHR9XG5cblx0cmVzb2x2ZSAocmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCwgZW5hYmxlQ2FjaGluZyA9IHRydWUsIGluY2x1ZGVJZENvbHVtbiA9IHRydWUpOiB0aGlzIHtcblx0XHRpZiAodGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUpXG5cdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZUNvbHVtbnMocmVzcG9uc2VDb2x1bW5zLCBlbmFibGVDYWNoaW5nKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLnByb2Nlc3NSZXF1ZXN0Q29sdW1ucyhyZXNwb25zZUNvbHVtbnMsIGVuYWJsZUNhY2hpbmcsIGluY2x1ZGVJZENvbHVtbik7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGV4cGFuZFJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IHZvaWQge1xuXHRcdGNvbnN0IG1lcmdlZFJlcXVlc3RDb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5yZXF1ZXN0LCBjb2x1bW5zKS5tZXJnZWQ7XG5cblx0XHR0aGlzLnJlcXVlc3QgPSBtZXJnZWRSZXF1ZXN0Q29sdW1ucztcblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IG1lcmdlZFJlcXVlc3RDb2x1bW5zID09PSB0cnVlO1xuXHR9XG5cblx0aXNTdXBlcnNldE9mIChjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IGJvb2xlYW4ge1xuXHRcdGlmIChjb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0cmV0dXJuIHRoaXMucmVxdWVzdENvbHVtbnNUcnVlO1xuXG5cdFx0Y29uc3QgY29sdW1uVXRpbCA9IHRoaXMuY29sdW1uVXRpbDtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMucmVxdWVzdDtcblxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSlcblx0XHRcdHJldHVybiAhY29sdW1uVXRpbC5jb250YWluc0Rlcml2ZWRDb2x1bW5zKGNvbHVtbnMpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0aWYgKCFjb2x1bW5VdGlsLmNvbnRhaW5zQ29sdW1uKGNvbHVtbiwgcmVxdWVzdENvbHVtbnMpKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCByZXF1ZXN0Q29sdW1ucyBlcXVhbHMgJ3RydWUnXG5cdHByaXZhdGUgcHJvY2Vzc1Jlc3BvbnNlQ29sdW1ucyAocmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCwgZW5hYmxlQ2FjaGluZzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcblxuXHRcdHRoaXMucmVxdWVzdCA9IFtdO1xuXHRcdHRoaXMucmVzcG9uc2UgPSBlbmFibGVDYWNoaW5nID9cblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5zZXRDb2x1bW5zKHRoaXMuaXRlbVR5cGUsIHRydWUsIHJlc3BvbnNlQ29sdW1ucykgOlxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdKSB7XG5cdFx0XHR0aGlzLmdyb3VwQ29sdW1uSW5mbyh0aGlzLmNvbHVtbkluZm9GYWN0b3J5LmNvbnN0cnVjdChyZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXSwgbnVsbCkpO1xuXHRcdFx0dGhpcy5yZXF1ZXN0LnB1c2goY29sdW1uSWQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHJlcXVlc3Rjb2x1bW5zIGRvZXMgKm5vdCogZXF1YWwgJ3RydWUnXG5cdHByaXZhdGUgcHJvY2Vzc1JlcXVlc3RDb2x1bW5zIChcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLFxuXHRcdGVuYWJsZUNhY2hpbmc6IGJvb2xlYW4sXG5cdFx0aW5jbHVkZUlkQ29sdW1uOiBib29sZWFuXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcblx0XHRjb25zdCByb290Q29sdW1uTWFwOiBSb290Q29sdW1uTWFwID0ge307XG5cblx0XHR0aGlzLmNyZWF0ZVJvb3RDb2x1bW5NYXAoXG5cdFx0XHR0aGlzLnJlcXVlc3QgYXMgQXBpUmVxdWVzdENvbHVtbltdLCAvLyB3ZSBjYW4gYXNzdW1lIHJlcXVlc3RDb2x1bW5zIGlzIGFuIGFycmF5IGhlcmVcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxuXHRcdFx0cm9vdENvbHVtbk1hcCxcblx0XHRcdGVuYWJsZUNhY2hpbmdcblx0XHQpO1xuXG5cdFx0aWYgKGluY2x1ZGVJZENvbHVtbilcblx0XHRcdHRoaXMuY3JlYXRlUm9vdENvbHVtbk1hcChbJ2lkJ10sIGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbnMsIHJvb3RDb2x1bW5NYXAsIGVuYWJsZUNhY2hpbmcpO1xuXG5cdFx0dGhpcy5yZXNwb25zZSA9IHt9O1xuXG5cdFx0dGhpcy5wcm9jZXNzQ29sdW1uSW5mbyh0aGlzLmNvbHVtbkluZm9GYWN0b3J5LmNvbnN0cnVjdEZyb21Sb290TWFwKHJvb3RDb2x1bW5NYXApLCBpdGVtVHlwZSk7XG5cdH1cblxuXHRwcml2YXRlIHByb2Nlc3NDb2x1bW5JbmZvIChjb2x1bW5JbmZvT2JqZWN0czogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+PiwgaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcblxuXHRcdGlmIChyZXNwb25zZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3BvbnNlW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JbmZvIG9mIGNvbHVtbkluZm9PYmplY3RzKSB7XG5cdFx0XHRyZXNwb25zZVtpdGVtVHlwZV1bY29sdW1uSW5mby5pZF0gPSBjb2x1bW5JbmZvLmFwaUNvbHVtbjtcblx0XHRcdHRoaXMuZ3JvdXBDb2x1bW5JbmZvKGNvbHVtbkluZm8pO1xuXG5cdFx0XHRpZiAoIWNvbHVtbkluZm8uaXNMZWFmKVxuXHRcdFx0XHR0aGlzLnByb2Nlc3NDb2x1bW5JbmZvKGNvbHVtbkluZm8uY2hpbGRyZW4sIGNvbHVtbkluZm8uaXRlbVR5cGUhKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVJvb3RDb2x1bW5NYXAgKFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLFxuXHRcdHJvb3RDb2x1bW5NYXA6IFJvb3RDb2x1bW5NYXAsXG5cdFx0ZW5hYmxlQ2FjaGluZzogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpIHtcblx0XHRcdGNvbnN0IHtpZDogY29sdW1uSWQsIGNoaWxkcmVufSA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cblx0XHRcdGxldCByZXNwb25zZUNvbHVtbjtcblxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXTtcblxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdObyBhcGkgY29sdW1uIGZvciByZXF1ZXN0IGNvbHVtbicsIGNvbHVtbklkLCAnZm9yIGl0ZW1UeXBlJywgaXRlbVR5cGUpO1xuXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZW5hYmxlQ2FjaGluZylcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW4gPSB0aGlzLmNvbHVtbkhhbmRsZXIuc2V0Q29sdW1uKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbik7XG5cblx0XHRcdGlmIChyb290Q29sdW1uTWFwW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyb290Q29sdW1uTWFwW2NvbHVtbklkXSA9IHthcGlDb2x1bW46IHJlc3BvbnNlQ29sdW1uLCBjaGlsZHJlbjoge319O1xuXG5cdFx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5jcmVhdGVSb290Q29sdW1uTWFwKFxuXHRcdFx0XHRjaGlsZHJlbixcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsXG5cdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0cm9vdENvbHVtbk1hcFtjb2x1bW5JZF0uY2hpbGRyZW4sXG5cdFx0XHRcdGVuYWJsZUNhY2hpbmdcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBncm91cENvbHVtbkluZm8gKGNvbHVtbkluZm86IENvbHVtbkluZm88SXRlbVR5cGVUeXBlPik6IHZvaWQge1xuXHRcdGNvbnN0IGNvbHVtblV0aWwgPSB0aGlzLmNvbHVtblV0aWw7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSBjb2x1bW5JbmZvLmFwaUNvbHVtbjtcblx0XHRjb25zdCBpc0Rlcml2ZWQgPSBjb2x1bW5JbmZvLnBhcmVudCAhPT0gbnVsbDtcblxuXHRcdGlmIChpc0Rlcml2ZWQpXG5cdFx0XHR0aGlzLmRlcml2ZWQucHVzaChjb2x1bW5JbmZvKTtcblx0XHRlbHNlIHtcblx0XHRcdHRoaXMubWFpbi5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW4udHlwZSA9PT0gJ2xpbmsnKVxuXHRcdFx0XHR0aGlzLmxpbmsgPSBjb2x1bW5JbmZvO1xuXG5cdFx0XHQvLyB3ZSBjb3VsZCBwb3NzaWJseSBhZGQgZGVyaXZlZCBjb2x1bW5zIHRvICdub3RJdGVtJ1xuXHRcdFx0dGhpc1tjb2x1bW5VdGlsLmlzSXRlbUNvbHVtbihyZXNwb25zZUNvbHVtbikgPyAnaXRlbScgOiAnbm90SXRlbSddLnB1c2goY29sdW1uSW5mbyk7XG5cblx0XHRcdGlmICghY29sdW1uSW5mby5pc0xlYWYpXG5cdFx0XHRcdHRoaXMucm9vdC5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRm9ybWF0dGVkQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuZm9ybWF0dGVkW2lzRGVyaXZlZCA/ICdkZXJpdmVkJyA6ICdtYWluJ10ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRmlsdGVyZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5maWx0ZXJlZC5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNTZWFyY2hhYmxlQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcblx0XHRcdHRoaXMuc2VhcmNoYWJsZS5wdXNoKGNvbHVtbkluZm8pO1xuXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNDdXN0b21Db2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxuXHRcdFx0dGhpcy5jdXN0b20ucHVzaChjb2x1bW5JbmZvKTtcblxuXHRcdGlmIChjb2x1bW5JbmZvLmlzTGVhZilcblx0XHRcdHRoaXMubGVhZi5wdXNoKGNvbHVtbkluZm8pO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRNZXJnZWRDb2x1bW5TZXQgKFxuXHRcdG1lcmdlZFJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1uTWVyZ2VSZXN1bHQsXG5cdFx0bWVyZ2VkUmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCxcblx0XHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW5cblx0KTogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4ge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3Q8SXRlbVR5cGVUeXBlPihcblx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRtZXJnZWRSZXF1ZXN0Q29sdW1ucy5tZXJnZWQsXG5cdFx0XHRtZXJnZWRSZXNwb25zZUNvbHVtbnNcblx0XHQpO1xuXG5cdFx0cmVzdWx0LnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRoaXMucmVxdWVzdENvbHVtbnNUcnVlIHx8IHJlcXVlc3RDb2x1bW5zVHJ1ZTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBSZXF1ZXN0Q29sdW1uTWVyZ2VSZXN1bHQge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLnJlcXVlc3QsIHJlcXVlc3RDb2x1bW5zKTtcblx0fVxuXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5zIChyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwKTogUmVzcG9uc2VDb2x1bW5NYXAge1xuXHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnModGhpcy5yZXNwb25zZSwgcmVzcG9uc2VDb2x1bW5zKS5tZXJnZWQ7XG5cdH1cblxuXHRtZXJnZSAoY29sdW1uU2V0OiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPik6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNZXJnZWRDb2x1bW5TZXQoXG5cdFx0XHR0aGlzLm1lcmdlUmVxdWVzdENvbHVtbnMoY29sdW1uU2V0LnJlcXVlc3QpLFxuXHRcdFx0dGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1ucyhjb2x1bW5TZXQucmVzcG9uc2UpLFxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZVxuXHRcdCk7XG5cdH1cblxuXHRleHBhbmQgKFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW4sXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQ8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgbWVyZ2VkUmVxdWVzdENvbHVtbnMgPSB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbnMocmVxdWVzdENvbHVtbnMpO1xuXHRcdGNvbnN0IG1lcmdlZFJlc3BvbnNlQ29sdW1ucyA9IHRoaXMubWVyZ2VSZXNwb25zZUNvbHVtbnMocmVzcG9uc2VDb2x1bW5zKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRtZXJnZWQ6IHRoaXMuZ2V0TWVyZ2VkQ29sdW1uU2V0KG1lcmdlZFJlcXVlc3RDb2x1bW5zLCBtZXJnZWRSZXNwb25zZUNvbHVtbnMsIHJlcXVlc3RDb2x1bW5zVHJ1ZSksXG5cdFx0XHRkaWZmZXJlbmNlOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0PEl0ZW1UeXBlVHlwZT4oXG5cdFx0XHRcdHRoaXMuaXRlbVR5cGUsXG5cdFx0XHRcdG1lcmdlZFJlcXVlc3RDb2x1bW5zLmRpZmZlcmVuY2UsXG5cdFx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1ucywgLy8gd2UgbmVlZCB0byBiZSBhYmxlIHRvIGxvb2sgdXAgdGhlIHBhcmVudCBvZiBkZXJpdmVkIGNvbHVtbnNcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpXG5cdFx0fTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uU2V0IH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucywgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TdWJzZXRDYWNoZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4ge1xuXHRwcml2YXRlIGNhY2hlOiB7W2NvbHVtblNldElkOiBudW1iZXJdOiBib29sZWFufSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgcmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zXG5cdCkge1xuXG5cdH1cblxuXHRydW4gKGNvbHVtblNldDogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4pOiBib29sZWFuIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cdFx0Y29uc3QgY29sdW1uU2V0SWQgPSBjb2x1bW5TZXQuaWQ7XG5cblx0XHRpZiAoY2FjaGVbY29sdW1uU2V0SWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gY2FjaGVbY29sdW1uU2V0SWRdO1xuXG5cdFx0cmV0dXJuIGNhY2hlW2NvbHVtblNldElkXSA9IGNvbHVtblNldC5pc1N1cGVyc2V0T2YodGhpcy5yZXF1ZXN0Q29sdW1ucyk7XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SLCBSRU5ERVJfQVNfU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW4sIEFwaVJlcXVlc3RDb2x1bW5zLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW4sIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBleHRlbmQsIGlzRGVmaW5lZCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdDxcblx0VCBleHRlbmRzIEFwaVJlcXVlc3RDb2x1bW5zID0gQXBpUmVxdWVzdENvbHVtbnMsXG5cdFUgZXh0ZW5kcyBBcGlSZXF1ZXN0Q29sdW1ucyA9IEFwaVJlcXVlc3RDb2x1bW5zXG4+ID0ge21lcmdlZDogVCwgZGlmZmVyZW5jZTogVX07XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5VdGlsIHtcblx0Y29uc3RydWN0b3IgKCkge1xuXHR9XG5cblx0Z2V0Q29sdW1uUGF0aCAoY29sdW1uczogUmVzcG9uc2VDb2x1bW5bXSwgcmVuZGVyQXM6IG51bGwgfCBzdHJpbmcpIHtcblx0XHRsZXQgc2VwYXJhdG9yID0gJyc7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuXHRcdFx0cmVzdWx0ICs9IHNlcGFyYXRvciArIGNvbHVtbi5pZDtcblx0XHRcdHNlcGFyYXRvciA9IENPTFVNTl9TRVBFUkFUT1I7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbmRlckFzICE9PSBudWxsKVxuXHRcdFx0cmVzdWx0ICs9IFJFTkRFUl9BU19TRVBFUkFUT1IgKyByZW5kZXJBcztcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRnZXREYXRlRm9ybWF0T3B0aW9ucyAoY29sdW1uVHlwZT86ICdkYXRldGltZScpIHtcblx0XHRjb25zdCBub3cgPSBtb21lbnQoKTtcblxuXHRcdGNvbnN0IGZvcm1hdHMgPSB7XG5cdFx0XHQnSi1NLVknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZJyksXG5cdFx0XHQnSi1NJzogbm93LmZvcm1hdCgnREQtTU0nKSxcblx0XHRcdCdqK0YrWSc6IG5vdy5mb3JtYXQoJ0QgTU1NIFlZWVknKSxcblx0XHRcdCdEK2orRitZJzogbm93LmZvcm1hdCgnZGRkZCBEIE1NTSBZWVlZJyksXG5cdFx0XHQnRic6IG5vdy5mb3JtYXQoJ01NTScpLFxuXHRcdFx0J2YnOiBub3cuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHQnRCc6IG5vdy5mb3JtYXQoJ2RkZGQnKSxcblx0XHRcdCdkJzogbm93LmZvcm1hdCgnZGRkJylcblx0XHR9O1xuXG5cdFx0aWYgKGNvbHVtblR5cGUgPT09ICdkYXRldGltZScpXG5cdFx0XHRleHRlbmQoZm9ybWF0cywge1xuXHRcdFx0XHQnSi1NLVkrSDppJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWSBISDptbScpLFxuXHRcdFx0XHQnSi1NK0g6aSc6IG5vdy5mb3JtYXQoJ0RELU1NIEhIOm1tJyksXG5cdFx0XHRcdCdqK0YrWStIOmknOiBub3cuZm9ybWF0KCdERCBNTU1NIFkgSEg6bW0nKSxcblx0XHRcdFx0J0QraitGK1krSDppJzogbm93LmZvcm1hdCgnZGRkZCBERCBNTU0gWSBISDptbScpLFxuXHRcdFx0XHQnSDppJzogbm93LmZvcm1hdCgnSEg6bW0nKVxuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm4gZm9ybWF0cztcblx0fVxuXG5cdGlzU3RyaW5nQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAncGhvbmUnOlxuXHRcdFx0Y2FzZSAndXJsJzpcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0XHQvLyBjYXNlICdodG1sJzogLy8gVE9ETzogc29ydCBvbiBmaWx0ZXJlZCB2YWx1ZVxuXHRcdFx0XHQvLyBjYXNlICdlbnVtJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNGbG9hdENvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXG5cdFx0XHRjYXNlICd2b2x1bWUnOlxuXHRcdFx0Y2FzZSAnd2VpZ2h0Jzpcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICdwb3dlcic6XG5cdFx0XHRjYXNlICdjdXJyZW50Jzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc0ludENvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcblx0XHRcdGNhc2UgJ251bWJlcic6XG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzTnVtYmVyQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaXNGbG9hdENvbHVtbihjb2x1bW4pIHx8IHRoaXMuaXNJbnRDb2x1bW4oY29sdW1uKTtcblx0fVxuXG5cdGlzQ3VzdG9tQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGNvbHVtbi5maWVsZHR5cGUgPT09ICdjdXN0b21maWVsZCc7XG5cdH1cblxuXHRpc0l0ZW1Db2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIGluY2x1ZGVJZCA9IHRydWUpOiBib29sZWFuIHtcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdpZCc6XG5cdFx0XHRcdHJldHVybiBpbmNsdWRlSWQ7XG5cdFx0XHRjYXNlICdpdGVtJzpcblx0XHRcdGNhc2UgJ2NoaWxkJzpcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxuXHRcdFx0Y2FzZSAnbGluayc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRGF0ZUNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2RhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpc1JlbmRlcmVkQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRmlsdGVyZWRDb2x1bW4gKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBib29sZWFuIHtcblx0XHQvLyB1Z2x5IGhhY2sgOi0oXG5cdFx0aWYgKGNvbHVtbi5pZCA9PT0gJ3N0YWZmZWwnKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRpZiAoY29sdW1uLmdlbmVyYXRvciAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRjYXNlICdib29sJzpcblx0XHRcdGNhc2UgJ2VudW0nOlxuXHRcdFx0Y2FzZSAnY291bnRyeSc6XG5cdFx0XHRjYXNlICd2b2x1bWUnOlxuXHRcdFx0Y2FzZSAnd2VpZ2h0Jzpcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XG5cdFx0XHRjYXNlICdlbWFpbCc6XG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdGNhc2UgJ2h0bWwnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzRm9ybWF0dGVkQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdGNhc2UgJ2NvbG9yJzpcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNTZWxlY3RhYmxlQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnYmxvYic6XG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcblx0XHRcdGNhc2UgJ2ZvcmNldXBkYXRlJzpcblx0XHRcdGNhc2UgJ2lkJzpcblx0XHRcdGNhc2UgJ2pzb24nOlxuXHRcdFx0Y2FzZSAnb3JkZXInOlxuXHRcdFx0Y2FzZSAncGFyZW50aWQnOlxuXHRcdFx0Y2FzZSAncGFyZW50dHlwZSc6XG5cdFx0XHRjYXNlICdwYXNzd29yZCc6XG5cdFx0XHRjYXNlICd0b2tlbic6XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGhhc0xvY2F0aW9uUHJvcGVydHkgKGNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIGxvY2F0aW9uOiBudW1iZXIpOiBib29sZWFuIHtcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuXHRcdHJldHVybiAobG9jYXRpb24gJiBjb2x1bW4ubG9jYXRpb24pICE9PSAwO1xuXHR9XG5cblx0aXNFZGl0YWJsZUNvbHVtbiAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IGJvb2xlYW4ge1xuXHRcdGlmIChjb2x1bW4ucmVhZE9ubHkpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aXNTZWFyY2hhYmxlQ29sdW1uIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZW1haWwnOlxuXHRcdFx0Y2FzZSAncGhvbmUnOlxuXHRcdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XG5cdFx0XHRjYXNlICdodG1sJzpcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Z2V0RGVmYXVsdFdlaWdodCAoY29sdW1uOiBSZXNwb25zZUNvbHVtbik6IG51bWJlciB7XG5cdFx0Ly8gXHRcdFx0Y29uc29sZS5sb2coJ2dldERlZmF1bHRXZWlnaHQnLCBjb2x1bW4pO1xuXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZG91YmxlJzpcblx0XHRcdGNhc2UgJ3ByaWNlJzpcblx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0Y2FzZSAnaW50Jzpcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxuXHRcdFx0Y2FzZSAnY29sb3InOlxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxuXHRcdFx0XHRyZXR1cm4gMC41O1xuXG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0Y2FzZSAnZW51bSc6XG5cdFx0XHRjYXNlICdlbWFpbCc6XG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2l0ZW0nOlxuXHRcdFx0Y2FzZSAnbGluayc6XG5cdFx0XHRcdHJldHVybiAxLjU7XG5cblx0XHRcdGNhc2UgJ2xvbmd0ZXh0Jzpcblx0XHRcdGNhc2UgJ2h0bWwnOlxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxuXHRcdFx0XHRyZXR1cm4gMjtcblxuXHRcdFx0Y2FzZSAnZGF0ZSc6XG5cdFx0XHRjYXNlICdkYXRldGltZSc6XG5cdFx0XHRjYXNlICd0aW1lJzpcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdH1cblxuXHRnZXRDb21wYXJhdG9ycyAoY29sdW1uOiBSZXNwb25zZUNvbHVtbiAmIHt0eXBlOiAnZGltZW5zaW9uJyB8ICd3ZWlnaHQnIHwgJ3ByaWNlJ30pOiBbJz0nLCAnPicsICc8J107XG5cdGdldENvbXBhcmF0b3JzIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uICYge3R5cGU6ICdkYXRlJyB8ICdkYXRldGltZScgfCAndGltZScgfCAnZHVyYXRpb24nfSk6IFsnPicsICc8J107XG5cdGdldENvbXBhcmF0b3JzIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKTogWyc9JywgJyE9J107XG5cdGdldENvbXBhcmF0b3JzIChjb2x1bW46IFJlc3BvbnNlQ29sdW1uKSB7XG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcblx0XHRcdGNhc2UgJ3dlaWdodCc6XG5cdFx0XHRjYXNlICdwcmljZSc6XG5cdFx0XHRcdHJldHVybiBbJz0nLCAnPicsICc8J107XG5cdFx0XHRjYXNlICdkYXRlJzpcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcblx0XHRcdGNhc2UgJ3RpbWUnOlxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxuXHRcdFx0XHRyZXR1cm4gWyc+JywgJzwnXTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBbJz0nLCAnIT0nXTtcblx0XHR9XG5cdH1cblxuXHRjb250YWluc0NvbHVtbiAocmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbiwgZGVzdGluYXRpb246IEFwaVJlcXVlc3RDb2x1bW5bXSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kUmVxdWVzdENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKHR5cGVvZiBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPT09ICdzdHJpbmcnKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGlmICghdGhpcy5jb250YWluc0NvbHVtbihjaGlsZENvbHVtbiwgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF0pKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjb250YWluc0Rlcml2ZWRDb2x1bW5zIChyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbltdKTogYm9vbGVhbiB7XG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpIHtcblx0XHRcdGlmICh0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihjb2x1bW4pLmNoaWxkcmVuLmxlbmd0aCA+IDApXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10sXG5cdFx0cmVzcG9uc2VDb2x1bW5NYXA6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xuXHRcdFx0Y29uc3QgcGFyc2VkQ29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IHBhcnNlZENvbHVtbi5jaGlsZHJlbjtcblx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uTWFwW2l0ZW1UeXBlXTtcblx0XHRcdGxldCByZXNwb25zZUNvbHVtbjtcblxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW3BhcnNlZENvbHVtbi5pZF07XG5cblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdGlmIChcblx0XHRcdFx0Y2hpbGRyZW4ubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHQhdGhpcy5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNoaWxkcmVuLCByZXNwb25zZUNvbHVtbk1hcClcblx0XHRcdClcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29weVJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiB0cnVlKTogdHJ1ZTtcblx0Y29weVJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10pOiBBcGlSZXF1ZXN0Q29sdW1uW107XG5cdGNvcHlSZXF1ZXN0Q29sdW1ucyAoY29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBBcGlSZXF1ZXN0Q29sdW1ucyB7XG5cdFx0aWYgKGNvbHVtbnMgPT09IHRydWUpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdGNvbnN0IHJlc3VsdDogQXBpUmVxdWVzdENvbHVtbltdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5jb3B5UmVxdWVzdENvbHVtbihjb2x1bW4pKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjb3B5UmVxdWVzdENvbHVtbiAocmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbik6IEFwaVJlcXVlc3RDb2x1bW4ge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gY29sdW1uLmlkO1xuXG5cdFx0Y29uc3QgY2hpbGRyZW46IEFwaVJlcXVlc3RDb2x1bW5bXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pXG5cdFx0XHRjaGlsZHJlbi5wdXNoKHRoaXMuY29weVJlcXVlc3RDb2x1bW4oY2hpbGRDb2x1bW4pKTtcblxuXHRcdHJldHVybiB7W2NvbHVtbi5pZF06IGNoaWxkcmVufTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaWZmZXJlbmNlOiBjb2x1bW5zIHRoYXQgYXJlIGluIHNlY29uZCwgYnV0IG5vdCBpbiBmaXJzdFxuXHQgKiBAcGFyYW0ge0FycmF5fSBmaXJzdFxuXHQgKiBAcGFyYW0ge0FycmF5fSBzZWNvbmRcblx0ICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgJ21lcmdlZCcgYW5kICdkaWZmZXJlbmNlJyBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChmaXJzdDogdHJ1ZSwgc2Vjb25kOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdDx0cnVlLCBbXT47XG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0OiBBcGlSZXF1ZXN0Q29sdW1uW10sIHNlY29uZDogdHJ1ZSk6IFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdDx0cnVlLCB0cnVlPjtcblx0bWVyZ2VSZXF1ZXN0Q29sdW1ucyAoZmlyc3Q6IEFwaVJlcXVlc3RDb2x1bW5bXSwgc2Vjb25kOiBBcGlSZXF1ZXN0Q29sdW1uW10pOlxuXHRcdFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdDxBcGlSZXF1ZXN0Q29sdW1uW10sIEFwaVJlcXVlc3RDb2x1bW5bXT47XG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0OiBBcGlSZXF1ZXN0Q29sdW1ucywgc2Vjb25kOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IFJlcXVlc3RDb2x1bW5NZXJnZVJlc3VsdDtcblx0bWVyZ2VSZXF1ZXN0Q29sdW1ucyAoZmlyc3Q6IEFwaVJlcXVlc3RDb2x1bW5zLCBzZWNvbmQ6IEFwaVJlcXVlc3RDb2x1bW5zKTogUmVxdWVzdENvbHVtbk1lcmdlUmVzdWx0IHtcblx0XHRpZiAoZmlyc3QgPT09IHRydWUpIC8vID09PSBvcGVyYXRvciBuZWVkZWQgaGVyZVxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IFtdfTtcblxuXHRcdGlmIChzZWNvbmQgPT09IHRydWUpXG5cdFx0XHRyZXR1cm4ge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogdHJ1ZX07XG5cblx0XHRjb25zdCBtZXJnZWQgPSB0aGlzLmNvcHlSZXF1ZXN0Q29sdW1ucyhmaXJzdCk7XG5cdFx0Y29uc3QgZGlmZmVyZW5jZTogQXBpUmVxdWVzdENvbHVtbltdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBzZWNvbmQpIHtcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oY29sdW1uLCBtZXJnZWQpO1xuXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXG5cdFx0XHRcdGRpZmZlcmVuY2UucHVzaChhZGRlZENvbHVtbik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHRtZXJnZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW46IEFwaVJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uOiBBcGlSZXF1ZXN0Q29sdW1uW10pIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZFJlcXVlc3RDb2x1bW4oY29sdW1uLmlkLCBkZXN0aW5hdGlvbik7XG5cblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XG5cdFx0XHRkZXN0aW5hdGlvbi5wdXNoKHJlcXVlc3RDb2x1bW4pO1xuXHRcdFx0cmV0dXJuIHJlcXVlc3RDb2x1bW47XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJykge1xuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID0ge1xuXHRcdFx0XHRbY29sdW1uLmlkXTogW11cblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWRkZWRDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oXG5cdFx0XHRcdGNoaWxkQ29sdW1uLFxuXHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXG5cdFx0XHRcdGFkZGVkQ29sdW1ucy5wdXNoKGFkZGVkQ29sdW1uKTtcblx0XHR9XG5cblx0XHRpZiAoYWRkZWRDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0cmV0dXJuIHtbY29sdW1uLmlkXTogYWRkZWRDb2x1bW5zfTtcblx0fVxuXG5cdGdldFJlcXVlc3RDb2x1bW5JZCAocmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbik6IHN0cmluZyB7XG5cdFx0aWYgKHR5cGVvZiByZXF1ZXN0Q29sdW1uID09PSAnc3RyaW5nJylcblx0XHRcdHJldHVybiByZXF1ZXN0Q29sdW1uO1xuXG5cdFx0bGV0IGNvbHVtbklkO1xuXG5cdFx0Zm9yIChjb2x1bW5JZCBpbiByZXF1ZXN0Q29sdW1uKSB7fVxuXG5cdFx0cmV0dXJuIGNvbHVtbklkIGFzIHN0cmluZztcblx0fVxuXG5cdHBhcnNlUmVxdWVzdENvbHVtbiAocmVxdWVzdENvbHVtbjogQXBpUmVxdWVzdENvbHVtbik6IHtpZDogc3RyaW5nLCBjaGlsZHJlbjogQXBpUmVxdWVzdENvbHVtbltdfSB7XG5cdFx0aWYgKHR5cGVvZiByZXF1ZXN0Q29sdW1uID09PSAnc3RyaW5nJylcblx0XHRcdHJldHVybiB7aWQ6IHJlcXVlc3RDb2x1bW4sIGNoaWxkcmVuOiBbXX07XG5cblx0XHRsZXQgY29sdW1uSWQ7XG5cblx0XHRmb3IgKGNvbHVtbklkIGluIHJlcXVlc3RDb2x1bW4pIHt9XG5cblx0XHRyZXR1cm4ge2lkOiBjb2x1bW5JZCBhcyBzdHJpbmcsIGNoaWxkcmVuOiByZXF1ZXN0Q29sdW1uW2NvbHVtbklkIGFzIHN0cmluZ119O1xuXHR9XG5cblx0LyoqXG5cdCAqIE1lcmdlcyB0d28gc2V0cyBvZiByZXNwb25zZSBjb2x1bW5zLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZmlyc3Rcblx0ICogQHBhcmFtIHtvYmplY3R9IHNlY29uZFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyBhICdtZXJnZWQnIGFuZCBhICdkaWZmZXJlbmNlJyBwcm9wZXJ0eS5cblx0ICovXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5zIChcblx0XHRmaXJzdDogUmVzcG9uc2VDb2x1bW5NYXAsXG5cdFx0c2Vjb25kOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiB7bWVyZ2VkOiBSZXNwb25zZUNvbHVtbk1hcCwgZGlmZmVyZW5jZTogUmVzcG9uc2VDb2x1bW5NYXB9IHtcblx0XHRjb25zdCBtZXJnZWQ6IFJlc3BvbnNlQ29sdW1uTWFwID0ge307XG5cdFx0Y29uc3QgZGlmZmVyZW5jZTogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZmlyc3QpIHtcblx0XHRcdGlmIChzZWNvbmRbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IGZpcnN0W2l0ZW1UeXBlXTtcblxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbWVyZ2VSZXN1bHQgPSB0aGlzLm1lcmdlUmVzcG9uc2VDb2x1bW5NYXAoXG5cdFx0XHRcdGZpcnN0W2l0ZW1UeXBlXSxcblx0XHRcdFx0c2Vjb25kW2l0ZW1UeXBlXVxuXHRcdFx0KTtcblxuXHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0Lm1lcmdlZDtcblx0XHRcdGRpZmZlcmVuY2VbaXRlbVR5cGVdID0gbWVyZ2VSZXN1bHQuZGlmZmVyZW5jZTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHNlY29uZCkge1xuXHRcdFx0aWYgKGZpcnN0W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xuXHRcdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IHNlY29uZFtpdGVtVHlwZV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHthcnJheX0gZmlyc3Rcblx0ICogQHBhcmFtIHthcnJheX0gc2Vjb25kXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IGRpZmZlcmVuY2U6IHRoZSBjb2x1bW5zIHRoYXQgYXJlIGluIHNlY29uZCwgYnV0IG5vdCBpbiBmaXJzdC5cblx0ICovXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5NYXAgKGZpcnN0OiBSZXNwb25zZUNvbHVtbk1hcCwgc2Vjb25kOiBSZXNwb25zZUNvbHVtbk1hcCk6IHttZXJnZWQ6IFJlc3BvbnNlQ29sdW1uTWFwLCBkaWZmZXJlbmNlOiBSZXNwb25zZUNvbHVtbk1hcH0ge1xuXHRcdGNvbnN0IG1lcmdlZDogUmVzcG9uc2VDb2x1bW5NYXAgPSB7fTtcblx0XHRjb25zdCBkaWZmZXJlbmNlOiBSZXNwb25zZUNvbHVtbk1hcCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBmaXJzdClcblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBmaXJzdFtjb2x1bW5JZF07XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHNlY29uZCkge1xuXHRcdFx0aWYgKGlzRGVmaW5lZChmaXJzdFtjb2x1bW5JZF0pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bWVyZ2VkW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XG5cdFx0XHRkaWZmZXJlbmNlW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XG5cdH1cblxuXHRpc0xvY2FsQ29sdW1uSWQgKGNvbHVtbklkOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gY29sdW1uSWQuc3Vic3RyaW5nKDAsIDIpID09PSAnX18nO1xuXHR9XG5cblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbnMgKGNvbmZpZ0NvbHVtbnM6IHN0cmluZ1tdKTogQXBpUmVxdWVzdENvbHVtbltdIHtcblx0XHRjb25zdCByZXF1ZXN0OiBBcGlSZXF1ZXN0Q29sdW1uW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbmZpZ0NvbHVtbnMpIHtcblx0XHRcdGlmICh0aGlzLmlzTG9jYWxDb2x1bW5JZChjb2x1bW4pKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKHRoaXMucGFyc2VDb25maWdDb2x1bW4oY29sdW1uKSwgcmVxdWVzdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XG5cdH1cblxuXHRwYXJzZUNvbmZpZ0NvbHVtbiAoY29uZmlnQ29sdW1uOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIGNvbmZpZ0NvbHVtbi5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKVswXS5zcGxpdChDT0xVTU5fU0VQRVJBVE9SKTtcblx0fVxuXG5cdHByb2Nlc3NDb25maWdDb2x1bW4gKHBhcnNlZENvbmZpZ0NvbHVtbjogc3RyaW5nW10sIGRlc3RpbmF0aW9uOiBBcGlSZXF1ZXN0Q29sdW1uW10pIHtcblx0XHRjb25zdCBjb2x1bW5JZCA9IHBhcnNlZENvbmZpZ0NvbHVtblswXTtcblx0XHRjb25zdCBpc0xlYWYgPSBwYXJzZWRDb25maWdDb2x1bW4ubGVuZ3RoID09PSAxO1xuXHRcdGxldCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZFJlcXVlc3RDb2x1bW4oY29sdW1uSWQsIGRlc3RpbmF0aW9uKTtcblxuXHRcdGlmIChpc0xlYWYpIHtcblx0XHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpXG5cdFx0XHRcdGRlc3RpbmF0aW9uLnB1c2goY29sdW1uSWQpO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGNvbHVtbkluZGV4ID09PSAtMSlcblx0XHRcdGNvbHVtbkluZGV4ID0gZGVzdGluYXRpb24ucHVzaCh7W2NvbHVtbklkXTogW119KSAtIDE7XG5cdFx0ZWxzZSBpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPSB7W2NvbHVtbklkXTogW119O1xuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbihwYXJzZWRDb25maWdDb2x1bW4uc2xpY2UoMSksIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW5JZF0pO1xuXHR9XG5cblx0ZmluZFJlcXVlc3RDb2x1bW4gKGNvbHVtbklkOiBzdHJpbmcsIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1uW10pOiBudW1iZXIge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdENvbHVtbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IHJlcXVlc3RDb2x1bW5zW2ldO1xuXG5cdFx0XHRpZiAodGhpcy5nZXRSZXF1ZXN0Q29sdW1uSWQoY29sdW1uKSA9PT0gY29sdW1uSWQpXG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdH1cblxuXHRcdHJldHVybiAtMTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSGFuZGxlciwgQ3JlYXRlQ29tcGlsYXRpb24sIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQ3JlYXRlUmVxdWVzdEVudHJ5LCBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLCBJdGVtRW50cnlNYXAsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4ge1xuXHRyZXF1ZXN0czogQXJyYXk8Q3JlYXRlUmVxdWVzdEVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29tcGlsYXRpb246IENyZWF0ZUNvbXBpbGF0aW9uLFxuXHRcdHByaXZhdGUgbG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcblx0XHRwcml2YXRlIHBhcmFtZXRlck1hcDogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0XHRwcml2YXRlIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlXG5cdCkge1xuXHR9XG5cblx0ZmluYWxpemVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2U6IENyZWF0ZVJlcXVlc3RFbnRyeTxJdGVtVHlwZVR5cGU+KSB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSByZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gcmVxdWVzdFJlc291cmNlLmNvbHVtbnM7XG5cblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcylcblx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoY29sbGVjdGlvbkVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcblxuXHRcdHJldHVybiByZXF1ZXN0UmVzb3VyY2U7XG5cdH1cblxuXHRzZXRSZXF1ZXN0UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcmVxdWVzdEVudHJ5OiBDcmVhdGVSZXF1ZXN0RW50cnk8SXRlbVR5cGVUeXBlPikge1xuXHRcdGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0RW50cnkucmVxdWVzdDtcblxuXHRcdGlmIChwYXJlbnRUeXBlID09PSAnVm9pZCcpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXF1ZXN0LnBhcmVudFR5cGUgPSBwYXJlbnRUeXBlO1xuXHRcdHJlcXVlc3QucGFyZW50SWQgPSB7fTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cnVuICgpIHtcblx0XHRjb25zdCBjb21waWxhdGlvbiA9IHRoaXMuY29tcGlsYXRpb247XG5cblx0XHRpZiAodGhpcy5icmVha3VwQnlQYXJlbnQpIHtcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSBjb21waWxhdGlvbltwYXJlbnRUeXBlXTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xuXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpID8gK3BhcmVudElkIDogbnVsbCxcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzLnB1c2godGhpcy5maW5hbGl6ZVJlcXVlc3QocmVxdWVzdFJlc291cmNlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbXBpbGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudE1hcCA9IGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdO1xuXHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XG5cdFx0XHRcdGNvbnN0IGhhc1BhcmVudCA9IHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpO1xuXG5cdFx0XHRcdGxldCB2YWxpZFJlcXVlc3QgPSBmYWxzZTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcblx0XHRcdFx0XHRcdGhhc1BhcmVudCA/ICtwYXJlbnRJZCA6IG51bGwsXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2Vcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0dmFsaWRSZXF1ZXN0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2YWxpZFJlcXVlc3QpXG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0cy5wdXNoKHRoaXMuZmluYWxpemVSZXF1ZXN0KHJlcXVlc3RSZXNvdXJjZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RzO1xuXHR9XG5cblx0aW5pdGlhbGl6ZVJlcXVlc3QgKCk6IENyZWF0ZVJlcXVlc3RFbnRyeTxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVxdWVzdDoge1xuXHRcdFx0XHRyZXF1ZXN0VHlwZTogJ2NyZWF0ZScsXG5cdFx0XHRcdGl0ZW1zOiB7fSxcblx0XHRcdFx0Y29sdW1uczoge31cblx0XHRcdH0sXG5cdFx0XHRjb2x1bW5zOiB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpLFxuXHRcdFx0aXRlbXM6IHt9LFxuXHRcdFx0Y29sbGVjdGlvbnM6IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdDxJdGVtVHlwZVR5cGU+KFxuXHRcdFx0XHRbdGhpcy5sb2NhbENvbGxlY3Rpb25DYWNoZSwgdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzXSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZmFsc2Vcblx0XHRcdClcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBleHRlbmRSZXF1ZXN0IChpdGVtRW50cmllczogSXRlbUVudHJ5TWFwPGFueT4sIHJlcXVlc3RQYXJlbnRJZDogSXRlbUlkIHwgbnVsbCwgZGVzdGluYXRpb246IENyZWF0ZVJlcXVlc3RFbnRyeTxJdGVtVHlwZVR5cGU+KSB7XG5cdFx0Y29uc3QgcmVxdWVzdCA9IGRlc3RpbmF0aW9uLnJlcXVlc3Q7XG5cdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0gZGVzdGluYXRpb24uaXRlbXM7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRpZiAocmVxdWVzdC5pdGVtVHlwZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRyZXF1ZXN0Lml0ZW1UeXBlID0gaXRlbVR5cGUgYXMgSXRlbVR5cGVUeXBlO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSB7fTtcblx0XHRcdFx0cmVxdWVzdC5pdGVtc1tpdGVtVHlwZV0gPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHRcdFx0XHRjb25zdCBjaGlsZEVudHJpZXMgPSBnZXRQYXRoKHRoaXMuY29tcGlsYXRpb24sIFtpdGVtVHlwZSwgaXRlbUlkXSk7XG5cdFx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXRoKHRoaXMucGFyYW1ldGVyTWFwLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xuXG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyZW50SWQgIT09IG51bGwpXG5cdFx0XHRcdFx0KHJlcXVlc3QucGFyZW50SWQgYXMge1tpdGVtSWQ6IHN0cmluZ106IEl0ZW1JZH0pW2l0ZW1JZF0gPSByZXF1ZXN0UGFyZW50SWQ7XG5cblx0XHRcdFx0ZGVzdGluYXRpb24uY29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2xsZWN0aW9ucy5leHBhbmQoaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSBpdGVtRW50cnk7XG5cblx0XHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG5cblx0XHRcdFx0aWYgKGNoaWxkRW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRcdGNvbnN0IGxpbmtzOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBJdGVtSWRbXX0gPSBpdGVtUmVxdWVzdC5saW5rcyA9IHt9O1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkRW50cmllcykge1xuXHRcdFx0XHRcdGxpbmtzW2NoaWxkVHlwZV0gPSBbXTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgY2hpbGRJZCBpbiBjaGlsZEVudHJpZXNbY2hpbGRUeXBlXSlcblx0XHRcdFx0XHRcdGxpbmtzW2NoaWxkVHlwZV0ucHVzaChwYXJzZUludChjaGlsZElkLCAxMCkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KGNoaWxkRW50cmllcywgbnVsbCwgZGVzdGluYXRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHtcblx0Q29sbGVjdGlvbkNhY2hlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sbGVjdGlvbk1hdGNoZXIsXG5cdENvbHVtblNldCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRMb2NhbENhY2hlLFxuXHRNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25SZXN1bHQsXG5cdFF1ZXJ5U2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSwgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgQXV0aEludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FZGl0UmVzb3VyY2UsXG5cdENvbGxlY3Rpb25FbnRyeSxcblx0Q29sbGVjdGlvbkVudHJ5T3B0aW9ucyxcblx0Q29sbGVjdGlvblJlc291cmNlLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRDb2xsZWN0aW9uVmlld1Jlc291cmNlLFxuXHRFZGl0UmVzb3VyY2UsXG5cdEl0ZW1FbnRyeSxcblx0SXRlbUVudHJ5T3B0aW9ucyxcblx0SXRlbVJlc291cmNlLFxuXHRJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRMb2NhbFZpZXdSZXNvdXJjZSxcblx0UmVtb3RlVmlld1Jlc291cmNlXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlRdWVyeSxcblx0Q29sbGVjdGlvbkRlZmluaXRpb24sXG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZSxcblx0Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAsXG5cdENvbnZlcnNpb25NYXAsXG5cdENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdEl0ZW1JZCxcblx0SXRlbUlkQ29udmVyc2lvbk1hcCxcblx0SXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcCxcblx0SXRlbVR5cGUsXG5cdExpbmtDb2xsZWN0aW9uRGVmaW5pdGlvbixcblx0TGlua2VkSXRlbUVudHJ5TWFwLFxuXHRMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24sXG5cdE9uU2F2ZUNhbGxiYWNrLFxuXHRQcm9taXNlSW50ZXJmYWNlLFxuXHRTdGF0ZUtleVR5cGUsXG5cdFRlbXBsYXRlSXRlbUVudHJ5TWFwXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQWRtaW5pc3RyYXRvciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgbG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgbW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIHByb21pc2VJbnRlcmZhY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2Vcblx0KSB7fVxuXG5cdGludmFsaWRhdGVDYWNoZSAoKTogdm9pZCB7XG5cdFx0Ly8gdGhlIGl0ZW1IYW5kbGVyIGNhY2hlIG9ubHkgY29udGFpbnMgcmVtb3RlIGVudHJpZXNcblx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZm9yRWFjaChcblx0XHRcdGl0ZW1FbnRyeSA9PiBpdGVtRW50cnkucXVldWVSZWxvYWQoKVxuXHRcdCk7XG5cblx0XHQvLyBxdWV1ZVJlbG9hZCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgZWFjaCBpbmRpdmlkdWFsIGl0ZW1cblx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZm9yRWFjaChcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9PiBjb2xsZWN0aW9uRW50cnkucXVldWVSZWxvYWQoKVxuXHRcdCk7XG5cdH1cblxuXHRjbGVhclJlc291cmNlcyAobGV2ZWw6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5jYWNoZS5jbGVhclJlc291cmNlcyhsZXZlbCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LmNhY2hlLmNsZWFyUmVzb3VyY2VzKGxldmVsKTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRhZGRUb1RhYjogYm9vbGVhbiA9IHRydWUsXG5cdFx0Y2FsbE9uQWRkOiBib29sZWFuID0gdHJ1ZVxuXHQpOiBDb2xsZWN0aW9uTWF0Y2hlcjxJdGVtVHlwZVR5cGU+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3Q8SXRlbVR5cGVUeXBlPihcblx0XHRcdFtsb2NhbENhY2hlLmNvbGxlY3Rpb25zXSxcblx0XHRcdGZhbHNlLFxuXHRcdFx0Y2FsbE9uQWRkLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Ly8gdGhpcyBpcyBvbmx5IHJlbGV2YW50IGlmIHRoZXJlIGFyZSBubyBjb2xsZWN0aW9ucyB0byBhZGQgdGhlIGl0ZW0gdG8sIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIHNhdmUgdGhlIGl0ZW1cblx0XHRcdGlmIChhZGRUb1RhYilcblx0XHRcdFx0bG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcblxuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25NYXRjaGVyO1xuXHR9XG5cblx0ZmV0Y2hUaXRsZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgZGVmZXJSZXF1ZXN0PzogYm9vbGVhbik6IFByb21pc2VJbnRlcmZhY2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hUaXRsZShpdGVtVHlwZSwgaXRlbUlkLCBkZWZlclJlcXVlc3QsIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zKTtcblx0fVxuXG5cdGdldEl0ZW1CeUlkPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8RWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdGdldEl0ZW1CeUlkPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0Z2V0SXRlbUJ5SWQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRnZXRJdGVtQnlJZDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMsIGxldmVsLCBpc1Jvb3QpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5SWQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1JZHM6IEl0ZW1JZFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXJyYXk8RWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+PjtcblxuXHRnZXRJdGVtc0J5SWQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1JZHM6IEl0ZW1JZFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcnJheTxSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+O1xuXG5cdGdldEl0ZW1zQnlJZDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcnJheTxMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0Z2V0SXRlbXNCeUlkPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtSWRzOiBJdGVtSWRbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSA9IHt9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXJyYXk8SXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+PiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtcyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMsIGxldmVsKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0SXRlbXNCeVF1ZXJ5PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRxdWVyeTogQXBpUXVlcnksXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcnJheTxFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+O1xuXG5cdGdldEl0ZW1zQnlRdWVyeTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0cXVlcnk6IEFwaVF1ZXJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcnJheTxSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+O1xuXG5cdGdldEl0ZW1zQnlRdWVyeTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0cXVlcnk6IEFwaVF1ZXJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXJyYXk8TG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+O1xuXG5cdGdldEl0ZW1zQnlRdWVyeTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0cXVlcnk6IEFwaVF1ZXJ5LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlID0ge30sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcnJheTxJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgZW50cnlPcHRpb25zID0gbmV3IEl0ZW1FbnRyeU9wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkUGFyZW50Q29uZGl0aW9uKHF1ZXJ5LCBlbnRyeU9wdGlvbnMucGFyZW50KSxcblx0XHRcdHtbaXRlbVR5cGVdOiBlbnRyeU9wdGlvbnMuY29sdW1uc31cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQsXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZW50cnlPcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMsIGxldmVsKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TmV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdHJldHVybkxpbmtzOiB0cnVlLFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTx7bWFpbjogRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4sIGxpbmtlZDogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwfT47XG5cblx0Z2V0TmV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdHJldHVybkxpbmtzPzogYm9vbGVhbixcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8RWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdGdldE5ld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSA9IHt9LFxuXHRcdHJldHVybkxpbmtzOiBib29sZWFuID0gZmFsc2UsXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRvcHRpb25zLmVkaXQgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hOZXdJdGVtKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRuZXcgSXRlbUVudHJ5T3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJ5UmVzb3VyY2U6IFRlbXBsYXRlSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZT4pID0+IHtcblx0XHRcdFx0Y29uc3QgbWFpbiA9IGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeVJlc291cmNlLm1haW4sIG9wdGlvbnMsIGxldmVsLCBpc1Jvb3QsIHRydWUpO1xuXHRcdFx0XHRjb25zdCBsaW5rZWQgPSB0aGlzLnByb2Nlc3NMaW5rZWRJdGVtcyhpdGVtRW50cnlSZXNvdXJjZS5saW5rZWQsIG9wdGlvbnMsIGxldmVsLCB0cnVlKTsgLy8gZG8gdGhpcyBiZWZvcmVoYW5kXG5cblx0XHRcdFx0aWYgKCFyZXR1cm5MaW5rcylcblx0XHRcdFx0XHRyZXR1cm4gbWFpbjtcblxuXHRcdFx0XHRyZXR1cm4ge21haW46IG1haW4sIGxpbmtlZDogbGlua2VkfTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0RHVwbGljYXRlQnlJZDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0ZHVwbGljYXRlSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRyZXR1cm5MaW5rcz86IGJvb2xlYW4sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRnZXREdXBsaWNhdGVCeUlkPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRkdXBsaWNhdGVJZDogSXRlbUlkLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0cmV0dXJuTGlua3M/OiBib29sZWFuLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0Z2V0RHVwbGljYXRlQnlJZDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0ZHVwbGljYXRlSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRyZXR1cm5MaW5rcz86IGJvb2xlYW4sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdGdldER1cGxpY2F0ZUJ5SWQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGR1cGxpY2F0ZUlkOiBJdGVtSWQsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgPSB7fSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRyZXR1cm5MaW5rcz86IGJvb2xlYW4sXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpIHtcblx0XHRvcHRpb25zLmlzRHVwbGljYXRlID0gdHJ1ZTtcblxuXHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPSB7fTtcblxuXHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID0gZHVwbGljYXRlSWQ7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXROZXdSZXNvdXJjZShpdGVtVHlwZSwgb3B0aW9ucywgcmV0dXJuTGlua3MsIGxldmVsLCBpc1Jvb3QpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5U3RhdGU8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdHN0YXRlS2V5OiBJdGVtSWQgfCBzdHJpbmcsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRnZXRJdGVtQnlTdGF0ZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0c3RhdGVLZXk6IEl0ZW1JZCB8IHN0cmluZyxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUHJvbWlzZUludGVyZmFjZTxSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0Z2V0SXRlbUJ5U3RhdGU8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdHN0YXRlS2V5OiBJdGVtSWQgfCBzdHJpbmcsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdC8vIHN0YXRlS2V5IGNhbiBiZSBhIGtleXdvcmQgb3IgYSBsb2NhbCBpZCAoaW4gY2FzZSBvZiBhIHJlZnJlc2gpXG5cdGdldEl0ZW1CeVN0YXRlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRzdGF0ZUtleTogSXRlbUlkIHwgc3RyaW5nLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlID0ge30sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpIHtcblx0XHRjb25zdCBwYXJzZWRTdGF0ZUtleSA9IHRoaXMua2V5U2VydmljZS5wYXJzZVN0YXRlS2V5KHN0YXRlS2V5IGFzIHN0cmluZyk7XG5cblx0XHRpZiAocGFyc2VkU3RhdGVLZXkgPT09IG51bGwpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IHN0YXRlS2V5IGFzIEl0ZW1JZDtcblxuXHRcdFx0aWYgKCF0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKGl0ZW1JZCkgfHwgdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXMuY29udGFpbnMoaXRlbVR5cGUsIGl0ZW1JZCkpXG5cdFx0XHRcdHJldHVybiB0aGlzLmdldEl0ZW1CeUlkKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMsIGxldmVsLCBpc1Jvb3QpO1xuXHRcdH0gZWxzZSBpZiAocGFyc2VkU3RhdGVLZXkudHlwZSA9PT0gU3RhdGVLZXlUeXBlLkR1cGxpY2F0ZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0RHVwbGljYXRlQnlJZChcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHBhcnNlZFN0YXRlS2V5Lml0ZW1JZCBhcyBJdGVtSWQsXG5cdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdGxldmVsLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0aXNSb290XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmdldE5ld1Jlc291cmNlKGl0ZW1UeXBlLCBvcHRpb25zLCBmYWxzZSwgbGV2ZWwsIGlzUm9vdCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uRGVmPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+XG5cdCk6IENvbGxlY3Rpb25EZWZpbml0aW9uPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdGVudHJ5OiBuZXcgQ29sbGVjdGlvbkVudHJ5T3B0aW9ucyhvcHRpb25zKSwgLy8gd2UgbmVlZCB0aGUgZGVmYXVsdCBjb2x1bW4gdmFsdWVcblx0XHRcdFx0cmVzb3VyY2U6IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uc0RlZjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0bGlua0ZpZWxkOiBzdHJpbmcsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPlxuXHQpOiBMaW5rQ29sbGVjdGlvbkRlZmluaXRpb248SXRlbVR5cGVUeXBlPiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdGxpbmtGaWVsZDogbGlua0ZpZWxkLFxuXHRcdFx0b3B0aW9uczoge1xuXHRcdFx0XHRlbnRyeTogbmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksIC8vIHdlIG5lZWQgdGhlIGRlZmF1bHQgY29sdW1uIHZhbHVlXG5cdFx0XHRcdHJlc291cmNlOiBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlLCBlZGl0SXRlbXM6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0Z2V0Q29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0SXRlbXM6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0Z2V0Q29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZSwgcmVtb3RlSXRlbXM6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0Z2V0Q29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtyZW1vdGVJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+PjtcblxuXHRnZXRDb2xsZWN0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0Z2V0Q29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPixcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0Z2V0Q29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPixcblx0XHRsZXZlbD86IG51bWJlclxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGVudHJ5LCBuZXcgQ29sbGVjdGlvblJlc291cmNlT3B0aW9ucyhvcHRpb25zKSwgbGV2ZWwpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uRnJvbURlZjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGRlZmluaXRpb246IENvbGxlY3Rpb25EZWZpbml0aW9uPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcblx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5lbnRyeSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0ZW50cnkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoZW50cnksIGRlZmluaXRpb24ub3B0aW9ucy5yZXNvdXJjZSwgbGV2ZWwpO1xuXG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj4+O1xuXG5cdGdldExpbmtDb2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRsaW5rSWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge3JlbW90ZUl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+Pj47XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+Pj47XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdEl0ZW1zOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+PjtcblxuXHRnZXRMaW5rQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0bGlua0lkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtyZW1vdGVJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+Pj47XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGxpbmtJZEFycmF5OiBJdGVtSWRbXSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+PjtcblxuXHRnZXRMaW5rQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0bGlua0lkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPixcblx0XHRsZXZlbD86IG51bWJlclxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxuXHRcdFx0bGlua1R5cGUsXG5cdFx0XHRsaW5rSWRBcnJheSxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0bmV3IENvbGxlY3Rpb25FbnRyeU9wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlPikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzKGNvbGxlY3Rpb25FbnRyaWVzLCBvcHRpb25zLCBsZXZlbCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9uc0Zyb21EZWY8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0bGlua0lkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGRlZmluaXRpb246IExpbmtDb2xsZWN0aW9uRGVmaW5pdGlvbjxJdGVtVHlwZVR5cGU+LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4+PiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYmF0Y2hGZXRjaChcblx0XHRcdGxpbmtUeXBlLFxuXHRcdFx0bGlua0lkQXJyYXksXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHQoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPEl0ZW1UeXBlVHlwZT4pID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyhcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcblx0XHRcdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2UsXG5cdFx0XHRcdFx0bGV2ZWxcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0SXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+PjtcblxuXHRnZXRBbGxMaW5rQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge3JlbW90ZUl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+Pj47XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+PjtcblxuXHRnZXRBbGxMaW5rQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRsaW5rVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+Pj47XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtyZW1vdGVJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogUHJvbWlzZUludGVyZmFjZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+Pj47XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua1R5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPixcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj4+O1xuXG5cdGdldEFsbExpbmtDb2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGxpbmtUeXBlOiBJdGVtVHlwZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkobGlua1R5cGUsIHt9LCB7fSkudGhlbihcblx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0TGlua0NvbGxlY3Rpb25zKFxuXHRcdFx0XHRcdGxpbmtUeXBlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2xpbmtUeXBlXSxcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRcdGxldmVsXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsb25lSXRlbTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT47XG5cblx0Y2xvbmVJdGVtPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+O1xuXG5cdGNsb25lSXRlbTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPjtcblxuXHRjbG9uZUl0ZW08SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbVJlc291cmNlLmVudHJ5LmNsb25lKCksIG9wdGlvbnMsIGxldmVsLCBmYWxzZSk7XG5cdH1cblxuXHRjbG9uZUNvbGxlY3Rpb248SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdEl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdGNsb25lQ29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtyZW1vdGVJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRjbG9uZUNvbGxlY3Rpb248SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdEl0ZW1zOiB0cnVlfSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0Y2xvbmVDb2xsZWN0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge3JlbW90ZUl0ZW1zOiB0cnVlfSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0Y2xvbmVDb2xsZWN0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRjbG9uZUNvbGxlY3Rpb248SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0Y2xvbmVDb2xsZWN0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KSB7XG5cdFx0bGV0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cGFyZW50ID0gbnVsbDtcblxuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuY2xvbmUocGFyZW50LCBjb252ZXJzaW9uTWFwKSxcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHRsZXZlbFxuXHRcdCk7XG5cdH1cblxuXHRzYXZlQ3VycmVudExvY2FsQ2FjaGUgKFxuXHRcdGNsb3NlVGFiPzogYm9vbGVhbixcblx0XHRwYXJhbWV0ZXJzPzogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0XHRicmVha3VwQnlQYXJlbnQ/OiBib29sZWFuLFxuXHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz86IChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiB2b2lkXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5zYXZlKGNsb3NlVGFiLCBwYXJhbWV0ZXJzLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayk7XG5cdH1cblxuXHRnZXRDdXJyZW50Q29sbGVjdGlvbnMgKCk6IENvbGxlY3Rpb25DYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLmNvbGxlY3Rpb25zO1xuXHR9XG5cblx0Z2V0Q3VycmVudEl0ZW1zICgpOiBJdGVtQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcztcblx0fVxuXG5cdGdldE1vZHVsZUNoYW5nZXMgKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKSk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvblJlc3VsdCB7XG5cdFx0aWYgKGxvY2FsQ2FjaGUucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdHRocm93IG5ldyBFcnJvcignaXRlbUFkbWluaXN0cmF0b3I6IE5vIHJvb3QgaXRlbSBmb3IgbG9jYWwgY2FjaGUgJyArIGxvY2FsQ2FjaGUuaWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRsb2NhbENhY2hlLnJvb3RJdGVtLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnNcblx0XHQpLnByb2Nlc3MoKTtcblx0fVxuXG5cdGFkZFNpbmdsZUl0ZW08SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZVxuXHQpOiBFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPjtcblxuXHRhZGRTaW5nbGVJdGVtPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZVxuXHQpOiBSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPjtcblxuXHRhZGRTaW5nbGVJdGVtPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGlzUm9vdD86IGJvb2xlYW4sXG5cdFx0bG9jYWxDYWNoZT86IExvY2FsQ2FjaGVcblx0KTogTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPjtcblxuXHRhZGRTaW5nbGVJdGVtPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlID0ge30sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKClcblx0KSB7XG5cdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4obG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KSwgb3B0aW9ucywgbGV2ZWwsIGlzUm9vdCk7XG5cdH1cblxuXHRhZGRTaW5nbGVJdGVtczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBBcnJheTxFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0YWRkU2luZ2xlSXRlbXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBBcnJheTxSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0YWRkU2luZ2xlSXRlbXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQXJyYXk8TG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0YWRkU2luZ2xlSXRlbXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGxldmVsLCBmYWxzZSwgbG9jYWxDYWNoZSkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGFkZENvbGxlY3Rpb248SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZSwgZWRpdEl0ZW1zOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdGFkZENvbGxlY3Rpb248SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0SXRlbXM6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0YWRkQ29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlLCByZW1vdGVJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRhZGRDb2xsZWN0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7cmVtb3RlSXRlbXM6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0YWRkQ29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0YWRkQ29sbGVjdGlvbjxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRhZGRDb2xsZWN0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSwgSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLmFkZChjb2xsZWN0aW9uRW50cnkpO1xuXG5cdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucywgbGV2ZWwpO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVJdGVtUmVzb3VyY2VzPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw6IG51bWJlciB8IHVuZGVmaW5lZCxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlXG5cdCkge1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0cmVzdWx0LnB1c2gobG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPihpdGVtRW50cnksIG9wdGlvbnMsIGxldmVsKSk7XG5cblx0XHRcdGlmIChpdGVtVHlwZSA9PT0gJ1Byb2plY3Rub3RpdGllJykge1xuXHRcdFx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0XHRcdGxvY2FsQ2FjaGUudGFiUmVxdWVzdFBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdFx0W3t9LCB7bm9fbm90aWZpY2F0aW9uOiB0cnVlfV1cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJvY2Vzc0xpbmtlZEl0ZW1zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua2VkRW50cmllczogQXJyYXk8TGlua2VkSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZT4+LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge2VkaXQ6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGFkZFRvQ29sbGVjdGlvbnM/OiBib29sZWFuXG5cdCk6IEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0cHJvY2Vzc0xpbmtlZEl0ZW1zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua2VkRW50cmllczogQXJyYXk8TGlua2VkSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZT4+LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0YWRkVG9Db2xsZWN0aW9ucz86IGJvb2xlYW5cblx0KTogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwcm9jZXNzTGlua2VkSXRlbXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRsaW5rZWRFbnRyaWVzOiBBcnJheTxMaW5rZWRJdGVtRW50cnlNYXA8SXRlbVR5cGVUeXBlPj4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0YWRkVG9Db2xsZWN0aW9ucz86IGJvb2xlYW5cblx0KTogSXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdHByb2Nlc3NMaW5rZWRJdGVtczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGxpbmtlZEVudHJpZXM6IEFycmF5PExpbmtlZEl0ZW1FbnRyeU1hcDxJdGVtVHlwZVR5cGU+Pixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRhZGRUb0NvbGxlY3Rpb25zOiBib29sZWFuID0gdHJ1ZVxuXHQpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXAgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBlbnRyeS5pdGVtVHlwZTtcblxuXHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHRoaXMuY3JlYXRlSXRlbVJlc291cmNlcyhlbnRyeS5pdGVtVHlwZSwgZW50cnkuaXRlbUVudHJpZXMsIG9wdGlvbnMsIGxldmVsLCBsb2NhbENhY2hlKTtcblx0XHR9XG5cblx0XHRpZiAoIWFkZFRvQ29sbGVjdGlvbnMpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Ly8gdGhlIGl0ZW1FbnRyaWVzIGFyZSBpbiB0b3AtZG93biBvcmRlciwgc28gY2FsbCBmb3IgZWFjaCBpdGVtIHR5cGUgc2VwYXJhdGVseVxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgbGlua2VkRW50cmllcylcblx0XHRcdHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoZW50cnkuaXRlbUVudHJpZXMsIGZhbHNlKS5hZGRUb0NvbGxlY3Rpb25zKCk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZXhwYW5kUHJvY2Vzc0xpbmtlZEl0ZW1zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua2VkRW50cmllczogQXJyYXk8TGlua2VkSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZT4+LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX1cblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXA8RWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+PjtcblxuXHRleHBhbmRQcm9jZXNzTGlua2VkSXRlbXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRsaW5rZWRFbnRyaWVzOiBBcnJheTxMaW5rZWRJdGVtRW50cnlNYXA8SXRlbVR5cGVUeXBlPj4sXG5cdFx0bGV2ZWw6IG51bWJlcixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbVJlc291cmNlc0l0ZW1UeXBlTWFwPFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0ZXhwYW5kUHJvY2Vzc0xpbmtlZEl0ZW1zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0bGlua2VkRW50cmllczogQXJyYXk8TGlua2VkSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZT4+LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2Vcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtUmVzb3VyY2VzSXRlbVR5cGVNYXA8TG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+O1xuXG5cdGV4cGFuZFByb2Nlc3NMaW5rZWRJdGVtczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGxpbmtlZEVudHJpZXM6IEFycmF5PExpbmtlZEl0ZW1FbnRyeU1hcDxJdGVtVHlwZVR5cGU+Pixcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlXG5cdCkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRsZXQgcHJvbWlzZUNoYWluID0gdGhpcy5wcm9taXNlSW50ZXJmYWNlLndoZW4oe30pO1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBsaW5rZWRFbnRyaWVzKSB7XG5cdFx0XHQvLyB0aGUgaXRlbUVudHJpZXMgYXJlIGluIHRvcC1kb3duIG9yZGVyLCBzbyBjYWxsIGZvciBlYWNoIGl0ZW0gdHlwZSBzZXBhcmF0ZWx5XG5cdFx0XHRwcm9taXNlQ2hhaW4gPSBwcm9taXNlQ2hhaW4udGhlbihcblx0XHRcdFx0dGhpcy5jb25zdHJ1Y3RPbkl0ZW1zRXhwYW5kZWQoZW50cnkuaXRlbVR5cGUsIGVudHJ5Lml0ZW1FbnRyaWVzLCBvcHRpb25zLCBsZXZlbCwgbG9jYWxDYWNoZSksXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvbWlzZUNoYWluO1xuXHR9XG5cblx0cHJpdmF0ZSBjb25zdHJ1Y3RPbkl0ZW1zRXhwYW5kZWQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0aXRlbU9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZVxuXHQpIHtcblx0XHRyZXR1cm4gZGVzdGluYXRpb24gPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5kQWRkVG9Db2xsZWN0aW9ucyhpdGVtVHlwZSwgaXRlbUVudHJpZXMsIG51bGwsIGxvY2FsQ2FjaGUpLnRoZW4oXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtVHlwZV0gPSB0aGlzLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdGl0ZW1FbnRyaWVzLFxuXHRcdFx0XHRcdFx0aXRlbU9wdGlvbnMsXG5cdFx0XHRcdFx0XHRsZXZlbCxcblx0XHRcdFx0XHRcdGxvY2FsQ2FjaGVcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZXhwYW5kQWRkVG9Db2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSwgVCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+ID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZTogVCxcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFRbJ2l0ZW1zJ10+O1xuXG5cdHByaXZhdGUgZXhwYW5kQWRkVG9Db2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSwgVCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+ID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IG51bGwsXG5cdFx0bG9jYWxDYWNoZT86IExvY2FsQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxudWxsPjtcblxuXHRwcml2YXRlIGV4cGFuZEFkZFRvQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUsIFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPiA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBUIHwgbnVsbCxcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFRbJ2l0ZW1zJ10gfCBudWxsPjtcblxuXHRwcml2YXRlIGV4cGFuZEFkZFRvQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUsIFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPiA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U6IFQgfCBudWxsID0gbnVsbCxcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKClcblx0KTogUHJvbWlzZUludGVyZmFjZTxUWydpdGVtcyddIHwgbnVsbD4ge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0PEl0ZW1UeXBlVHlwZT4oXG5cdFx0XHRbbG9jYWxDYWNoZS5jb2xsZWN0aW9uc10sXG5cdFx0XHRmYWxzZSxcblx0XHRcdHRydWUsXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xuXG5cdFx0Y29uc3QgY29sdW1uU3VwZXJzZXQgPSB0aGlzLmdldENvbHVtblN1cGVyc2V0KGNvbGxlY3Rpb25NYXRjaGVyLmdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcygpKTtcblxuXHRcdGlmIChjb2x1bW5TdXBlcnNldCA9PT0gbnVsbClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VJbnRlcmZhY2Uud2hlbihDb2xsZWN0aW9uUmVzb3VyY2UgPT09IG51bGwgPyBudWxsIDogW10pO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZXhwYW5kTG9jYWxFbnRyaWVzKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtRW50cmllcyxcblx0XHRcdGNvbHVtblN1cGVyc2V0LnJlcXVlc3QsXG5cdFx0XHRjb2x1bW5TdXBlcnNldC5yZXNwb25zZSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uTWF0Y2hlci5hZGRUb0NvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdC8vIHdlIGNvdWxkIG1vdmUgdGhpcyB0byB0aGUgQ29sbGVjdGlvbk1hdGNoZXIgaWYgd2UgZW5mb3JjZSBhIHNpbmdsZSBpdGVtIHR5cGVcblx0cHJpdmF0ZSBnZXRDb2x1bW5TdXBlcnNldDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBBcnJheTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj5cblx0KTogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4gfCBudWxsIHtcblx0XHRjb25zdCBjb2x1bW5TZXRJZE1hcDoge1tjb2x1bW5TZXRJZDogbnVtYmVyXTogYm9vbGVhbn0gPSB7fTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cmllcy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gbnVsbDtcblxuXHRcdGxldCByZXN1bHQgPSBjb2xsZWN0aW9uRW50cmllc1swXS5jb2x1bW5zO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBjb2xsZWN0aW9uRW50cmllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbkVudHJpZXNbaV07XG5cdFx0XHRjb25zdCBjb2x1bW5TZXQgPSBjb2xsZWN0aW9uRW50cnkuY29sdW1ucztcblxuXHRcdFx0aWYgKGNvbHVtblNldElkTWFwW2NvbHVtblNldC5pZF0gPT09IHRydWUpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2x1bW5TZXRJZE1hcFtjb2x1bW5TZXQuaWRdID0gdHJ1ZTtcblxuXHRcdFx0cmVzdWx0ID0gcmVzdWx0Lm1lcmdlKGNvbHVtblNldCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldExvY2FsQ2FjaGUgKCk6IExvY2FsQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLmdldEN1cnJlbnRMb2NhbENhY2hlKHRoaXMuYXV0aEludGVyZmFjZS5nZXRVbmlxdWVVc2VySWQoKSk7XG5cdH1cblxuXHRhZGRUb0NvbGxlY3Rpb25zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlLCBUIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZT4gPSBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZTogVCxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuXG5cdCk6IFRbJ2l0ZW1zJ107XG5cblx0YWRkVG9Db2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogbnVsbCxcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuXG5cdCk6IG51bGw7XG5cblx0YWRkVG9Db2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSwgVCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+ID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBUIHwgbnVsbCxcblx0XHRjYWxsT25BZGQ6IGJvb2xlYW4gPSB0cnVlXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxlY3Rpb25NYXRjaGVyKGl0ZW1FbnRyaWVzLCB0cnVlLCBjYWxsT25BZGQpLmFkZFRvQ29sbGVjdGlvbnMocmVzdWx0Q29sbGVjdGlvblJlc291cmNlKTtcblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSwgVCBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGU+ID0gQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U6IFRcblx0KTogVFsnaXRlbXMnXTtcblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IG51bGxcblx0KTogbnVsbDtcblxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUsIFQgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPiA9IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0cmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogVCB8IG51bGxcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoaXRlbUVudHJpZXMsIGZhbHNlKS5yZW1vdmVGcm9tQ29sbGVjdGlvbnMocmVzdWx0Q29sbGVjdGlvblJlc291cmNlKTtcblx0fVxuXG5cdHNhdmVMb2NhbCAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2U8YW55Pikge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1SZXNvdXJjZS5lbnRyeTtcblxuXHRcdGl0ZW1FbnRyeS5zZXREaXNwbGF5TmFtZSgpO1xuXHRcdHRoaXMuYWRkVG9Db2xsZWN0aW9ucyhbaXRlbUVudHJ5XSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlSW50ZXJmYWNlLndoZW4oaXRlbVJlc291cmNlKTtcblx0fVxuXG5cdHVwZGF0ZUl0ZW1JZE1hcCAoY29sbGVjdGlvbk1hcDogYW55LCBjb252ZXJzaW9uTWFwOiBDb252ZXJzaW9uTWFwKTogdm9pZCB7XG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblxuXHRcdGZvciAoY29uc3Qgb2xkSWQgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Y29uc3QgbmV3SWQgPSBjb252ZXJzaW9uTWFwW29sZElkXTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbb2xkSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRjb2xsZWN0aW9uTWFwW25ld0lkXSA9IGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdEl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge3JlbW90ZUl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge3JlbW90ZUl0ZW1zOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCk6IENvbGxlY3Rpb25WaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlLCBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdGxldmVsPzogbnVtYmVyXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oY29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMsIGxldmVsKTtcblx0fVxuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+O1xuXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZSAmIHtyZW1vdGU6IHRydWV9LFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT47XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxldmVsPzogbnVtYmVyLFxuXHRcdGlzUm9vdD86IGJvb2xlYW5cblx0KTogTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPjtcblxuXHRjcmVhdGVJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IEl0ZW1SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgbGV2ZWwsIGlzUm9vdCk7XG5cdH1cblxuXHRvbkJlZm9yZVNhdmUgKGtleTogc3RyaW5nLCBjYWxsYmFjazogKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpID0+IGFueSwgY29uZGl0aW9uPzogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLm9uQmVmb3JlU2F2ZShrZXksIGNhbGxiYWNrLCBjb25kaXRpb24pO1xuXHR9XG5cblx0b25TYXZlU3VjY2VzcyAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrOiBPblNhdmVDYWxsYmFjaywgY29uZGl0aW9uPzogTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLm9uU2F2ZVN1Y2Nlc3Moa2V5LCBjYWxsYmFjaywgY29uZGl0aW9uKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblF1ZXJ5LCBJdGVtRW50cnlNYXAsIEl0ZW1FbnRyeVBhcmVudElkTWFwLCBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlIHtcblx0cHJpdmF0ZSBlbnRyaWVzOiBJdGVtRW50cnlNYXA8YW55PiA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7fVxuXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGU+KSA9PiBib29sZWFuKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0aWYgKGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGdldEJ5SXRlbVR5cGU8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChpdGVtVHlwZTogSXRlbVR5cGVUeXBlKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbUlkXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlRdWVyeTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsIHF1ZXJ5OiBDb2xsZWN0aW9uUXVlcnkpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XG5cblx0XHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0TG9jYWxCeVF1ZXJ5PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSwgcXVlcnk6IENvbGxlY3Rpb25RdWVyeSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcblxuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0QnlQYXJlbnQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+ID0gW107XG5cblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuXHRcdFx0aWYgKHBhcmVudC5pdGVtVHlwZSA9PT0gcGFyZW50VHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IHBhcmVudElkKVxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRiYXRjaEdldExvY2FsQnlQYXJlbnQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcblx0XHRwYXJlbnRJZHM6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0YWRkaXRpb25hbFF1ZXJ5OiBhbnlcblx0KTogSXRlbUVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlQYXJlbnRJZE1hcDxJdGVtVHlwZVR5cGU+ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkcylcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBbXTtcblxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gZW50cmllc1tpdGVtSWRdO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmIChwYXJlbnQuaXRlbVR5cGUgIT09IHBhcmVudFR5cGUgfHwgcmVzdWx0W3BhcmVudC5pdGVtSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoIWl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAoYWRkaXRpb25hbFF1ZXJ5ID09PSBudWxsIHx8IHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIGFkZGl0aW9uYWxRdWVyeSkpXG5cdFx0XHRcdHJlc3VsdFtwYXJlbnQuaXRlbUlkXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGU+KSA9PiB2b2lkKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xuXHRcdH1cblx0fVxuXG5cdC8qXHRmaWx0ZXIgKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pOiB2b2lkIHtcblx0IGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdCBjb25zdCBmaWx0ZXJlZEVudHJpZXM6IEl0ZW1FbnRyeU1hcCA9IHt9O1xuXG5cdCBmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcblx0IGZpbHRlcmVkRW50cmllc1tpdGVtVHlwZV0gPSB7fTtcblxuXHQgZm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcblx0IGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0IGlmIChjYWxsYmFjayhpdGVtRW50cnkpKVxuXHQgZmlsdGVyZWRFbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdID0gaXRlbUVudHJ5O1xuXHQgfVxuXHQgfVxuXG5cdCB0aGlzLmVudHJpZXMgPSBmaWx0ZXJlZEVudHJpZXM7XG5cdCB9XG5cdCAqL1xuXHR0b0FycmF5ICgpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlPj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllc1tpdGVtVHlwZV0pXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+KTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4ge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cblx0XHRpZiAoZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdGVudHJpZXNbaXRlbVR5cGVdID0ge307XG5cblx0XHRyZXR1cm4gZW50cmllc1tpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XG5cdH1cblxuXHRnZXQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChpdGVtVHlwZTogSXRlbVR5cGVUeXBlLCBpdGVtSWQ6IHN0cmluZyB8IEl0ZW1JZCk6IHVuZGVmaW5lZCB8IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHR9XG5cblx0Ly8gc2hvdWxkIGJlIGZhc3Rcblx0Y29udGFpbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBzdHJpbmcgfCBJdGVtSWQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0dXBkYXRlSXRlbUlkPFQgZXh0ZW5kcyBJdGVtRW50cnk8YW55Pj4gKGl0ZW1FbnRyeTogVCwgb2xkSXRlbUlkOiBzdHJpbmcgfCBJdGVtSWQpOiBUIHtcblx0XHRjb25zdCBlbnRyeU1hcCA9IHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdO1xuXG5cdFx0ZGVsZXRlIGVudHJ5TWFwW29sZEl0ZW1JZF07XG5cdFx0cmV0dXJuIGVudHJ5TWFwW2l0ZW1FbnRyeS5pdGVtSWRdID0gaXRlbUVudHJ5O1xuXHR9XG5cblx0Y2xlYXIgKGl0ZW1FbnRyeT86IEl0ZW1FbnRyeTxhbnk+KTogYm9vbGVhbiB7XG5cdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuY2xlYXJCeUl0ZW1JZChpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpO1xuXHR9XG5cblx0Y2xlYXJCeUl0ZW1JZCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBkZWxldGUgZW50cmllc1tpdGVtSWRdO1xuXHR9XG5cblx0bWF0Y2hRdWVyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnk8YW55PiwgcXVlcnk6IENvbGxlY3Rpb25RdWVyeSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxuXHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudFxuXHRcdCkubWF0Y2hRdWVyeShxdWVyeS5vYmplY3QpID09PSB0cnVlOyAvLyBUT0RPOiBtYXliZT9cblx0fVxufVxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFMTF9QRVJNSVNTSU9OUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBdXRoSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1FbnRyeU9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEZpZWxkTWFwLCBJdGVtRXJyb3IsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbU9wdGlvbnNJbnRlcmZhY2UsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5U2VydmljZSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlXG5cdCkge1xuXG5cdH1cblxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UpOiBJdGVtRW50cnlPcHRpb25zIHtcblx0XHRyZXR1cm4gbmV3IEl0ZW1FbnRyeU9wdGlvbnMob3B0aW9ucyk7XG5cdH1cblxuXHQvLyB0b2RvOiB0cmFuc2xhdGVcblx0Y3JlYXRlVW5mb3VuZFJlbW90ZUl0ZW1FcnJvciAoKTogSXRlbUVycm9yIHtcblx0XHRyZXR1cm4ge21lc3NhZ2U6ICdUaGUgcmVxdWVzdGVkIGl0ZW0gY291bGQgbm90IGJlIGZvdW5kIC8geW91ciBjdXJyZW50IHBlcm1pc3Npb25zIGFyZSBub3Qgc3VmZmljaWVudCd9O1xuXHR9XG5cblx0Y3JlYXRlVW5mb3VuZExvY2FsSXRlbUVycm9yIChpdGVtVHlwZTogSXRlbVR5cGUpIHtcblx0XHRyZXR1cm4ge21lc3NhZ2U6ICdBIGxvY2FsIGl0ZW0gb2YgdHlwZSAnICsgaXRlbVR5cGUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCd9O1xuXHR9XG5cblx0Y3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0ZG9FeHRlbmQ6IGJvb2xlYW4gPSBmYWxzZSxcblx0XHRhcGlSZXNwb25zZTogQXBpUmVzcG9uc2Vcblx0KTogSXRlbUlkQ29udmVyc2lvbk1hcCB7XG5cdFx0Y29uc3QgYXBpSXRlbUlkID0gYXBpUmVzcG9uc2UubGlua3NbaXRlbVR5cGVdWzBdO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9O1xuXG5cdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHt9O1xuXHRcdHJlc3VsdFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IGl0ZW1JZDtcblxuXHRcdGlmIChkb0V4dGVuZClcblx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCByZXN1bHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGV4cGFuZExvY2FsQ29udmVyc2lvbk1hcCAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWQ6IEl0ZW1JZCxcblx0XHRhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBsaW5rcyA9IGFwaVJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGVdW3BhcmVudElkXS5saW5rcztcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcblx0XHRcdGNvbnN0IGlkQXJyYXkgPSBsaW5rc1tpdGVtVHlwZV07XG5cblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XG5cdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdW2FwaUl0ZW1JZF0gPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xuXG5cdFx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCBjb252ZXJzaW9uTWFwKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRleHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+LCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLCBuZXdJdGVtSWQ/OiBJdGVtSWQpOiBJdGVtSWQge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cblx0XHRsZXQgY29udmVyc2lvbk1hcEVudHJ5O1xuXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0Y29udmVyc2lvbk1hcEVudHJ5ID0gY29udmVyc2lvbk1hcFtpdGVtVHlwZV07XG5cblx0XHRpZiAoY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXTtcblxuXHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZClcblx0XHRcdG5ld0l0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XG5cblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gPSBuZXdJdGVtSWQ7XG5cdH1cblxuXHRiYXRjaEV4cGFuZENvbnZlcnNpb25NYXAgKGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8YW55Pj4sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApOiBJdGVtSWRDb252ZXJzaW9uTWFwIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHRoaXMuZXhwYW5kQ29udmVyc2lvbk1hcChpdGVtRW50cnksIGNvbnZlcnNpb25NYXApO1xuXG5cdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XG5cdH1cblxuXHRnZXRDb252ZXJzaW9uVmFsdWUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIG1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IEl0ZW1JZCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXHR9XG5cblx0YmF0Y2hDbG9uZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9XG5cdCk6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblxuXHRcdC8vIHRoZSB0aGUgaXRlbXMgbWlnaHQgcmVmZXJlbmNlIGVhY2ggb3RoZXIsIHNvIHVwZGF0ZSB0aGUgY29udmVyc2lvbiBtYXAgZmlyc3Rcblx0XHR0aGlzLmJhdGNoRXhwYW5kQ29udmVyc2lvbk1hcChpdGVtRW50cmllcywgY29udmVyc2lvbk1hcCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeS5jbG9uZShjb252ZXJzaW9uTWFwKSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0Z2V0RnVsbE5hbWUgKGZpcnN0TmFtZTogc3RyaW5nLCBpbmZpeDogc3RyaW5nLCBsYXN0TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZmlyc3ROYW1lLnRyaW0oKVxuXHRcdFx0LmNvbmNhdCgnICcsIGluZml4KS50cmltKCkgLy8gaW5maXggY2FuIGJlIGFuIGVtcHR5IHN0cmluZ1xuXHRcdFx0LmNvbmNhdCgnICcsIGxhc3ROYW1lKTtcblx0fVxuXG5cdGdldFRpdGxlRmllbGQgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IHN0cmluZyB7XG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xuXHRcdFx0Y2FzZSAnRXhlbXBsYWFyJzpcblx0XHRcdFx0cmV0dXJuICdzZXJpZW51bW1lcic7XG5cdFx0XHRjYXNlICdGYWN0dXVyJzpcblx0XHRcdFx0cmV0dXJuICdudW1tZXInO1xuXHRcdFx0Y2FzZSAnRmlsZXMnOlxuXHRcdFx0XHRyZXR1cm4gJ2ZyaWVuZGx5bmFtZSc7XG5cdFx0XHRjYXNlICdGdW5jdGllJzpcblx0XHRcdGNhc2UgJ1N0YW5kYWFyZGZ1bmN0aWUnOlxuXHRcdFx0XHRyZXR1cm4gJ25hYW1pbnRlcm4nO1xuXHRcdFx0Y2FzZSAnVm9vcnJhYWRtdXRhdGllJzpcblx0XHRcdFx0cmV0dXJuICdvbXNjaHJpanZpbmcnO1xuXHRcdFx0Y2FzZSAnQmFyY29kZSc6XG5cdFx0XHRcdHJldHVybiAnY29kZSc7XG5cdFx0XHRjYXNlICdCZXRhYWxtaWRkZWwnOlxuXHRcdFx0Y2FzZSAnQmV0YWxpbmdzY29uZGl0aWUnOlxuXHRcdFx0Y2FzZSAnQnJpZWZwYXBpZXInOlxuXHRcdFx0Y2FzZSAnVGF4Q2xhc3MnOlxuXHRcdFx0Y2FzZSAnVGF4U2NoZW1hJzpcblx0XHRcdGNhc2UgJ0NvbmRpdGlvbic6XG5cdFx0XHRjYXNlICdGYWN0dXVybW9tZW50Jzpcblx0XHRcdGNhc2UgJ0Z1bmN0aWVncm9lcCc6XG5cdFx0XHRjYXNlICdHcm9vdGJvZWsnOlxuXHRcdFx0Y2FzZSAnSW5odXVyJzpcblx0XHRcdGNhc2UgJ0luaHV1cmdyb2VwJzpcblx0XHRcdGNhc2UgJ0luaHV1cm1hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdNYXRlcmlhYWwnOlxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsQ2F0Jzpcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXJ0YXJpZWYnOlxuXHRcdFx0Y2FzZSAnTm90aXRpZSc6XG5cdFx0XHRjYXNlICdQbGFubmluZ21hdGVyaWFhbCc6XG5cdFx0XHRjYXNlICdQcm9qZWN0Jzpcblx0XHRcdGNhc2UgJ1N0YWZmZWxncm9lcCc6XG5cdFx0XHRjYXNlICdTdWJwcm9qZWN0Jzpcblx0XHRcdGNhc2UgJ1RhYWsnOlxuXHRcdFx0Y2FzZSAnVGFnJzpcblx0XHRcdGNhc2UgJ1RlbXBsYXRlJzpcblx0XHRcdGNhc2UgJ1RpamQnOlxuXHRcdFx0Y2FzZSAnVGl0ZWwnOlxuXHRcdFx0Y2FzZSAnVHlwZSc6XG5cdFx0XHRjYXNlICdWb2VydHVpZyc6XG5cdFx0XHRcdHJldHVybiAnbmFhbSc7XG5cdFx0XHQvLyBjYXNlICdDb250YWN0Jzpcblx0XHRcdC8vIGNhc2UgJ01lZGV3ZXJrZXInOlxuXHRcdFx0Ly8gY2FzZSAnUGVyc29uJzpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdC8vIG9ubHkgdXNlIGRpc3BsYXluYW1lIGZvciBpdGVtcyB0aGF0IGRvbnQndCBoYXZlIGEgc2ltcGxlLCB3cml0YWJsZSBuYW1lIGZpZWxkXG5cdFx0XHRcdC8vIHRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIGZvciB0ZW1wbGF0ZWQgaXRlbXNcblx0XHRcdFx0cmV0dXJuICdkaXNwbGF5bmFtZSc7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVE9ETzogd2UgY2FuIHJlbW92ZSB0aGVzZSBvbmNlIGFsbCBjb2x1bW5zIGFyZSByZXNwZWN0ZWQgZm9yIGxvY2FsIGl0ZW1zIFtSTTQtMTAzNzhdXG5cdGdldExvY2FsRGVmYXVsdFZhbHVlcyAoKTogRmllbGRNYXAge1xuXHRcdHJldHVybiB7cGVybWlzc2lvbnM6IEFMTF9QRVJNSVNTSU9OUywgY3JlYXRvcjogdGhpcy5hdXRoSW50ZXJmYWNlLmdldFVzZXJJZCgpLCBjcmVhdGVkOiBtb21lbnQoKX07XG5cdH1cblxuXHRoYXNMb2NhbERlZmF1bHRWYWx1ZSAoY29sdW1uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHN3aXRjaCAoY29sdW1uSWQpIHtcblx0XHRcdGNhc2UgJ3Blcm1pc3Npb25zJzpcblx0XHRcdGNhc2UgJ2NyZWF0b3InOlxuXHRcdFx0Y2FzZSAnY3JlYXRlZCc6XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHtcblx0QXBpRm9ybWF0dGVyLFxuXHRBcGlSZXNwb25zZVByb2Nlc3Nvcixcblx0QmF0Y2hTdGF0dXMsXG5cdENvbHVtbkV4cGFuc2lvbixcblx0Q29sdW1uSGFuZGxlcixcblx0Q29sdW1uSW5mbyxcblx0Q29sdW1uU2V0LFxuXHRDb2x1bW5TdWJzZXRDYWNoZSxcblx0Q29sdW1uVXRpbCxcblx0SXRlbUNhY2hlLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0Q29sdW1uU2V0RmFjdG9yeSxcblx0Q29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LFxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxuXHRJdGVtRW50cnlGYWN0b3J5LFxuXHRUZW1wbGF0ZUZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1FbnRyeU9wdGlvbnMsIFRlbXBsYXRlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRBcGlSZXNwb25zZSxcblx0RW50cnlQYXJlbnROdWxsLFxuXHRFbnRyeVN0YXR1cyxcblx0RmllbGRNYXAsXG5cdEl0ZW1JZCxcblx0SXRlbUlkQ29udmVyc2lvbk1hcCxcblx0SXRlbVR5cGUsXG5cdExpbmtlZEl0ZW1FbnRyeU1hcCxcblx0UHJvbWlzZUludGVyZmFjZSxcblx0UmVzcG9uc2VDb2x1bW5NYXAsXG5cdFRlbXBsYXRlSXRlbUVudHJ5TWFwXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSwgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XG5cbi8vIHRvZG8gbWFrZSBjbGFzc1xuXG5leHBvcnQgY2xhc3MgSXRlbUhhbmRsZXIge1xuXHRlbnRyaWVzOiBJdGVtQ2FjaGU7XG5cdHRlbXBsYXRlczoge1tpdGVtVHlwZTogc3RyaW5nXTogVGVtcGxhdGU8YW55Pn0gPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5OiBDb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgdGVtcGxhdGVGYWN0b3J5OiBUZW1wbGF0ZUZhY3Rvcnlcblx0KSB7XG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0ZmV0Y2hJdGVtPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRvcHRpb25zOiBJdGVtRW50cnlPcHRpb25zLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4ge1xuXHRcdGNvbnN0IGVudHJ5U3RhdHVzID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLFxuXHRcdFx0b3B0aW9ucy5wYXJlbnQsXG5cdFx0XHRvcHRpb25zLmRlZmVyUmVxdWVzdCxcblx0XHRcdGxvY2FsSXRlbUNhY2hlLFxuXHRcdFx0dHJ1ZSxcblx0XHRcdHRoaXMuY29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LmNvbnN0cnVjdChvcHRpb25zLmNvbHVtbnMpXG5cdFx0KTtcblxuXHRcdGlmIChlbnRyeVN0YXR1cyA9PT0gbnVsbClcblx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QodGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZVVuZm91bmRMb2NhbEl0ZW1FcnJvcihpdGVtVHlwZSkpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUNhY2hlZChlbnRyeVN0YXR1cy5lbnRyeSwgZW50cnlTdGF0dXMuc3RhdHVzLCBvcHRpb25zLCBsb2NhbEl0ZW1DYWNoZSk7XG5cdH1cblxuXHRmZXRjaE5ld0l0ZW08SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdG9wdGlvbnM6IEl0ZW1FbnRyeU9wdGlvbnMsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPFRlbXBsYXRlSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSBsb2NhbEl0ZW1DYWNoZS5hZGQoXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRvcHRpb25zLmlzRHVwbGljYXRlID8gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsRHVwbGljYXRlSWQoKSA6IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoVGVtcGxhdGUoaXRlbVR5cGUsIG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLCBvcHRpb25zLnRlbXBsYXRlQ29sdW1ucykudGhlbihcblx0XHRcdHRlbXBsYXRlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUxvY2FsKGl0ZW1FbnRyeSwgb3B0aW9ucy5wYXJlbnQsIHRlbXBsYXRlLCBsb2NhbEl0ZW1DYWNoZSk7XG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0Y3JlYXRlQmF0Y2hTdGF0dXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1JZHM6IEl0ZW1JZFtdLFxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRkZWZlclJlcXVlc3Q6IGJvb2xlYW4sXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRhZGRUb0xvY2FsQ2FjaGU6IGJvb2xlYW5cblx0KToge2JhdGNoU3RhdHVzOiBCYXRjaFN0YXR1czxJdGVtVHlwZVR5cGUsIEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Piwgc3VjY2VzczogYm9vbGVhbn0ge1xuXHRcdGNvbnN0IGNvbHVtblN1YnNldENhY2hlOiBDb2x1bW5TdWJzZXRDYWNoZTxJdGVtVHlwZVR5cGU+ID0gdGhpcy5jb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0cmVxdWVzdENvbHVtbnMpO1xuXHRcdGNvbnN0IGJhdGNoU3RhdHVzID0gdGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPikgPT4gaXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+KSA9PiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpXG5cdFx0KTtcblx0XHRsZXQgc3VjY2VzcyA9IHRydWU7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpdGVtSWRzKSB7XG5cdFx0XHRjb25zdCBlbnRyeVN0YXR1cyA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRpdGVtSWQsXG5cdFx0XHRcdHBhcmVudCxcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0LFxuXHRcdFx0XHRsb2NhbEl0ZW1DYWNoZSxcblx0XHRcdFx0YWRkVG9Mb2NhbENhY2hlLFxuXHRcdFx0XHRjb2x1bW5TdWJzZXRDYWNoZVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGVudHJ5U3RhdHVzID09PSBudWxsKSB7XG5cdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGJhdGNoU3RhdHVzLmFkZChlbnRyeVN0YXR1cyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtiYXRjaFN0YXR1czogYmF0Y2hTdGF0dXMsIHN1Y2Nlc3M6IHN1Y2Nlc3N9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvciBldmVyeSBpdGVtIElEIGZpbmQgdGhlIHN0YXR1cyBvZiB0aGUgSXRlbUVudHJ5IGFuZCByZXNvbHZlIHRoZSBwcm9taXNlcyBzbyB0aGUgcmVzdWx0IGlzXG5cdCAqIGEgdXNhYmxlIEl0ZW1FbnRyeVxuXHQgKi9cblx0ZmV0Y2hJdGVtczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUlkczogSXRlbUlkW10sXG5cdFx0b3B0aW9uczogSXRlbUVudHJ5T3B0aW9ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+PiB7XG5cdFx0Y29uc3QgZXJyb3JIYW5kbGVyID0gdGhpcy5lcnJvckhhbmRsZXI7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBvcHRpb25zLmNvbHVtbnM7XG5cblx0XHRjb25zdCB7YmF0Y2hTdGF0dXMsIHN1Y2Nlc3N9ID0gdGhpcy5jcmVhdGVCYXRjaFN0YXR1cyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdG9wdGlvbnMucGFyZW50LFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRvcHRpb25zLmRlZmVyUmVxdWVzdCxcblx0XHRcdGxvY2FsSXRlbUNhY2hlLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cblx0XHRsZXQgcmVzcG9uc2VQcm9taXNlOiBQcm9taXNlSW50ZXJmYWNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB8IG51bGw7XG5cdFx0bGV0IGNvbHVtbnNQcm9taXNlOiBQcm9taXNlSW50ZXJmYWNlPFJlc3BvbnNlQ29sdW1uTWFwPiB8IG51bGw7XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzUmVxdWVzdHMoKSkge1xuXHRcdFx0cmVzcG9uc2VQcm9taXNlID0gdGhpcy5yZXF1ZXN0SXRlbXMoaXRlbVR5cGUsIGJhdGNoU3RhdHVzLmdldFJlcXVlc3RJZHMoKSwgcmVxdWVzdENvbHVtbnMpO1xuXHRcdFx0Y29sdW1uc1Byb21pc2UgPSByZXNwb25zZVByb21pc2UudGhlbihcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdC8vIG5vIGl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQsIHNvIGNsZWFyaW5nIGlzIHN1ZmZpY2llbnQgaGVyZVxuXHRcdFx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcblx0XHRcdFx0XHRcdFtFTlRSWV9TVEFUVVMuUkVTT0xWRV0sXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkgPT4gdGhpcy5jbGVhckl0ZW0oaXRlbUVudHJ5LCBsb2NhbEl0ZW1DYWNoZSlcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhiYXRjaFN0YXR1cy5sb2NhbEV4cGFuZFN0YXR1cykpIHtcblx0XHRcdHJlc3BvbnNlUHJvbWlzZSA9IG51bGw7XG5cdFx0XHRjb2x1bW5zUHJvbWlzZSA9IHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXNwb25zZVByb21pc2UgPSBudWxsO1xuXHRcdFx0Y29sdW1uc1Byb21pc2UgPSBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChcblx0XHRcdHtcblx0XHRcdFx0ZW50cmllczogYmF0Y2hTdGF0dXMuZ2V0UHJvbWlzZXMoKSxcblx0XHRcdFx0cmVzcG9uc2U6IHJlc3BvbnNlUHJvbWlzZSxcblx0XHRcdFx0Y29sdW1uczogY29sdW1uc1Byb21pc2Vcblx0XHRcdH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUJhdGNoUmVzcG9uc2UoXG5cdFx0XHRcdFx0YmF0Y2hTdGF0dXMsXG5cdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUsXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRcdFx0cmVzb2x2ZWQucmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzb2x2ZWQuY29sdW1uc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQocmVzb2x2ZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRcdFx0cmV0dXJuIHJlc29sdmVkICYmIHN1Y2Nlc3MgPyBiYXRjaFN0YXR1cy5nZXRBcnJheSgpIDogZXJyb3JIYW5kbGVyLnJlamVjdCgpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0aGFuZGxlQmF0Y2hSZXNwb25zZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGJhdGNoU3RhdHVzOiBCYXRjaFN0YXR1czxJdGVtVHlwZVR5cGUsIEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2VQcm9jZXNzb3IgfCBudWxsLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAgfCBudWxsLFxuXHRcdGNvbHVtbkV4cGFuc2lvbj86IENvbHVtbkV4cGFuc2lvbjxJdGVtVHlwZVR5cGU+XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gYmF0Y2hTdGF0dXMuaXRlbVR5cGU7XG5cblx0XHRsZXQgc3VjY2VzcyA9IHRydWU7XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLlJFU09MVkVdKSkge1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMhKTtcblxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkVdLFxuXHRcdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRcdGlmICghdGhpcy5yZXNvbHZlUmVtb3RlKGl0ZW1FbnRyeSwgY29sdW1uSW5mbywgcmVzcG9uc2UhLCBsb2NhbEl0ZW1DYWNoZSkpXG5cdFx0XHRcdFx0XHRzdWNjZXNzID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0W0VOVFJZX1NUQVRVUy5SRVNPTFZFX1ZBTFVFU10sXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMucmVzb2x2ZVJlbW90ZVZhbHVlcyhpdGVtRW50cnksIHJlc3BvbnNlISkpXG5cdFx0XHRcdFx0c3VjY2VzcyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMpKSB7XG5cdFx0XHRpZiAoY29sdW1uRXhwYW5zaW9uID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMhKTtcblxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxuXHRcdFx0XHRiYXRjaFN0YXR1cy5yZW1vdGVFeHBhbmRTdGF0dXMsXG5cdFx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUV4cGFuc2lvbihpdGVtRW50cnksIGNvbHVtbkV4cGFuc2lvbiEsIHJlc3BvbnNlISk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoYmF0Y2hTdGF0dXMubG9jYWxFeHBhbmRTdGF0dXMpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRMb2NhbEVudHJpZXMoXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRiYXRjaFN0YXR1cy5nZXRBcnJheShiYXRjaFN0YXR1cy5sb2NhbEV4cGFuZFN0YXR1cyksXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbnMhLFxuXHRcdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdFx0KS50aGVuKFxuXHRcdFx0XHRpdGVtRW50cmllcyA9PiB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVzb2x2ZSgpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHN1Y2Nlc3M7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHN1Y2Nlc3MpO1xuXHR9XG5cblx0cmVzb2x2ZUNhY2hlZDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0c3RhdHVzOiBFTlRSWV9TVEFUVVMsXG5cdFx0b3B0aW9uczogSXRlbUVudHJ5T3B0aW9ucyxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblx0XHRjb25zdCByZWplY3RJdGVtRW50cnkgPSAoZXJyb3I6IGFueSkgPT4geyBpdGVtRW50cnkucmVqZWN0KGVycm9yKTsgfTtcblx0XHRsZXQgY29sdW1uRGlmZmVyZW5jZTogQXBpUmVxdWVzdENvbHVtbnM7XG5cblx0XHRzd2l0Y2ggKHN0YXR1cykge1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuTE9DQUw6IC8vIGhlcmUgZm9yIGNvbXBsZXRpb25cblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkNBQ0hFRDpcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtRW50cnkpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxuXHRcdFx0XHRjb2x1bW5EaWZmZXJlbmNlID0gdGhpcy5nZXRDb2x1bW5EaWZmZXJlbmNlKGl0ZW1FbnRyeSwgb3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1FbnRyeSwgY29sdW1uRGlmZmVyZW5jZSkudGhlbihcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVFeHBhbnNpb24oXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdFx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uRGlmZmVyZW5jZSxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KS5jYXRjaCggLy8gb25mdWxmaWxsZWQgbWlnaHQgcHJvZHVjZSBhbiBlcnJvclxuXHRcdFx0XHRcdHJlamVjdEl0ZW1FbnRyeVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpO1xuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EX0xPQ0FMOlxuXHRcdFx0XHRjb2x1bW5EaWZmZXJlbmNlID0gdGhpcy5nZXRDb2x1bW5EaWZmZXJlbmNlKGl0ZW1FbnRyeSwgb3B0aW9ucy5jb2x1bW5zKTtcblxuXHRcdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbUVudHJ5Lml0ZW1UeXBlLCBjb2x1bW5EaWZmZXJlbmNlKS50aGVuKFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5leHBhbmRMb2NhbEVudHJpZXMoXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdFx0XHRcdFx0W2l0ZW1FbnRyeV0sXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkRpZmZlcmVuY2UsXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGVcblx0XHRcdFx0XHRcdCkudGhlbihcblx0XHRcdFx0XHRcdFx0KCkgPT4gaXRlbUVudHJ5LnJlc29sdmUoKSxcblx0XHRcdFx0XHRcdFx0cmVqZWN0SXRlbUVudHJ5XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVqZWN0SXRlbUVudHJ5XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRQcm9taXNlKCk7XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRfTE9DQUw6XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0UHJvbWlzZSgpLnRoZW4oXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUNhY2hlZChcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNvbHVtblN1YnNldENhY2hlRmFjdG9yeS5jb25zdHJ1Y3Qob3B0aW9ucy5jb2x1bW5zKVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlJFU09MVkVfVkFMVUVTOlxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtKGl0ZW1FbnRyeSkudGhlbihcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVSZW1vdGVWYWx1ZXMoaXRlbUVudHJ5LCByZXNwb25zZSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHRcdCkuY2F0Y2goIC8vIG9uZnVsZmlsbGVkIG1pZ2h0IHByb2R1Y2UgYW4gZXJyb3Jcblx0XHRcdFx0XHRyZWplY3RJdGVtRW50cnlcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmdldFByb21pc2UoKTtcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlJFU09MVkU6XG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW0oaXRlbUVudHJ5KS50aGVuKFxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZVJlbW90ZShcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5yZXNvbHZlKHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKSxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpLmNhdGNoKCAvLyBvbmZ1bGZpbGxlZCBtaWdodCBwcm9kdWNlIGFuIGVycm9yXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5jbGVhckl0ZW0oaXRlbUVudHJ5LCBsb2NhbEl0ZW1DYWNoZSk7XG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRQcm9taXNlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRDb2x1bW5EaWZmZXJlbmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+LCByZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMpOiBBcGlSZXF1ZXN0Q29sdW1ucyB7XG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3QsIHJlcXVlc3RDb2x1bW5zKS5kaWZmZXJlbmNlO1xuXHR9XG5cblx0cmVzb2x2ZUxvY2FsPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGU8SXRlbVR5cGVUeXBlPixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFRlbXBsYXRlSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0Y29uc3QgaXRlbUlkQ29udmVyc2lvbiA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVMb2NhbENvbnZlcnNpb25NYXAoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdHRydWUsXG5cdFx0XHR0ZW1wbGF0ZS5yZXNwb25zZVxuXHRcdCk7XG5cblx0XHRpdGVtRW50cnkuY29sdW1ucyA9IHRlbXBsYXRlLmNvbHVtbnM7XG5cblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0aXRlbUVudHJ5LnNldFBhcmVudChwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQpOyAvLyBjcmVhdGUgbmV3IG9iamVjdFxuXG5cdFx0aXRlbUVudHJ5LnNldExvY2FsRmllbGRzKHRlbXBsYXRlLmZpZWxkcywgaXRlbUlkQ29udmVyc2lvbikucmVzb2x2ZSgpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG1haW46IGl0ZW1FbnRyeSxcblx0XHRcdGxpbmtlZDogdGhpcy5jcmVhdGVMb2NhbEVudHJpZXMoaXRlbVR5cGUsIGl0ZW1JZCwgdGVtcGxhdGUsIGl0ZW1JZENvbnZlcnNpb24sIGxvY2FsSXRlbUNhY2hlKVxuXHRcdH07XG5cdH1cblxuXHRyZXNvbHZlRXhwYW5zaW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbjxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZVxuXHQpOiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblxuXHRcdC8vIEFub3RoZXIgcmVxdWVzdCBhbHJlYWR5IHJlcXVlc3RlZCB0aGUgY29sdW1ucyB3ZSBuZWVkIGhlcmUsIG5vIG5lZWQgdG8gZXhwYW5kIHRoZSBpdGVtIGFuZCByZXNvbHZlIGl0IChhbHJlYWR5IGRvbmUgYnkgb3RoZXIgcmVxdWVzdClcblx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeTtcblxuXHRcdGl0ZW1FbnRyeS5leHBhbmQoXG5cdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSEsXG5cdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgZXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2Uucm9vdCksXG5cdFx0XHRleHBhbnNpb25SZXN1bHRcblx0XHQpO1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5yZXNvbHZlKCk7XG5cdH1cblxuXHRwcml2YXRlIGNsZWFySXRlbSAoaXRlbUVudHJ5OiBJdGVtRW50cnk8YW55PiwgbG9jYWxDYWNoZTogSXRlbUNhY2hlKTogdm9pZCB7XG5cdFx0dGhpcy5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XG5cdFx0bG9jYWxDYWNoZS5jbGVhcihpdGVtRW50cnkpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlUmVtb3RlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRsb2NhbENhY2hlOiBJdGVtQ2FjaGVcblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcmVzcG9uc2VGaWVsZHMgPSB0aGlzLmdldFJlc3BvbnNlRmllbGRzKGl0ZW1FbnRyeSwgY29sdW1uU2V0LCByZXNwb25zZSk7XG5cblx0XHRpZiAocmVzcG9uc2VGaWVsZHMgPT09IG51bGwpIHtcblx0XHRcdHRoaXMuY2xlYXJJdGVtKGl0ZW1FbnRyeSwgbG9jYWxDYWNoZSk7XG5cdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKHJlc3BvbnNlRmllbGRzLmluaXRpYWwsIHJlc3BvbnNlRmllbGRzLmRlcml2ZWQsIGNvbHVtblNldCk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVJlbW90ZVZhbHVlcyAoaXRlbUVudHJ5OiBJdGVtRW50cnk8YW55PiwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcmVzcG9uc2VGaWVsZHMgPSB0aGlzLmdldFJlc3BvbnNlRmllbGRzKGl0ZW1FbnRyeSwgaXRlbUVudHJ5LmNvbHVtbnMsIHJlc3BvbnNlKTtcblxuXHRcdGlmIChyZXNwb25zZUZpZWxkcyA9PT0gbnVsbCkge1xuXHRcdFx0aXRlbUVudHJ5LnJlamVjdCgpO1xuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aXRlbUVudHJ5LnVwZGF0ZUZpZWxkcyhyZXNwb25zZUZpZWxkcy5pbml0aWFsLCByZXNwb25zZUZpZWxkcy5kZXJpdmVkLCBmYWxzZSkucmVzb2x2ZSgpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwcml2YXRlIGdldFJlc3BvbnNlRmllbGRzPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZVxuXHQpOiB7aW5pdGlhbDogRmllbGRNYXA8SXRlbVR5cGVUeXBlPiwgZGVyaXZlZDogRmllbGRNYXB9IHwgbnVsbCB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBpbml0aWFsID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRpZiAoaW5pdGlhbCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aW5pdGlhbDogaW5pdGlhbCxcblx0XHRcdGRlcml2ZWQ6IHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5TZXQucm9vdClcblx0XHR9O1xuXHR9XG5cblx0ZmV0Y2hUZW1wbGF0ZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0dGVtcGxhdGVPcHRpb25zOiBhbnkgPSB7fSxcblx0XHR0ZW1wbGF0ZUNvbHVtbnM6IGFueSA9IHt9XG5cdCk6IFByb21pc2VJbnRlcmZhY2U8VGVtcGxhdGU8SXRlbVR5cGVUeXBlPj4ge1xuXHRcdGNvbnN0IGhhc1RlbXBsYXRlT3B0aW9ucyA9IGhhc1Byb3BlcnRpZXModGVtcGxhdGVPcHRpb25zKTtcblx0XHRjb25zdCBjb2x1bW5JdGVtVHlwZSA9IGdldEZpcnN0UHJvcGVydHkodGVtcGxhdGVDb2x1bW5zKTsgLy8gaXQncyBwb3NzaWJsZSB0byBhZGQgY29sdW1ucyB0byBsaW5rZWQgaXRlbXNcblxuXHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zKSB7XG5cdFx0XHRjb25zdCBjYWNoZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXTtcblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjYWNoZWRUZW1wbGF0ZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdChcblx0XHRcdFx0XHRjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHRoaXMuY29sdW1uVXRpbC5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUoXG5cdFx0XHRcdFx0XHRjb2x1bW5JdGVtVHlwZSxcblx0XHRcdFx0XHRcdHRlbXBsYXRlQ29sdW1uc1tjb2x1bW5JdGVtVHlwZV0sXG5cdFx0XHRcdFx0XHRjYWNoZWRUZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNhY2hlZFRlbXBsYXRlIGFzIFRlbXBsYXRlPEl0ZW1UeXBlVHlwZT4pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChcblx0XHRcdHtcblx0XHRcdFx0dGVtcGxhdGU6IHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHRlbXBsYXRlT3B0aW9ucyksXG5cdFx0XHRcdGFkZGl0aW9uYWxDb2x1bW5zOiBjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCA/XG5cdFx0XHRcdFx0e30gOlxuXHRcdFx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChjb2x1bW5JdGVtVHlwZSwgdGVtcGxhdGVDb2x1bW5zW2NvbHVtbkl0ZW1UeXBlXSlcblx0XHRcdH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZCA9PiB7XG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlUmVzcG9uc2UgPSByZXNvbHZlZC50ZW1wbGF0ZTtcblxuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdGVtcGxhdGVSZXNwb25zZSwgcmVzb2x2ZWQuYWRkaXRpb25hbENvbHVtbnMpO1xuXG5cdFx0XHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zICYmIHRlbXBsYXRlUmVzcG9uc2UuY2FjaGVhYmxlKVxuXHRcdFx0XHRcdHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXSA9IHRlbXBsYXRlO1xuXG5cdFx0XHRcdHJldHVybiB0ZW1wbGF0ZTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0RW50cnlTdGF0dXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhbixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGFkZFRvTG9jYWxDYWNoZTogYm9vbGVhbixcblx0XHRjb2x1bW5TdWJzZXRDYWNoZTogQ29sdW1uU3Vic2V0Q2FjaGU8SXRlbVR5cGVUeXBlPlxuXHQpOiBFbnRyeVN0YXR1czxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4gfCBudWxsIHtcblx0XHRsZXQgaXRlbUVudHJ5O1xuXG5cdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQoaXRlbUlkKSkge1xuXHRcdFx0aXRlbUVudHJ5ID0gbG9jYWxJdGVtQ2FjaGUuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGl0ZW1FbnRyeSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgY29sdW1uU3Vic2V0Q2FjaGUpfTtcblxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZCkgeyAvLyB3ZSdyZSBkZWFsaW5nIHdpdGggYSByZW1vdGUgaXRlbSB0aGF0IGFscmVhZHkgZXhpc3RzIGluIHRoZSBnbG9iYWwgY2FjaGVcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGVudHJ5OiBhZGRUb0xvY2FsQ2FjaGUgPyBsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KSA6IGl0ZW1FbnRyeSxcblx0XHRcdFx0c3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgY29sdW1uU3Vic2V0Q2FjaGUpXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3REZWZlcnJlZCggLy8gY3JlYXRlIGEgbmV3IHJlbW90ZSBpdGVtXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdGNvbHVtblN1YnNldENhY2hlLnJlcXVlc3RDb2x1bW5zLFxuXHRcdFx0ZGVmZXJSZXF1ZXN0XG5cdFx0KTtcblxuXHRcdGlmIChwYXJlbnQgIT09IG51bGwpXG5cdFx0XHRpdGVtRW50cnkuc2V0UGFyZW50KHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCk7XG5cblx0XHRpZiAoYWRkVG9Mb2NhbENhY2hlKVxuXHRcdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XG5cblx0XHR0aGlzLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0ZW50cnk6IGl0ZW1FbnRyeSxcblx0XHRcdHN0YXR1czogZGVmZXJSZXF1ZXN0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlJFU09MVkVcblx0XHR9O1xuXHR9XG5cblx0Z2V0Q2FjaGVkRW50cnlTdGF0dXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdGNvbHVtblN1YnNldENhY2hlOiBDb2x1bW5TdWJzZXRDYWNoZTxJdGVtVHlwZVR5cGU+XG5cdCk6IEVOVFJZX1NUQVRVUyB7XG5cdFx0Y29uc3QgY29sdW1uU2V0ID0gaXRlbUVudHJ5LmNvbHVtbnM7XG5cblx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSkge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5kZWZlclJlcXVlc3QpIHtcblx0XHRcdFx0Y29sdW1uU2V0LmV4cGFuZFJlcXVlc3RDb2x1bW5zKGNvbHVtblN1YnNldENhY2hlLnJlcXVlc3RDb2x1bW5zKTtcblxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlJFU09MVkU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb2x1bW5TdWJzZXRDYWNoZS5ydW4oY29sdW1uU2V0KSlcblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDtcblxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5pc0xvY2FsKCkgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EX0xPQ0FMIDogRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcblx0XHR9XG5cblx0XHRpZiAoIWNvbHVtblN1YnNldENhY2hlLnJ1bihjb2x1bW5TZXQpKSB7XG5cdFx0XHRpdGVtRW50cnkuZGVmZXIoKTtcblxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5pc0xvY2FsKCkgPyBFTlRSWV9TVEFUVVMuRVhQQU5EX0xPQ0FMIDogRU5UUllfU1RBVFVTLkVYUEFORDtcblx0XHR9XG5cblx0XHRpZiAoaXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCkge1xuXHRcdFx0aXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcblx0XHRcdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5DQUNIRUQ7XG5cblx0XHRcdGl0ZW1FbnRyeS5kZWZlcigpO1xuXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlJFU09MVkVfVkFMVUVTO1xuXHRcdH1cblxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xuXHR9XG5cblx0ZmV0Y2hUaXRsZSAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhbiA9IHRydWUsXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPHN0cmluZz4ge1xuXHRcdGNvbnN0IHRpdGxlRmllbGQgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0VGl0bGVGaWVsZChpdGVtVHlwZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5mZXRjaEl0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdG5ldyBJdGVtRW50cnlPcHRpb25zKHtjb2x1bW5zOiBbdGl0bGVGaWVsZF0sIGRlZmVyUmVxdWVzdDogZGVmZXJSZXF1ZXN0fSksXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdCkudGhlbihcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZ2V0RmllbGRzKClbdGl0bGVGaWVsZF07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNyZWF0ZUxvY2FsRW50cmllcyAoXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0bG9jYWxQYXJlbnRJZDogSXRlbUlkLFxuXHRcdHRlbXBsYXRlOiBUZW1wbGF0ZTxJdGVtVHlwZT4sXG5cdFx0aXRlbUlkQ29udmVyc2lvbjogSXRlbUlkQ29udmVyc2lvbk1hcCxcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlLFxuXHRcdGZpbHRlckl0ZW1FbnRyeTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlPikgPT4gYm9vbGVhbiA9ICgpID0+IHRydWUgLy8gcmV0dXJuIHRydWUgdG8gaW5jbHVkZSBpdGVtXG5cdCk6IEFycmF5PExpbmtlZEl0ZW1FbnRyeU1hcDxJdGVtVHlwZT4+IHtcblx0XHRjb25zdCBhcGlSZXNwb25zZSA9IHRlbXBsYXRlLnJlc3BvbnNlO1xuXHRcdGNvbnN0IGl0ZW1FbnRyeU1hcDoge1tpdGVtVHlwZTogc3RyaW5nXTogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlPj59ID0ge307XG5cdFx0Y29uc3QgY29sdW1uU2V0TWFwOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBDb2x1bW5TZXQ8SXRlbVR5cGU+fSA9IHt9O1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8TGlua2VkSXRlbUVudHJ5TWFwPEl0ZW1UeXBlPj4gPSBbXTtcblxuXHRcdGNvbnN0IGNyZWF0ZUVudHJpZXMgPSAoX3BhcmVudFR5cGU6IEl0ZW1UeXBlLCBfbG9jYWxQYXJlbnRJZDogSXRlbUlkLCBhcGlQYXJlbnRJZDogSXRlbUlkKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSB7aXRlbVR5cGU6IF9wYXJlbnRUeXBlLCBpdGVtSWQ6IF9sb2NhbFBhcmVudElkfTtcblx0XHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbX3BhcmVudFR5cGVdW2FwaVBhcmVudElkXS5saW5rcztcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xuXHRcdFx0XHRpZiAoIWxpbmtzLmhhc093blByb3BlcnR5KGl0ZW1UeXBlKSlcblx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHQvLyB0aGUgaXRlbSBlbnRyaWVzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVzdWx0IGluIHRvcC1kb3duIG9yZGVyXG5cdFx0XHRcdGlmIChpdGVtRW50cnlNYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cmllczogaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9IFtdLFxuXHRcdFx0XHRcdFx0XHRjb2x1bW5TZXQ6IGNvbHVtblNldE1hcFtpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0dGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgbGlua3NbaXRlbVR5cGVdKSB7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxJdGVtSWQgPSBpdGVtSWRDb252ZXJzaW9uW2l0ZW1UeXBlXVthcGlJdGVtSWRdO1xuXG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdExvY2FsTGlua2VkKFxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdFx0XHRsb2NhbEl0ZW1JZCxcblx0XHRcdFx0XHRcdGFwaVJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBhcGlJdGVtSWQpISxcblx0XHRcdFx0XHRcdHBhcmVudCxcblx0XHRcdFx0XHRcdGNvbHVtblNldE1hcFtpdGVtVHlwZV0sXG5cdFx0XHRcdFx0XHRpdGVtSWRDb252ZXJzaW9uXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGlmICghZmlsdGVySXRlbUVudHJ5KGl0ZW1FbnRyeSkpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpO1xuXHRcdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xuXG5cdFx0XHRcdFx0Y3JlYXRlRW50cmllcyhpdGVtVHlwZSwgbG9jYWxJdGVtSWQsIGFwaUl0ZW1JZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y3JlYXRlRW50cmllcyhwYXJlbnRUeXBlLCBsb2NhbFBhcmVudElkLCBhcGlSZXNwb25zZS5saW5rc1twYXJlbnRUeXBlXVswXSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZXhwYW5kTG9jYWxFbnRyaWVzPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLFxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4+IHtcblx0XHRpZiAoaXRlbUVudHJpZXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtRW50cmllcyk7XG5cblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcblxuXHRcdFx0aWYgKGV4cGFuc2lvblJlc3VsdCAhPT0gbnVsbClcblx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZExvY2FsKGV4cGFuc2lvblJlc3VsdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZURlcml2ZWRWYWx1ZXMoaXRlbUVudHJpZXMsIGNvbHVtbkV4cGFuc2lvbi5hZ2dyZWdhdGVSb290Q29sdW1ucygpLCBsb2NhbEl0ZW1DYWNoZSk7XG5cdH1cblxuXHRyZXNvbHZlRGVyaXZlZFZhbHVlczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0Y29sdW1uczogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+Pixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+PiB7XG5cdFx0Y29uc3QgcHJvbWlzZXM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8YW55Pj4gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXG5cdFx0XHRwcm9taXNlcy5wdXNoKHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzQnlDb2x1bW4oaXRlbUVudHJpZXMsIGNvbHVtbiwgbG9jYWxJdGVtQ2FjaGUpKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcykudGhlbihcblx0XHRcdCgpID0+IGl0ZW1FbnRyaWVzLFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0RGVmYXVsdFZhbHVlc0J5Q29sdW1uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRyb290Q29sdW1uOiBDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT5cblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgY2hpbGRDb2x1bW5zID0gcm9vdENvbHVtbi5jaGlsZHJlbjtcblxuXHRcdGlmIChjaGlsZENvbHVtbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Ly8gbm8gbmVlZCB0byBkbyBhIHJlY3Vyc2l2ZSBjYWxsIGhlcmUsIGZ1bmN0aW9uIHdpbGwgZ2V0IGNhbGxlZCBtdWx0aXBsZSB0aW1lc1xuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNoaWxkQ29sdW1ucykge1xuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRcdGl0ZW1FbnRyeS5kZXJpdmVkW2NvbHVtbi5wYXRoXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmdldERlZmF1bHRWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0SXRlbUlkQnlDb2x1bW48SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdGNvbHVtbjogQ29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+XG5cdCk6IEl0ZW1JZCB7XG5cdFx0aWYgKGNvbHVtbi5sZXZlbCA9PT0gMCkge1xuXHRcdFx0aWYgKGNvbHVtbi5hcGlDb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGl0ZW1FbnRyeS5wYXJlbnQgIT09IG51bGwpXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkucGFyZW50Lml0ZW1JZDtcblxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5nZXRGaWVsZHMoKVtjb2x1bW4ucGF0aF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZXJpdmVkW2NvbHVtbi5wYXRoXTtcblx0fVxuXG5cdHByaXZhdGUgZmV0Y2hEZXJpdmVkVmFsdWVzQnlDb2x1bW48SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdHJvb3RDb2x1bW46IENvbHVtbkluZm88SXRlbVR5cGVUeXBlPixcblx0XHRsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8dm9pZCB8IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pj4ge1xuXHRcdGNvbnN0IGNoaWxkQ29sdW1ucyA9IHJvb3RDb2x1bW4uY2hpbGRyZW47XG5cblx0XHRpZiAoY2hpbGRDb2x1bW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblxuXHRcdGNvbnN0IGZpcnN0Q2hpbGQgPSBjaGlsZENvbHVtbnNbMF07XG5cblx0XHRpZiAoY2hpbGRDb2x1bW5zLmxlbmd0aCA9PT0gMSAmJiBmaXJzdENoaWxkLmFwaUNvbHVtbi50eXBlID09PSAnaWQnKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcblx0XHRcdFx0aXRlbUVudHJ5LmRlcml2ZWRbZmlyc3RDaGlsZC5wYXRoXSA9IHRoaXMuZ2V0SXRlbUlkQnlDb2x1bW4oaXRlbUVudHJ5LCByb290Q29sdW1uKTtcblxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGl0ZW1JZE1hcDoge1tpdGVtSWQ6IHN0cmluZ106IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pn0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZEJ5Q29sdW1uKGl0ZW1FbnRyeSwgcm9vdENvbHVtbik7XG5cblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRpdGVtSWRNYXBbaXRlbUlkXSA9IFtdO1xuXG5cdFx0XHRpdGVtSWRNYXBbaXRlbUlkXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXG5cdFx0aWYgKGl0ZW1JZE1hcC5udWxsICE9PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLnNldERlZmF1bHRWYWx1ZXNCeUNvbHVtbihpdGVtSWRNYXAubnVsbCwgcm9vdENvbHVtbik7XG5cblx0XHRjb25zdCBpdGVtSWRzOiBJdGVtSWRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUlkTWFwKSB7XG5cdFx0XHRpZiAoaXRlbUlkID09PSAnbnVsbCcpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpdGVtSWRzLnB1c2goK2l0ZW1JZCk7XG5cdFx0fVxuXG5cdFx0aWYgKGl0ZW1JZHMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXG5cdFx0Y29uc3QgY29sdW1uSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY2hpbGRDb2x1bW5zKVxuXHRcdFx0Y29sdW1uSWRzLnB1c2goY29sdW1uLmlkKTtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoSXRlbXMoXG5cdFx0XHRyb290Q29sdW1uLml0ZW1UeXBlISxcblx0XHRcdGl0ZW1JZHMsXG5cdFx0XHRuZXcgSXRlbUVudHJ5T3B0aW9ucyh7Y29sdW1uczogY29sdW1uSWRzfSksXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZVxuXHRcdCkudGhlbihcblx0XHRcdHNvdXJjZUl0ZW1FbnRyaWVzID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2Ygc291cmNlSXRlbUVudHJpZXMpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnlGaWVsZHMgPSBpdGVtRW50cnkuZ2V0RmllbGRzKCk7XG5cdFx0XHRcdFx0Y29uc3QgZGVzdGluYXRpb25JdGVtRW50cmllcyA9IGl0ZW1JZE1hcFtpdGVtRW50cnkuaXRlbUlkXTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgZGVzdGluYXRpb25JdGVtRW50cnkgb2YgZGVzdGluYXRpb25JdGVtRW50cmllcykge1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY2hpbGRDb2x1bW5zKVxuXHRcdFx0XHRcdFx0XHRkZXN0aW5hdGlvbkl0ZW1FbnRyeS5kZXJpdmVkW2NvbHVtbi5wYXRoXSA9IGl0ZW1FbnRyeUZpZWxkc1tjb2x1bW4uaWRdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVEZXJpdmVkVmFsdWVzKGl0ZW1FbnRyaWVzLCBjaGlsZENvbHVtbnMsIGxvY2FsSXRlbUNhY2hlKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdEl0ZW0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5PGFueT4sIHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3QpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0SXRlbXMoaXRlbUVudHJ5Lml0ZW1UeXBlLCBbaXRlbUVudHJ5Lml0ZW1JZF0sIHJlcXVlc3RDb2x1bW5zKTtcblx0fVxuXG5cdHJlcXVlc3RJdGVtcyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdGl0ZW1JZHM6IEl0ZW1JZFtdLFxuXHRcdGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiBpdGVtSWRzfSwge1tpdGVtVHlwZV06IGNvbHVtbnN9KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IsIENvbHVtbkV4cGFuc2lvbiwgQ29sdW1uU2V0LCBJdGVtSGFuZGxlciwgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBBcGlRdWVyeSwgQXBpUmVxdWVzdENvbHVtbnMsIEFwaVJlc3BvbnNlLCBFbnRyeVBhcmVudE51bGwsIEl0ZW1JZCwgSXRlbVR5cGUsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IHBhdGhFeGlzdHMgfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY2xhc3MgSXRlbVJlcXVlc3RTZXJ2aWNlIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdHJlcXVlc3RJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IFByb21pc2VJbnRlcmZhY2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHtpZDogaXRlbUlkfSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zXG5cdFx0KTtcblx0fVxuXG5cdHJlcXVlc3RJdGVtczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0cXVlcnk6IEFwaVF1ZXJ5ID0gY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCxcblx0XHRjb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnNcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKFxuXHRcdFx0e1xuXHRcdFx0XHRyZXF1ZXN0VHlwZTogJ3F1ZXJ5Jyxcblx0XHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0XHRjb2x1bW5zOiB7W2l0ZW1UeXBlXTogY29sdW1uc30sXG5cdFx0XHRcdHF1ZXJ5OiBxdWVyeSxcblx0XHRcdFx0bGltaXQ6IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmxpbWl0XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdHJlcXVlc3RMaW5rSXRlbXMgKFxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxuXHRcdHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRxdWVyeTogQXBpUXVlcnksXG5cdFx0Y29sdW1uczogQXBpUmVxdWVzdENvbHVtbnNcblx0KTogUHJvbWlzZUludGVyZmFjZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgP1xuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0cGFyZW50VHlwZSxcblx0XHRcdFx0e2lkOiBwYXJlbnRJZEFycmF5fSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHRcdCkgOlxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcblx0XHRcdFx0XHRxdWVyeSxcblx0XHRcdFx0XHR7bGlua2VkVG86IHBhcmVudFR5cGUsIHF1ZXJ5OiB7aWQ6IHBhcmVudElkQXJyYXl9fVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyAvLyBzaG91bGQgY29udGFpbiBhIGRlcml2ZWQgY29sdW1uIHRoYXQgcmVmZXJzIHRvIHRoZSBwYXJlbnRcblx0XHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzRXhwYW5zaW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj5cblx0KSB7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXG5cdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0xvY2FsKCkpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oaXRlbUVudHJ5LCByZXNwb25zZSwgY29sdW1uRXhwYW5zaW9uKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uO1xuXHR9XG5cblx0cHJvY2Vzc1Jlc3BvbnNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4sXG5cdFx0Y29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb248SXRlbVR5cGVUeXBlPiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXG5cdFx0XHRjb2x1bW5TZXQuaXRlbVR5cGUsXG5cdFx0XHRjb2x1bW5TZXQucmVxdWVzdENvbHVtbnNUcnVlID8gdHJ1ZSA6IGNvbHVtblNldC5yZXF1ZXN0LFxuXHRcdFx0Y29sdW1uU2V0LnJlc3BvbnNlXG5cdFx0KVxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pj4ge1xuXHRcdGNvbnN0IGl0ZW1IYW5kbGVyID0gdGhpcy5pdGVtSGFuZGxlcjtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtblNldC5pdGVtVHlwZTtcblx0XHRjb25zdCByb290Q29sdW1ucyA9IGNvbHVtblNldC5yb290O1xuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4gPSBbXTtcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEFycmF5PFByb21pc2VJbnRlcmZhY2U8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+PiA9IFtdO1xuXG5cdFx0Ly8gc2hvdWxkIGJlIGZhc3QuLi5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpZEFycmF5KSB7XG5cdFx0XHRsZXQgaXRlbUVudHJ5ID0gaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0XHRcdGl0ZW1JZCxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSEsXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcblx0XHRcdFx0XHRjb2x1bW5TZXRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpdGVtSGFuZGxlci5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xuXHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSkge1xuXHRcdFx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XG5cdFx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKFxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpISxcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtblNldFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5LmdldFByb21pc2UoKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXRlbUVudHJ5LnJlbG9hZFF1ZXVlZCkge1xuXHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWxvYWRRdWV1ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRpdGVtRW50cnkudXBkYXRlRmllbGRzKFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCkhLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcblx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2godGhpcy5oYW5kbGVDYWNoZWRJdGVtKGl0ZW1FbnRyeSwgcmVzcG9uc2UsIGNvbHVtbkV4cGFuc2lvbikpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxuXHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXG5cdFx0XHRyZXNvbHZlZEVudHJpZXMgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHJlc29sdmVkRW50cnkgb2YgcmVzb2x2ZWRFbnRyaWVzKSB7XG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWRFbnRyeSxcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGhhbmRsZUNhY2hlZEl0ZW08SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcblx0XHRjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbjxJdGVtVHlwZVR5cGU+XG5cdCkge1xuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xuXG5cdFx0cmV0dXJuIGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbCA/XG5cdFx0XHRpdGVtRW50cnkgOlxuXHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkKSEsXG5cdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChcblx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXG5cdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdFx0XHRleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290XG5cdFx0XHRcdCksXG5cdFx0XHRcdGV4cGFuc2lvblJlc3VsdFxuXHRcdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NMaW5rUmVzcG9uc2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10sXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRvcHRpb25zOiBhbnlcblx0KSB7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0Y29uc3QgY29sdW1uU2V0ID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0XHRjb25zdCBwYXJlbnRJdGVtcyA9IHJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGVdO1xuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xuXHRcdFx0cHJvbWlzZXNbcGFyZW50SWRdID0gcGF0aEV4aXN0cyhwYXJlbnRJdGVtcywgW3BhcmVudElkLCAnbGlua3MnLCBpdGVtVHlwZV0pID9cblx0XHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cGFyZW50SXRlbXNbcGFyZW50SWRdLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHR7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9LFxuXHRcdFx0XHRcdGNvbHVtblNldCxcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cblx0XHRcdFx0KSA6XG5cdFx0XHRcdFtdO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcykudGhlbihcblx0XHRcdHJlc29sdmVkID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRpdGVtczogcmVzb2x2ZWQsXG5cdFx0XHRcdFx0Y29sdW1uczogY29sdW1uU2V0LFxuXHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvbjogY29sdW1uRXhwYW5zaW9uXG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgRFVQTElDQVRFX0tFWVdPUkQsIERVUExJQ0FURV9QUkVGSVgsIE5FV19LRVlXT1JELCBORVdfUFJFRklYIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEl0ZW1JZCwgU3RhdGVLZXksIFN0YXRlS2V5VHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEtleVNlcnZpY2Uge1xuXHRzZXBhcmF0b3I6IHN0cmluZyA9ICc6JztcblxuXHRjb25zdHJ1Y3RvciAoKSB7fVxuXG5cdGdldFNpbmdsZUtleSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBpdGVtVHlwZSArIHRoaXMuc2VwYXJhdG9yICsgaXRlbUlkO1xuXHR9XG5cblx0Z2V0Q3NzS2V5ICguLi5hcmdzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYXJncy5qb2luKCdfJyk7XG5cdH1cblxuXHRwYXJzZVN0YXRlS2V5IChzdGF0ZUtleTogc3RyaW5nKTogU3RhdGVLZXkgfCBudWxsIHtcblx0XHRzdGF0ZUtleSA9IHN0YXRlS2V5LnRvU3RyaW5nKCk7XG5cblx0XHRpZiAoc3RhdGVLZXkuc3Vic3RyaW5nKDAsIE5FV19LRVlXT1JELmxlbmd0aCkgPT09IE5FV19LRVlXT1JEKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogU3RhdGVLZXlUeXBlLk5ldyxcblx0XHRcdFx0dGVtcGxhdGU6IHN0YXRlS2V5LnN1YnN0cmluZyhORVdfS0VZV09SRC5sZW5ndGgpIC8vIFRPRE86IHRoaXMgaXMgY3VycmVudGx5IG5vdCBiZWluZyB1c2VkLCByZWV2YWx1YXRlXG5cdFx0XHR9O1xuXG5cdFx0aWYgKHN0YXRlS2V5LnN1YnN0cmluZygwLCBEVVBMSUNBVEVfS0VZV09SRC5sZW5ndGgpID09PSBEVVBMSUNBVEVfS0VZV09SRClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IFN0YXRlS2V5VHlwZS5EdXBsaWNhdGUsXG5cdFx0XHRcdGl0ZW1JZDogK3N0YXRlS2V5LnN1YnN0cmluZyhEVVBMSUNBVEVfS0VZV09SRC5sZW5ndGgpXG5cdFx0XHR9O1xuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnZXREdXBsaWNhdGVTdGF0ZUtleSAoaXRlbUlkOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuXHRcdHJldHVybiBEVVBMSUNBVEVfS0VZV09SRCArIGl0ZW1JZDtcblx0fVxuXG5cdGdldE5ld1N0YXRlS2V5ICh0ZW1wbGF0ZVR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIE5FV19LRVlXT1JEICsgdGVtcGxhdGVUeXBlO1xuXHR9XG5cblx0Z2V0TG9jYWxJZCAoKTogSXRlbUlkIHtcblx0XHRyZXR1cm4gKyhORVdfUFJFRklYICsgdGhpcy5nZXRSYW5kb21TdHJpbmcoKSk7XG5cdH1cblxuXHRnZXRMb2NhbER1cGxpY2F0ZUlkICgpOiBJdGVtSWQge1xuXHRcdHJldHVybiArKERVUExJQ0FURV9QUkVGSVggKyB0aGlzLmdldFJhbmRvbVN0cmluZygpKTtcblx0fVxuXG5cdGdldFJhbmRvbVN0cmluZyAoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKCcnICsgTWF0aC5yYW5kb20oKSkuc3BsaXQoJy4nKVsxXS5zdWJzdHIoMCwgOCk7XG5cdH1cblxuXHQvLyBub3RlOiB0aGUgY2hhbmdlcyBjb21waWxlciB1c2VzIHRoaXNcblx0Ly8gbWlnaHQgYmUgY2FsbGVkIHdpdGggdW5kZWZpbmVkIChpdGVtSGFuZGxlci5jcmVhdGVSZXF1ZXN0KVxuXHRpc0xvY2FsSWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGl0ZW1JZCAhPT0gdW5kZWZpbmVkICYmICh0aGlzLmlzTmV3SWQoaXRlbUlkKSB8fCB0aGlzLmlzRHVwbGljYXRlSWQoaXRlbUlkKSk7XG5cdH1cblxuXHRpc05ld0lkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBpdGVtSWQgPT09IE5FV19LRVlXT1JEIHx8ICgnJyArIGl0ZW1JZCkuc3Vic3RyaW5nKDAsIE5FV19QUkVGSVgubGVuZ3RoKSA9PT0gTkVXX1BSRUZJWDtcblx0fVxuXG5cdGlzRHVwbGljYXRlSWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGl0ZW1JZCA9PT0gRFVQTElDQVRFX0tFWVdPUkQgfHwgKCcnICsgaXRlbUlkKS5zdWJzdHJpbmcoMCwgRFVQTElDQVRFX1BSRUZJWC5sZW5ndGgpID09PSBEVVBMSUNBVEVfUFJFRklYO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciwgQ29sbGVjdGlvbk1hdGNoZXIsIENvbHVtblNldCwgTG9jYWxDYWNoZSwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeSxcblx0Q29sbGVjdGlvbkVudHJ5T3B0aW9ucyxcblx0Q29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZSxcblx0Q29sbGVjdGlvblJlc291cmNlLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRJdGVtRW50cnksXG5cdEl0ZW1FbnRyeU9wdGlvbnNJbnRlcmZhY2UsXG5cdEl0ZW1SZXNvdXJjZSxcblx0SXRlbVJlc291cmNlT3B0aW9uc0ludGVyZmFjZVxufSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgdHlwZSBFbnRyeVBhcmVudCA9IHtpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQ6IG51bWJlcn07XG5cbmV4cG9ydCB0eXBlIEVudHJ5UGFyZW50TnVsbCA9IEVudHJ5UGFyZW50IHwgbnVsbDtcblxuLy8gIF9JdGVtVHlwZVR5cGUgaXMgcHVyZWx5IHRoZXJlIHRvIGF1dG9tYXRpY2FsbHkgaW5mZXIgdGhlIEl0ZW1UeXBlIG9mIEl0ZW1FbnRyaWVzIGluIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW86XG4vLyBjb25zdCBJdGVtRW50cnkgPSBjb3JlLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KCA8LSBJdGVtRW50cnkgd2lsbCBiZSBvZiBJdGVtVHlwZSAnRmlsZXMnIGJlY2F1c2Ugb2YgJ3Jlc3BvbnNlUHJvY2Vzc29yLmZldGNoT2JqZWN0J1xuLy8gXHRpdGVtSWQsXG4vLyBcdHJlc3BvbnNlUHJvY2Vzc29yLmZldGNoT2JqZWN0KCdGaWxlcycsIGl0ZW1JZCksXG4vLyBcdHt9LFxuLy8gXHRjb2x1bW5JbmZvXG4vLyApO1xuZXhwb3J0IHR5cGUgRmllbGRNYXA8X0l0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlID0gYW55PiA9IHtcblx0W2tleTogc3RyaW5nXTogYW55XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtT3B0aW9uc0ludGVyZmFjZSA9IEl0ZW1FbnRyeU9wdGlvbnNJbnRlcmZhY2UgJiBJdGVtUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlO1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSA9IGFueT4gPVxuXHRDb2xsZWN0aW9uRW50cnlPcHRpb25zSW50ZXJmYWNlXG5cdCYgQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25EZWZpbml0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlID0gYW55PiB7XG5cdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGU7XG5cdG9wdGlvbnM6IHtlbnRyeTogQ29sbGVjdGlvbkVudHJ5T3B0aW9ucywgcmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnM8SXRlbVR5cGVUeXBlPn07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlua0NvbGxlY3Rpb25EZWZpbml0aW9uPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlID0gYW55PiBleHRlbmRzIENvbGxlY3Rpb25EZWZpbml0aW9uPEl0ZW1UeXBlVHlwZT4ge1xuXHRsaW5rRmllbGQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgT25DaGFuZ2VGdW5jdGlvbjxJdGVtUmVzb3VyY2VUeXBlIGV4dGVuZHMgSXRlbVJlc291cmNlPGFueT4gPSBJdGVtUmVzb3VyY2U8YW55Pj4gPSAoXG5cdGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlVHlwZSxcblx0cHJldmlvdXM/OiBGaWVsZE1hcDxJdGVtUmVzb3VyY2VUeXBlWydlbnRyeSddWydpdGVtVHlwZSddPlxuKSA9PiB2b2lkO1xuXG5leHBvcnQgY29uc3QgZW51bSBTdGF0ZUtleVR5cGUge1xuXHROZXcgPSAnbmV3Jyxcblx0RHVwbGljYXRlID0gJ2R1cGxpY2F0ZSdcbn1cblxuZXhwb3J0IHR5cGUgU3RhdGVLZXkgPSB7dHlwZTogU3RhdGVLZXlUeXBlLCB0ZW1wbGF0ZT86IHN0cmluZywgaXRlbUlkPzogbnVtYmVyfTtcblxuZXhwb3J0IHR5cGUgT25TYXZlQ2FsbGJhY2sgPSAobG9jYWxDYWNoZTogTG9jYWxDYWNoZSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gYW55O1xuXG5leHBvcnQgZW51bSBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24ge1xuXHRBbHdheXMgPSAnYWx3YXlzJyxcblx0T25DbG9zZSA9ICdvbkNsb3NlJyxcblx0U2tpcE9uQ2xvc2UgPSAnc2tpcE9uQ2xvc2UnXG59XG5cbmV4cG9ydCB0eXBlIExvY2FsQ2FjaGVDYWxsYmFja3M8VD4gPSB7XG5cdGFsd2F5czoge1trZXk6IHN0cmluZ106IFR9LFxuXHRvbkNsb3NlOiB7W2tleTogc3RyaW5nXTogVH0sXG5cdHNraXBPbkNsb3NlOiB7W2tleTogc3RyaW5nXTogVH1cbn07XG5cbmV4cG9ydCB0eXBlIFNvY2tldE1lc3NhZ2VUeXBlID0gJ2V2ZW50JyB8ICdub3RpZmljYXRpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvY2tldE1lc3NhZ2Uge1xuXHRoZWFkZXI6IHtcblx0XHRkb21haW46IHN0cmluZyxcblx0XHRhY2NvdW50OiBzdHJpbmcsXG5cdFx0c2VuZGVyOiB7XG5cdFx0XHRkaXNwbGF5bmFtZTogc3RyaW5nLFxuXHRcdFx0aXRlbVR5cGU6ICdNZWRld2Vya2VyJyxcblx0XHRcdGl0ZW1JZDogSXRlbUlkLFxuXHRcdFx0YXV0aG9yaXplZDogYm9vbGVhbixcblx0XHRcdHNlc3Npb246IHN0cmluZ1xuXHRcdH0sXG5cdFx0bWVzc2FnZUlkOiB7XG5cdFx0XHRJZDogc3RyaW5nLFxuXHRcdFx0c2VxdWVuY2U6IG51bWJlcixcblx0XHRcdGJhdGNoOiBudW1iZXIsXG5cdFx0XHRyZXF1ZXN0OiBudW1iZXJcblx0XHR9LFxuXHRcdHNlbnQ6IHN0cmluZyxcblx0XHRmb3JjZUV2YWx1YXRlOiBib29sZWFuXG5cdH07XG5cdGJvZHk6IGFueTtcblx0bWVzc2FnZVR5cGU6IFNvY2tldE1lc3NhZ2VUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmVTb2NrZXRNZXNzYWdlIGV4dGVuZHMgU29ja2V0TWVzc2FnZSB7XG5cdGJvZHk6IHtcblx0XHRpdGVtVHlwZTogJ0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUnLFxuXHRcdFtrZXk6IHN0cmluZ106IGFueVxuXHR9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJdGVtIHJlc291cmNlXG5cbmV4cG9ydCB0eXBlIEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcDxUIGV4dGVuZHMgSXRlbVJlc291cmNlPGFueT4gPSBJdGVtUmVzb3VyY2U8YW55Pj4gPSB7XG5cdFtpdGVtSWQ6IG51bWJlcl06IFRcbn07XG5cbmV4cG9ydCB0eXBlIEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcDxUIGV4dGVuZHMgSXRlbVJlc291cmNlPGFueT4gPSBJdGVtUmVzb3VyY2U8YW55Pj4gPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXTogVFtdXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJdGVtIEVudHJ5XG5cbmV4cG9ydCB0eXBlIEl0ZW1JZCA9IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgSXRlbVR5cGUgPSBzdHJpbmc7XG5cbmV4cG9ydCB0eXBlIEl0ZW1NYXA8VD4gPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXToge1xuXHRcdFtpdGVtSWQ6IHN0cmluZ106IFRcblx0fVxufTtcblxuZXhwb3J0IHR5cGUgSXRlbUVudHJ5TWFwPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiA9IEl0ZW1NYXA8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+O1xuXG5leHBvcnQgdHlwZSBMaW5rZWRJdGVtRW50cnlNYXA8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUgPSBhbnk+ID0ge1xuXHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRjb2x1bW5TZXQ6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+XG59O1xuXG5leHBvcnQgdHlwZSBFbnRyeVN0YXR1c01hcDxUPiA9IHtcblx0W2VudHJ5U3RhdHVzOiBzdHJpbmddOiBUW107XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtRW50cnlQYXJlbnRJZE1hcDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gPSB7XG5cdFtwYXJlbnRJZDogbnVtYmVyXTogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+O1xufTtcblxuZXhwb3J0IHR5cGUgQ29udmVyc2lvbk1hcCA9IHtcblx0W2l0ZW1JZDogbnVtYmVyXTogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgSXRlbUlkQ29udmVyc2lvbk1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBDb252ZXJzaW9uTWFwXG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwPFQgPSBhbnk+ID0gSXRlbU1hcDxUPjtcblxuZXhwb3J0IHR5cGUgSXRlbUVycm9yID0ge21lc3NhZ2U6IHN0cmluZ307XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENvbGxlY3Rpb24gRW50cnlcblxuZXhwb3J0IHR5cGUgUXVlcnlQYXJhbXMgPSBhbnk7IC8vIFRPRE9cblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblF1ZXJ5ID0ge29iamVjdDogb2JqZWN0LCBzdHJpbmc6IHN0cmluZ307XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5Q2FsbGJhY2sgPSAocXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zKSA9PiBRdWVyeVBhcmFtcztcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ID0ge1xuXHRbcGFyZW50SWQ6IG51bWJlcl06IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+XG59O1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxUIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlPGFueT4gPSBDb2xsZWN0aW9uUmVzb3VyY2U8YW55Pj4gPSB7XG5cdFtwYXJlbnRJZDogbnVtYmVyXTogVFxufTtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbk1hdGNoUmVzdWx0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiA9IHtcblx0Zml0dGluZzogQXJyYXk8Q29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRub3RmaXR0aW5nOiBBcnJheTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdG1heWJlOiBBcnJheTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPj5cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IGV4dGVuZHMgQ29sbGVjdGlvbk1hdGNoUmVzdWx0PEl0ZW1UeXBlVHlwZT4ge1xuXHRjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IHtcblx0W2NvbGxlY3Rpb25JZDogbnVtYmVyXTogRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8SXRlbVR5cGVUeXBlPjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ29sdW1uc1xuXG5leHBvcnQgdHlwZSBSZXNwb25zZUNvbHVtbiA9IGFueTsgLy8gVE9ET1xuXG5leHBvcnQgdHlwZSBSZXNwb25zZUNvbHVtbk1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiB7XG5cdFx0W2NvbHVtbklkOiBzdHJpbmddOiBSZXNwb25zZUNvbHVtblxuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBDb2x1bW5FeHBhbnNpb25SZXN1bHQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ID0ge1xuXHRtZXJnZWQ6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+LFxuXHRkaWZmZXJlbmNlOiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPlxufTtcblxuZXhwb3J0IHR5cGUgUm9vdENvbHVtbk1hcCA9IHtbY29sdW1uSWQ6IHN0cmluZ106IHthcGlDb2x1bW46IFJlc3BvbnNlQ29sdW1uLCBjaGlsZHJlbjogUm9vdENvbHVtbk1hcH19O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBcGkgcmVmZXJlbmNlXG5cbmV4cG9ydCB0eXBlIEFwaVJlc3BvbnNlID0gQXBpUmVzcG9uc2VQcm9jZXNzb3I7IC8vIFRPRE9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQXBpIHRlbXBsYXRlIHJlc3BvbnNlXG5leHBvcnQgdHlwZSBUZW1wbGF0ZUl0ZW1SZXNvdXJjZU1hcDxUIGV4dGVuZHMgSXRlbVJlc291cmNlPGFueT4+ID0ge1xuXHRtYWluOiBUO1xuXHRsaW5rZWQ6IEl0ZW1SZXNvdXJjZXNJdGVtVHlwZU1hcFxufTtcblxuZXhwb3J0IHR5cGUgVGVtcGxhdGVJdGVtRW50cnlNYXA8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+ID0ge1xuXHRtYWluOiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPjtcblx0bGlua2VkOiBBcnJheTxMaW5rZWRJdGVtRW50cnlNYXA8SXRlbVR5cGU+Pjtcbn07XG5cbmV4cG9ydCB0eXBlIEl0ZW1UeXBlTWFwID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IGFueTtcbn07XG5cbmV4cG9ydCB0eXBlIEVudHJ5U3RhdHVzPFQ+ID0ge1xuXHRlbnRyeTogVDtcblx0c3RhdHVzOiBFTlRSWV9TVEFUVVM7XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBBcGkgcmVxdWVzdFxuXG5leHBvcnQgdHlwZSBBcGlRdWVyeSA9IGFueTsgLy8gVE9ET1xuXG5leHBvcnQgdHlwZSBBcGlSZXF1ZXN0SXRlbVZhbHVlcyA9IHtcblx0dmFsdWVzPzogYW55LFxuXHRsaW5rcz86IHtcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IEl0ZW1JZFtdXG5cdH1cbn07XG5cbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RJdGVtTWFwID0ge1xuXHRbaXRlbVR5cGU6IHN0cmluZ106IHtcblx0XHRbaXRlbUlkOiBudW1iZXJdOiBBcGlSZXF1ZXN0SXRlbVZhbHVlc1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdENvbHVtbiA9IHN0cmluZyB8IHtbY29sdW1uSWQ6IHN0cmluZ106IEFwaVJlcXVlc3RDb2x1bW5bXX07XG5cbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RDb2x1bW5zID0gQXBpUmVxdWVzdENvbHVtbltdIHwgdHJ1ZTtcblxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdENvbHVtbk1hcCA9IHtcblx0W2l0ZW1UeXBlOiBzdHJpbmddOiBBcGlSZXF1ZXN0Q29sdW1uc1xufTtcblxuZXhwb3J0IHR5cGUgQXBpUmVxdWVzdExpbWl0ID0ge1xuXHRmaWVsZDogc3RyaW5nLFxuXHRsaW1pdDogbnVtYmVyLFxuXHRvZmZzZXQ/OiBudW1iZXIsXG5cdG9yZGVyPzogJ2Rlc2MnIHwgJ2FzYydcbn07XG5cbmV4cG9ydCB0eXBlIEFwaVJlcXVlc3RNb3ZlSXRlbXMgPSB7XG5cdFtpdGVtVHlwZTogc3RyaW5nXTogSXRlbUlkW11cbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENyZWF0ZSByZXF1ZXN0XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVJlcXVlc3RFbnRyeTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gPSB7XG5cdHJlcXVlc3Q6IHtcblx0XHRyZXF1ZXN0VHlwZTogJ2NyZWF0ZScsXG5cdFx0aXRlbVR5cGU/OiBJdGVtVHlwZVR5cGUsXG5cdFx0cGFyZW50VHlwZT86IEl0ZW1UeXBlLFxuXHRcdHBhcmVudElkPzoge1tpdGVtSWQ6IHN0cmluZ106IEl0ZW1JZH0sXG5cdFx0aXRlbXM6IEFwaVJlcXVlc3RJdGVtTWFwLFxuXHRcdGNvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5NYXBcblx0fSxcblx0Y29sdW1uczogUmVxdWVzdENvbHVtbkV4cGFuc2lvbixcblx0aXRlbXM6IEl0ZW1FbnRyeU1hcDxJdGVtVHlwZVR5cGU+LFxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbk1hdGNoZXI8SXRlbVR5cGVUeXBlPlxufTtcbiIsImV4cG9ydCAqIGZyb20gJy4vSXRlbVR5cGVzQ29sbGVjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL1Byb21pc2VJbnRlcmZhY2UnO1xuIiwiaW1wb3J0IHsgQ2hhbmdlc1Byb2Nlc3NvciwgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUsIExvY2tTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LCBJdGVtQ2FjaGVGYWN0b3J5LCBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FZGl0UmVzb3VyY2UsXG5cdENvbGxlY3Rpb25FbnRyeSxcblx0Q29sbGVjdGlvblJlc291cmNlLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlLFxuXHRDb2xsZWN0aW9uVmlld1Jlc291cmNlLFxuXHRFZGl0UmVzb3VyY2UsXG5cdEl0ZW1FbnRyeSxcblx0SXRlbVJlc291cmNlLFxuXHRMb2NhbFZpZXdSZXNvdXJjZSxcblx0UmVtb3RlVmlld1Jlc291cmNlXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcblx0Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXAsXG5cdENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXG5cdEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRJdGVtVHlwZSxcblx0TG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLFxuXHRMb2NhbENhY2hlQ2FsbGJhY2tzLFxuXHRPblNhdmVDYWxsYmFjayxcblx0UHJvbWlzZUludGVyZmFjZVxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlIHtcblx0cHVibGljIHJlYWRvbmx5IGl0ZW1zOiBJdGVtQ2FjaGU7XG5cdHB1YmxpYyByZWFkb25seSBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXHRwdWJsaWMgcmVhZG9ubHkgZGVmZXJyZWRDb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xuXG5cdHB1YmxpYyByb290SXRlbTogSXRlbUVudHJ5PGFueT4gfCB1bmRlZmluZWQ7XG5cdHB1YmxpYyB0YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xuXG5cdHB1YmxpYyBpc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdHByaXZhdGUgY2FsbGJhY2tzOiB7XG5cdFx0b25CZWZvcmVTYXZlOiBMb2NhbENhY2hlQ2FsbGJhY2tzPChsb2NhbENhY2hlOiBMb2NhbENhY2hlKSA9PiBhbnk+LFxuXHRcdG9uU2F2ZVN1Y2Nlc3M6IExvY2FsQ2FjaGVDYWxsYmFja3M8T25TYXZlQ2FsbGJhY2s+LFxuXHR9ID0ge1xuXHRcdG9uQmVmb3JlU2F2ZToge2Fsd2F5czoge30sIG9uQ2xvc2U6IHt9LCBza2lwT25DbG9zZToge319LFxuXHRcdG9uU2F2ZVN1Y2Nlc3M6IHthbHdheXM6IHt9LCBvbkNsb3NlOiB7fSwgc2tpcE9uQ2xvc2U6IHt9fVxuXHR9O1xuXG5cdHByaXZhdGUgY2hhbmdlc0ludGVydmFsOiBudWxsIHwgbnVtYmVyID0gbnVsbDtcblx0cHVibGljIGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGV4Y2VwdGlvbkhhbmRsZXI6IEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRwdWJsaWMgaWQ6IHN0cmluZyxcblx0XHRwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFJlc291cmNlTGV2ZWw6IG51bWJlclxuXHQpIHtcblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZUl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7ZWRpdDogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXIsXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KTogRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT47XG5cblx0cHVibGljIGNyZWF0ZUl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpOiBSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPjtcblxuXHRwdWJsaWMgY3JlYXRlSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsZXZlbD86IG51bWJlcixcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpOiBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+O1xuXG5cdHB1YmxpYyBjcmVhdGVJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlLFxuXHRcdGxldmVsOiBudW1iZXIgPSB0aGlzLmRlZmF1bHRSZXNvdXJjZUxldmVsLFxuXHRcdGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlLFxuXHRcdGlzTmV3PzogYm9vbGVhblxuXHQpIHtcblx0XHRpZiAoaXNSb290KVxuXHRcdFx0dGhpcy5yb290SXRlbSA9IGl0ZW1FbnRyeTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGl0ZW1FbnRyeSwgb3B0aW9ucywgbGV2ZWwsIHRoaXMsIGlzTmV3KTtcblx0fVxuXG5cdHB1YmxpYyBjcmVhdGVJdGVtUmVzb3VyY2VzPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBBcnJheTxFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0cHVibGljIGNyZWF0ZUl0ZW1SZXNvdXJjZXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zSW50ZXJmYWNlICYge3JlbW90ZTogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQXJyYXk8UmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdHB1YmxpYyBjcmVhdGVJdGVtUmVzb3VyY2VzPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJpZXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+Pixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBBcnJheTxMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwdWJsaWMgY3JlYXRlSXRlbVJlc291cmNlczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGVUeXBlPj4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw6IG51bWJlciA9IHRoaXMuZGVmYXVsdFJlc291cmNlTGV2ZWxcblx0KTogQXJyYXk8SXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3RvcjxJdGVtVHlwZVR5cGU+KG9wdGlvbnMsIGxldmVsLCB0aGlzKTtcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaChjb25zdHJ1Y3RvcihpdGVtRW50cnkpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0SXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdHB1YmxpYyBjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge3JlbW90ZUl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwdWJsaWMgY3JlYXRlQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdHB1YmxpYyBjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwdWJsaWMgY3JlYXRlQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtyZW1vdGVJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwdWJsaWMgY3JlYXRlQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPixcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0cHVibGljIGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw6IG51bWJlciA9IHRoaXMuZGVmYXVsdFJlc291cmNlTGV2ZWxcblx0KTogQ29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSwgSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChjb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucywgbGV2ZWwsIHRoaXMpO1xuXHR9XG5cblx0cHVibGljIGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0SXRlbXM6IHRydWUsIGVkaXRDb2xsZWN0aW9uOiB0cnVlfSxcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+PjtcblxuXHRwdWJsaWMgY3JlYXRlQ29sbGVjdGlvblJlc291cmNlczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcDxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge3JlbW90ZUl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0cHVibGljIGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+PjtcblxuXHRwdWJsaWMgY3JlYXRlQ29sbGVjdGlvblJlc291cmNlczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcDxJdGVtVHlwZVR5cGU+LFxuXHRcdHJlc291cmNlT3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+ICYge2VkaXRJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0cHVibGljIGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtyZW1vdGVJdGVtczogdHJ1ZX0sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+Pj47XG5cblx0cHVibGljIGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXM8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA8SXRlbVR5cGVUeXBlPixcblx0XHRyZXNvdXJjZU9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPixcblx0XHRsZXZlbD86IG51bWJlclxuXHQpOiBDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcDxDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4+O1xuXG5cdHB1YmxpYyBjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPEl0ZW1UeXBlVHlwZT4sXG5cdFx0cmVzb3VyY2VPcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw/OiBudW1iZXJcblx0KTogQ29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA8Q29sbGVjdGlvblJlc291cmNlPEl0ZW1UeXBlVHlwZSwgSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+PiB7XG5cdFx0Y29uc3QgcmVzdWx0OiB7W3BhcmVudElkOiBzdHJpbmddOiBDb2xsZWN0aW9uUmVzb3VyY2U8SXRlbVR5cGVUeXBlPn0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbkVudHJpZXMpXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gdGhpcy5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoY29sbGVjdGlvbkVudHJpZXNbcGFyZW50SWRdLCByZXNvdXJjZU9wdGlvbnMsIGxldmVsKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXJJdGVtIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZTxhbnk+KTogdm9pZCB7XG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtUmVzb3VyY2UuZW50cnkpO1xuXHR9XG5cblx0cHVibGljIGNsZWFySXRlbUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+KTogdm9pZCB7XG5cdFx0dGhpcy5pdGVtcy5jbGVhcihpdGVtRW50cnkpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5jYWNoZS5jbGVhckVudHJ5KGl0ZW1FbnRyeSk7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXJDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZTxhbnk+KTogdm9pZCB7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvblJlc291cmNlLmVudHJ5O1xuXG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5jbGVhcihjb2xsZWN0aW9uRW50cnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeS5jYWNoZS5jbGVhckVudHJ5KGNvbGxlY3Rpb25FbnRyeSk7XG5cdH1cblxuXHRwdWJsaWMgY2xlYXJEZWZlcnJlZENvbGxlY3Rpb25zICgpOiB2b2lkIHtcblx0XHR0aGlzLmRlZmVycmVkQ29sbGVjdGlvbnMuY2xlYXIoKTtcblx0fVxuXG5cdHB1YmxpYyB1cGRhdGVTaW5nbGVJdGVtcyAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29udmVyc2lvbk1hcCkge1xuXHRcdFx0Zm9yIChjb25zdCBvbGRJdGVtSWQgaW4gY29udmVyc2lvbk1hcFtpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtcy5nZXQoaXRlbVR5cGUsIHBhcnNlSW50KG9sZEl0ZW1JZCwgMTApKTtcblxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0dGhpcy5pdGVtcy51cGRhdGVJdGVtSWQoaXRlbUVudHJ5LCBwYXJzZUludChvbGRJdGVtSWQsIDEwKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmVzb3VyY2VzIHdpbGwgYmUgY2xlYXJlZCBsYXRlciAoY2xlYXIgZnVuY3Rpb24pXG5cdHB1YmxpYyByZXZlcnRDaGFuZ2VzICgpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHR0aGlzLml0ZW1zLmZvckVhY2goXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGU+KSA9PiBpdGVtRW50cnkucmVzZXRNb2RpZmllZCgpXG5cdFx0KTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbnMuZm9yRWFjaChcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZT4pID0+IHRoaXMucmVzZXRDb2xsZWN0aW9uKGNvbGxlY3Rpb25FbnRyeSlcblx0XHQpO1xuXG5cdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5pc0xvY2thYmxlKCkgP1xuXHRcdFx0dGhpcy5sb2NrU2VydmljZS5kZWxldGVMb2NrKHRoaXMucm9vdEl0ZW0hKSA6XG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblx0fVxuXG5cdHB1YmxpYyByZXNldENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PGFueT4pOiB2b2lkIHtcblx0XHQvLyByZXZlcnQgY2hhbmdlcyBmb3IgKmFsbCogY29sbGVjdGlvbnMsIGl0ZW1zIG1pZ2h0IGhhdmUgYmVlbiBhZGRlZCBvbiByZXNvbHZlXG5cdFx0Y29sbGVjdGlvbkVudHJ5Lml0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmluaXRpYWwuc2xpY2UoKTtcblxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyeS5pdGVtcylcblx0XHRcdFx0aXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZGV0ZWN0Q2hhbmdlcyAoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuaGFzQ2hhbmdlcylcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKHRoaXMuaXRlbXMuc29tZSgoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGU+KSA9PiBpdGVtRW50cnkuaGFzQ2hhbmdlcygpKSlcblx0XHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuaGFzQ2hhbmdlcyA9IHRoaXMuY29sbGVjdGlvbnMuc29tZShcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZT4pID0+IHRoaXMuY29sbGVjdGlvbkhhc0NoYW5nZXMoY29sbGVjdGlvbkVudHJ5KVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGNvbGxlY3Rpb25IYXNDaGFuZ2VzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxhbnk+KTogYm9vbGVhbiB7XG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzICYmIChjb2xsZWN0aW9uRW50cnkuaGFzQWRkZWRJdGVtcygpIHx8IGNvbGxlY3Rpb25FbnRyeS5oYXNSZW1vdmVkSXRlbXMoKSkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMgJiYgY29sbGVjdGlvbkVudHJ5Lmhhc1VwZGF0ZWRJdGVtcygpO1xuXHR9XG5cblx0cHVibGljIGlzTG9ja2FibGUgKCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLnJvb3RJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gdGhpcy5yb290SXRlbS5pc0xvY2thYmxlKCk7XG5cdH1cblxuXHRwdWJsaWMgc2F2ZSAoXG5cdFx0Y2xvc2VUYWIgPSBmYWxzZSxcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwID0ge30sXG5cdFx0YnJlYWtVcEJ5UGFyZW50PzogYm9vbGVhbixcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxuXHQpOiBQcm9taXNlSW50ZXJmYWNlPEl0ZW1JZENvbnZlcnNpb25NYXA+IHtcblx0XHRpZiAodGhpcy5pc1NhdmluZylcblx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoKTtcblxuXHRcdHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xuXG5cdFx0dGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblxuXHRcdHJldHVybiAodGhpcy5pc0xvY2thYmxlKCkgPyB0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayh0aGlzLnJvb3RJdGVtISkgOiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKSkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrRXZlbnQodGhpcy5jYWxsYmFja3Mub25CZWZvcmVTYXZlLCBjYWxsYmFjayA9PiBjYWxsYmFjayh0aGlzKSwgY2xvc2VUYWIpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFBhcmFtZXRlcnMgPSBleHRlbmQoe30sIHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMsIHBhcmFtZXRlcnMpO1xuXG5cdFx0XHRcdHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yLmV4ZWN1dGUoXG5cdFx0XHRcdFx0dGhpcy5pdGVtcy50b0FycmF5KCksXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9ucy50b0FycmF5KCksXG5cdFx0XHRcdFx0cmVxdWVzdFBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0YnJlYWtVcEJ5UGFyZW50LFxuXHRcdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFja1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmNsZWFyTG9jayh0aGlzLnJvb3RJdGVtISk7XG5cblx0XHRcdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XG5cblx0XHRcdFx0aWYgKCFjbG9zZVRhYilcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZVNpbmdsZUl0ZW1zKGNvbnZlcnNpb25NYXApO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja0V2ZW50KFxuXHRcdFx0XHRcdHRoaXMuY2FsbGJhY2tzLm9uU2F2ZVN1Y2Nlc3MsXG5cdFx0XHRcdFx0Y2FsbGJhY2sgPT4gY2FsbGJhY2sodGhpcywgY29udmVyc2lvbk1hcCksXG5cdFx0XHRcdFx0Y2xvc2VUYWJcblx0XHRcdFx0KS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICghY2xvc2VUYWIpXG5cdFx0XHRcdFx0XHRcdHRoaXMuZW5hYmxlQ2hhbmdlc1dhdGNoZXIoKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkuY2F0Y2goKGVycm9yOiBhbnkpID0+IHtcblx0XHRcdHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgb25CZWZvcmVTYXZlIChcblx0XHRrZXk6IHN0cmluZyxcblx0XHRjYWxsYmFjazogKGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUpID0+IGFueSxcblx0XHRjb25kaXRpb246IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbiA9IExvY2FsQ2FjaGVDYWxsYmFja0NvbmRpdGlvbi5BbHdheXNcblx0KTogKCkgPT4gdm9pZCB7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3Mub25CZWZvcmVTYXZlW2NvbmRpdGlvbl07XG5cblx0XHRjYWxsYmFja3Nba2V5XSA9IGNhbGxiYWNrO1xuXG5cdFx0cmV0dXJuICgpID0+IGRlbGV0ZSBjYWxsYmFja3Nba2V5XTtcblx0fVxuXG5cdHB1YmxpYyBvblNhdmVTdWNjZXNzIChcblx0XHRrZXk6IHN0cmluZyxcblx0XHRjYWxsYmFjazogT25TYXZlQ2FsbGJhY2ssXG5cdFx0Y29uZGl0aW9uOiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24gPSBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uQWx3YXlzXG5cdCk6ICgpID0+IHZvaWQge1xuXHRcdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzLm9uU2F2ZVN1Y2Nlc3NbY29uZGl0aW9uXTtcblxuXHRcdGNhbGxiYWNrc1trZXldID0gY2FsbGJhY2s7XG5cblx0XHRyZXR1cm4gKCkgPT4gZGVsZXRlIGNhbGxiYWNrc1trZXldO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlQ2FsbGJhY2tFdmVudDxUPiAoXG5cdFx0Y2FsbGJhY2tzOiBMb2NhbENhY2hlQ2FsbGJhY2tzPFQ+LFxuXHRcdGV4ZWN1dGU6IChjYWxsYmFjazogVCkgPT4gYW55LFxuXHRcdGNsb3NlVGFiOiBib29sZWFuXG5cdCk6IFByb21pc2VJbnRlcmZhY2U8YW55PiB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcyhjYWxsYmFja3NbTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLkFsd2F5c10sIGV4ZWN1dGUpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja3MoXG5cdFx0XHRcdFx0Y2FsbGJhY2tzW2Nsb3NlVGFiID8gTG9jYWxDYWNoZUNhbGxiYWNrQ29uZGl0aW9uLk9uQ2xvc2UgOiBMb2NhbENhY2hlQ2FsbGJhY2tDb25kaXRpb24uU2tpcE9uQ2xvc2VdLFxuXHRcdFx0XHRcdGV4ZWN1dGVcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBleGVjdXRlQ2FsbGJhY2tzPFQ+IChjYWxsYmFja3M6IHtba2V5OiBzdHJpbmddOiBUfSwgZXhlY3V0ZTogKGNhbGxiYWNrOiBUKSA9PiBhbnkpIHtcblx0XHRjb25zdCByZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGtleSBpbiBjYWxsYmFja3MpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc3VsdFtrZXldID0gZXhlY3V0ZShjYWxsYmFja3Nba2V5XSk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHR0aGlzLmV4Y2VwdGlvbkhhbmRsZXIoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXN1bHQpO1xuXHR9XG5cblx0cHVibGljIGVuYWJsZUNoYW5nZXNXYXRjaGVyICgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5jaGFuZ2VzSW50ZXJ2YWwgIT09IG51bGwpIHtcblx0XHRcdGNvbnNvbGUud2FybignQ2hhbmdlcyB3YXRjaGVyIGFscmVhZHkgcnVubmluZyEnLCB0aGlzKTtcblx0XHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5kZXRlY3RDaGFuZ2VzKCkpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XG5cblx0XHRcdFx0aWYgKHRoaXMuaXNMb2NrYWJsZSgpKVxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKHRoaXMucm9vdEl0ZW0hKTtcblx0XHRcdH0sXG5cdFx0XHQzMDAwXG5cdFx0KTtcblx0fVxuXG5cdHB1YmxpYyBkaXNhYmxlQ2hhbmdlc1dhdGNoZXIgKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCA9PT0gbnVsbClcblx0XHRcdHJldHVybjtcblxuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy5jaGFuZ2VzSW50ZXJ2YWwpO1xuXHRcdHRoaXMuY2hhbmdlc0ludGVydmFsID0gbnVsbDtcblx0fVxuXG5cdHB1YmxpYyBvbkRlYWN0aXZhdGVJdGVtIChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+KTogdm9pZCB7XG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtRW50cnkpO1xuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG5cdH1cblxuXHRwdWJsaWMgb25BY3RpdmF0ZUl0ZW0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5PGFueT4pOiB2b2lkIHtcblx0XHR0aGlzLml0ZW1zLmFkZChpdGVtRW50cnkpO1xuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG5cdH1cbn1cbiIsImltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbUlkLCBJdGVtTWFwLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IHR5cGUgTG9ja1Rva2VuID0ge2lzRm9yZWlnbjogZmFsc2UsIGlkOiBudW1iZXIsIHRva2VuOiBzdHJpbmd9IHwge2lzRm9yZWlnbjogdHJ1ZSwgbWVzc2FnZTogc3RyaW5nfTtcblxuZXhwb3J0IGNsYXNzIExvY2tTZXJ2aWNlIHtcblx0bG9ja0l0ZW1zOiBJdGVtTWFwPExvY2tUb2tlbj4gPSB7fTtcblxuXHRwcm9taXNlczogSXRlbU1hcDxQcm9taXNlSW50ZXJmYWNlPExvY2tUb2tlbj4+ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge1xuXG5cdH1cblxuXHRwcml2YXRlIGdldFZhbHVlPFQ+IChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+LCBtYXA6IEl0ZW1NYXA8VD4pOiB1bmRlZmluZWQgfCBUIHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XG5cdH1cblxuXHRwcml2YXRlIHNldFZhbHVlPFQ+IChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+LCB2YWx1ZTogVCwgbWFwOiBJdGVtTWFwPFQ+KTogVCB7XG5cdFx0cmV0dXJuIGNyZWF0ZVBhdGgoXG5cdFx0XHRtYXAsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwgdmFsdWVdXG5cdFx0KTtcblx0fVxuXG5cdGdldExvY2tzICgpOiB0aGlzWydsb2NrSXRlbXMnXSB7XG5cdFx0cmV0dXJuIHRoaXMubG9ja0l0ZW1zO1xuXHR9XG5cblx0aGFzTG9jayAobG9ja1Rva2VuSWQ6IEl0ZW1JZCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGxvY2tJdGVtcyA9IHRoaXMubG9ja0l0ZW1zO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsb2NrSXRlbXMpIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGxvY2tJdGVtc1tpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgbG9ja0l0ZW0gPSBsb2NrSXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcblx0XHRcdFx0aWYgKCFsb2NrSXRlbS5pc0ZvcmVpZ24gJiYgbG9ja0l0ZW0uaWQgPT0gbG9ja1Rva2VuSWQpXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gc2hvdWxkIGJlIGZhc3QgKHdhdGNoZWQpXG5cdGlzTG9ja2VkIChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xuXG5cdFx0aWYgKGxvY2tJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRyZXR1cm4gbG9ja0l0ZW0uaXNGb3JlaWduO1xuXHR9XG5cblx0Z2V0TWVzc2FnZSAoaXRlbUVudHJ5OiBJdGVtRW50cnk8YW55Pik6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG5cdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xuXG5cdFx0aWYgKGxvY2tJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFsb2NrSXRlbS5pc0ZvcmVpZ24pXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIGxvY2tJdGVtLm1lc3NhZ2U7XG5cdH1cblxuXHQvLyBkb2VzIG5vdCByZWplY3Qgd2hlbiBhIGZvcmVpZ24gbG9jayBpcyBlbmNvdW50ZXJlZFxuXHQvLyBpcyBhbHNvIHVzZWQgYnkgZGVsZXRlTG9ja1xuXHRmZXRjaENhY2hlZExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5PGFueT4pOiBQcm9taXNlSW50ZXJmYWNlPHVuZGVmaW5lZCB8IExvY2tUb2tlbj4ge1xuXHRcdGNvbnN0IGxvY2sgPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xuXG5cdFx0aWYgKGxvY2sgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4obG9jayk7XG5cblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMucHJvbWlzZXMpO1xuXG5cdFx0aWYgKHByb21pc2UgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBwcm9taXNlO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHR9XG5cblx0ZmV0Y2hMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+KTogUHJvbWlzZUludGVyZmFjZTxzdHJpbmc+IHtcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcblxuXHRcdHJldHVybiB0aGlzLmZldGNoQ2FjaGVkTG9jayhpdGVtRW50cnkpLnRoZW4oXG5cdFx0XHRsb2NrSXRlbSA9PiB7XG5cdFx0XHRcdGlmIChsb2NrSXRlbSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJldHVybiBsb2NrSXRlbTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0TG9jayhpdGVtRW50cnkpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHRsb2NrSXRlbSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ24gP1xuXHRcdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3QobG9ja0l0ZW0ubWVzc2FnZSkgOlxuXHRcdFx0XHRcdGxvY2tJdGVtLnRva2VuO1xuXHRcdFx0fSxcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5PGFueT4pOiBQcm9taXNlSW50ZXJmYWNlPExvY2tUb2tlbj4ge1xuXHRcdGNvbnN0IHtpdGVtVHlwZSwgaXRlbUlkfSA9IGl0ZW1FbnRyeTtcblxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShcblx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcblx0XHRcdHtpdGVtdHlwZTogaXRlbVR5cGUsIGl0ZW06IGl0ZW1JZH1cblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxuXHRcdFx0XHRcdGl0ZW1FbnRyeSxcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChcblx0XHRcdFx0XHRcdCdMb2NrdG9rZW4nLFxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3MuTG9ja3Rva2VuWzBdXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZXNbaXRlbVR5cGVdW2l0ZW1JZF07XG5cblx0XHRcdFx0aWYgKGVycm9yLmNvZGUgPT09IDMwMSkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpc0ZvcmVpZ246IHRydWUsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoaXRlbUVudHJ5LCBwcm9taXNlLCB0aGlzLnByb21pc2VzKTtcblx0fVxuXG5cdGRlbGV0ZUxvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5PGFueT4pOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKFxuXHRcdFx0Y2FjaGVkTG9jayA9PiB7XG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrID09PSB1bmRlZmluZWQpIC8vIHVuZGVmaW5lZDogbm90IHJlcXVlc3RlZCB5ZXRcblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0aWYgKGNhY2hlZExvY2suaXNGb3JlaWduKSB7XG5cdFx0XHRcdFx0dGhpcy5jbGVhckxvY2soaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZSgnTG9ja3Rva2VuJywgW2NhY2hlZExvY2suaWRdKS50aGVuKFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Y2xlYXJMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeTxhbnk+KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbG9ja0l0ZW1zID0gdGhpcy5sb2NrSXRlbXNbaXRlbUVudHJ5Lml0ZW1UeXBlXTtcblxuXHRcdGlmIChsb2NrSXRlbXMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdHJldHVybiBkZWxldGUgbG9ja0l0ZW1zW2l0ZW1FbnRyeS5pdGVtSWRdO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RJdGVtTWFwLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XG5cbmNvbnN0IEVNUFRZX0VOVFJZID0ge307XG5cbmV4cG9ydCB0eXBlIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvblJlc3VsdCA9IHtcblx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRpdGVtSWQ6IEl0ZW1JZCxcblx0aXRlbXM6IEFwaVJlcXVlc3RJdGVtTWFwXG59O1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uPFJvb3RJdGVtRW50cnlJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4ge1xuXHRwYXJlbnRNYXA6IGFueSA9IHt9O1xuXHRkZXN0aW5hdGlvbjogQXBpUmVxdWVzdEl0ZW1NYXAgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSByb290SXRlbUVudHJ5OiBJdGVtRW50cnk8Um9vdEl0ZW1FbnRyeUl0ZW1UeXBlVHlwZT4sXG5cdFx0cHJpdmF0ZSBzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXG5cdCkge1xuXHR9XG5cblx0cHJvY2VzcyAoKTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uUmVzdWx0IHtcblx0XHR0aGlzLnBhcmVudE1hcCA9IHRoaXMuY3JlYXRlUGFyZW50TWFwKHRoaXMuc2luZ2xlSXRlbUNhY2hlKTtcblx0XHR0aGlzLnByb2Nlc3NJdGVtcyh0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsIFt0aGlzLnJvb3RJdGVtRW50cnldLCB7fSk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSxcblx0XHRcdGl0ZW1JZDogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1JZCxcblx0XHRcdGl0ZW1zOiB0aGlzLmRlc3RpbmF0aW9uXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlUGFyZW50TWFwIChpdGVtQ2FjaGU6IEl0ZW1DYWNoZSkge1xuXHRcdGNvbnN0IHJlc3VsdDoge1xuXHRcdFx0W3BhcmVudFR5cGU6IHN0cmluZ106IHtcblx0XHRcdFx0W3BhcmVudElkOiBudW1iZXJdOiB7XG5cdFx0XHRcdFx0W2l0ZW1UeXBlOiBzdHJpbmddOiBBcnJheTxJdGVtRW50cnk8SXRlbVR5cGU+PlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSA9IHt9O1xuXG5cdFx0aXRlbUNhY2hlLmZvckVhY2goXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xuXHRcdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdFx0XHRpZiAocGFyZW50ID09PSBudWxsKSAvLyB3ZSBkb24ndCBjYXJlIGZvciBpdGVtcyB0aGF0IGFyZSBub3QgbGlua2VkIHRvIHRoZSByb290IGl0ZW1cblx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0Y29uc3QgcGFyZW50VHlwZSA9IHBhcmVudC5pdGVtVHlwZTtcblx0XHRcdFx0Y29uc3QgcGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xuXG5cdFx0XHRcdGlmIChyZXN1bHRbcGFyZW50VHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV0gPSB7fTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdW3BhcmVudElkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRUeXBlXVtwYXJlbnRJZF0gPSB7fTtcblxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdW3BhcmVudElkXVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRcdHJlc3VsdFtwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW1zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtRW50cmllczogQXJyYXk8SXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4+LFxuXHRcdGxpbmtBY2N1bXVsYXRvcjoge1tpdGVtVHlwZTogc3RyaW5nXTogSXRlbUlkW119XG5cdCkge1xuXHRcdGlmICh0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGlmIChsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID0gW107XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblxuXHRcdFx0Ly8gZWFjaCBpdGVtIG9ubHkgaGFzIGEgc2luZ2xlIHBhcmVudCwgc28gd2UgY2FuIHNhZmVseSBkbyB0aGlzXG5cdFx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXS5wdXNoKGl0ZW1JZCk7XG5cblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gPSB0aGlzLnByb2Nlc3NJdGVtKGl0ZW1FbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzSXRlbTxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT5cblx0KToge3ZhbHVlcz86IEZpZWxkTWFwPEl0ZW1UeXBlVHlwZT4sIGxpbmtzPzoge1tpdGVtVHlwZTogc3RyaW5nXTogSXRlbUlkW119fSB7XG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRjb25zdCBjaGlsZEl0ZW1zID0gdGhpcy5nZXRJdGVtc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdGNvbnN0IGNoaWxkQ29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZS5nZXRDb2xsZWN0aW9uc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xuXHRcdGNvbnN0IHZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XG5cdFx0Y29uc3QgbGlua3MgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkSXRlbXMpXG5cdFx0XHR0aGlzLnByb2Nlc3NJdGVtcyhjaGlsZFR5cGUsIGNoaWxkSXRlbXNbY2hpbGRUeXBlXSwgbGlua3MpO1xuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY2hpbGRDb2xsZWN0aW9ucykge1xuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLnF1ZXJ5ICE9PSBudWxsKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkuaXRlbXMsIGxpbmtzKTtcblx0XHR9XG5cblx0XHRjb25zdCBoYXNWYWx1ZXMgPSBoYXNQcm9wZXJ0aWVzKHZhbHVlcyk7XG5cdFx0Y29uc3QgaGFzTGlua3MgPSBoYXNQcm9wZXJ0aWVzKGxpbmtzKTtcblxuXHRcdGlmIChoYXNWYWx1ZXMgJiYgaGFzTGlua3MpXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzLCBsaW5rczogbGlua3N9O1xuXG5cdFx0aWYgKGhhc1ZhbHVlcylcblx0XHRcdHJldHVybiB7dmFsdWVzOiB2YWx1ZXN9O1xuXG5cdFx0aWYgKGhhc0xpbmtzKVxuXHRcdFx0cmV0dXJuIHtsaW5rczogbGlua3N9O1xuXG5cdFx0cmV0dXJuIEVNUFRZX0VOVFJZO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRJdGVtc0J5UGFyZW50IChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCkge1xuXHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5wYXJlbnRNYXBbcGFyZW50VHlwZV07XG5cblx0XHRpZiAobWFwRW50cnkgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdHJldHVybiBtYXBFbnRyeVtwYXJlbnRJZF07XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBBcGlGb3JtYXR0ZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVF1ZXJ5LCBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XG5cbmNvbnN0IE1BWUJFID0gJ21heWJlJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cHVibGljIGZpZWxkczogRmllbGRNYXAsXG5cdFx0cHVibGljIHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbFxuXHQpIHtcblxuXHR9XG5cblx0cHJpdmF0ZSBjb21wYXJlVmFsdWVzICh2YWx1ZTogYW55LCBxdWVyeVZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHF1ZXJ5VmFsdWUpKVxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVNb21lbnRPYmplY3RzKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcblxuXHRcdGlmIChtb21lbnQuaXNEdXJhdGlvbihxdWVyeVZhbHVlKSlcblx0XHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRHVyYXRpb25zKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcblxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG5cdFx0cmV0dXJuIHF1ZXJ5VmFsdWUgPT0gdmFsdWU7XG5cdH1cblxuXHRtYXRjaFF1ZXJ5IChxdWVyeTogQXBpUXVlcnkpOiBib29sZWFuIHwgJ21heWJlJyB7XG5cdFx0aWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0aWYgKHF1ZXJ5LmN1c3RvbSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIE1BWUJFO1xuXG5cdFx0Ly8gbGlua2VkVG8gYWxzbyBjb250YWlucyAucXVlcnlcblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoTGlua2VkVG9RdWVyeShxdWVyeSk7XG5cblx0XHRpZiAocXVlcnkucXVlcnkgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaENvbXBsZXhRdWVyeShxdWVyeSk7XG5cblx0XHRpZiAocXVlcnkua2V5ICE9PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHRoaXMuZmllbGRzW3F1ZXJ5LmtleV0sIHF1ZXJ5KTtcblxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBxdWVyeSEgUGFyc2VkPycpO1xuXHR9XG5cblx0cHJpdmF0ZSBtYXRjaExpbmtlZFRvUXVlcnkgKHF1ZXJ5OiBBcGlRdWVyeSk6IGJvb2xlYW4gfCAnbWF5YmUnIHtcblx0XHRpZiAocXVlcnkucmV2ZXJzZSlcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xuXHRcdGxldCBtYXRjaDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xuXHRcdGVsc2UgaWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSBwYXJlbnQuaXRlbVR5cGUpXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xuXHRcdGVsc2Vcblx0XHRcdG1hdGNoID0gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHBhcmVudC5pdGVtSWQsIHF1ZXJ5LnF1ZXJ5KTtcblxuXHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXG5cdFx0XHRyZXR1cm4gTUFZQkU7XG5cblx0XHRyZXR1cm4gcXVlcnkubm90ID8gIW1hdGNoIDogISFtYXRjaDtcblx0fVxuXG5cdHByaXZhdGUgbWF0Y2hDb21wbGV4UXVlcnkgKHF1ZXJ5OiBBcGlRdWVyeSk6IGJvb2xlYW4gfCAnbWF5YmUnIHtcblx0XHRjb25zdCBjb25kaXRpb25zID0gcXVlcnkuY29uZGl0aW9ucztcblxuXHRcdGxldCByZXN1bHQ7XG5cdFx0bGV0IHRlcm1pbmFsO1xuXG5cdFx0c3dpdGNoIChxdWVyeS5vcGVyYXRvcikge1xuXHRcdFx0Y2FzZSAnQU5EJzpcblx0XHRcdFx0cmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0dGVybWluYWwgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdPUic6XG5cdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xuXHRcdFx0XHR0ZXJtaW5hbCA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIG9wZXJhdG9yJyk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucykge1xuXHRcdFx0Y29uc3QgbWF0Y2ggPSB0aGlzLm1hdGNoUXVlcnkoY29uZGl0aW9uKTtcblxuXHRcdFx0aWYgKG1hdGNoID09PSB0ZXJtaW5hbClcblx0XHRcdFx0cmV0dXJuIHF1ZXJ5Lm5vdCA/ICF0ZXJtaW5hbCA6IHRlcm1pbmFsO1xuXG5cdFx0XHRpZiAobWF0Y2ggPT09IE1BWUJFKVxuXHRcdFx0XHRyZXN1bHQgPSBNQVlCRTtcblx0XHR9XG5cblx0XHRpZiAocmVzdWx0ID09PSBNQVlCRSlcblx0XHRcdHJldHVybiBNQVlCRTtcblxuXHRcdHJldHVybiBxdWVyeS5ub3QgPyAhcmVzdWx0IDogcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBtYXRjaFNpbXBsZVF1ZXJ5ICh2YWx1ZTogYW55LCBxdWVyeTogQXBpUXVlcnkpOiBib29sZWFuIHwgJ21heWJlJyB7XG5cdFx0Y29uc3Qga2V5ID0gcXVlcnkua2V5O1xuXHRcdGxldCBxdWVyeVZhbHVlID0gcXVlcnkudmFsdWU7XG5cblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKSAvLyBDb3VsZCBiZSBsaW5rZWRUbyBhbiBlbXB0eSBvYmplY3Rcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignUmVxdWlyZWQgZmllbGQnLCBrZXksICdub3QgZm91bmQgZm9yJywgdGhpcy5pdGVtVHlwZSk7XG5cblx0XHRcdHJldHVybiBNQVlCRTtcblx0XHR9XG5cblx0XHRpZiAocXVlcnlWYWx1ZSA9PT0gJ05PVycpXG5cdFx0XHRxdWVyeVZhbHVlID0gbW9tZW50KCk7XG5cblx0XHRzd2l0Y2ggKHF1ZXJ5LmNvbXBhcmF0b3IpIHtcblx0XHRcdGNhc2UgJz0nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlVmFsdWVzKHZhbHVlLCBxdWVyeVZhbHVlKTtcblx0XHRcdGNhc2UgJyE9Jzpcblx0XHRcdFx0cmV0dXJuICF0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xuXHRcdFx0Y2FzZSAnPCc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICc8PSc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8PSBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnPic6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+IHF1ZXJ5VmFsdWU7XG5cdFx0XHRjYXNlICc+PSc6XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+PSBxdWVyeVZhbHVlO1xuXHRcdFx0Y2FzZSAnSU4nOlxuXHRcdFx0XHQvLyBPbmx5IElOIHN1cHBvcnRzIE5PVCwgYWxsIG90aGVyIGNvbXBhcmF0b3JzIGFyZSBmbGlwcGVkIGluIHRoZSBRdWVyeVBhcnNlclxuXHRcdFx0XHRjb25zdCByZXMgPSBpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcblxuXHRcdFx0XHRyZXR1cm4gcXVlcnkubm90ID8gIXJlcyA6IHJlcztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBjb21wYXJhdG9yOiAnICsgcXVlcnkuY29tcGFyYXRvciArICcgaW4gcXVlcnkgJyArIHF1ZXJ5KTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSB9IGZyb20gJy4vVXRpbCc7XG5pbXBvcnQgeyBBcGlRdWVyeSwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmVudW0gQ09OU1RBTlRTIHtcblx0T0JKID0gMCxcblx0U1RSID0gMSxcblx0U0VQID0gJzonXG59XG5cbmV4cG9ydCBlbnVtIE9QRVJBVE9SUyB7XG5cdE9SID0gJ09SJyxcblx0QU5EID0gJ0FORCdcbn1cblxuZXhwb3J0IHR5cGUgT1BFUkFUT1JTX1RZUEUgPSAnT1InIHwgJ0FORCcgfCAnb3InIHwgJ2FuZCcgfCBPUEVSQVRPUlM7XG5cbmV4cG9ydCBlbnVtIENPTVBBUkFUT1JTIHtcblx0RVFVQUxTID0gJz0nLFxuXHROT1RfRVFVQUxTID0gJyE9Jyxcblx0TEVTU19USEFOID0gJzwnLFxuXHRNT1JFX1RIQU4gPSAnPicsXG5cdExFU1NfT1JfRVFVQUxfVEhBTiA9ICc8PScsXG5cdEVRVUFMX09SX01PUkVfVEhBTiA9ICc+PScsXG5cdElOID0gJ0lOJ1xufVxuXG5jb25zdCBWQUxJRF9DT01QQVJBVE9SUyA9IE9iamVjdC5rZXlzKENPTVBBUkFUT1JTKS5tYXAoa2V5ID0+IENPTVBBUkFUT1JTW2tleV0pO1xuXG5leHBvcnQgdHlwZSBDT01QQVJBVE9SU19UWVBFID0gJz0nIHwgJyE9JyB8ICc8JyB8ICc+JyB8ICc8PScgfCAnPj0nIHwgJ0lOJyB8IENPTVBBUkFUT1JTO1xuXG5jb25zdCBPUFBPU0lURV9DT01QQVJBVE9SX01BUDoge1trZXkgaW4gQ09NUEFSQVRPUlNdOiBDT01QQVJBVE9SU30gPSB7XG5cdFtDT01QQVJBVE9SUy5FUVVBTFNdOiBDT01QQVJBVE9SUy5OT1RfRVFVQUxTLFxuXHRbQ09NUEFSQVRPUlMuTk9UX0VRVUFMU106IENPTVBBUkFUT1JTLkVRVUFMUyxcblx0W0NPTVBBUkFUT1JTLk1PUkVfVEhBTl06IENPTVBBUkFUT1JTLkxFU1NfT1JfRVFVQUxfVEhBTixcblx0W0NPTVBBUkFUT1JTLkxFU1NfVEhBTl06IENPTVBBUkFUT1JTLkVRVUFMX09SX01PUkVfVEhBTixcblx0W0NPTVBBUkFUT1JTLkxFU1NfT1JfRVFVQUxfVEhBTl06IENPTVBBUkFUT1JTLk1PUkVfVEhBTixcblx0W0NPTVBBUkFUT1JTLkVRVUFMX09SX01PUkVfVEhBTl06IENPTVBBUkFUT1JTLkxFU1NfVEhBTixcblx0Ly8gSW4gdXNlcyAnbm90OiB0cnVlJyBpbnN0ZWFkIG9mIHJldmVyc2luZyB0aGUgcXVlcnlcblx0W0NPTVBBUkFUT1JTLklOXTogQ09NUEFSQVRPUlMuSU5cbn07XG5cbmV4cG9ydCBjbGFzcyBRdWVyeVBhcnNlciB7XG5cdHF1ZXJ5OiBBcGlRdWVyeTtcblx0cGFyYW1ldGVyczogYW55O1xuXG5cdGNvbnN0cnVjdG9yIChxdWVyeTogQXBpUXVlcnksIHBhcmFtZXRlcnM/OiBvYmplY3QpIHtcblx0XHR0aGlzLnF1ZXJ5ID0gcXVlcnk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcblx0fVxuXG5cdHByaXZhdGUgY29tcGFyZVBhcnNlZFF1ZXJpZXMgKGE6IFtvYmplY3QsIHN0cmluZ10sIGI6IFtvYmplY3QsIHN0cmluZ10pIHtcblx0XHRpZiAoYVtDT05TVEFOVFMuU1RSXSA9PT0gYltDT05TVEFOVFMuU1RSXSlcblx0XHRcdHJldHVybiAwO1xuXG5cdFx0cmV0dXJuIGFbQ09OU1RBTlRTLlNUUl0gPiBiW0NPTlNUQU5UUy5TVFJdID8gMSA6IC0xO1xuXHR9XG5cblx0cGFyc2UgKHF1ZXJ5OiBBcGlRdWVyeSA9IHRoaXMucXVlcnkpOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VMaW5rZWRUb1F1ZXJ5KFxuXHRcdFx0XHRxdWVyeS5saW5rZWRUbyxcblx0XHRcdFx0cXVlcnkucXVlcnksXG5cdFx0XHRcdHF1ZXJ5LnJldmVyc2UsXG5cdFx0XHRcdHF1ZXJ5Lm5vdFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlQ3VzdG9tUXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmN1c3RvbSxcblx0XHRcdFx0cXVlcnkucGFyYW1ldGVycyxcblx0XHRcdFx0cXVlcnkubm90XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU2VhcmNoUXVlcnkocXVlcnkuc2VhcmNoLCBxdWVyeS5ub3QpO1xuXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDb21wbGV4UXVlcnkoXG5cdFx0XHRcdHF1ZXJ5LmNvbmRpdGlvbnMsXG5cdFx0XHRcdHF1ZXJ5Lm9wZXJhdG9yLFxuXHRcdFx0XHRxdWVyeS5ub3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHF1ZXJ5Lml0ZW1UeXBlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU3ViRmllbGRRdWVyeShcblx0XHRcdFx0cXVlcnkua2V5LFxuXHRcdFx0XHRxdWVyeS5pdGVtVHlwZSxcblx0XHRcdFx0cXVlcnkuZmllbGQsXG5cdFx0XHRcdHF1ZXJ5LnF1ZXJ5LFxuXHRcdFx0XHRxdWVyeS5ub3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodHlwZW9mIHF1ZXJ5LnF1ZXJ5ID09PSAnb2JqZWN0Jylcblx0XHRcdFx0cmV0dXJuIHRoaXMucGFyc2VTdWJRdWVyeShxdWVyeS5rZXksIHF1ZXJ5LnF1ZXJ5LCBxdWVyeS5ub3QpO1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KFxuXHRcdFx0XHRxdWVyeS5rZXksXG5cdFx0XHRcdHF1ZXJ5LnZhbHVlLFxuXHRcdFx0XHRxdWVyeS5jb21wYXJhdG9yLFxuXHRcdFx0XHRxdWVyeS5ub3Rcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qga2V5ID0gZ2V0Rmlyc3RQcm9wZXJ0eShxdWVyeSk7XG5cblx0XHRpZiAoa2V5ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIFt7fSwgJ3t9J107XG5cblx0XHRjb25zdCB2YWx1ZSA9IHF1ZXJ5W2tleV07XG5cblx0XHQvLyB0eXBlb2YgbnVsbCBpcyBhbiBvYmplY3QgOnRoaW5raW5nOlxuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBPYmplY3QpXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVN1YlF1ZXJ5KGtleSwgdmFsdWUsIGZhbHNlKTtcblxuXHRcdHJldHVybiB0aGlzLnBhcnNlU2ltcGxlUXVlcnkoa2V5LCB2YWx1ZSwgcXVlcnkuY29tcGFyYXRvciwgcXVlcnkubm90KTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VTdWJRdWVyeSAoa2V5OiBzdHJpbmcsIHN1YlF1ZXJ5OiBvYmplY3QsIG5vdDogYm9vbGVhbiA9IGZhbHNlKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnBhcnNlKHN1YlF1ZXJ5KTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7a2V5LCBxdWVyeTogcGFyc2VkUXVlcnlbQ09OU1RBTlRTLk9CSl0sIG5vdH0sXG5cdFx0XHQnWycgKyAnc3ViJyArIENPTlNUQU5UUy5TRVAgKyBrZXkgKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUXVlcnlbQ09OU1RBTlRTLlNUUl0gKyBDT05TVEFOVFMuU0VQICsgbm90ICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VTdWJGaWVsZFF1ZXJ5IChrZXk6IHN0cmluZyA9ICcnLCBpdGVtVHlwZTogSXRlbVR5cGUgPSAnJywgZmllbGQ6IHN0cmluZyA9ICcnLCBxdWVyeTogQXBpUXVlcnksIG5vdDogYm9vbGVhbiA9IGZhbHNlKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnBhcnNlKHF1ZXJ5KTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7a2V5LCBpdGVtVHlwZSwgZmllbGQsIHF1ZXJ5OiBwYXJzZWRRdWVyeVtDT05TVEFOVFMuT0JKXSwgbm90fSxcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcblx0XHRcdCdbJyArICdzdWJGaWVsZCcgKyBDT05TVEFOVFMuU0VQICsga2V5ICsgQ09OU1RBTlRTLlNFUCArIGl0ZW1UeXBlICsgQ09OU1RBTlRTLlNFUCArIGZpZWxkICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlU2VhcmNoUXVlcnkgKHZhbHVlOiBhbnksIG5vdDogYm9vbGVhbiA9IGZhbHNlKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHR7c2VhcmNoOiB2YWx1ZVtDT05TVEFOVFMuT0JKXSwgbm90fSxcblx0XHRcdCdbJyArICdzZWFyY2gnICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUXVlcnkgKGN1c3RvbTogc3RyaW5nLCBwYXJhbWV0ZXJzOiBhbnksIG5vdDogYm9vbGVhbiA9IGZhbHNlKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0aWYgKHBhcmFtZXRlcnMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0e2N1c3RvbSwgbm90fSxcblx0XHRcdFx0J1snICsgY3VzdG9tICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdFx0XTtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJzZWRQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUN1c3RvbVBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2N1c3RvbSwgcGFyYW1ldGVyczogcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuT0JKXSwgbm90fSxcblx0XHRcdCdbJyArIGN1c3RvbSArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUGFyYW1ldGVycyAocGFyYW1ldGVyczogYW55KTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpLnNvcnQoKTtcblxuXHRcdGNvbnN0IHF1ZXJ5OiBBcGlRdWVyeSA9IHt9IGFzIEFwaVF1ZXJ5O1xuXHRcdGxldCBzdHJpbmcgPSAnJztcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qga2V5ID0ga2V5c1tpXTtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShwYXJhbWV0ZXJzW2tleV0pO1xuXG5cdFx0XHRxdWVyeVtrZXldID0gdmFsdWVbQ09OU1RBTlRTLk9CSl07XG5cblx0XHRcdGlmIChpID4gMClcblx0XHRcdFx0c3RyaW5nICs9IENPTlNUQU5UUy5TRVA7XG5cblx0XHRcdHN0cmluZyArPSB2YWx1ZVtDT05TVEFOVFMuU1RSXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gW3F1ZXJ5LCBzdHJpbmddO1xuXHR9XG5cblx0cHJpdmF0ZSBwYXJzZVNpbXBsZVF1ZXJ5IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgY29tcGFyYXRvcj86IENPTVBBUkFUT1JTX1RZUEUsIG5vdDogYm9vbGVhbiA9IGZhbHNlKTogW29iamVjdCwgc3RyaW5nXSB7XG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcblxuXHRcdGlmIChjb21wYXJhdG9yID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb21wYXJhdG9yID0gQXJyYXkuaXNBcnJheSh2YWx1ZVtDT05TVEFOVFMuT0JKXSkgPyBDT01QQVJBVE9SUy5JTiA6IENPTVBBUkFUT1JTLkVRVUFMUztcblxuXHRcdGlmIChWQUxJRF9DT01QQVJBVE9SUy5pbmRleE9mKGNvbXBhcmF0b3IpID09PSAtMSlcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjb21wYXJhdG9yICcke2NvbXBhcmF0b3J9JywgaXQgbWlnaHQgYmUgdGhhdCB0aGUgYmFja2VuZCBzdXBwb3J0cyBpdCBidXQgdGhlIGZyb250ZW5kIGRvZXNuJ3QgIWApO1xuXG5cdFx0aWYgKG5vdClcblx0XHRcdGNvbXBhcmF0b3IgPSBPUFBPU0lURV9DT01QQVJBVE9SX01BUFtjb21wYXJhdG9yIV07XG5cblx0XHQvLyBBbGwgb3RoZXIgY29tcGFyYXRvcnMgY2FuIGJlIGludmVydGVkXG5cdFx0Y29uc3QgaXNOb3RJbiA9IGNvbXBhcmF0b3IgPT09IENPTVBBUkFUT1JTLklOICYmIG5vdDtcblxuXHRcdGNvbnN0IHJlc3VsdDogW29iamVjdCwgc3RyaW5nXSA9IFtcblx0XHRcdHtrZXksIHZhbHVlOiB2YWx1ZVtDT05TVEFOVFMuT0JKXSwgY29tcGFyYXRvciwgbm90OiBpc05vdElufSxcblx0XHRcdCdbJyArIGNvbXBhcmF0b3IgKyBDT05TVEFOVFMuU0VQICsga2V5ICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXG5cdFx0XTtcblxuXHRcdGlmIChpc05vdEluKSB7XG5cdFx0XHRyZXN1bHRbMV0gPSByZXN1bHRbMV0uc2xpY2UoMCwgLTEpO1xuXHRcdFx0cmVzdWx0WzFdICs9IENPTlNUQU5UUy5TRVAgKyBub3QgKyAnXSc7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VMaW5rZWRUb1F1ZXJ5IChsaW5rZWRUbzogYW55LCBxdWVyeTogQXBpUXVlcnkgPSB7fSBhcyBBcGlRdWVyeSwgcmV2ZXJzZTogYm9vbGVhbiA9IGZhbHNlLCBub3Q6IGJvb2xlYW4gPSBmYWxzZSk6IFtvYmplY3QsIHN0cmluZ10ge1xuXHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5wYXJzZShxdWVyeSk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2xpbmtlZFRvOiBsaW5rZWRUbywgcXVlcnk6IHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5PQkpdLCByZXZlcnNlOiByZXZlcnNlLCBub3Q6IG5vdH0sXG5cdFx0XHQnWycgKyAnbGlua2VkVG8nICsgQ09OU1RBTlRTLlNFUCArIGxpbmtlZFRvICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIHJldmVyc2UgKyBDT05TVEFOVFMuU0VQICsgbm90ICsgJ10nXG5cdFx0XTtcblx0fVxuXG5cdHByaXZhdGUgcGFyc2VDb21wbGV4UXVlcnkgKGNvbmRpdGlvbnM6IGFueVtdLCBvcGVyYXRvcjogT1BFUkFUT1JTX1RZUEUgPSBPUEVSQVRPUlMuQU5ELCBub3Q6IGJvb2xlYW4gPSBmYWxzZSk6IFtvYmplY3QsIHN0cmluZ10ge1xuXHRcdG9wZXJhdG9yID0gb3BlcmF0b3IudG9VcHBlckNhc2UoKSBhcyBPUEVSQVRPUlM7XG5cblx0XHRjb25zdCBwYXJzZWRDb25kaXRpb25zID0gdGhpcy5wYXJzZUNvbmRpdGlvbnMoY29uZGl0aW9ucyk7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0e2NvbmRpdGlvbnM6IHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLk9CSl0sIG9wZXJhdG9yLCBub3R9LFxuXHRcdFx0J1snICsgb3BlcmF0b3IgKyBwYXJzZWRDb25kaXRpb25zW0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIHBhcnNlQ29uZGl0aW9ucyAoY29uZGl0aW9uczogYW55W10pOiBbb2JqZWN0LCBzdHJpbmddIHtcblx0XHRsZXQgcGFyc2VkQ29uZGl0aW9uczogQXJyYXk8W29iamVjdCwgc3RyaW5nXT4gPSBbXTtcblx0XHRjb25zdCBxdWVyeTogb2JqZWN0W10gPSBbXTtcblx0XHRsZXQgc3RyaW5nID0gJyc7XG5cblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKVxuXHRcdFx0cGFyc2VkQ29uZGl0aW9ucy5wdXNoKHRoaXMucGFyc2UoY29uZGl0aW9uKSk7XG5cblx0XHRwYXJzZWRDb25kaXRpb25zID0gcGFyc2VkQ29uZGl0aW9ucy5zb3J0KChhLCBiKSA9PiB0aGlzLmNvbXBhcmVQYXJzZWRRdWVyaWVzKGEsIGIpKTtcblxuXHRcdGZvciAoY29uc3QgcGFyc2VkQ29uZGl0aW9uIG9mIHBhcnNlZENvbmRpdGlvbnMpIHtcblx0XHRcdHF1ZXJ5LnB1c2gocGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5PQkpdKTtcblx0XHRcdHN0cmluZyArPSBwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLlNUUl07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcblx0fVxuXG5cdHByaXZhdGUgZm9ybWF0VmFsdWU8VD4gKHZhbHVlOiBUKTogW1QsIHN0cmluZ10ge1xuXHRcdGxldCBwcm9jZXNzZWRWYWx1ZTtcblxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyYnKSB7XG5cdFx0XHRjb25zdCBrZXkgPSB2YWx1ZS5zdWJzdHJpbmcoMSk7XG5cblx0XHRcdHZhbHVlID0gdGhpcy5wYXJhbWV0ZXJzW2tleV07XG5cblx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5UGFyc2VyOiBVbmRlZmluZWQgdGVtcGxhdGUgcGFyYW1ldGVyIFxcJycgKyBrZXkgKyAnXFwnJyk7XG5cblx0XHRcdHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCBrZXkgKyAnPicgKyB2YWx1ZV07XG5cdFx0fVxuXG5cdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XG5cblx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCAnJyArIHByb2Nlc3NlZFZhbHVlXTtcblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1ZhbHVlPFQ+ICh2YWx1ZTogVFtdKTogVFtdO1xuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZSAodmFsdWU6IG1vbWVudC5Nb21lbnQpOiBtb21lbnQuTW9tZW50O1xuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZSAodmFsdWU6IG1vbWVudC5EdXJhdGlvbik6IG1vbWVudC5EdXJhdGlvbjtcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWU8VD4gKHZhbHVlOiBUKTogVDtcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWU8VD4gKHZhbHVlOiBUIHwgVFtdIHwgbW9tZW50Lk1vbWVudCB8IG1vbWVudC5EdXJhdGlvbikge1xuXHRcdC8vIGFsZ29yaXRobSBpcyBub3QgaW1wb3J0YW50LCBhcyBsb25nIGFzIGFsbCBhcnJheXMgYXJlIHNvcnRlZCB0aGUgc2FtZSB3YXlcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG5cdFx0XHRyZXR1cm4gdmFsdWUuc2xpY2UoKS5zb3J0KCk7XG5cblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcblx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xuXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHZhbHVlKSlcblx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUpO1xuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlRdWVyeSwgRW50cnlQYXJlbnROdWxsLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBDT01QQVJBVE9SUywgT1BFUkFUT1JTIH0gZnJvbSAnLi9RdWVyeVBhcnNlcic7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeVNlcnZpY2Uge1xuXHRjb25zdHJ1Y3RvciAoKSB7XG5cdH1cblxuXHRhZGRBbmRDb25kaXRpb24gKHF1ZXJ5OiBBcGlRdWVyeSwgY29uZGl0aW9uOiBBcGlRdWVyeSk6IEFwaVF1ZXJ5IHtcblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHF1ZXJ5Lm9wZXJhdG9yID09PSBPUEVSQVRPUlMuT1IpXG5cdFx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IFtxdWVyeSwgY29uZGl0aW9uXX07XG5cblx0XHQvLyB3ZSBoYXZlIGFuICdhbmQnIGNvbmRpdGlvblxuXHRcdHJldHVybiB7Y29uZGl0aW9uczogcXVlcnkuY29uZGl0aW9ucy5jb25jYXQoY29uZGl0aW9uKX07XG5cdH1cblxuXHRhZGRPckNvbmRpdGlvbiAocXVlcnk6IEFwaVF1ZXJ5LCBjb25kaXRpb246IEFwaVF1ZXJ5KTogQXBpUXVlcnkge1xuXHRcdGlmIChxdWVyeS5vcGVyYXRvciA9PT0gT1BFUkFUT1JTLk9SKVxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcblxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl0sIG9wZXJhdG9yOiBPUEVSQVRPUlMuT1J9O1xuXHR9XG5cblx0YWRkUGFyZW50Q29uZGl0aW9uIChxdWVyeTogQXBpUXVlcnksIHBhcmVudDogRW50cnlQYXJlbnROdWxsKTogQXBpUXVlcnkge1xuXHRcdGxldCBsaW5rZWRUb1F1ZXJ5O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHJldHVybiBxdWVyeTtcblxuXHRcdGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHBhcmVudC5pdGVtSWR9O1xuXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID8gbGlua2VkVG9RdWVyeSA6IHRoaXMuYWRkQW5kQ29uZGl0aW9uKHF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcblx0fVxuXG5cdGNyZWF0ZU5vdEluIChpZEFycmF5OiBJdGVtSWRbXSkge1xuXHRcdHJldHVybiB7Y29tcGFyYXRvcjogQ09NUEFSQVRPUlMuSU4sIGtleTogJ2lkJywgdmFsdWU6IGlkQXJyYXksIG5vdDogdHJ1ZX07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxudHlwZSBSZXNvdXJjZSA9IEl0ZW1SZXNvdXJjZTxhbnk+IHwgQ29sbGVjdGlvblJlc291cmNlPGFueT47XG50eXBlIENhY2hlTGV2ZWw8VCBleHRlbmRzIFJlc291cmNlPiA9IFtudW1iZXIsIHtbZW50cnlJZDogbnVtYmVyXTogVFtdfV07XG5cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUNhY2hlPFQgZXh0ZW5kcyBSZXNvdXJjZT4ge1xuXHRwcml2YXRlIGNhY2hlOiBBcnJheTxDYWNoZUxldmVsPFQ+PiA9IFtdO1xuXG5cdHB1YmxpYyBzZXQ8VSBleHRlbmRzIFQ+IChyZXNvdXJjZTogVSwgbGV2ZWw6IG51bWJlcik6IFUge1xuXHRcdGNvbnN0IGVudHJ5SWQgPSByZXNvdXJjZS5lbnRyeS5pZDtcblxuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMuZ2V0Q2FjaGVMZXZlbChsZXZlbClbMV07XG5cblx0XHRpZiAocmVzb3VyY2VzW2VudHJ5SWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXNvdXJjZXNbZW50cnlJZF0gPSBbXTtcblxuXHRcdHJlc291cmNlc1tlbnRyeUlkXS5wdXNoKHJlc291cmNlKTtcblxuXHRcdHJldHVybiByZXNvdXJjZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJZiBhbiBhcnJheSBvZiByZXNvdXJjZXMgYWxyZWFkeSBleGlzdHMgZm9yIHRoZSBzcGVjaWZpZWQgbGV2ZWwsIHJldHVybiB0aGF0LiBPdGhlcndpc2UgaW5zZXJ0IGEgbmV3IHR1cGxlIGF0IHRoZVxuXHQgKiByaWdodCBwbGFjZSBpbiB0aGUgJ2xldmVscycgYXJyYXkuXG5cdCAqL1xuXHRwcml2YXRlIGdldENhY2hlTGV2ZWwgKGRlc3RpbmF0aW9uTGV2ZWw6IG51bWJlcik6IENhY2hlTGV2ZWw8VD4ge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRcdC8vIGNoYW5jZXMgYXJlIHRoZSBsZXZlbCB3ZSdyZSBsb29raW5nIGZvciBpcyB0aGUgaGlnaGVzdCwgc28gc3RhcnQgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXlcblx0XHRmb3IgKGxldCBpID0gY2FjaGUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdGNvbnN0IGxldmVsID0gY2FjaGVbaV07XG5cblx0XHRcdGlmIChsZXZlbFswXSA9PT0gZGVzdGluYXRpb25MZXZlbClcblx0XHRcdFx0cmV0dXJuIGxldmVsO1xuXG5cdFx0XHRpZiAobGV2ZWxbMF0gPCBkZXN0aW5hdGlvbkxldmVsKVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVDYWNoZUxldmVsKGkgKyAxLCBkZXN0aW5hdGlvbkxldmVsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5jcmVhdGVDYWNoZUxldmVsKDAsIGRlc3RpbmF0aW9uTGV2ZWwpO1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVDYWNoZUxldmVsIChpbmRleDogbnVtYmVyLCBsZXZlbDogbnVtYmVyKTogQ2FjaGVMZXZlbDxUPiB7XG5cdFx0Y29uc3QgY2FjaGVMZXZlbDogQ2FjaGVMZXZlbDxUPiA9IFtsZXZlbCwge31dO1xuXG5cdFx0dGhpcy5jYWNoZS5zcGxpY2UoaW5kZXgsIDAsIGNhY2hlTGV2ZWwpO1xuXG5cdFx0cmV0dXJuIGNhY2hlTGV2ZWw7XG5cdH1cblxuXHRwdWJsaWMgaGFzUmVzb3VyY2VzIChlbnRyeTogVFsnZW50cnknXSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRcdC8vIHN0YXJ0IGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5XG5cdFx0Zm9yIChsZXQgaSA9IGNhY2hlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRpZiAoY2FjaGVbaV1bMV1bZW50cnkuaWRdICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHB1YmxpYyBnZXQgKGVudHJ5OiBUWydlbnRyeSddKTogVFtdIHtcblx0XHRjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBsZXZlbCBvZiB0aGlzLmNhY2hlKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZXMgPSBsZXZlbFsxXVtlbnRyeS5pZF07XG5cblx0XHRcdGlmIChyZXNvdXJjZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKVxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHB1YmxpYyBnZXRMYXRlc3QgKGVudHJ5OiBUWydlbnRyeSddKTogVCB8IG51bGwge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRcdGZvciAobGV0IGkgPSBjYWNoZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VzID0gY2FjaGVbaV1bMV1bZW50cnkuaWRdO1xuXG5cdFx0XHRpZiAocmVzb3VyY2VzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VzW3Jlc291cmNlcy5sZW5ndGggLSAxXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgYSBzcGVjaWZpYyByZXNvdXJjZS5cblx0ICovXG5cdHB1YmxpYyBjbGVhclJlc291cmNlIChyZXNvdXJjZTogVCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblx0XHRjb25zdCBlbnRyeUlkID0gcmVzb3VyY2UuZW50cnkuaWQ7XG5cblx0XHRsZXQgcmVzb3VyY2VJbmRleCA9IC0xO1xuXHRcdGxldCBsZXZlbEluZGV4ID0gY2FjaGUubGVuZ3RoO1xuXG5cdFx0d2hpbGUgKHJlc291cmNlSW5kZXggPT09IC0xICYmIGxldmVsSW5kZXggPiAwKSB7XG5cdFx0XHRsZXZlbEluZGV4LS07XG5cblx0XHRcdGNvbnN0IHJlc291cmNlcyA9IGNhY2hlW2xldmVsSW5kZXhdWzFdW2VudHJ5SWRdO1xuXG5cdFx0XHRpZiAocmVzb3VyY2VzICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHJlc291cmNlSW5kZXggPSByZXNvdXJjZXMuaW5kZXhPZihyZXNvdXJjZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlc291cmNlSW5kZXggPT09IC0xKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Y29uc3QgcmVzb3VyY2VNYXAgPSBjYWNoZVtsZXZlbEluZGV4XVsxXTtcblxuXHRcdGlmIChyZXNvdXJjZU1hcFtlbnRyeUlkXS5sZW5ndGggPT09IDEpXG5cdFx0XHRkZWxldGUgcmVzb3VyY2VNYXBbZW50cnlJZF07XG5cdFx0ZWxzZVxuXHRcdFx0cmVzb3VyY2VNYXBbZW50cnlJZF0uc3BsaWNlKHJlc291cmNlSW5kZXgsIDEpO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbGwgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhIGxldmVsIG9mICdsZXZlbCcgb3IgaGlnaGVyLlxuXHQgKi9cblx0cHVibGljIGNsZWFyUmVzb3VyY2VzIChsZXZlbDogbnVtYmVyKTogdm9pZCB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdFx0bGV0IGkgPSBjYWNoZS5sZW5ndGg7XG5cblx0XHR3aGlsZSAoaSA+IDAgJiYgY2FjaGVbaSAtIDFdWzBdID49IGxldmVsKVxuXHRcdFx0aS0tO1xuXG5cdFx0Y2FjaGUubGVuZ3RoID0gaTtcblx0fVxuXG5cdHB1YmxpYyBjbGVhckVudHJ5IChlbnRyeTogVFsnZW50cnknXSk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgbGV2ZWwgb2YgdGhpcy5jYWNoZSlcblx0XHRcdGRlbGV0ZSBsZXZlbFtlbnRyeS5pZF07XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblNldCwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIFJlcXVlc3RDb2x1bW5NYXAgPSB7W2l0ZW1UeXBlOiBzdHJpbmddOiBBcGlSZXF1ZXN0Q29sdW1uc307XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIHtcblx0cHJpdmF0ZSBjb2x1bW5zOiBSZXF1ZXN0Q29sdW1uTWFwID0ge307XG5cdHByaXZhdGUgY29sdW1uU2V0SWRNYXA6IHtbY29sdW1uU2V0SWQ6IG51bWJlcl06IGJvb2xlYW59ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdGV4cGFuZDxUIGV4dGVuZHMgQ29sdW1uU2V0PEl0ZW1UeXBlPj4gKGNvbHVtblNldDogVCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNvbHVtblNldElkTWFwW2NvbHVtblNldC5pZF0pXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sdW1uU2V0Lml0ZW1UeXBlO1xuXG5cdFx0aWYgKGNvbHVtbnNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb2x1bW5zW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0Y29sdW1uc1tpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblV0aWxcblx0XHRcdC5tZXJnZVJlcXVlc3RDb2x1bW5zKGNvbHVtbnNbaXRlbVR5cGVdLCBjb2x1bW5TZXQucmVxdWVzdClcblx0XHRcdC5tZXJnZWQ7XG5cblx0XHR0aGlzLmNvbHVtblNldElkTWFwW2NvbHVtblNldC5pZF0gPSB0cnVlO1xuXHR9XG5cblx0Z2V0ICgpOiBSZXF1ZXN0Q29sdW1uTWFwIHtcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5zO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbGxlY3Rpb25IYW5kbGVyLCBJdGVtSGFuZGxlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0Q29sdW1ucyxcblx0QXBpUmVzcG9uc2UsXG5cdENvbGxlY3Rpb25NYXRjaFJlc3VsdCxcblx0RmllbGRNYXAsXG5cdEZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmVTb2NrZXRNZXNzYWdlLFxuXHRHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsXG5cdEl0ZW1JZCxcblx0SXRlbVR5cGUsXG5cdFByb21pc2VJbnRlcmZhY2UsXG5cdFJlc3BvbnNlQ29sdW1uLFxuXHRTb2NrZXRNZXNzYWdlXG59IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgU29ja2V0Q29sbGVjdGlvbk1hcDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gPSB7W2l0ZW1JZDogbnVtYmVyXTogQ29sbGVjdGlvbk1hdGNoUmVzdWx0PEl0ZW1UeXBlVHlwZT59O1xuXG5leHBvcnQgY2xhc3MgU29ja2V0TWVzc2FnZUhhbmRsZXIge1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRvbk1lc3NhZ2VSZWNlaXZlZCAobWVzc2FnZTogU29ja2V0TWVzc2FnZSk6IGFueSB7XG5cdFx0c3dpdGNoIChtZXNzYWdlLmJvZHkuZXZlbnRUeXBlKSB7XG5cdFx0XHRjYXNlICd1cGRhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGUobWVzc2FnZSk7XG5cdFx0XHRjYXNlICdjcmVhdGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVDcmVhdGUobWVzc2FnZSk7XG5cdFx0XHRjYXNlICdkZWxldGUnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVEZWxldGUobWVzc2FnZSk7XG5cdFx0XHRjYXNlICdsaW5rVG8nOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVMaW5rTW92ZSgvKiBtZXNzYWdlICovKTtcblx0XHR9XG5cdH1cblxuXHRmb3JtYXRNZXNzYWdlVmFsdWVzICh2YWx1ZXM6IGFueSwgY29sdW1uczogUmVzcG9uc2VDb2x1bW5bXSk6IEZpZWxkTWFwIHtcblx0XHRjb25zdCByZXN1bHQ6IEZpZWxkTWFwID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGNvbHVtbnMpXG5cdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW5zW2NvbHVtbklkXS50eXBlLCB2YWx1ZXNbY29sdW1uSWRdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRjcmVhdGVDb2xsZWN0aW9uTWFwPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtczoge1tpdGVtSWQ6IG51bWJlcl06IGFueX0sXG5cdFx0Y29sdW1uczogUmVzcG9uc2VDb2x1bW5bXVxuXHQpOiBTb2NrZXRDb2xsZWN0aW9uTWFwPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdGNvbnN0IHJlc3VsdDogU29ja2V0Q29sbGVjdGlvbk1hcDxJdGVtVHlwZVR5cGU+ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtcykge1xuXHRcdFx0Y29uc3QgaXRlbSA9IGl0ZW1zW2l0ZW1JZF07XG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtLnBhcmVudCAhPT0gbnVsbCA/IGl0ZW0ucGFyZW50IDoge307XG5cblx0XHRcdHJlc3VsdFtpdGVtSWRdID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Rml0dGluZ0l0ZW0oXG5cdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHR0aGlzLmZvcm1hdE1lc3NhZ2VWYWx1ZXMoaXRlbS52YWx1ZXMsIGNvbHVtbnMpLFxuXHRcdFx0XHRwYXJlbnRcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdyb3VwQnlDb2xsZWN0aW9uSWQ8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGNvbGxlY3Rpb25NYXA6IFNvY2tldENvbGxlY3Rpb25NYXA8SXRlbVR5cGVUeXBlPlxuXHQpOiBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgcmVzdWx0OiBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8SXRlbVR5cGVUeXBlPiA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoUmVzdWx0ID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBjb2xsZWN0aW9uTWF0Y2hSZXN1bHQpIHtcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSBjb2xsZWN0aW9uTWF0Y2hSZXN1bHRbc3RhdHVzIGFzIGtleW9mIENvbGxlY3Rpb25NYXRjaFJlc3VsdDxJdGVtVHlwZVR5cGU+XTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcykge1xuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb25FbnRyeS5pZDtcblxuXHRcdFx0XHRcdGlmIChyZXN1bHRbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXSA9IHtcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogY29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0XHRcdFx0XHRmaXR0aW5nOiBbXSxcblx0XHRcdFx0XHRcdFx0bm90Zml0dGluZzogW10sXG5cdFx0XHRcdFx0XHRcdG1heWJlOiBbXVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXVtzdGF0dXNdLnB1c2goXG5cdFx0XHRcdFx0XHRzdGF0dXMgPT09ICdmaXR0aW5nJyA/IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCkgOiBpdGVtSWRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGdldFJlcXVlc3RDb2x1bW5zPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRjb2xsZWN0aW9uTWFwOiBTb2NrZXRDb2xsZWN0aW9uTWFwPEl0ZW1UeXBlVHlwZT5cblx0KSB7XG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xuXHRcdFx0Y29uc3QgZml0dGluZ0NvbGxlY3Rpb25zID0gY29sbGVjdGlvbnMuZml0dGluZztcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgZml0dGluZ0NvbGxlY3Rpb24gb2YgZml0dGluZ0NvbGxlY3Rpb25zKVxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGZpdHRpbmdDb2xsZWN0aW9uLmNvbHVtbnMpO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XG5cdH1cblxuXHRkZWZlckVudHJ5PFQgZXh0ZW5kcyBJdGVtRW50cnk8YW55Pj4gKGl0ZW1FbnRyeTogVCk6IFQgfCBQcm9taXNlSW50ZXJmYWNlPFQ+IHtcblx0XHRjb25zdCBkZWZlcnJlZCA9IGl0ZW1FbnRyeS5kZWZlcnJlZDtcblxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcigpO1xuXG5cdFx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UudGhlbihcblx0XHRcdHRoaXMuZGVmZXJFbnRyeS5iaW5kKHRoaXMpLFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NNZXNzYWdlPFQgZXh0ZW5kcyBTb2NrZXRNZXNzYWdlWydib2R5J10+IChib2R5OiBUKTogUHJvbWlzZUludGVyZmFjZTxHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8VFsnaXRlbVR5cGUnXT4+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGJvZHkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtVHlwZSwgYm9keS5pdGVtc1tpdGVtVHlwZV0sIGJvZHkuY29sdW1uc1tpdGVtVHlwZV0pO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1ucyhpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8VFsnaXRlbVR5cGUnXT4gfCBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeTxUWydpdGVtVHlwZSddPj4+ID0gW107XG5cdFx0Y29uc3QgcmVxdWVzdElkczogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkU3RyaW5nIGluIGNvbGxlY3Rpb25NYXApIHtcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZFN0cmluZyk7XG5cdFx0XHRjb25zdCBpdGVtSWQgPSAraXRlbUlkU3RyaW5nO1xuXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2godGhpcy5kZWZlckVudHJ5KGl0ZW1FbnRyeSkpO1xuXHRcdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2l0ZW1JZF0uZml0dGluZy5sZW5ndGggPT09IDApXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKFxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoaXRlbVR5cGUsIGl0ZW1JZCwgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCBmYWxzZSlcblx0XHRcdCk7XG5cblx0XHRcdHJlcXVlc3RJZHMucHVzaChpdGVtSWQpO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSk7IC8vIGNvbGxlY3Rpb25NYXAgbWlnaHQgY29udGFpbiAnbWF5YmUnIG1hdGNoZXNcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCB7aWQ6IHJlcXVlc3RJZHN9LCByZXF1ZXN0Q29sdW1ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZShpdGVtVHlwZSwgcmVxdWVzdElkcywgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlPFQgZXh0ZW5kcyBTb2NrZXRNZXNzYWdlWydib2R5J10+IChib2R5OiBUKTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXRlbXMgPSBib2R5Lml0ZW1zLkZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmU7XG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBBcnJheTxJdGVtRW50cnk8VFsnaXRlbVR5cGUnXT4gfCBQcm9taXNlSW50ZXJmYWNlPEl0ZW1FbnRyeTxUWydpdGVtVHlwZSddPj4+ID0gW107XG5cdFx0Y29uc3QgcmVxdWVzdElkczogSXRlbUlkW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XG5cdFx0XHRjb25zdCBmdW5jdGlvbklkID0gaXRlbXNbaXRlbUlkXS5wYXJlbnQuaXRlbUlkO1xuXHRcdFx0Y29uc3QgZnVuY3Rpb25FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBmdW5jdGlvbklkKTtcblxuXHRcdFx0aWYgKGZ1bmN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCB8fCBmdW5jdGlvbkVudHJ5LmNvbHVtbnMucmVzcG9uc2UuRnVuY3RpZS5uZXdjaGFuZ2VzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaCh0aGlzLmRlZmVyRW50cnkoZnVuY3Rpb25FbnRyeSkpO1xuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGZ1bmN0aW9uSWQpO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KCdGdW5jdGllJywge2lkOiByZXF1ZXN0SWRzfSwge0Z1bmN0aWU6IFsnbmV3Y2hhbmdlcyddfSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZUlkcyA9IHJlc3BvbnNlLmxpbmtzLkZ1bmN0aWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVzcG9uc2VJZHMpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KCdGdW5jdGllJywgaXRlbUlkKSE7XG5cblx0XHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXG5cdFx0XHRcdFx0XHR7fSxcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlVmFsdWUgPSByZXNwb25zZS5mZXRjaFZhbHVlKCdGdW5jdGllJywgaXRlbUlkLCAnbmV3Y2hhbmdlcycpO1xuXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlVmFsdWUgPT09IHByZXZpb3VzLm5ld2NoYW5nZXMpXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0XHRcdGl0ZW1FbnRyeVxuXHRcdFx0XHRcdFx0LnNldEluaXRpYWwoe25ld2NoYW5nZXM6IHJlc3BvbnNlVmFsdWV9LCB0cnVlKVxuXHRcdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cylcblx0XHRcdFx0XHRcdC5yZXNvbHZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcblx0fVxuXG5cdGhhbmRsZVJlc3BvbnNlPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRyZXF1ZXN0SWRzOiBJdGVtSWRbXSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxuXHRcdGNvbGxlY3Rpb25NYXA6IFNvY2tldENvbGxlY3Rpb25NYXA8SXRlbVR5cGVUeXBlPlxuXHQpOiBHcm91cGVkRXh0ZW5kZWRDb2xsZWN0aW9uTWF0Y2hSZXN1bHQ8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVxdWVzdElkcykge1xuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKSE7XG5cdFx0XHRjb25zdCBpc05ldyA9IGl0ZW1FbnRyeS5pbml0aWFsID09PSB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0aWYgKGZpZWxkcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoKTtcblxuXHRcdFx0XHRpZiAoaXNOZXcpXG5cdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XG5cblx0XHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRlcml2ZWQgPSByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSW5mby5yb290KTtcblxuXHRcdFx0aWYgKGlzTmV3KVxuXHRcdFx0XHRpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKGZpZWxkcywgZGVyaXZlZCwgY29sdW1uSW5mbyk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XG5cdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhcblx0XHRcdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXG5cdFx0XHRcdFx0e30sXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMubWFpblxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGlmIChleHBhbnNpb25SZXN1bHQgIT09IG51bGwpXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChmaWVsZHMsIGRlcml2ZWQsIGV4cGFuc2lvblJlc3VsdCk7XG5cblx0XHRcdFx0aXRlbUVudHJ5XG5cdFx0XHRcdFx0LnVwZGF0ZUZpZWxkcyhmaWVsZHMsIGRlcml2ZWQsIGZhbHNlKVxuXHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpXG5cdFx0XHRcdFx0LnJlc29sdmUoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKTtcblx0fVxuXG5cdHByaXZhdGUgaXNGdW5jdGlvbkNoYW5nZXNSZXNvbHZlTWVzc2FnZSAobWVzc2FnZTogU29ja2V0TWVzc2FnZSk6IG1lc3NhZ2UgaXMgRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZVNvY2tldE1lc3NhZ2Uge1xuXHRcdHJldHVybiBtZXNzYWdlLmJvZHkuaXRlbVR5cGUgPT09ICdGdW5jdGlvbkNoYW5nZXNSZXNvbHZlJztcblx0fVxuXG5cdGhhbmRsZUNyZWF0ZSAobWVzc2FnZTogRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZVNvY2tldE1lc3NhZ2UpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+O1xuXHRoYW5kbGVDcmVhdGUgKG1lc3NhZ2U6IFNvY2tldE1lc3NhZ2UpOiBQcm9taXNlSW50ZXJmYWNlPG51bGw+O1xuXHRoYW5kbGVDcmVhdGUgKG1lc3NhZ2U6IFNvY2tldE1lc3NhZ2UpOiBhbnkge1xuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XG5cblx0XHRpZiAodGhpcy5pc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmVNZXNzYWdlKG1lc3NhZ2UpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvY2Vzc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUoYm9keSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZShib2R5KS50aGVuKFxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgdHJ1ZSk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XG5cdH1cblxuXHRoYW5kbGVVcGRhdGUgKG1lc3NhZ2U6IFNvY2tldE1lc3NhZ2UpOiBQcm9taXNlSW50ZXJmYWNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZShtZXNzYWdlLmJvZHkpLnRoZW4oXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIucmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XG5cdH1cblxuXHRoYW5kbGVEZWxldGU8VCBleHRlbmRzIFNvY2tldE1lc3NhZ2U+IChtZXNzYWdlOiBUKTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcblx0XHRjb25zdCBpdGVtVHlwZSA9IGJvZHkuaXRlbVR5cGU7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZXMgPSB0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLmdldEFsbExvY2FsQ2FjaGVzKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcDoge1tjb2xsZWN0aW9uSWQ6IG51bWJlcl06IHtjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnk8VFsnYm9keSddWydpdGVtVHlwZSddPiwgaXRlbXM6IEl0ZW1JZFtdfX0gPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGJvZHkuaXRlbXMpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Q29udGFpbmluZ0l0ZW0oaXRlbVR5cGUsIGl0ZW1JZCk7XG5cblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uSWQgPSBjb2xsZWN0aW9uLmlkO1xuXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbiwgaXRlbXM6IFtdfTtcblxuXHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0uaXRlbXMucHVzaChpdGVtSWQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuY2xlYXJCeUl0ZW1JZChpdGVtVHlwZSwgaXRlbUlkKTtcblxuXHRcdFx0Zm9yIChjb25zdCBsb2NhbENhY2hlIG9mIGxvY2FsQ2FjaGVzKVxuXHRcdFx0XHRsb2NhbENhY2hlLml0ZW1zLmNsZWFyQnlJdGVtSWQoaXRlbVR5cGUsIGl0ZW1JZCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XG5cdFx0XHRtYXBFbnRyeS5jb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKG1hcEVudHJ5Lml0ZW1zLCBudWxsLCB0cnVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XG5cdH1cblxuXHQvLyBUT0RPIVxuXHRoYW5kbGVMaW5rTW92ZSAoKTogUHJvbWlzZUludGVyZmFjZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xuXHR9XG5cblx0LypcdGhhbmRsZUxpbmtNb3ZlIChtZXNzYWdlKSB7XG5cdCBwcm9jZXNzTWVzc2FnZShcblx0IG1lc3NhZ2UsXG5cdCBmdW5jdGlvbiAoY29sbGVjdGlvbiwgaXRlbUVudHJpZXMpIHtcblx0IC8vIGZpdHMgaW4gdGhpcyBjb2xsZWN0aW9uLCB0b2RvOiBnZXQgdGhlIG9sZCBjb2xsZWN0aW9uIGl0IGJlbG9uZ2VkIHRvXG5cdCBjb2xsZWN0aW9uLm1vdmVJdGVtcyhpdGVtRW50cmllcywgbnVsbCwgdHJ1ZSk7XG5cdCB9LFxuXHQgZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XG5cdCAvLyBtYXliZSBmaXRzXG5cdCAvLyB0b2RvOiBhbHNvIHJlbW92ZSB0aGVtIGZyb20gdGhlIG9sZCBjb2xsZWN0aW9uXG5cdCBjb2xsZWN0aW9uLmV4dGVuZChhbmd1bGFyLmlkZW50aXR5LCBmYWxzZSwgZmFsc2UpO1xuXHQgfSxcblx0IGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpZHMpIHtcblx0IC8vIG5vdCBmaXR0aW5nIGluIHRoaXMgY29sbGVjdGlvbiwgcmVtb3ZlIGl0ID9cblx0IGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoaWRzLCBudWxsLCBtZXNzYWdlKTtcblx0IH1cblx0ICk7XG5cdCB9XG5cdCAqL1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9BcGlGb3JtYXR0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXF1ZXN0U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlUHJvY2Vzc29yJztcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXMnO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzUHJvY2Vzc29yJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25IYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbk1hdGNoZXInO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5IYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSW5mbyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblNldCc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblN1YnNldENhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uVXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtQWRtaW5pc3RyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1DYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtSGFuZGxlcic7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXF1ZXN0U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0tleVNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Mb2NhbENhY2hlJztcbmV4cG9ydCAqIGZyb20gJy4vTG9ja1NlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeU1hdGNoZXInO1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVBhcnNlcic7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5U2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL1Jlc291cmNlQ2FjaGUnO1xuZXhwb3J0ICogZnJvbSAnLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uJztcbmV4cG9ydCAqIGZyb20gJy4vU29ja2V0TWVzc2FnZUhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9VdGlsJztcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQXBpUmVzcG9uc2VQcm9jZXNzb3IgfSBmcm9tICcuLi9jbGFzc2VzJztcblxuZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyKSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAocmVzcG9uc2U6IGFueSk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yIHtcblx0XHRyZXR1cm4gbmV3IEFwaVJlc3BvbnNlUHJvY2Vzc29yKHRoaXMuYXBpRm9ybWF0dGVyLCByZXNwb25zZSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEJhdGNoU3RhdHVzIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSXRlbUlkLCBJdGVtVHlwZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEJhdGNoU3RhdHVzRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZSwgVCBleHRlbmRzIEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+IHwgQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4+IChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGVUeXBlLFxuXHRcdGdldEl0ZW1JZDogKGVudHJ5OiBUKSA9PiBJdGVtSWQsXG5cdFx0Z2V0UHJvbWlzZTogKGVudHJ5OiBUKSA9PiBQcm9taXNlSW50ZXJmYWNlPFQ+XG5cdCk6IEJhdGNoU3RhdHVzPEl0ZW1UeXBlVHlwZSwgVD4ge1xuXHRcdHJldHVybiBuZXcgQmF0Y2hTdGF0dXMoXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRnZXRJdGVtSWQsXG5cdFx0XHRnZXRQcm9taXNlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ2hhbmdlc0NvbXBpbGF0aW9uLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4vJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoXG5cdFx0c2luZ2xlSXRlbXM6IEFycmF5PEl0ZW1FbnRyeTxJdGVtVHlwZT4+LFxuXHRcdGNvbGxlY3Rpb25zOiBBcnJheTxDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGU+PlxuXHQpOiBDaGFuZ2VzQ29tcGlsYXRpb24ge1xuXHRcdHJldHVybiBuZXcgQ2hhbmdlc0NvbXBpbGF0aW9uKFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0c2luZ2xlSXRlbXMsXG5cdFx0XHRjb2xsZWN0aW9uc1xuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSwgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IENvbGxlY3Rpb25DYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uQ2FjaGUoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLCBDb2x1bW5IYW5kbGVyLCBJdGVtRW50cnlTZXJ2aWNlLCBJdGVtSGFuZGxlciwgSXRlbVJlcXVlc3RTZXJ2aWNlLCBLZXlTZXJ2aWNlLCBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzLyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LCBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzLyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy8nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uRW50cnlPcHRpb25zLCBDb2xsZWN0aW9uRW50cnlPcHRpb25zSW50ZXJmYWNlIH0gZnJvbSAnLi4vbW9kZWxzLyc7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzLyc7XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHB1YmxpYyBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHB1YmxpYyBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdHB1YmxpYyBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxuXHRcdHB1YmxpYyBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHB1YmxpYyBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgZXhjZXB0aW9uSGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcblx0XHRwdWJsaWMgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHB1YmxpYyBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvbkVudHJ5T3B0aW9uc0ludGVyZmFjZVxuXHQpOiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPiB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPihcblx0XHRcdHRoaXMsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdG5ldyBDb2xsZWN0aW9uRW50cnlPcHRpb25zKG9wdGlvbnMpXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uTWF0Y2hlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3Q8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uQ2FjaGVzOiBDb2xsZWN0aW9uQ2FjaGVbXSxcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuLFxuXHRcdGNhbGxPbkFkZDogYm9vbGVhbixcblx0XHRjYWxsT25BY3RpdmF0ZTogYm9vbGVhblxuXHQpOiBDb2xsZWN0aW9uTWF0Y2hlcjxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25NYXRjaGVyKFxuXHRcdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0Y29sbGVjdGlvbkNhY2hlcyxcblx0XHRcdHVwZGF0ZUluaXRpYWwsXG5cdFx0XHRjYWxsT25BZGQsXG5cdFx0XHRjYWxsT25BY3RpdmF0ZVxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENoYW5nZXNQcm9jZXNzb3IsIEtleVNlcnZpY2UsIExvY2FsQ2FjaGUsIFJlc291cmNlQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBFeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVkaXRSZXNvdXJjZSxcblx0Q29sbGVjdGlvbkVudHJ5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2UsXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMsXG5cdENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2UsXG5cdENvbGxlY3Rpb25WaWV3UmVzb3VyY2UsXG5cdEVkaXRSZXNvdXJjZSxcblx0SXRlbVJlc291cmNlLFxuXHRMb2NhbFZpZXdSZXNvdXJjZSxcblx0UmVtb3RlVmlld1Jlc291cmNlXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnkge1xuXHRwdWJsaWMgcmVhZG9ubHkgY2FjaGU6IFJlc291cmNlQ2FjaGU8Q29sbGVjdGlvblJlc291cmNlPGFueT4+ID0gbmV3IFJlc291cmNlQ2FjaGU8Q29sbGVjdGlvblJlc291cmNlPGFueT4+KCk7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgZXhjZXB0aW9uSGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwdWJsaWMgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge31cblxuXHRwdWJsaWMgY29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdEl0ZW1zOiB0cnVlLCBlZGl0Q29sbGVjdGlvbjogdHJ1ZX0sXG5cdFx0bGV2ZWw6IG51bWJlcixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgbnVsbFxuXHQpOiBDb2xsZWN0aW9uRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZSwgRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Q8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtyZW1vdGVJdGVtczogdHJ1ZSwgZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSB8IG51bGxcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwdWJsaWMgY29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7ZWRpdENvbGxlY3Rpb246IHRydWV9LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSB8IG51bGxcblx0KTogQ29sbGVjdGlvbkVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIExvY2FsVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT4+O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Q8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeTxJdGVtVHlwZVR5cGU+LFxuXHRcdG9wdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnNJbnRlcmZhY2U8SXRlbVR5cGVUeXBlPiAmIHtlZGl0SXRlbXM6IHRydWV9LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSB8IG51bGxcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEVkaXRSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwdWJsaWMgY29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4gJiB7cmVtb3RlSXRlbXM6IHRydWV9LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSB8IG51bGxcblx0KTogQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGUsIFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+PjtcblxuXHRwdWJsaWMgY29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VPcHRpb25zSW50ZXJmYWNlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bGV2ZWw6IG51bWJlcixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgbnVsbFxuXHQpOiBDb2xsZWN0aW9uVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0cHVibGljIGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogQ29sbGVjdGlvblJlc291cmNlT3B0aW9uc0ludGVyZmFjZTxJdGVtVHlwZVR5cGU+LFxuXHRcdGxldmVsOiBudW1iZXIsXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSB8IG51bGwgPSBudWxsXG5cdCk6IENvbGxlY3Rpb25SZXNvdXJjZTxJdGVtVHlwZVR5cGUsIEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGU+PiB7XG5cdFx0Y29uc3Qgb3B0aW9uc0luc3RhbmNlID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZU9wdGlvbnMob3B0aW9ucyk7XG5cblx0XHRpZiAob3B0aW9uc0luc3RhbmNlLmVkaXRJdGVtcylcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcyA9IHRydWU7XG5cblx0XHRpZiAob3B0aW9uc0luc3RhbmNlLmVkaXRDb2xsZWN0aW9uKSB7XG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcyA9IHRydWU7XG5cblx0XHRcdHJldHVybiB0aGlzLmNhY2hlLnNldChcblx0XHRcdFx0bmV3IENvbGxlY3Rpb25FZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPih0aGlzLCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnNJbnN0YW5jZSwgbGV2ZWwsIGxvY2FsQ2FjaGUpLFxuXHRcdFx0XHRsZXZlbFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXQoXG5cdFx0XHRuZXcgQ29sbGVjdGlvblZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+KHRoaXMsIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9uc0luc3RhbmNlLCBsZXZlbCwgbG9jYWxDYWNoZSksXG5cdFx0XHRsZXZlbFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtbkV4cGFuc2lvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkV4cGFuc2lvbkZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3Rvcnlcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogQ29sdW1uRXhwYW5zaW9uPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uRXhwYW5zaW9uKHRoaXMuY29sdW1uSW5mb0ZhY3RvcnksIGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uSW5mbyB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVR5cGUsIFJlc3BvbnNlQ29sdW1uLCBSb290Q29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mb0ZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoKSB7fVxuXG5cdGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGFwaUNvbHVtbjogUmVzcG9uc2VDb2x1bW4sXG5cdFx0cGFyZW50OiBDb2x1bW5JbmZvPEl0ZW1UeXBlVHlwZT4gfCBudWxsXG5cdCk6IENvbHVtbkluZm88SXRlbVR5cGVUeXBlPiB7XG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5JbmZvKGFwaUNvbHVtbiwgcGFyZW50KTtcblx0fVxuXG5cdGNvbnN0cnVjdEZyb21Sb290TWFwPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0cm9vdENvbHVtbk1hcDogUm9vdENvbHVtbk1hcCxcblx0XHRwYXJlbnQ6IENvbHVtbkluZm88SXRlbVR5cGVUeXBlPiB8IG51bGwgPSBudWxsXG5cdCkge1xuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8Q29sdW1uSW5mbzxJdGVtVHlwZVR5cGU+PiA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByb290Q29sdW1uTWFwKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5NYXBFbnRyeSA9IHJvb3RDb2x1bW5NYXBbY29sdW1uSWRdO1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29uc3RydWN0PEl0ZW1UeXBlVHlwZT4oY29sdW1uTWFwRW50cnkuYXBpQ29sdW1uLCBwYXJlbnQpO1xuXHRcdFx0Y29uc3QgY2hpbGRDb2x1bW5zID0gdGhpcy5jb25zdHJ1Y3RGcm9tUm9vdE1hcDxJdGVtVHlwZVR5cGU+KGNvbHVtbk1hcEVudHJ5LmNoaWxkcmVuLCBjb2x1bW5JbmZvKTtcblxuXHRcdFx0aWYgKGNoaWxkQ29sdW1ucy5sZW5ndGggPiAwKVxuXHRcdFx0XHRjb2x1bW5JbmZvLnNldENoaWxkcmVuKGNvbHVtbkluZm8uYXBpQ29sdW1uLml0ZW1UeXBlLCBjaGlsZENvbHVtbnMpO1xuXG5cdFx0XHRyZXN1bHQucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RDb2x1bW5zLCBJdGVtVHlwZSwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXRGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3RTdHViPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnNcblx0KTogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4ge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4oXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXG5cdFx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5LFxuXHRcdFx0dGhpcyxcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHQpO1xuXHR9XG5cblx0Y29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogQXBpUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCxcblx0XHRlbmFibGVDYWNoaW5nPzogYm9vbGVhbixcblx0XHRpbmNsdWRlSWRDb2x1bW4/OiBib29sZWFuXG5cdCk6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykucmVzb2x2ZShyZXNwb25zZUNvbHVtbnMsIGVuYWJsZUNhY2hpbmcsIGluY2x1ZGVJZENvbHVtbik7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblN1YnNldENhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0Q29sdW1ucywgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5TdWJzZXRDYWNoZUZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoKSB7fVxuXG5cdGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKHJlcXVlc3RDb2x1bW5zOiBBcGlSZXF1ZXN0Q29sdW1ucyk6IENvbHVtblN1YnNldENhY2hlPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdHJldHVybiBuZXcgQ29sdW1uU3Vic2V0Q2FjaGU8SXRlbVR5cGVUeXBlPihyZXF1ZXN0Q29sdW1ucyk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbkhhbmRsZXIsIENyZWF0ZUNvbXBpbGF0aW9uLCBDcmVhdGVSZXF1ZXN0LCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdEZhY3Rvcnkge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGNvbXBpbGF0aW9uOiBDcmVhdGVDb21waWxhdGlvbixcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxuXHRcdHBhcmFtZXRlck1hcDogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0XHRicmVha3VwQnlQYXJlbnQ/OiBib29sZWFuXG5cdCk6IENyZWF0ZVJlcXVlc3Q8SXRlbVR5cGVUeXBlPiB7XG5cdFx0cmV0dXJuIG5ldyBDcmVhdGVSZXF1ZXN0KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdGNvbXBpbGF0aW9uLFxuXHRcdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGUsXG5cdFx0XHRwYXJhbWV0ZXJNYXAsXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IEl0ZW1DYWNoZSB7XG5cdFx0cmV0dXJuIG5ldyBJdGVtQ2FjaGUodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2x1bW5TZXQsIEl0ZW1FbnRyeVNlcnZpY2UsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnksIEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgQXV0aEludGVyZmFjZSwgRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1FbnRyeSwgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdENvbHVtbnMsIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtRW50cnlGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwdWJsaWMgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgZXhjZXB0aW9uSGFuZGxlcjogRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwdWJsaWMgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge31cblxuXHRjb25zdHJ1Y3RTdHViPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRjb2x1bW5TZXRTdHViOiBDb2x1bW5TZXQ8SXRlbVR5cGVUeXBlPlxuXHQpOiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPiB7XG5cdFx0cmV0dXJuIG5ldyBJdGVtRW50cnkodGhpcywgaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0U3R1Yik7XG5cdH1cblxuXHRjb25zdHJ1Y3RMb2NhbExpbmtlZDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0aW5pdGlhbDogRmllbGRNYXA8SXRlbVR5cGVUeXBlPixcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldDxJdGVtVHlwZVR5cGU+LFxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcblx0KTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4ge1xuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY29uc3RydWN0U3R1YjxJdGVtVHlwZVR5cGU+KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldCk7XG5cblx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5zZXRMb2NhbEZpZWxkcyhpbml0aWFsLCBjb252ZXJzaW9uTWFwKTtcblx0fVxuXG5cdGNvbnN0cnVjdExvY2FsPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0dGVtcGxhdGU6IFRlbXBsYXRlPEl0ZW1UeXBlVHlwZT4sXG5cdFx0bW9kaWZpZWQ6IEZpZWxkTWFwPEl0ZW1UeXBlVHlwZT4sXG5cdFx0ZGVyaXZlZDogRmllbGRNYXAsXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsLFxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0PEl0ZW1UeXBlVHlwZT4gPSB0ZW1wbGF0ZS5jb2x1bW5zLFxuXHRcdGNvbnZlcnNpb25NYXA/OiBJdGVtSWRDb252ZXJzaW9uTWFwXG5cdCk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+IHtcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRlbXBsYXRlLmNvbHVtbnMuaXRlbVR5cGU7XG5cblx0XHRpZiAoY29udmVyc2lvbk1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y29udmVyc2lvbk1hcCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgdGVtcGxhdGUucmVzcG9uc2UpO1xuXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViPEl0ZW1UeXBlVHlwZT4oaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0KTtcblxuXHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XG5cblx0XHRyZXR1cm4gaXRlbUVudHJ5XG5cdFx0XHQuc2V0TG9jYWxGaWVsZHModGVtcGxhdGUuZmllbGRzLCBjb252ZXJzaW9uTWFwLCB0ZW1wbGF0ZS5jb2x1bW5zKVxuXHRcdFx0LnNldE1vZGlmaWVkKG1vZGlmaWVkKVxuXHRcdFx0LnNldERlcml2ZWQoZGVyaXZlZCk7XG5cdH1cblxuXHRjb25zdHJ1Y3REZWZlcnJlZDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZVR5cGUsXG5cdFx0aXRlbUlkOiBJdGVtSWQsXG5cdFx0cmVxdWVzdENvbHVtbnM6IEFwaVJlcXVlc3RDb2x1bW5zLFxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhblxuXHQpOiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPiB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5U3R1YiA9IHRoaXMuY29uc3RydWN0U3R1YjxJdGVtVHlwZVR5cGU+KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0U3R1YjxJdGVtVHlwZVR5cGU+KFxuXHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0aXRlbUVudHJ5U3R1Yi5kZWZlcihkZWZlclJlcXVlc3QpO1xuXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeVN0dWI7XG5cdH1cblxuXHRjb25zdHJ1Y3Q8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcblx0XHRpbml0aWFsOiBGaWVsZE1hcDxJdGVtVHlwZVR5cGU+LFxuXHRcdGRlcml2ZWQ6IEZpZWxkTWFwLFxuXHRcdGNvbHVtbkluZm86IENvbHVtblNldDxJdGVtVHlwZVR5cGU+XG5cdCk6IEl0ZW1FbnRyeTxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdHViPEl0ZW1UeXBlVHlwZT4oXG5cdFx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkLCAvLyBpbml0aWFsLmlkICh3aGVuIGluaXRpYWwgaXMgbm90IGEgdGVtcGxhdGUpXG5cdFx0XHRjb2x1bW5JbmZvXG5cdFx0KS5zZXRGaWVsZHMoXG5cdFx0XHRpbml0aWFsLCAvLyBjYW4gYWxzbyBiZSBhIHRlbXBsYXRlXG5cdFx0XHRkZXJpdmVkXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDaGFuZ2VzUHJvY2Vzc29yLCBMb2NhbENhY2hlLCBMb2NrU2VydmljZSwgUmVzb3VyY2VDYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlTGlicmFyeUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRWRpdFJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgSXRlbVJlc291cmNlT3B0aW9ucywgTG9jYWxWaWV3UmVzb3VyY2UsIFJlbW90ZVZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBJdGVtT3B0aW9uc0ludGVyZmFjZSwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFJlc291cmNlQ29uc3RydWN0b3I8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGUsIFQgZXh0ZW5kcyBJdGVtUmVzb3VyY2U8SXRlbVR5cGVUeXBlPj4gPSAoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPikgPT4gVDtcblxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZUZhY3Rvcnkge1xuXHRwdWJsaWMgcmVhZG9ubHkgY2FjaGU6IFJlc291cmNlQ2FjaGU8SXRlbVJlc291cmNlPGFueT4+ID0gbmV3IFJlc291cmNlQ2FjaGU8SXRlbVJlc291cmNlPGFueT4+KCk7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcblx0XHRwdWJsaWMgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuXHRcdHB1YmxpYyBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdHB1YmxpYyBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdCkge31cblxuXHRwdWJsaWMgZ2V0Q29uc3RydWN0b3I8SXRlbVR5cGVUeXBlIGV4dGVuZHMgSXRlbVR5cGU+IChcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCBudWxsXG5cdCk6IFJlc291cmNlQ29uc3RydWN0b3I8SXRlbVR5cGVUeXBlLCBFZGl0UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0cHVibGljIGdldENvbnN0cnVjdG9yPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCBudWxsXG5cdCk6IFJlc291cmNlQ29uc3RydWN0b3I8SXRlbVR5cGVUeXBlLCBSZW1vdGVWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0cHVibGljIGdldENvbnN0cnVjdG9yPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw6IG51bWJlcixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgbnVsbFxuXHQpOiBSZXNvdXJjZUNvbnN0cnVjdG9yPEl0ZW1UeXBlVHlwZSwgTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPj47XG5cblx0cHVibGljIGdldENvbnN0cnVjdG9yPEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw6IG51bWJlcixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlIHwgbnVsbFxuXHQpOiBSZXNvdXJjZUNvbnN0cnVjdG9yPEl0ZW1UeXBlVHlwZSwgSXRlbVJlc291cmNlPEl0ZW1UeXBlVHlwZT4+IHtcblx0XHRjb25zdCBvcHRpb25zSW5zdGFuY2UgPSBuZXcgSXRlbVJlc291cmNlT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdHJldHVybiAoaXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPikgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0V2l0aE9wdGlvbnM8SXRlbVR5cGVUeXBlPihpdGVtRW50cnksIG9wdGlvbnNJbnN0YW5jZSwgbGV2ZWwsIGxvY2FsQ2FjaGUpO1xuXHRcdH07XG5cdH1cblxuXHRwdWJsaWMgY29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSAmIHtlZGl0OiB0cnVlfSxcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdGxvY2FsQ2FjaGU/OiBMb2NhbENhY2hlIHwgbnVsbCxcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KTogRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT47XG5cblx0cHVibGljIGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UgJiB7cmVtb3RlOiB0cnVlfSxcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdGxvY2FsQ2FjaGU/OiBMb2NhbENhY2hlIHwgbnVsbCxcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KTogTG9jYWxWaWV3UmVzb3VyY2U8SXRlbVR5cGVUeXBlPjtcblxuXHRwdWJsaWMgY29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9uc0ludGVyZmFjZSxcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdGxvY2FsQ2FjaGU/OiBMb2NhbENhY2hlIHwgbnVsbCxcblx0XHRpc05ldz86IGJvb2xlYW5cblx0KTogUmVtb3RlVmlld1Jlc291cmNlPEl0ZW1UeXBlVHlwZT47XG5cblx0cHVibGljIGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnNJbnRlcmZhY2UsXG5cdFx0bGV2ZWw6IG51bWJlcixcblx0XHRsb2NhbENhY2hlPzogTG9jYWxDYWNoZSB8IG51bGwsXG5cdFx0aXNOZXc/OiBib29sZWFuXG5cdCk6IEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RXaXRoT3B0aW9ucyhpdGVtRW50cnksIG5ldyBJdGVtUmVzb3VyY2VPcHRpb25zKG9wdGlvbnMpLCBsZXZlbCwgbG9jYWxDYWNoZSwgaXNOZXcpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb25zdHJ1Y3RXaXRoT3B0aW9uczxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdGl0ZW1FbnRyeTogSXRlbUVudHJ5PEl0ZW1UeXBlVHlwZT4sXG5cdFx0b3B0aW9uczogSXRlbVJlc291cmNlT3B0aW9ucyxcblx0XHRsZXZlbDogbnVtYmVyLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgfCBudWxsID0gbnVsbCxcblx0XHRpc05ldzogYm9vbGVhbiA9IGZhbHNlXG5cdCk6IEl0ZW1SZXNvdXJjZTxJdGVtVHlwZVR5cGU+IHtcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXQoXG5cdFx0XHRvcHRpb25zLmVkaXQgP1xuXHRcdFx0XHRuZXcgRWRpdFJlc291cmNlPEl0ZW1UeXBlVHlwZT4odGhpcywgaXRlbUVudHJ5LCBvcHRpb25zLCBpc05ldywgbG9jYWxDYWNoZSkgOlxuXHRcdFx0XHQoXG5cdFx0XHRcdFx0b3B0aW9ucy5yZW1vdGUgP1xuXHRcdFx0XHRcdFx0bmV3IFJlbW90ZVZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+KHRoaXMsIGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNOZXcsIGxvY2FsQ2FjaGUpIDpcblx0XHRcdFx0XHRcdG5ldyBMb2NhbFZpZXdSZXNvdXJjZTxJdGVtVHlwZVR5cGU+KHRoaXMsIGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNOZXcsIGxvY2FsQ2FjaGUpXG5cdFx0XHRcdCksXG5cdFx0XHRsZXZlbFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENoYW5nZXNQcm9jZXNzb3IsIExvY2FsQ2FjaGUsIExvY2tTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LCBJdGVtQ2FjaGVGYWN0b3J5LCBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgRXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIExvY2FsQ2FjaGVGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBleGNlcHRpb25IYW5kbGVyOiBFeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0KSB7XG5cblx0fVxuXG5cdGNvbnN0cnVjdCAoaWQ6IHN0cmluZywgZGVmYXVsdFJlc291cmNlTGV2ZWw6IG51bWJlcik6IExvY2FsQ2FjaGUge1xuXHRcdHJldHVybiBuZXcgTG9jYWxDYWNoZShcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3Nvcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5leGNlcHRpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXG5cdFx0XHRpZCxcblx0XHRcdGRlZmF1bHRSZXNvdXJjZUxldmVsXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUsIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdDxJdGVtVHlwZVR5cGUgZXh0ZW5kcyBJdGVtVHlwZT4gKFxuXHRcdHJvb3RJdGVtOiBJdGVtRW50cnk8SXRlbVR5cGVUeXBlPixcblx0XHRzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcblx0XHRjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxuXHQpOiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb248SXRlbVR5cGVUeXBlPiB7XG5cdFx0cmV0dXJuIG5ldyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24ocm9vdEl0ZW0sIHNpbmdsZUl0ZW1DYWNoZSwgY29sbGVjdGlvbkNhY2hlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBRdWVyeU1hdGNoZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlNYXRjaGVyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyXG5cdCkge1xuXG5cdH1cblxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpOiBRdWVyeU1hdGNoZXIge1xuXHRcdHJldHVybiBuZXcgUXVlcnlNYXRjaGVyKFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGZpZWxkcyxcblx0XHRcdHBhcmVudFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IFF1ZXJ5UGFyc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlRdWVyeSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yICgpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAocXVlcnk6IEFwaVF1ZXJ5LCBwYXJhbWV0ZXJzPzogYW55KTogUXVlcnlQYXJzZXIge1xuXHRcdHJldHVybiBuZXcgUXVlcnlQYXJzZXIocXVlcnksIHBhcmFtZXRlcnMpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsLCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKCk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb24ge1xuXHRcdHJldHVybiBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbihcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxuXHRcdCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEl0ZW1UeXBlLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwdWJsaWMgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwdWJsaWMgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHt9XG5cblx0Y29uc3RydWN0PEl0ZW1UeXBlVHlwZSBleHRlbmRzIEl0ZW1UeXBlPiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlVHlwZSxcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXG5cdFx0YWRkaXRpb25hbENvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IFRlbXBsYXRlPEl0ZW1UeXBlVHlwZT4ge1xuXHRcdHJldHVybiBuZXcgVGVtcGxhdGU8SXRlbVR5cGVUeXBlPih0aGlzLCBpdGVtVHlwZSwgcmVzcG9uc2UsIGFkZGl0aW9uYWxDb2x1bW5zKTtcblx0fVxufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9BcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1c0ZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uTWF0Y2hlckZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkluZm9GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0RmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblN1YnNldENhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3RGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUNhY2hlRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxDYWNoZUZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlNYXRjaGVyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vVGVtcGxhdGVGYWN0b3J5JztcbiIsImltcG9ydCB7XG5cdEFwaUZvcm1hdHRlcixcblx0QXBpUmVxdWVzdFNlcnZpY2UsXG5cdENoYW5nZXNQcm9jZXNzb3IsXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRDb2x1bW5DYWNoZSxcblx0Q29sdW1uSGFuZGxlcixcblx0Q29sdW1uVXRpbCxcblx0SXRlbUFkbWluaXN0cmF0b3IsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1IYW5kbGVyLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdExvY2tTZXJ2aWNlLFxuXHRRdWVyeVNlcnZpY2UsXG5cdFNvY2tldE1lc3NhZ2VIYW5kbGVyXG59IGZyb20gJy4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnksXG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0Q29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRDb2x1bW5JbmZvRmFjdG9yeSxcblx0Q29sdW1uU2V0RmFjdG9yeSxcblx0Q29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5LFxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbUVudHJ5RmFjdG9yeSxcblx0SXRlbVJlc291cmNlRmFjdG9yeSxcblx0TG9jYWxDYWNoZUZhY3RvcnksXG5cdE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFRlbXBsYXRlRmFjdG9yeVxufSBmcm9tICcuL2ZhY3Rvcmllcyc7XG5pbXBvcnQge1xuXHRBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0QXV0aEludGVyZmFjZSxcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRFeGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLFxuXHRMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0UHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFJtQ29yZSB7XG5cdHZlcnNpb246IHN0cmluZztcblx0bm9vcCA9IG5vb3A7XG5cblx0YXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXI7XG5cdGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZTtcblx0YXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk7XG5cdGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5O1xuXHRjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xuXHRjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yO1xuXHRjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5O1xuXHRjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5O1xuXHRjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xuXHRjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XG5cdGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5O1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5O1xuXHRjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlO1xuXHRjb2x1bW5DYWNoZTogQ29sdW1uQ2FjaGU7XG5cdGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XG5cdGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXI7XG5cdGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeTtcblx0Y29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeTtcblx0Y29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5OiBDb2x1bW5TdWJzZXRDYWNoZUZhY3Rvcnk7XG5cdGNvbHVtblV0aWw6IENvbHVtblV0aWw7XG5cdGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeTtcblx0aXRlbUFkbWluaXN0cmF0b3I6IEl0ZW1BZG1pbmlzdHJhdG9yO1xuXHRpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5O1xuXHRpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5O1xuXHRpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlO1xuXHRpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXI7XG5cdGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlO1xuXHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5O1xuXHRrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlO1xuXHRsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3Rvcnk7XG5cdGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZTtcblx0bW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTtcblx0cXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeTtcblx0cXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3Rvcnk7XG5cdHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlO1xuXHRyZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XG5cdHNvY2tldE1lc3NhZ2VIYW5kbGVyOiBTb2NrZXRNZXNzYWdlSGFuZGxlcjtcblx0dGVtcGxhdGVGYWN0b3J5OiBUZW1wbGF0ZUZhY3Rvcnk7XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdGFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxuXHRcdGVycm9ySGFuZGxlckludGVyZmFjZTogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdGV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2U6IEV4Y2VwdGlvbkhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlOiBQcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHQpIHtcblx0XHR0aGlzLnZlcnNpb24gPSAnMS43LjQnO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIgPSBuZXcgQXBpRm9ybWF0dGVyKCk7XG5cdFx0dGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgPSBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlID0gbmV3IEFwaVJlcXVlc3RTZXJ2aWNlKGFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSk7XG5cblx0XHR0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSA9IG5ldyBCYXRjaFN0YXR1c0ZhY3RvcnkocHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UpO1xuXHRcdHRoaXMua2V5U2VydmljZSA9IG5ldyBLZXlTZXJ2aWNlKCk7XG5cdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5TWF0Y2hlckZhY3RvcnkodGhpcy5hcGlGb3JtYXR0ZXIpO1xuXHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5UGFyc2VyRmFjdG9yeSgpO1xuXHRcdHRoaXMucXVlcnlTZXJ2aWNlID0gbmV3IFF1ZXJ5U2VydmljZSgpO1xuXG5cdFx0dGhpcy5jb2x1bW5VdGlsID0gbmV3IENvbHVtblV0aWwoKTtcblx0XHR0aGlzLmNvbHVtbkNhY2hlID0gbmV3IENvbHVtbkNhY2hlKHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jb2x1bW5IYW5kbGVyID0gbmV3IENvbHVtbkhhbmRsZXIoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmNvbHVtbkNhY2hlLFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsXG5cdFx0KTtcblx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5ID0gbmV3IENvbHVtbkluZm9GYWN0b3J5KCk7XG5cdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5ID0gbmV3IENvbHVtbkV4cGFuc2lvbkZhY3RvcnkodGhpcy5jb2x1bW5JbmZvRmFjdG9yeSk7XG5cdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5ID0gbmV3IENvbHVtblNldEZhY3RvcnkodGhpcy5jb2x1bW5IYW5kbGVyLCB0aGlzLmNvbHVtblV0aWwsIHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkpO1xuXHRcdHRoaXMuY29sdW1uU3Vic2V0Q2FjaGVGYWN0b3J5ID0gbmV3IENvbHVtblN1YnNldENhY2hlRmFjdG9yeSgpO1xuXG5cdFx0dGhpcy5sb2NrU2VydmljZSA9IG5ldyBMb2NrU2VydmljZShcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy50ZW1wbGF0ZUZhY3RvcnkgPSBuZXcgVGVtcGxhdGVGYWN0b3J5KHRoaXMuY29sdW1uU2V0RmFjdG9yeSwgdGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UgPSBuZXcgSXRlbUVudHJ5U2VydmljZShhdXRoSW50ZXJmYWNlLCB0aGlzLmtleVNlcnZpY2UpO1xuXHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSA9IG5ldyBJdGVtQ2FjaGVGYWN0b3J5KHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XG5cdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5ID0gbmV3IEl0ZW1SZXNvdXJjZUZhY3RvcnkoXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3IsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkoXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRleGNlcHRpb25IYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSA9IG5ldyBJdGVtRW50cnlGYWN0b3J5KFxuXHRcdFx0YXV0aEludGVyZmFjZSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UgPSBuZXcgQ29sbGVjdGlvbkVudHJ5U2VydmljZSh0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSwgdGhpcy5xdWVyeVNlcnZpY2UpO1xuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlKCk7XG5cdFx0dGhpcy5pdGVtSGFuZGxlciA9IG5ldyBJdGVtSGFuZGxlcihcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TdWJzZXRDYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZSxcblx0XHRcdHRoaXMudGVtcGxhdGVGYWN0b3J5XG5cdFx0KTtcblx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSA9IG5ldyBJdGVtUmVxdWVzdFNlcnZpY2UoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0ZXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2Vcblx0XHQpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5XG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyID0gbmV3IENvbGxlY3Rpb25IYW5kbGVyKFxuXHRcdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnksXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5ID0gbmV3IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5KHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSA9IG5ldyBDcmVhdGVSZXF1ZXN0RmFjdG9yeShcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcblx0XHQpO1xuXHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSA9IG5ldyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5KHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSwgdGhpcy5rZXlTZXJ2aWNlKTtcblx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3IgPSBuZXcgQ2hhbmdlc1Byb2Nlc3Nvcihcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHRcdCk7XG5cblx0XHR0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5ID0gbmV3IExvY2FsQ2FjaGVGYWN0b3J5KFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0ZXhjZXB0aW9uSGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHRwcm9taXNlTGlicmFyeUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5ID0gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkoKTtcblxuXHRcdHRoaXMuaXRlbUFkbWluaXN0cmF0b3IgPSBuZXcgSXRlbUFkbWluaXN0cmF0b3IoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0YXV0aEludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdGxvY2FsQ2FjaGVNYW5hZ2VyLFxuXHRcdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0cHJvbWlzZUxpYnJhcnlJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLnNvY2tldE1lc3NhZ2VIYW5kbGVyID0gbmV3IFNvY2tldE1lc3NhZ2VIYW5kbGVyKFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHRsb2NhbENhY2hlTWFuYWdlcixcblx0XHRcdHByb21pc2VMaWJyYXJ5SW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AgKCkge1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vY29yZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzJztcbmV4cG9ydCAqIGZyb20gJy4vZmFjdG9yaWVzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
|