oxygen-cli 1.37.0 → 1.37.2
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 +13 -0
- package/build/core/OxygenCore.js +6 -1
- package/build/runners/oxygen/index.js +8 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## v1.37.2 (2024-12-04)
|
|
4
|
+
|
|
5
|
+
#### :beetle: Bug Fix
|
|
6
|
+
* Produce proper error when trying to add non existent file with `ox.addAttachment`.
|
|
7
|
+
|
|
8
|
+
#### :house: Internal
|
|
9
|
+
* Handle re-run delay and re-run count.
|
|
10
|
+
|
|
11
|
+
## v1.37.1 (2024-09-12)
|
|
12
|
+
|
|
13
|
+
#### :house: Internal
|
|
14
|
+
* Revert odbc.
|
|
15
|
+
|
|
3
16
|
## v1.37.0 (2024-09-12)
|
|
4
17
|
|
|
5
18
|
#### :tada: New Feature
|
package/build/core/OxygenCore.js
CHANGED
|
@@ -332,6 +332,11 @@ class Oxygen extends _OxygenEvents.default {
|
|
|
332
332
|
return;
|
|
333
333
|
}
|
|
334
334
|
|
|
335
|
+
if (!_fs.default.existsSync(filePath)) {
|
|
336
|
+
console.err(`File ${filePath} doesn't exist`);
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
|
|
335
340
|
if (!this.resultStore.attachments) {
|
|
336
341
|
this.resultStore.attachments = [];
|
|
337
342
|
}
|
|
@@ -1060,4 +1065,4 @@ class Oxygen extends _OxygenEvents.default {
|
|
|
1060
1065
|
}
|
|
1061
1066
|
|
|
1062
1067
|
exports.default = Oxygen;
|
|
1063
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL094eWdlbkNvcmUuanMiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnbG9iYWwiLCJnZXQiLCJvcmlnIiwiRXJyb3IiLCJwcmVwYXJlU3RhY2tUcmFjZSIsIl8iLCJzdGFjayIsImVyciIsImNhcHR1cmVTdGFja1RyYWNlIiwiREVGQVVMVF9USU1FT1VUIiwiREVGQVVMVF9PUFRTIiwiYmFja3RyYWNlIiwiY29tcGlsZXIiLCJmYWlsQW1iaWd1b3VzRGVmaW5pdGlvbnMiLCJmYWlsRmFzdCIsImlnbm9yZVVuZGVmaW5lZERlZmluaXRpb25zIiwibmFtZSIsInByb2ZpbGUiLCJyZXF1aXJlIiwib3JkZXIiLCJzbmlwcGV0U3ludGF4IiwidW5kZWZpbmVkIiwic25pcHBldHMiLCJzb3VyY2UiLCJzdHJpY3QiLCJ0YWdFeHByZXNzaW9uIiwidGFnc0luVGl0bGUiLCJ0aW1lb3V0IiwiTU9EVUxFX05BTUVfTUFUQ0hfUkVHRVgiLCJTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVgiLCJET19OT1RfV1JBUF9NRVRIT0RTIiwiREVGQVVMVF9DVFgiLCJwYXJhbXMiLCJ2YXJzIiwiZW52IiwiY2FwcyIsImF0dHJpYnV0ZXMiLCJERUZBVUxUX1JFU1VMVF9TVE9SRSIsInN0ZXBzIiwibG9ncyIsImF0dGFjaG1lbnRzIiwiaGFyIiwiT3h5Z2VuIiwiT3h5Z2VuRXZlbnRzIiwiY29uc3RydWN0b3IiLCJpc0luaXRpYWxpemVkIiwicmVzdWx0U3RvcmUiLCJjdHgiLCJtb2R1bGVzIiwic2VydmljZXMiLCJyZXBvIiwiY2FwYWJpbGl0aWVzIiwib3B0cyIsIm94QmFzZURpciIsInBhdGgiLCJqb2luIiwiX19kaXJuYW1lIiwibG9nZ2VyIiwiX3dyYXBMb2dnZXIiLCJfd2FpdFN0ZXBSZXN1bHRMaXN0IiwiaW5pdCIsIm9wdGlvbnMiLCJyZXN1bHRzIiwiYXNzaWduIiwiY3dkIiwicHJvY2VzcyIsImtleXMiLCJsZW5ndGgiLCJtYWtlT3hHbG9iYWwiLCJfbG9hZFNlcnZpY2VzIiwiX2xvYWRNb2R1bGVzIiwiZ2xvYmFsU2NvcGUiLCJtYWtlQ29udGV4dEFuZE1vZHVsZXNHbG9iYWwiLCJkaXNwb3NlTW9kdWxlcyIsInN0YXR1cyIsIl9kaXNwb3NlTW9kdWxlcyIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJkaXNwb3NlIiwiX2Rpc3Bvc2VTZXJ2aWNlcyIsImFkanVzdFNjcmlwdExpbmUiLCJpc0luRGVidWdNb2RlIiwib3h1dGlsIiwicmVzdWx0IiwiY29udGV4dCIsIm94IiwicmVwb3NpdG9yeSIsInRyYW5zU3RlcCIsImluY2x1ZGVzIiwidHJhbnNOYW1lIiwidHJhbnNhY3Rpb24iLCJkdXJhdGlvbiIsInN0ZXAiLCJlbmRUaW1lIiwiU1RBVFVTIiwiV0FSTklORyIsImdldE1vZHVsZXNDYXBhYmlsaXRpZXMiLCJtb2RDYXBzIiwibW9kdWxlTmFtZSIsIm1vZHVsZSIsIl9nZXRDYXBhYmlsaXRpZXMiLCJyZXNldFJlc3VsdHMiLCJvbkJlZm9yZUNhc2UiLCJfaXRlcmF0aW9uU3RhcnQiLCJvbkFmdGVyQ2FzZSIsIl9pdGVyYXRpb25FbmQiLCJhZGRBdHRyaWJ1dGUiLCJiaW5kIiwiYWRkQXR0YWNobWVudCIsInZhbHVlIiwiZmlsZVBhdGgiLCJwdXNoIiwiY29yZVV0aWxzIiwibmV3RmlsZUF0dGFjaG1lbnQiLCJsb2FkUGFnZU9iamVjdEZpbGUiLCJwb1BhdGgiLCJwbyIsIl9sb2dnZXIiLCJsb2dnZXJXcmFwIiwiaW5mbyIsImFyZ3MiLCJfbG9nIiwiZGVidWciLCJ3YXJuIiwidXNlckluZm8iLCJJU1NVRVJTIiwiVVNFUiIsInVzZXJEZWJ1ZyIsInVzZXJFcnJvciIsInVzZXJXYXJuIiwibGV2ZWwiLCJzcmMiLCJERUZBVUxUX0xPR0dFUl9JU1NVRVIiLCJhcHBseSIsIm1lc3NhZ2UiLCJzdHJpbmdpZnkiLCJ0aW1lIiwiZ2V0VGltZVN0YW1wIiwidG9VcHBlckNhc2UiLCJtc2ciLCJzaGlmdCIsImVtaXRMb2ciLCJveFNlcnZpY2VzRGlyUGF0aCIsInJlc29sdmUiLCJzZXJ2aWNlRmlsZXMiLCJnbG9iIiwic3luYyIsImkiLCJzZXJ2aWNlRmlsZU5hbWUiLCJzZXJ2aWNlRmlsZVBhdGgiLCJtYXRjaCIsInNlcnZpY2VOYW1lIiwiQXJyYXkiLCJpc0FycmF5Iiwic2VydmljZSIsIl9sb2FkU2VydmljZSIsIkVPTCIsInN0YWNrdHJhY2UiLCJzZXJ2aWNlUGF0aCIsIlNlcnZpY2VDbGFzcyIsImRlZmF1bHQiLCJzZXJ2aWNlTG9nZ2VyIiwiX2xvYWRJbnRlcm5hbE1vZHVsZXMiLCJfbG9hZEV4dGVybmFsTW9kdWxlcyIsIm1vZHVsZXNGb2xkZXJQYXRoIiwibW9kdWxlc19leHQiLCJveE1vZHVsZXNEaXJQYXRoIiwiZnMiLCJleGlzdHNTeW5jIiwibW9kdWxlRmlsZXMiLCJmb3JFYWNoIiwibW9kdWxlRmlsZU5hbWUiLCJzdGFydFRpbWUiLCJEYXRlIiwibW9kdWxlTG9nZ2VyIiwibW9kIiwibG9hZE1vZHVsZUZyb21GaWxlIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkIiwiX3dyYXBNb2R1bGUiLCJleGNsdWRlVW5kZWZpbmVkTW9kcyIsIk1vZHVsZXMiLCJNb2R1bGVDbGFzcyIsImdldE94TW9kdWxlc0RpciIsImxvYWRNb2R1bGVGcm9tQ2xhc3MiLCJ3cmFwcGVyIiwiX3RoaXMiLCJtb2R1bGVNZXRob2RzIiwic29tZSIsIngiLCJfZ2V0QWxsUHJvcGVydHlOYW1lcyIsIm1ldGhvZE5hbWUiLCJtZXRob2QiLCJGdW5jdGlvbiIsIk94eWdlblN1Yk1vZHVsZSIsImluZGV4T2YiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJhcmd1bWVudHMiLCJnZXRNZXRob2RTaWduYXR1cmUiLCJlcnJvckhlbHBlciIsImdldE94eWdlbkVycm9yIiwiX2NvbW1hbmRXcmFwcGVyIiwiT3hFcnJvciIsImNtZE5hbWUiLCJjbWRBcmdzIiwicmV0dmFsIiwiY21kRm4iLCJwdWJsaWNNZXRob2QiLCJzdGFydHNXaXRoIiwiZGVsYXkiLCJkZWFzeW5jIiwic2xlZXAiLCJlcnJvckNvZGUiLCJNT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SIiwiZGVjcnlwdGVkQXJncyIsIl9nZXREZWNyeXB0ZWRBcmdzRm9yQXBwbHkiLCJfcG9wdWxhdGVQYXJhbWV0ZXJzVmFsdWUiLCJjbWRMb2NhdGlvbiIsIl9nZXRDb21tYW5kTG9jYXRpb24iLCJlbWl0QmVmb3JlQ29tbWFuZCIsIl93cmFwQXN5bmMiLCJfY2FsbFNlcnZpY2VzT25Nb2R1bGVXaWxsRGlzcG9zZSIsInJldHZhbFByb21pc2UiLCJ0aGVuIiwicHJvbWlzZURvbmUiLCJsb29wV2hpbGUiLCJfY2FsbFNlcnZpY2VzT25Nb2R1bGVJbml0aWFsaXplZCIsInN0ZXBSZXN1bHQiLCJkb25lIiwid2FpdElkIiwiX2dldFN0ZXBSZXN1bHQiLCJpbmRleCIsInNwbGljZSIsImVtaXRBZnRlckNvbW1hbmQiLCJpc0ZhdGFsIiwiY29udGludWVPbkVycm9yIiwibG9jYXRpb24iLCJmYWlsdXJlIiwiZm4iLCJzZWxmIiwiRmliZXIiLCJjdXJyZW50IiwiZmluYWxWYWwiLCJQcm9taXNlIiwidmFsIiwiY2F0Y2giLCJmdXR1cmUiLCJGdXR1cmUiLCJyZXR1cm4iLCJ0aHJvdyIsIndhaXQiLCJfX3N0YWNrIiwiY2FsbGVyIiwiX19maWxlbmFtZSIsImdldEZpbGVOYW1lIiwiZ2V0TGluZU51bWJlciIsImdldENvbHVtbk51bWJlciIsIlN0ZXBSZXN1bHQiLCJkaXNwbGF5TmFtZSIsImdldFN0ZXBEaXNwbGF5TmFtZSIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiZXh0cmEiLCJodHRwIiwidHlwZSIsIkFTU0VSVF9QQVNTRUQiLCJQQVNTRUQiLCJGQUlMRUQiLCJhY3Rpb24iLCJfaXNBY3Rpb24iLCJfZ2V0U3RhdHMiLCJzdGF0cyIsIlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCIsIkFQUElVTV9TRVNTSU9OX1RJTUVPVVQiLCJnZXRGYWlsdXJlRnJvbUVycm9yIiwiX3Rha2VTY3JlZW5zaG90U2lsZW50IiwiZGlzYWJsZVNjcmVlbnNob3QiLCJzY3JlZW5zaG90Iiwia2V5IiwiZGlzcG9zZVJlc3VsdCIsIm9uTW9kdWxlTG9hZGVkIiwib25Nb2R1bGVJbml0aWFsaXplZCIsIm9uTW9kdWxlV2lsbERpc3Bvc2UiLCJfbmV3QXJncyIsImFyZyIsIl9yZXBsYWNlUGFyYW1ldGVySW5Bcmd1bWVudCIsImdldERlY3J5cHRSZXN1bHQiLCJwYXJhbU5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsInBhcmFtVmFsdWUiLCJyZXBsYWNlIiwiUmVnRXhwIiwiZW52TmFtZSIsImVudlZhbHVlIiwib2JqIiwicHJvcHMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcCIsImdldFByb3RvdHlwZU9mIiwiX2NoZWNrU3RlcFJlc3VsdCIsInJlamVjdCIsIl93YWl0U3RlcFJlc3VsdCIsIl9kZWNyeXB0UGFyYW1ldGVyRm9yQXBwbHlJbkFyZ3VtZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7Ozs7Ozs7QUFHQUEsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxNQUF0QixFQUE4QixTQUE5QixFQUF5QztBQUNyQ0MsRUFBQUEsR0FBRyxFQUFFLFlBQVk7QUFDYixRQUFJQyxJQUFJLEdBQUdDLEtBQUssQ0FBQ0MsaUJBQWpCOztBQUNBRCxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLEdBQTBCLFVBQVVDLENBQVYsRUFBYUMsS0FBYixFQUFvQjtBQUFFLGFBQU9BLEtBQVA7QUFBZSxLQUEvRDs7QUFDQSxRQUFJQyxHQUFHLEdBQUcsSUFBSUosS0FBSixFQUFWO0FBQ0FBLElBQUFBLEtBQUssQ0FBQ0ssaUJBQU4sQ0FBd0JELEdBQXhCO0FBQ0EsUUFBSUQsS0FBSyxHQUFHQyxHQUFHLENBQUNELEtBQWhCO0FBQ0FILElBQUFBLEtBQUssQ0FBQ0Ms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RURwRixFQUFBQSx5QkFBeUIsQ0FBQ2hHLElBQUQsRUFBT3RCLFVBQVAsRUFBbUI7QUFDeEMsUUFBSSxDQUFDc0IsSUFBRCxJQUFTLENBQUNnQyxLQUFLLENBQUNDLE9BQU4sQ0FBY2pDLElBQWQsQ0FBVixJQUFpQ0EsSUFBSSxDQUFDdEQsTUFBTCxJQUFlLENBQXBELEVBQXVEO0FBQ25ELGFBQU9zRCxJQUFQO0FBQ0g7O0FBQ0QsVUFBTW1LLFFBQVEsR0FBRyxFQUFqQjs7QUFDQSxTQUFLLElBQUlDLEdBQVQsSUFBZ0JwSyxJQUFoQixFQUFzQjtBQUNsQm1LLE1BQUFBLFFBQVEsQ0FBQzVLLElBQVQsQ0FBYyxLQUFLK0wsbUNBQUwsQ0FBeUNsQixHQUF6QyxFQUE4QzFMLFVBQTlDLENBQWQ7QUFDSDs7QUFDRCxXQUFPeUwsUUFBUDtBQUNIOztBQUVEbUIsRUFBQUEsbUNBQW1DLENBQUNsQixHQUFELEVBQU0xTCxVQUFOLEVBQWtCO0FBQ2pELFFBQUkwTCxHQUFHLElBQUksT0FBT0EsR0FBRyxDQUFDRSxnQkFBWCxLQUFnQyxVQUEzQyxFQUF1RDtBQUNuRCxVQUFJNUwsVUFBVSxLQUFLLEtBQW5CLEVBQTBCO0FBQ3RCLGVBQU8sV0FBUDtBQUNILE9BRkQsTUFFTztBQUNILGVBQU8wTCxHQUFHLENBQUNFLGdCQUFKLEVBQVA7QUFDSDtBQUNKOztBQUVELFdBQU9GLEdBQVA7QUFDSDs7QUF6OEI0QyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xyXG5pbXBvcnQgZ2xvYiBmcm9tICdnbG9iJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBkZWFzeW5jIGZyb20gJ2RlYXN5bmMnO1xyXG5pbXBvcnQgRnV0dXJlIGZyb20gJ2ZpYmVycy9mdXR1cmUnO1xyXG5pbXBvcnQgRmliZXIgZnJvbSAnZmliZXJzJztcclxuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xyXG5pbXBvcnQgU3RlcFJlc3VsdCBmcm9tICcuLi9tb2RlbC9zdGVwLXJlc3VsdCc7XHJcbmltcG9ydCBPeHlnZW5FdmVudHMgZnJvbSAnLi9PeHlnZW5FdmVudHMnO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0ICogYXMgY29yZVV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBTVEFUVVMgZnJvbSAnLi4vbW9kZWwvc3RhdHVzLmpzJztcclxuaW1wb3J0ICogYXMgTW9kdWxlcyBmcm9tICcuLi9veF9tb2R1bGVzL2luZGV4JztcclxuXHJcbi8vIHNldHVwIGxvZ2dlclxyXG5pbXBvcnQgbG9nZ2VyLCB7IERFRkFVTFRfTE9HR0VSX0lTU1VFUiwgSVNTVUVSUyB9IGZyb20gJy4uL2xpYi9sb2dnZXInO1xyXG5pbXBvcnQgeyBPeHlnZW5TdWJNb2R1bGUgfSBmcm9tICcuL094eWdlblN1Yk1vZHVsZSc7XHJcblxyXG4vKmdsb2JhbCBfX3N0YWNrKi9cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwgJ19fc3RhY2snLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgb3JpZyA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xyXG4gICAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnVuY3Rpb24gKF8sIHN0YWNrKSB7IHJldHVybiBzdGFjazsgfTtcclxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCk7XHJcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyKTtcclxuICAgICAgICB2YXIgc3RhY2sgPSBlcnIuc3RhY2s7XHJcbiAgICAgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBvcmlnO1xyXG4gICAgICAgIHJldHVybiBzdGFjaztcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBERUZBVUxUX1RJTUVPVVQgPSAzMDAwMDtcclxuY29uc3QgREVGQVVMVF9PUFRTID0ge1xyXG4gICAgYmFja3RyYWNlOiBmYWxzZSwgLy8gPGJvb2xlYW4+IHNob3cgZnVsbCBiYWNrdHJhY2UgZm9yIGVycm9yc1xyXG4gICAgY29tcGlsZXI6IFtdLCAvLyA8c3RyaW5nW10+IChcImV4dGVuc2lvbjptb2R1bGVcIikgcmVxdWlyZSBmaWxlcyB3aXRoIHRoZSBnaXZlbiBFWFRFTlNJT04gYWZ0ZXIgcmVxdWlyaW5nIE1PRFVMRSAocmVwZWF0YWJsZSlcclxuICAgIGZhaWxBbWJpZ3VvdXNEZWZpbml0aW9uczogZmFsc2UsIC8vIDxib29sZWFuPiB0cmVhdCBhbWJpZ3VvdXMgZGVmaW5pdGlvbnMgYXMgZXJyb3JzXHJcbiAgICBmYWlsRmFzdDogZmFsc2UsIC8vIDxib29sZWFuPiBhYm9ydCB0aGUgcnVuIG9uIGZpcnN0IGZhaWx1cmVcclxuICAgIGlnbm9yZVVuZGVmaW5lZERlZmluaXRpb25zOiBmYWxzZSwgLy8gPGJvb2xlYW4+IHRyZWF0IHVuZGVmaW5lZCBkZWZpbml0aW9ucyBhcyB3YXJuaW5nc1xyXG4gICAgbmFtZTogW10sIC8vIDxSRUdFWFBbXT4gb25seSBleGVjdXRlIHRoZSBzY2VuYXJpb3Mgd2l0aCBuYW1lIG1hdGNoaW5nIHRoZSBleHByZXNzaW9uIChyZXBlYXRhYmxlKVxyXG4gICAgcHJvZmlsZTogW10sIC8vIDxzdHJpbmc+IChuYW1lKSBzcGVjaWZ5IHRoZSBwcm9maWxlIHRvIHVzZVxyXG4gICAgcmVxdWlyZTogW10sIC8vIDxzdHJpbmc+IChmaWxlL2Rpci9nbG9iKSByZXF1aXJlIGZpbGVzIGJlZm9yZSBleGVjdXRpbmcgZmVhdHVyZXNcclxuICAgIG9yZGVyOiAnZGVmaW5lZCcsIC8vIDxzdHJpbmc+IHN3aXRjaCBiZXR3ZWVuIGRldGVybWluaXN0aWMgIGFuZCByYW5kb20gZmVhdHVyZSBleGVjdXRpb24uIEVpdGhlciBcImRlZmluZWRcIiwgXCJyYW5kb21cIiBvciBcInJhbmRvbTo0MlwiIHdoZXJlYXMgNDIgaXMgdGhlIHNlZWQgZm9yIHJhbmRvbWl6YXRpb25cclxuICAgIHNuaXBwZXRTeW50YXg6IHVuZGVmaW5lZCwgLy8gPHN0cmluZz4gc3BlY2lmeSBhIGN1c3RvbSBzbmlwcGV0IHN5bnRheFxyXG4gICAgc25pcHBldHM6IHRydWUsIC8vIDxib29sZWFuPiBoaWRlIHN0ZXAgZGVmaW5pdGlvbiBzbmlwcGV0cyBmb3IgcGVuZGluZyBzdGVwc1xyXG4gICAgc291cmNlOiB0cnVlLCAvLyA8Ym9vbGVhbj4gaGlkZSBzb3VyY2UgdXJpc1xyXG4gICAgc3RyaWN0OiBmYWxzZSwgLy8gPGJvb2xlYW4+IGZhaWwgaWYgdGhlcmUgYXJlIGFueSB1bmRlZmluZWQgb3IgcGVuZGluZyBzdGVwc1xyXG4gICAgdGFnRXhwcmVzc2lvbjogJycsIC8vIDxzdHJpbmc+IChleHByZXNzaW9uKSBvbmx5IGV4ZWN1dGUgdGhlIGZlYXR1cmVzIG9yIHNjZW5hcmlvcyB3aXRoIHRhZ3MgbWF0Y2hpbmcgdGhlIGV4cHJlc3Npb25cclxuICAgIHRhZ3NJblRpdGxlOiBmYWxzZSwgLy8gPGJvb2xlYW4+IGFkZCBjdWN1bWJlciB0YWdzIHRvIGZlYXR1cmUgb3Igc2NlbmFyaW8gbmFtZVxyXG4gICAgdGltZW91dDogREVGQVVMVF9USU1FT1VUIC8vIDxudW1iZXI+IHRpbWVvdXQgZm9yIHN0ZXAgZGVmaW5pdGlvbnMgaW4gbWlsbGlzZWNvbmRzXHJcbn07XHJcbmNvbnN0IE1PRFVMRV9OQU1FX01BVENIX1JFR0VYID0gL15tb2R1bGUtKC4rPylcXC5qcyQvO1xyXG5jb25zdCBTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVggPSAvXnNlcnZpY2UtKC4rPylcXC5qcyQvO1xyXG5jb25zdCBET19OT1RfV1JBUF9NRVRIT0RTID0gWydkcml2ZXInLCAnZ2V0RHJpdmVyJ107XHJcblxyXG5jb25zdCBERUZBVUxUX0NUWCA9IHtcclxuICAgIHBhcmFtczoge30sXHJcbiAgICB2YXJzOiB7fSxcclxuICAgIGVudjoge30sXHJcbiAgICBjYXBzOiB7fSxcclxuICAgIGF0dHJpYnV0ZXM6IHt9LFxyXG59O1xyXG5jb25zdCBERUZBVUxUX1JFU1VMVF9TVE9SRSA9IHtcclxuICAgIHN0ZXBzOiBbXSxcclxuICAgIGxvZ3M6IFtdLFxyXG4gICAgYXR0YWNobWVudHM6IFtdLFxyXG4gICAgaGFyOiBudWxsLFxyXG4gICAgYXR0cmlidXRlczoge31cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE94eWdlbiBleHRlbmRzIE94eWdlbkV2ZW50cyB7XHJcbiAgICBjb25zdHJ1Y3RvciAoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlID0geyAuLi5ERUZBVUxUX1JFU1VMVF9TVE9SRSB9O1xyXG4gICAgICAgIHRoaXMuY3R4ID0geyAuLi5ERUZBVUxUX0NUWCB9O1xyXG4gICAgICAgIHRoaXMubW9kdWxlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuc2VydmljZXMgPSB7fTtcclxuICAgICAgICB0aGlzLnJlcG8gPSB7fTtcclxuICAgICAgICB0aGlzLmNhcGFiaWxpdGllcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5vcHRzID0gbnVsbDtcclxuICAgICAgICB0aGlzLm94QmFzZURpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8nKTtcclxuICAgICAgICB0aGlzLmxvZ2dlciA9IHRoaXMuX3dyYXBMb2dnZXIobG9nZ2VyKCdPeHlnZW4nKSk7XHJcbiAgICAgICAgdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdChvcHRpb25zLCBjYXBzLCBjdHggPSB7fSwgcmVzdWx0cyA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5vcHRzID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX09QVFMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuY3dkID0gdGhpcy5vcHRzLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgICAgIHRoaXMuY3R4ID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX0NUWCwgY3R4IHx8IHt9KTtcclxuICAgICAgICB0aGlzLmN0eC5jYXBzID0geyAuLi5jdHguY2FwcyB8fCB7fSwgLi4uY2FwcywgfTtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX1JFU1VMVF9TVE9SRSwgcmVzdWx0cyB8fCB7fSk7XHJcbiAgICAgICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB0aGlzLmN0eC5jYXBzID0gY2FwcztcclxuXHJcbiAgICAgICAgaWYgKGN0eC5hdHRyaWJ1dGVzICYmICghcmVzdWx0cy5hdHRyaWJ1dGVzIHx8ICFPYmplY3Qua2V5cyhyZXN1bHRzLmF0dHJpYnV0ZXMpLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRyaWJ1dGVzID0geyAuLi5jdHguYXR0cmlidXRlcyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZGVmaW5lICdveCcgb2JqZWN0IGluIGdsb2JhbCBKUyBzY29wZVxyXG4gICAgICAgIC8vIHdlIHdpbGwgdXNlIHRoaXMgb2JqZWN0IHRvIGFjY2VzcyBPeHlnZW4gbW9kdWxlcyBhbmQgdGVzdCBjb250ZXh0IGZyb20gbW9kdWxlcyB1c2VkIGluIHRoZSB0ZXN0IChpZiBhbnkpICAgICAgICBcclxuICAgICAgICB0aGlzLm1ha2VPeEdsb2JhbCgpO1xyXG4gICAgICAgIC8vIGxvYWQgc2VydmljZXNcclxuICAgICAgICB0aGlzLl9sb2FkU2VydmljZXMoKTtcclxuICAgICAgICAvLyBsb2FkIG1vZHVsZXNcclxuICAgICAgICB0aGlzLl9sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgIC8vIGlmIG9wdGlvbnMubWFrZU1vZHVsZXNHbG9iYWwgaXMgdHJ1ZSBvciB1bmRlZmluZWQgdGhhbiBkZWZpbmUgJ2N0eCcgY29udGVudCBhbmQgZWFjaCBtb2R1bGUgaW4gZ2xvYmFsIHNjb3BlXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmdsb2JhbFNjb3BlID09PSAndW5kZWZpbmVkJyB8fCBvcHRpb25zLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFrZUNvbnRleHRBbmRNb2R1bGVzR2xvYmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZU1vZHVsZXMoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2Rpc3Bvc2VNb2R1bGVzKHN0YXR1cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkaXNwb3NlIG1vZHVsZXM6ICcsIGUpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlTW9kdWxlcyhzdGF0dXMpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlU2VydmljZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZGlzcG9zZTogJywgZSk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBhZGp1c3RTY3JpcHRMaW5lKCkge1xyXG4gICAgICAgIGNvbnN0IGlzSW5EZWJ1Z01vZGUgPSBveHV0aWwuaXNJbkRlYnVnTW9kZSgpO1xyXG4gICAgICAgIC8vIGFkZCBleHRyYSBsaW5lIGlmIHdlIGFyZSBydW5uaW5nIGluIGRlYnVnZ2VyIG1vZGUgKFY4IGRlYnVnZ2VyIGFkZHMgYW4gZXh0cmEgbGluZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlKVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzSW5EZWJ1Z01vZGUgPyAtMSA6IDA7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29udGV4dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdHg7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNvbnRleHQoY3R4KSB7XHJcbiAgICAgICAgdGhpcy5jdHggPSBjdHg7XHJcbiAgICAgICAgaWYgKGdsb2JhbC5veCkge1xyXG4gICAgICAgICAgICBnbG9iYWwub3guY3R4ID0gY3R4O1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgXCJwYXJhbXNcIiBhbmQgXCJlbnZcIiBpbiBcIm94XCIgZ2xvYmFsIHZhcmlhYmxlXHJcbiAgICAgICAgICAgICAgICBnbG9iYWwucGFyYW1zID0gY3R4LnBhcmFtcyB8fCB7fTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5lbnYgPSBjdHguZW52IHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmF0dHJpYnV0ZXMgPSBjdHguYXR0cmlidXRlcyB8fCB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVwb3NpdG9yeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBvO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCByZXBvc2l0b3J5KHJlcG8pIHtcclxuICAgICAgICB0aGlzLnJlcG8gPSByZXBvO1xyXG4gICAgICAgIGlmIChnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94LnJlcG8gPSByZXBvO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVzdWx0cygpIHtcclxuICAgICAgICAvLyBjYWxjdWxhdGUgdGltZSBmb3IgdGhlIHRyYW5zYWN0aW9uIGl0c2VsZiAtIHN1bW1hcnkgb2YgZHVyYXRpb25zIGZvciBhbGwgdGhlIHN0ZXBzIGluIHRoaXMgdHJhbnNhY3Rpb25cclxuICAgICAgICAvLyBhbHNvIGFkanVzdCB0cmFuc2FjdGlvbiBlbmQgdGltZSB0byBtdWNoIGVuZCB0aW1lIGZvciB0aGUgbGFzdCBleGVjdXRlZCBzdGVwIHdpdGhpbiB0aGlzIHRyYW5zYWN0aW9uLlxyXG4gICAgICAgIGZvciAoY29uc3QgdHJhbnNTdGVwIG9mIHRoaXMucmVzdWx0U3RvcmUuc3RlcHMpIHtcclxuICAgICAgICAgICAgaWYgKHRyYW5zU3RlcC5uYW1lLmluY2x1ZGVzKCcudHJhbnNhY3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNOYW1lID0gdHJhbnNTdGVwLnRyYW5zYWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNTdGVwLmR1cmF0aW9uID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RlcCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uICYgaXMgbm90IHRoZSB0cmFuc2FjdGlvbiBzdGVwXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXAudHJhbnNhY3Rpb24gPT09IHRyYW5zTmFtZSAmJiBzdGVwICE9PSB0cmFuc1N0ZXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNTdGVwLmR1cmF0aW9uICs9IHN0ZXAuZHVyYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLmVuZFRpbWUgPiB0cmFuc1N0ZXAuZW5kVGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNTdGVwLmVuZFRpbWUgPSBzdGVwLmVuZFRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0cmFuc2FjdGlvbiBzdGF0dXMgdG8gd2FybmluZyBpZiBhdCBsZWFzdCBvbmUgb2Ygc3RlcHMgaGFzIHdhcm5pbmcgc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLnN0YXR1cyA9PT0gU1RBVFVTLldBUk5JTkcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5zdGF0dXMgPSBTVEFUVVMuV0FSTklORztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRTdG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNb2R1bGVzQ2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2RDYXBzID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgbW9kdWxlTmFtZSBpbiB0aGlzLm1vZHVsZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAobW9kdWxlLm5hbWUgJiYgbW9kdWxlLl9nZXRDYXBhYmlsaXRpZXMgJiYgdHlwZW9mIG1vZHVsZS5fZ2V0Q2FwYWJpbGl0aWVzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYXBzID0gbW9kdWxlLl9nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgICAgICAgICAgICAgIC8vIHN0b3JlIG9ubHkgbm9uLWVtcHR5IGNhcHMgcGVyIG1vZHVsZSB0aGF0IGhhcyB0aGlzLmNhcHMgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIGlmIChjYXBzICYmIHR5cGVvZiBjYXBzID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhjYXBzKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kQ2Fwc1ttb2R1bGUubmFtZV0gPSBjYXBzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtb2RDYXBzO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0UmVzdWx0cygpIHtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzID0gW107XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5sb2dzID0gW107XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRhY2htZW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaGFyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkJlZm9yZUNhc2UoY29udGV4dCkge1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUub25CZWZvcmVDYXNlICYmIGF3YWl0IG1vZHVsZS5vbkJlZm9yZUNhc2UoY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUuX2l0ZXJhdGlvblN0YXJ0ICYmIGF3YWl0IG1vZHVsZS5faXRlcmF0aW9uU3RhcnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjYWxsIFwib25CZWZvcmVDYXNlXCIgbWV0aG9kIG9mICR7bW9kdWxlTmFtZX0gbW9kdWxlLmAsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uQWZ0ZXJDYXNlKGVycm9yID0gbnVsbCkge1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhd2FpdCBmb3IgYXZvaWQgc3R1Y2sgb24gKi5kaXNwb3NlIGNhbGxcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5vbkFmdGVyQ2FzZSAmJiBhd2FpdCBtb2R1bGUub25BZnRlckNhc2UoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLl9pdGVyYXRpb25FbmQgJiYgYXdhaXQgbW9kdWxlLl9pdGVyYXRpb25FbmQoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbkFmdGVyQ2FzZVwiIG1ldGhvZCBvZiAke21vZHVsZU5hbWV9IG1vZHVsZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBtYWtlT3hHbG9iYWwoKSB7XHJcbiAgICAgICAgaWYgKCFnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94ID0ge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlczogdGhpcy5tb2R1bGVzLFxyXG4gICAgICAgICAgICAgICAgY3R4OiB0aGlzLmN0eCxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMub3B0cyxcclxuICAgICAgICAgICAgICAgIGNhcHM6IHRoaXMuY2FwYWJpbGl0aWVzLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0U3RvcmU6IHRoaXMucmVzdWx0U3RvcmUsXHJcbiAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGU6IHRoaXMuYWRkQXR0cmlidXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBhZGRBdHRhY2htZW50OiB0aGlzLmFkZEF0dGFjaG1lbnQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGdsb2JhbC52YXJzID0gdGhpcy5jdHgudmFycztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUNvbnRleHRBbmRNb2R1bGVzR2xvYmFsKCkge1xyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSAnb3gnIGlzIGFscmVhZHkgZ2xvYmFsXHJcbiAgICAgICAgaWYgKGdsb2JhbC5veCkge1xyXG4gICAgICAgICAgICAvLyBleHBvc2UgbW9kdWxlcyBhcyBnbG9iYWwgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdsb2JhbFttb2R1bGVOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFttb2R1bGVOYW1lXSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBleHBvc2UgXCJjdHhcIiwgXCJwYXJhbXNcIiBhbmQgXCJlbnZcIiBhcyBnbG9iYWwgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGdsb2JhbC5wYXJhbXMgPSBnbG9iYWwub3guY3R4LnBhcmFtcztcclxuICAgICAgICAgICAgZ2xvYmFsLmVudiA9IGdsb2JhbC5veC5jdHguZW52O1xyXG4gICAgICAgICAgICBnbG9iYWwuY3R4ID0gZ2xvYmFsLm94LmN0eDtcclxuICAgICAgICAgICAgZ2xvYmFsLmF0dHJpYnV0ZXMgPSBnbG9iYWwub3guY3R4LmF0dHJpYnV0ZXMgfHwge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdFN0b3JlICYmIHRoaXMucmVzdWx0U3RvcmUuYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLmF0dHJpYnV0ZXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQXR0YWNobWVudChmaWxlUGF0aCkge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXN1bHRTdG9yZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5yZXN1bHRTdG9yZS5hdHRhY2htZW50cykge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzdWx0U3RvcmUuYXR0YWNobWVudHMucHVzaChcclxuICAgICAgICAgICAgY29yZVV0aWxzLm5ld0ZpbGVBdHRhY2htZW50KGZpbGVQYXRoKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFBhZ2VPYmplY3RGaWxlKHBvUGF0aCkge1xyXG4gICAgICAgIGlmICghcG9QYXRoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcG8gPSByZXF1aXJlKHBvUGF0aCk7XHJcbiAgICAgICAgICAgIC8vIHNldCBwYWdlIG9iamVjdCByZXBvc2l0b3J5IGFzIHRoZSBtYWluIG9uZVxyXG4gICAgICAgICAgICB0aGlzLnJlcG9zaXRvcnkgPSBwbztcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLnBvID0gcG87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5wbyA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBQcml2YXRlIE1ldGhvZHNcclxuICAgICAqL1xyXG4gICAgX3dyYXBMb2dnZXIoX2xvZ2dlcikge1xyXG4gICAgICAgIGNvbnN0IGxvZ2dlcldyYXAgPSB7XHJcbiAgICAgICAgICAgIGluZm86ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2luZm8nLCBhcmdzKSxcclxuICAgICAgICAgICAgZGVidWc6ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2RlYnVnJywgYXJncyksXHJcbiAgICAgICAgICAgIGVycm9yOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdlcnJvcicsIGFyZ3MpLFxyXG4gICAgICAgICAgICB3YXJuOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICd3YXJuJywgYXJncyksXHJcbiAgICAgICAgICAgIHVzZXJJbmZvOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdpbmZvJywgYXJncywgSVNTVUVSUy5VU0VSKSxcclxuICAgICAgICAgICAgdXNlckRlYnVnOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdkZWJ1ZycsIGFyZ3MsIElTU1VFUlMuVVNFUiksXHJcbiAgICAgICAgICAgIHVzZXJFcnJvcjogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnZXJyb3InLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxyXG4gICAgICAgICAgICB1c2VyV2FybjogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnd2FybicsIGFyZ3MsIElTU1VFUlMuVVNFUiksXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gbG9nZ2VyV3JhcDtcclxuICAgIH1cclxuXHJcbiAgICBfbG9nKF9sb2dnZXIsIGxldmVsLCBhcmdzLCBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVIpIHtcclxuICAgICAgICBpZiAoIV9sb2dnZXJbbGV2ZWxdKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgX2xvZ2dlcltsZXZlbF0uYXBwbHkoX2xvZ2dlciwgYXJncyk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBveHV0aWwuc3RyaW5naWZ5KGFyZ3MsIDIpO1xyXG4gICAgICAgIGNvbnN0IHRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgLy8gYWRkIHRoZSBsb2cgZW50cnkgdG8gdGhlIHJlc3VsdCBzdG9yZVxyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdFN0b3JlICYmIHRoaXMucmVzdWx0U3RvcmUubG9ncykge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLmxvZ3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0aW1lOiB0aW1lLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGxldmVsLnRvVXBwZXJDYXNlKCksXHJcbiAgICAgICAgICAgICAgICBtc2c6IG1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICBzcmM6IHNyY1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVtb3ZlIGZpcnN0IGFyZ3VtZW50LCBpZiBpdCdzIGEgbWVzc2FnZVxyXG4gICAgICAgIGFyZ3MgPSBtZXNzYWdlID8gYXJncy5zaGlmdCgpIDogYXJncztcclxuICAgICAgICB0aGlzLmVtaXRMb2codGltZSwgbGV2ZWwsIG1lc3NhZ2UsIGFyZ3MsIHNyYyk7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRTZXJ2aWNlcygpIHtcclxuICAgICAgICBjb25zdCBveFNlcnZpY2VzRGlyUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLm94QmFzZURpciwgJy4vb3hfc2VydmljZXMnKTtcclxuICAgICAgICBjb25zdCBzZXJ2aWNlRmlsZXMgPSBnbG9iLnN5bmMoJ3NlcnZpY2UtKi5qcycsIHsgY3dkOiBveFNlcnZpY2VzRGlyUGF0aCB9KTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGFsbCBzZXJ2aWNlc1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIHNlcnZpY2VzLi4uJyk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VydmljZUZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VGaWxlTmFtZSA9IHNlcnZpY2VGaWxlc1tpXTtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUZpbGVQYXRoID0gcGF0aC5qb2luKG94U2VydmljZXNEaXJQYXRoLCBzZXJ2aWNlRmlsZU5hbWUpO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBzZXJ2aWNlRmlsZU5hbWUubWF0Y2goU0VSVklDRV9OQU1FX01BVENIX1JFR0VYKTtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSByZXN1bHRbMV07XHJcblxyXG4gICAgICAgICAgICAvLyB0aGlzLm9wdHMuc2VydmljZXMgPSB1bmRlZmluZWQgaW4gc2luZ2xlIGZpbGUgbW9kZVxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdHMuc2VydmljZXMpICYmICF0aGlzLm9wdHMuc2VydmljZXMuaW5jbHVkZXMoc2VydmljZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIHNlcnZpY2U6ICcgKyBzZXJ2aWNlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5fbG9hZFNlcnZpY2Uoc2VydmljZU5hbWUsIHNlcnZpY2VGaWxlUGF0aCk7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlLmluaXQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXNbc2VydmljZU5hbWVdID0gc2VydmljZTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBzZXJ2aWNlIFwiJyArIHNlcnZpY2VOYW1lICsgJ1wiOiAnICsgZS5tZXNzYWdlICsgRU9MICsgKGUuc3RhY2t0cmFjZSA/IGUuc3RhY2t0cmFjZSA6ICcnKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfbG9hZFNlcnZpY2Uoc2VydmljZU5hbWUsIHNlcnZpY2VQYXRoKSB7XHJcbiAgICAgICAgbGV0IFNlcnZpY2VDbGFzcyA9IHJlcXVpcmUoc2VydmljZVBhdGgpO1xyXG4gICAgICAgIC8vIEVTNiBjbGFzcyB3aWxsIGJlIHVuZGVyICdkZWZhdWx0JyBwcm9wZXJ0eVxyXG4gICAgICAgIGlmIChTZXJ2aWNlQ2xhc3MuZGVmYXVsdCkge1xyXG4gICAgICAgICAgICBTZXJ2aWNlQ2xhc3MgPSBTZXJ2aWNlQ2xhc3MuZGVmYXVsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2VydmljZUxvZ2dlciA9IHRoaXMuX3dyYXBMb2dnZXIobG9nZ2VyKGBTZXJ2aWNlOiR7c2VydmljZU5hbWV9YCkpO1xyXG4gICAgICAgIHJldHVybiBuZXcgU2VydmljZUNsYXNzKHRoaXMub3B0cywgdGhpcy5jdHgsIHRoaXMucmVzdWx0U3RvcmUsIHNlcnZpY2VMb2dnZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkTW9kdWxlcygpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBpbnRlcm5hbCBtb2R1bGVzLi4uJyk7XHJcbiAgICAgICAgdGhpcy5fbG9hZEludGVybmFsTW9kdWxlcygpO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIGV4dGVybmFsIG1vZHVsZXMuLi4nKTtcclxuICAgICAgICB0aGlzLl9sb2FkRXh0ZXJuYWxNb2R1bGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRFeHRlcm5hbE1vZHVsZXMoKSB7XHJcbiAgICAgICAgbGV0IG1vZHVsZXNGb2xkZXJQYXRoID0gJy4vbW9kdWxlcyc7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0cy5tb2R1bGVzX2V4dCAmJiB0eXBlb2YgdGhpcy5vcHRzLm1vZHVsZXNfZXh0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBtb2R1bGVzRm9sZGVyUGF0aCA9IHRoaXMub3B0cy5tb2R1bGVzX2V4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9jb25zdCBveE1vZHVsZXNEaXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3hCYXNlRGlyLCAnLi9veF9tb2R1bGVzJyk7XHJcbiAgICAgICAgY29uc3Qgb3hNb2R1bGVzRGlyUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmN3ZCwgbW9kdWxlc0ZvbGRlclBhdGgpO1xyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhveE1vZHVsZXNEaXJQYXRoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBtb2R1bGVGaWxlcyA9IFtdO1xyXG4gICAgICAgIC8vIGlmIHBhcnRpY3VsYXIgbW9kdWxlIG5hbWVzIGFyZSBkZWZpbmVkIGluIHRoZSBjb25maWcsIHRoZW4gbG9hZCBvbmx5IHRoZXNlIG1vZHVsZXNcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdHMubW9kdWxlcykgJiYgdGhpcy5vcHRzLm1vZHVsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wdHMubW9kdWxlcy5mb3JFYWNoKG1vZHVsZU5hbWUgPT4gbW9kdWxlRmlsZXMucHVzaChgbW9kdWxlLSR7bW9kdWxlTmFtZX0uanNgKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG90aGVyd2lzZSwgbG9hZCBhbGwgYXZhaWxhYmxlIG1vZHVsZXMgKG1pZ2h0IGJlIG1vcmUgdGltZSBjb25zdW1pbmcpXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1vZHVsZUZpbGVzID0gZ2xvYi5zeW5jKCdtb2R1bGUtKi5qcycsIHsgY3dkOiBveE1vZHVsZXNEaXJQYXRoIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbml0aWFsaXplIGFsbCBtb2R1bGVzICAgICAgICBcclxuICAgICAgICBmb3IgKGxldCBtb2R1bGVGaWxlTmFtZSBvZiBtb2R1bGVGaWxlcykge1xyXG4gICAgICAgICAgICAvLyBleHRyYWN0IG5hbWUgZnJvbSB0aGUgbW9kdWxlIGZpbGUgbmFtZSBiYXNlZCBvbiBtb2R1bGUgbmFtZSBwYXR0ZXJuXHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBtb2R1bGVGaWxlTmFtZS5tYXRjaChNT0RVTEVfTkFNRV9NQVRDSF9SRUdFWClbMV07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBuZXcgbG9nZ2VyIGZvciB0aGUgbW9kdWxlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGVMb2dnZXIgPSB0aGlzLl93cmFwTG9nZ2VyKGxvZ2dlcihgTW9kdWxlOiR7bW9kdWxlTmFtZX1gKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIG5ldyBtb2R1bGUgaW5zdGFuY2VcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZCA9IGNvcmVVdGlscy5sb2FkTW9kdWxlRnJvbUZpbGUobW9kdWxlTmFtZSwgbW9kdWxlRmlsZU5hbWUsIG1vZHVsZUxvZ2dlciwgb3hNb2R1bGVzRGlyUGF0aCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICAvLyBjYWxsIG9uTW9kdWxlTG9hZGVkIGhvb2tcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkKG1vZCk7XHJcbiAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIG1vZHVsZSB0byB0aGUgbW9kdWxlIGxpc3RcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXSA9IGdsb2JhbC5veC5tb2R1bGVzW21vZHVsZU5hbWVdID0gdGhpcy5fd3JhcE1vZHVsZShtb2R1bGVOYW1lLCBtb2QpO1xyXG4gICAgICAgICAgICAgICAgLy8gd3JhcCB1cFxyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IChlbmRUaW1lIC0gc3RhcnRUaW1lKSAvIDEwMDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBtb2R1bGU6ICcgKyBtb2R1bGVOYW1lICsgJyBbICcgKyBkdXJhdGlvbiArICcgc2VjIF0nKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBtb2R1bGUgXCInICsgbW9kdWxlTmFtZSArICdcIjogJyArIGUubWVzc2FnZSArIEVPTCArIChlLnN0YWNrdHJhY2UgPyBlLnN0YWNrdHJhY2UgOiAnJykpO1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGFueSBtb2R1bGUgdGhhdCBmYWlsZWQgdG8gbG9hZCwgZXhjZXB0IFdlYiBhbmQgTW9iIG1vZHVsZXNcclxuICAgICAgICAgICAgICAgIC8vIHdpdGhvdXQgTW9iIGFuZCBXZWIgbW9kdWxlcyBsb2FkZWQsIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHNoYWxsIGZhaWxcclxuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVOYW1lID09PSAnd2ViJyB8fCBtb2R1bGVOYW1lID09PSAnbW9iJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkSW50ZXJuYWxNb2R1bGVzKCkge1xyXG4gICAgICAgIC8vIGlmIGBtb2R1bGVzYCBpcyBlbXB0eSBvciB1bmRlZmluZWQgaW4gb3h5Z2VuLmNvbmYgdGhlbiBsb2FkIGFsbCBtb2R1bGVzXHJcbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBsb2FkIG9ubHkgdGhvc2UgaW1wbGljaXRseSBkZWZpbmVkXHJcbiAgICAgICAgY29uc3QgZXhjbHVkZVVuZGVmaW5lZE1vZHMgPSB0aGlzLm9wdHMubW9kdWxlcyAmJiB0aGlzLm9wdHMubW9kdWxlcy5sZW5ndGggPiAwO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBtb2R1bGVOYW1lIG9mIE9iamVjdC5rZXlzKE1vZHVsZXMpKSB7XHJcbiAgICAgICAgICAgIGlmIChleGNsdWRlVW5kZWZpbmVkTW9kcyAmJiAhdGhpcy5vcHRzLm1vZHVsZXMuaW5jbHVkZXMobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IE1vZHVsZUNsYXNzID0gTW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgY29uc3Qgb3hNb2R1bGVzRGlyUGF0aCA9IG94dXRpbC5nZXRPeE1vZHVsZXNEaXIoKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIG5ldyBsb2dnZXIgZm9yIHRoZSBtb2R1bGVcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZUxvZ2dlciA9IHRoaXMuX3dyYXBMb2dnZXIobG9nZ2VyKGBNb2R1bGU6JHttb2R1bGVOYW1lfWApKTtcclxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IG1vZHVsZSBpbnN0YW5jZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kID0gY29yZVV0aWxzLmxvYWRNb2R1bGVGcm9tQ2xhc3MobW9kdWxlTmFtZSwgTW9kdWxlQ2xhc3MsIG1vZHVsZUxvZ2dlciwgb3hNb2R1bGVzRGlyUGF0aCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICAvLyBjYWxsIG9uTW9kdWxlTG9hZGVkIGhvb2tcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkKG1vZCk7XHJcbiAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIG1vZHVsZSB0byB0aGUgbW9kdWxlIGxpc3RcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXSA9IGdsb2JhbC5veC5tb2R1bGVzW21vZHVsZU5hbWVdID0gdGhpcy5fd3JhcE1vZHVsZShtb2R1bGVOYW1lLCBtb2QpO1xyXG4gICAgICAgICAgICAgICAgLy8gd3JhcCB1cFxyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IChlbmRUaW1lIC0gc3RhcnRUaW1lKSAvIDEwMDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBtb2R1bGU6ICcgKyBtb2R1bGVOYW1lICsgJyBbICcgKyBkdXJhdGlvbiArICcgc2VjIF0nKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBtb2R1bGUgXCInICsgbW9kdWxlTmFtZSArICdcIjogJyArIGUubWVzc2FnZSArIEVPTCArIChlLnN0YWNrdHJhY2UgPyBlLnN0YWNrdHJhY2UgOiAnJykpO1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGFueSBtb2R1bGUgdGhhdCBmYWlsZWQgdG8gbG9hZCwgZXhjZXB0IFdlYiBhbmQgTW9iIG1vZHVsZXNcclxuICAgICAgICAgICAgICAgIC8vIHdpdGhvdXQgTW9iIGFuZCBXZWIgbW9kdWxlcyBsb2FkZWQsIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHNoYWxsIGZhaWxcclxuICAgICAgICAgICAgICAgIGlmIChtb2R1bGVOYW1lID09PSAnd2ViJyB8fCBtb2R1bGVOYW1lID09PSAnbW9iJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF93cmFwTW9kdWxlKG5hbWUsIG1vZHVsZSkge1xyXG4gICAgICAgIGlmICghbW9kdWxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBsZXQgbW9kdWxlTWV0aG9kcyA9IE9iamVjdC5rZXlzKG1vZHVsZSk7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVNZXRob2RzLnNvbWUoeCA9PiB4PT09ICdleHBvcnRzJykpIHtcclxuICAgICAgICAgICAgbW9kdWxlTWV0aG9kcyA9IHRoaXMuX2dldEFsbFByb3BlcnR5TmFtZXMobW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgbWV0aG9kTmFtZSBvZiBtb2R1bGVNZXRob2RzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IG1vZHVsZVttZXRob2ROYW1lXTtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGFueSBtb2R1bGUgcHJvcGVydHkgdGhhdCBpcyBub3QgYSBmdW5jdGlvbiBvciBhIE94eWdlblN1Yk1vZHVsZVxyXG4gICAgICAgICAgICBpZiAoKCEobWV0aG9kIGluc3RhbmNlb2YgRnVuY3Rpb24pICYmICEobWV0aG9kIGluc3RhbmNlb2YgT3h5Z2VuU3ViTW9kdWxlKSAmJiB0eXBlb2YgbWV0aG9kICE9PSAnZnVuY3Rpb24nKSB8fCBtZXRob2ROYW1lID09PSAnZXhwb3J0cycgfHwgbWV0aG9kTmFtZSA9PT0gJ19jb21waWxlJykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gbWFwIGFuZCB3cmFwIHN1Yi1tb2R1bGUgbWV0aG9kcyAocmVjdXJzaXZlIGNhbGwgdG8gX3dyYXBNb2R1bGUpXHJcbiAgICAgICAgICAgIGlmIChtZXRob2QgaW5zdGFuY2VvZiBPeHlnZW5TdWJNb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgIHdyYXBwZXJbbWV0aG9kTmFtZV0gPSB0aGlzLl93cmFwTW9kdWxlKGAke25hbWV9LiR7bWV0aG9kTmFtZX1gLCBtZXRob2QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGRvIG5vdCB3cmFwIG1ldGhvZHNcclxuICAgICAgICAgICAgZWxzZSBpZiAoRE9fTk9UX1dSQVBfTUVUSE9EUy5pbmNsdWRlcyhtZXRob2ROYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gPT09ICdkcml2ZXInIHx8IG1ldGhvZE5hbWUgPT09ICdnZXREcml2ZXInXHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyW21ldGhvZE5hbWVdID0gbW9kdWxlW21ldGhvZE5hbWVdLmJpbmQobW9kdWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBwcml2YXRlIG1ldGhvZHMgYW5kIGV2ZW50IGhhbmRsZXJzXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1ldGhvZE5hbWUuaW5kZXhPZignXycpID09PSAwIHx8IG1ldGhvZE5hbWUuaW5kZXhPZignb24nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMubG9nZ2VyLmRlYnVnKCdFeGVjdXRpbmc6ICcgKyBveHV0aWwuZ2V0TWV0aG9kU2lnbmF0dXJlKG5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZVttZXRob2ROYW1lXS5hcHBseShtb2R1bGUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JIZWxwZXIuZ2V0T3h5Z2VuRXJyb3IoZSwgbmFtZSwgbWV0aG9kTmFtZSwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBpbnRlcm5hbCBfZ2V0Q2FwYWJpbGl0aWVzIG1ldGhvZCBmb3IgaW50ZXJuYWwgT3h5Z2VuIENvcmUgdXNlXHJcbiAgICAgICAgICAgICAgICAvLyBjYWxsaW5nIF9nZXRDYXBhYmlsaXRpZXMgbWV0aG9kIHdvbid0IGJlIHZpc2libGUgaW4gdGhlIHRlc3QgcmVzdWx0c1xyXG4gICAgICAgICAgICAgICAgaWYgKG1ldGhvZE5hbWUgPT09ICdnZXRDYXBhYmlsaXRpZXMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlclsnX2dldENhcGFiaWxpdGllcyddID0gbWV0aG9kLmJpbmQobW9kdWxlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdyYXBwZXJbbWV0aG9kTmFtZV0gPSAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fY29tbWFuZFdyYXBwZXIobWV0aG9kTmFtZSwgYXJncywgbW9kdWxlLCBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBPeEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdUaHJvd2luZyBhZ2FpbjonLCBlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvckhlbHBlci5nZXRPeHlnZW5FcnJvcihlLCBuYW1lLCBtZXRob2ROYW1lLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB3cmFwcGVyO1xyXG4gICAgfVxyXG5cclxuICAgIF9jb21tYW5kV3JhcHBlcihjbWROYW1lLCBjbWRBcmdzLCBtb2R1bGUsIG1vZHVsZU5hbWUpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZSB8fCAhbW9kdWxlW2NtZE5hbWVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcmV0dmFsID0gbnVsbDtcclxuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IGNtZEZuID0gbW9kdWxlW2NtZE5hbWVdO1xyXG4gICAgICAgIGNvbnN0IHB1YmxpY01ldGhvZCA9ICFjbWROYW1lLnN0YXJ0c1dpdGgoJ18nKSAmJiBjbWROYW1lICE9PSAnZGlzcG9zZSc7XHJcblxyXG4gICAgICAgIC8vIGRlbGF5IHRoZSBjb21tYW5kIGV4ZWN1dGlvbiBpZiByZXF1aXJlZFxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5vcHRzLmRlbGF5ICYmXHJcbiAgICAgICAgICAgIHB1YmxpY01ldGhvZCAmJlxyXG4gICAgICAgICAgICBjbWROYW1lICE9PSAnaW5pdCcgJiZcclxuICAgICAgICAgICAgY21kTmFtZSAhPT0gJ3RyYW5zYWN0aW9uJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBkZWFzeW5jLnNsZWVwKHRoaXMub3B0cy5kZWxheSAqIDEwMDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGhyb3cgaWYgYSBjb21tYW5kIGV4ZWN1dGVkIG9uIHVuaXRpYWxpemVkIG1vZHVsZSAoZXhjZXB0IGludGVybmFsIG1ldGhvZHMgYW5kIGEgZmV3IG90aGVyKVxyXG4gICAgICAgIGlmICghbW9kdWxlLmlzSW5pdGlhbGl6ZWQgJiYgcHVibGljTWV0aG9kICYmIGNtZE5hbWUgIT09ICdpbml0JyAmJiBjbWROYW1lICE9PSAndHJhbnNhY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnTWlzc2luZyAnICsgbW9kdWxlTmFtZSArICcuaW5pdCgpJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBkZWN0eXB0IGFyZ3VtZW50c1xyXG4gICAgICAgIGxldCBkZWNyeXB0ZWRBcmdzID0gdGhpcy5fZ2V0RGVjcnlwdGVkQXJnc0ZvckFwcGx5KGNtZEFyZ3MsIG1vZHVsZU5hbWUpO1xyXG4gICAgICAgIGRlY3J5cHRlZEFyZ3MgPSB0aGlzLl9wb3B1bGF0ZVBhcmFtZXRlcnNWYWx1ZShkZWNyeXB0ZWRBcmdzKTtcclxuXHJcbiAgICAgICAgLy8gcmVwbGFjZSBwYXJhbWV0ZXJzIGluIG1ldGhvZCBhcmd1bWVudHMgd2l0aCBjb3JyZXNwb25kaW5nIHZhbHVlc1xyXG4gICAgICAgIGNtZEFyZ3MgPSB0aGlzLl9wb3B1bGF0ZVBhcmFtZXRlcnNWYWx1ZShjbWRBcmdzKTtcclxuICAgICAgICAvLyBzdGFydCBtZWFzdXJpbmcgbWV0aG9kIGV4ZWN1dGlvbiB0aW1lXHJcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG5cclxuICAgICAgICAvLyBhZGQgY29tbWFuZCBsb2NhdGlvbiBpbmZvcm1hdGlvbiAoZS5nLiBmaWxlIG5hbWUgYW5kIGNvbW1hbmQgbGluZSlcclxuICAgICAgICBsZXQgY21kTG9jYXRpb24gPSBudWxsO1xyXG4gICAgICAgIC8vIGRvIG5vdCByZXBvcnQgcmVzdWx0cyBvciBsaW5lIHVwZGF0ZXMgb24gaW50ZXJuYWwgbWV0aG9kcyAoc3RhcnRlZCB3aXRoICdfJylcclxuICAgICAgICBpZiAocHVibGljTWV0aG9kKSB7XHJcbiAgICAgICAgICAgIGNtZExvY2F0aW9uID0gdGhpcy5fZ2V0Q29tbWFuZExvY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdEJlZm9yZUNvbW1hbmQoY21kTmFtZSwgbW9kdWxlTmFtZSwgY21kRm4sIGNtZEFyZ3MsIHRoaXMuY3R4LCBjbWRMb2NhdGlvbiwgc3RhcnRUaW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdFeGVjdXRpbmc6ICcgKyBveHV0aWwuZ2V0TWV0aG9kU2lnbmF0dXJlKG1vZHVsZU5hbWUsIGNtZE5hbWUsIGNtZEFyZ3MpKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gZW1pdCBiZWZvcmUgZXZlbnRzXHJcbiAgICAgICAgICAgIGlmIChjbWROYW1lID09PSAnZGlzcG9zZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXBBc3luYyh0aGlzLl9jYWxsU2VydmljZXNPbk1vZHVsZVdpbGxEaXNwb3NlKS5hcHBseSh0aGlzLCBbbW9kdWxlXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJldHZhbFByb21pc2UgPSB0aGlzLl93cmFwQXN5bmMobW9kdWxlW2NtZE5hbWVdKS5hcHBseShtb2R1bGUsIGRlY3J5cHRlZEFyZ3MpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJldHZhbFByb21pc2UgJiYgcmV0dmFsUHJvbWlzZS50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZURvbmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR2YWxQcm9taXNlLnRoZW4oKHZhbHVlKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VEb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0sIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VEb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFwcm9taXNlRG9uZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR2YWwgPSByZXR2YWxQcm9taXNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY21kTmFtZSA9PT0gJ2luaXQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwQXN5bmModGhpcy5fY2FsbFNlcnZpY2VzT25Nb2R1bGVJbml0aWFsaXplZCkuYXBwbHkodGhpcywgW21vZHVsZV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUgJiYgZS5tZXNzYWdlICYmIHR5cGVvZiBlLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIGUubWVzc2FnZS5pbmNsdWRlcygnaW52YWxpZCBzZXNzaW9uIGlkJykpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZyBpZiBlcnJvciBvY3VycmVkIGFmdGVyIHRoZSBtb2R1bGUgd2FzIGRpc3Bvc2VkIChvciBpbiBhIHByb2Nlc3Mgb2YgYmVpbmcgZGlzcG9zZWQpXHJcbiAgICAgICAgICAgICAgICAvLyBleGNlcHQgZm9yIGluaXQgbWV0aG9kcyBvZiBjb3Vyc2VcclxuICAgICAgICAgICAgICAgIGlmIChtb2R1bGUgJiZcclxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIG1vZHVsZS5pc0luaXRpYWxpemVkID09PSAnYm9vbGVhbicgJiYgIW1vZHVsZS5pc0luaXRpYWxpemVkKVxyXG4gICAgICAgICAgICAgICAgICAgICYmIGNtZE5hbWUgIT09ICdpbml0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJz09PT0gZXJyb3IgPT09PScsIGUpXHJcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycm9ySGVscGVyLmdldE94eWdlbkVycm9yKGUsIG1vZHVsZU5hbWUsIGNtZE5hbWUsIGNtZEFyZ3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG5cclxuICAgICAgICBsZXQgc3RlcFJlc3VsdDtcclxuICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAocHVibGljTWV0aG9kKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdhaXRJZCA9ICtuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl93YWl0U3RlcFJlc3VsdExpc3QucHVzaCh3YWl0SWQpO1xyXG5cclxuICAgICAgICAgICAgc3RlcFJlc3VsdCA9IHRoaXMuX2dldFN0ZXBSZXN1bHQobW9kdWxlLCBtb2R1bGVOYW1lLCBjbWROYW1lLCBjbWRBcmdzLCBjbWRMb2NhdGlvbiwgc3RhcnRUaW1lLCBlbmRUaW1lLCByZXR2YWwsIGVycm9yKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0LmluZGV4T2Yod2FpdElkKTtcclxuICAgICAgICAgICAgdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcblxyXG4gICAgICAgICAgICAvL3N0ZXBSZXN1bHQubG9jYXRpb24gPSBjbWRMb2NhdGlvbjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUuc3RlcHMucHVzaChzdGVwUmVzdWx0KTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0QWZ0ZXJDb21tYW5kKGNtZE5hbWUsIG1vZHVsZU5hbWUsIGNtZEZuLCBjbWRBcmdzLCB0aGlzLmN0eCwgY21kTG9jYXRpb24sIGVuZFRpbWUsIHN0ZXBSZXN1bHQpO1xyXG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5pc0ZhdGFsICYmICF0aGlzLm9wdHMuY29udGludWVPbkVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICghZXJyb3IubG9jYXRpb24gJiYgY21kTG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGVycm9yLmxvY2F0aW9uID0gY21kTG9jYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdGVwUmVzdWx0ICYmIHN0ZXBSZXN1bHQuZmFpbHVyZSAmJiBzdGVwUmVzdWx0LmZhaWx1cmUubG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGVycm9yLmxvY2F0aW9uID0gc3RlcFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9uO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcHVibGljTWV0aG9kKSB7XHJcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4gIWRvbmUgJiYgIWVycm9yKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgIH1cclxuXHJcbiAgICBfd3JhcEFzeW5jIChmbiwgY29udGV4dCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IGNvbnRleHQgfHwgdGhpcztcclxuICAgICAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgY29kZSBpcyBub3QgcnVubmluZyBpbnNpZGUgdGhlIEZpYmVyIGNvbnRleHQsIHRoZW4gcnVuIGFzeW5jIGNvZGUgYXMgc3luYyB1c2luZyBkZWFzeW5jIG1vZHVsZVxyXG4gICAgICAgICAgICBpZiAoIUZpYmVyLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHZhbCA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBkb25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbmFsVmFsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmV0dmFsICYmIHJldHZhbC50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHJldHZhbClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigodmFsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsVmFsID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbCA9IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFkb25lICYmICFlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLm1lc3NhZ2UgJiYgdHlwZW9mIGUubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKCdyZWFkeVN0YXRlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB0aGlzIGVycm9yIGFzIGl0IHVzdWFsbHkgaGFwcGVucyBcclxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIE94eWdlbiBpcyBkaXNwb3NlZCBhbmQgcHJvY2VzcyBpcyBiZWluZyBraWxsZWRcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZGVhc3luYy5sb29wV2hpbGUoKSBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsVmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBlcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBkb25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCByZXR2YWwgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIGlmIHdlIGFyZSBpbnNpZGUgdGhlIEZpYmVyIGNvbnRleHQsIHRoZW4gdXNlIEZpYmVyJ3MgRnV0dXJlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmdXR1cmUgPSBuZXcgRnV0dXJlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKCh2YWwpID0+IGZ1dHVyZS5yZXR1cm4odmFsKSwgKGVycikgPT4gZnV0dXJlLnRocm93KGVycikpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdXR1cmUud2FpdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4gIWRvbmUgJiYgIWVycm9yKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXRyaWV2ZSBjdXJyZW50IGxpbmUgYW5kIGZ1bmN0aW9uIG5hbWUgZnJvbSB0aGUgY2FsbCBzdGFja1xyXG4gICAgX2dldENvbW1hbmRMb2NhdGlvbigpIHtcclxuICAgICAgICBjb25zdCBzdGFjayA9IF9fc3RhY2s7XHJcbiAgICAgICAgbGV0IGNhbGxlciA9IG51bGw7XHJcbiAgICAgICAgZm9yIChsZXQgY2FsbCBvZiBzdGFjaykge1xyXG4gICAgICAgICAgICBpZiAoX19maWxlbmFtZSA9PT0gY2FsbC5nZXRGaWxlTmFtZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyByZXR1cm4gdGhlIGZpcnN0IGNhbGxlciwgd2hpY2ggaXMgbm90IHRoZSBjdXJyZW50IGZpbGVcclxuICAgICAgICAgICAgY2FsbGVyID0gY2FsbDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYWxsZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke2NhbGxlci5nZXRGaWxlTmFtZSgpfToke2NhbGxlci5nZXRMaW5lTnVtYmVyKCkgKyB0aGlzLmFkanVzdFNjcmlwdExpbmV9OiR7Y2FsbGVyLmdldENvbHVtbk51bWJlcigpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIF9nZXRTdGVwUmVzdWx0KG1vZHVsZSwgbW9kdWxlTmFtZSwgbWV0aG9kTmFtZSwgYXJncywgbG9jYXRpb24sIHN0YXJ0VGltZSwgZW5kVGltZSwgcmV0dmFsLCBlcnIpIHtcclxuICAgICAgICB2YXIgc3RlcCA9IG5ldyBTdGVwUmVzdWx0KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID1cclxuICAgICAgICAgICAgKG1vZHVsZS5nZXRTdGVwRGlzcGxheU5hbWUgJiYgbW9kdWxlLmdldFN0ZXBEaXNwbGF5TmFtZShtZXRob2ROYW1lLCBhcmdzLCByZXR2YWwsIGVycikpIHx8XHJcbiAgICAgICAgICAgIG94dXRpbC5nZXRNZXRob2RTaWduYXR1cmUobW9kdWxlTmFtZSwgbWV0aG9kTmFtZSwgYXJncyk7XHJcblxyXG4gICAgICAgIHN0ZXAubmFtZSA9IGRpc3BsYXlOYW1lO1xyXG4gICAgICAgIHN0ZXAudHJhbnNhY3Rpb24gPSBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgfHwgbnVsbDsgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlzIGhlcmUgaWYgaXQncyBhbHJlYWR5IHBvcHVsYXRlZCBpbiBycz9cclxuICAgICAgICBzdGVwLmxvY2F0aW9uID0gbG9jYXRpb247XHJcbiAgICAgICAgLy8gbW9kdWxlLmV4dHJhIGlzIHJlc2V0ZWQgZm9yIGVhY2ggc3RlcCwgc28gd2UgbXVzdCBjbG9uZSBpdFxyXG4gICAgICAgIHN0ZXAuZXh0cmEgPSB7IC4uLm1vZHVsZS5leHRyYSB9O1xyXG4gICAgICAgIGlmIChtb2R1bGUuZXh0cmEgJiYgbW9kdWxlLmV4dHJhLmh0dHApIHtcclxuICAgICAgICAgICAgc3RlcC50eXBlID0gJ2h0dHAnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVyciAmJiBlcnIudHlwZSAmJiBlcnIudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9QQVNTRUQpIHtcclxuICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuUEFTU0VEO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHN0ZXAgc3RhdHVzXHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuaXNGYXRhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobW9kdWxlTmFtZSA9PT0gJ2xvZycgJiYgbWV0aG9kTmFtZSA9PT0gJ3dhcm4nKSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5XQVJOSU5HO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuUEFTU0VEO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGVwLmFjdGlvbiA9ICh0eXBlb2YgbW9kdWxlLl9pc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IG1vZHVsZS5faXNBY3Rpb24obWV0aG9kTmFtZSkgOiBmYWxzZSk7XHJcbiAgICAgICAgc3RlcC5zdGFydFRpbWUgPSBzdGFydFRpbWU7XHJcbiAgICAgICAgc3RlcC5lbmRUaW1lID0gZW5kVGltZTtcclxuICAgICAgICBzdGVwLmR1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUuX2dldFN0YXRzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHN0ZXAuc3RhdHMgPSBtb2R1bGUuX2dldFN0YXRzKG1ldGhvZE5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0ZXAuc3RhdHMgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgaWYgKGVyciAmJiBlcnIudHlwZSAmJiBlcnIudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9QQVNTRUQpIHtcclxuICAgICAgICAgICAgICAgIC8vaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyICYmIGVyci50eXBlICYmIChlcnIudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCB8fCBlcnIudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkFQUElVTV9TRVNTSU9OX1RJTUVPVVQpKSB7XHJcbiAgICAgICAgICAgICAgICAvL2lnbm9yZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RlcC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgc3RlcC5mYWlsdXJlLmxvY2F0aW9uID0gbG9jYXRpb247XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGhlIG1vZHVsZSBkZWNpZGUgd2hldGhlciBhIHNjcmVlbnNob3Qgc2hvdWxkIGJlIHRha2VuIG9uIGVycm9yIG9yIG5vdFxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudCA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpcy5vcHRzLmRpc2FibGVTY3JlZW5zaG90KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudChtZXRob2ROYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgdW5hYmxlIHRvIGdldCBhIHNjcmVlbnNob3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHdhaXQgZm9yIGEgbW9tZW50IChpbiBQZXJmZWN0byBDbG91ZCwgdGhlIHNjcmVlbnNob3QgbWlnaHQgbm90IGJlIGltbWlkaWF0ZWx5IGF2YWlsYWJsZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVhc3luYy5zbGVlcCgxMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXAuc2NyZWVuc2hvdCA9IG1vZHVsZS5fdGFrZVNjcmVlbnNob3RTaWxlbnQobWV0aG9kTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbmRpY2F0ZSB0byB1c2VyIHRoYXQgYW4gYXR0ZW1wdCB0byB0YWtlIGEgc2NyZWVuc2hvdCBoYXMgZmFpbGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0ZXA7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2Rpc3Bvc2VTZXJ2aWNlcygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VydmljZXMgfHwgdHlwZW9mIHRoaXMuc2VydmljZXMgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNba2V5XTtcclxuICAgICAgICAgICAgaWYgKHNlcnZpY2UuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzZXJ2aWNlLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIHNlcnZpY2UgZGlzcG9zYWwgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRpc3Bvc2Ugc2VydmljZSAnJHtrZXl9JzpgLCBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZGlzcG9zZU1vZHVsZXMoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5tb2R1bGVzIHx8IHR5cGVvZiB0aGlzLm1vZHVsZXMgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICBjb25zdCBtb2QgPSB0aGlzLm1vZHVsZXNba2V5XTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtb2QuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXNwb3NlUmVzdWx0ID0gbW9kLmRpc3Bvc2Uoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcG9zZVJlc3VsdCAmJiB0eXBlb2YgZGlzcG9zZVJlc3VsdC50aGVuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2JhYmx5IGEgcHJvbWlzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBkaXNwb3NlUmVzdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgbW9kdWxlIGRpc3Bvc2FsIGVycm9yIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGlzcG9zZSBtb2R1bGUgJyR7a2V5fSc6IGAsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLypcclxuICAgICAqIFNlcnZpY2VzIEV2ZW50IEVtaXR0ZXJzXHJcbiAgICAgKi9cclxuICAgIF9jYWxsU2VydmljZXNPbk1vZHVsZUxvYWRlZChtb2R1bGUpIHtcclxuICAgICAgICBmb3IgKGxldCBzZXJ2aWNlTmFtZSBpbiB0aGlzLnNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc2VydmljZS5vbk1vZHVsZUxvYWRlZChtb2R1bGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbk1vZHVsZUxvYWRlZFwiIG1ldGhvZCBvZiAke3NlcnZpY2VOYW1lfSBzZXJ2aWNlLmAsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgX2NhbGxTZXJ2aWNlc09uTW9kdWxlSW5pdGlhbGl6ZWQobW9kdWxlKSB7XHJcbiAgICAgICAgZm9yIChsZXQgc2VydmljZU5hbWUgaW4gdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlc1tzZXJ2aWNlTmFtZV07XHJcbiAgICAgICAgICAgIGlmICghc2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZpY2Uub25Nb2R1bGVJbml0aWFsaXplZChtb2R1bGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbk1vZHVsZUluaXRpYWxpemVkXCIgbWV0aG9kIG9mICR7c2VydmljZU5hbWV9IHNlcnZpY2UuYCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBfY2FsbFNlcnZpY2VzT25Nb2R1bGVXaWxsRGlzcG9zZShtb2R1bGUpIHtcclxuICAgICAgICBpZiAoIXRoaXMgfHwgIXRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBzZXJ2aWNlTmFtZSBpbiB0aGlzLnNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2Uub25Nb2R1bGVXaWxsRGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2Uub25Nb2R1bGVXaWxsRGlzcG9zZShtb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbk1vZHVsZVdpbGxEaXNwb3NlXCIgbWV0aG9kIG9mICR7c2VydmljZU5hbWV9IHNlcnZpY2UuYCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfcG9wdWxhdGVQYXJhbWV0ZXJzVmFsdWUoYXJncykge1xyXG4gICAgICAgIGlmICghYXJncyB8fCAhQXJyYXkuaXNBcnJheShhcmdzKSB8fCBhcmdzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmdzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBfbmV3QXJncyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGFyZyBvZiBhcmdzKSB7XHJcbiAgICAgICAgICAgIF9uZXdBcmdzLnB1c2godGhpcy5fcmVwbGFjZVBhcmFtZXRlckluQXJndW1lbnQoYXJnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfbmV3QXJncztcclxuICAgIH1cclxuICAgIF9yZXBsYWNlUGFyYW1ldGVySW5Bcmd1bWVudChhcmcpIHtcclxuICAgICAgICBpZiAoYXJnICYmIHR5cGVvZiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ0VOQ1JZUFRFRCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWFyZyB8fCB0eXBlb2YgYXJnICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZXBsYWNlIHVzZXIgcGFyYW1ldGVycyB3aXRoIHZhbHVlc1xyXG4gICAgICAgIC8vIG5vdGU6IHVzZXIgcGFyYW1ldGVyIHdpdGggdGhlIHNhbWUgbmFtZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZW52aXJvbm1lbnQgdmFyaWFibGVcclxuICAgICAgICBmb3IgKGxldCBwYXJhbU5hbWUgaW4gdGhpcy5jdHgucGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN0eC5wYXJhbXMuaGFzT3duUHJvcGVydHkocGFyYW1OYW1lKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHRoaXMuY3R4LnBhcmFtc1twYXJhbU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXCR7JyArIHBhcmFtTmFtZSArICd9JywgJ2cnKSwgcGFyYW1WYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVwbGFjZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCB2YWx1ZXNcclxuICAgICAgICBmb3IgKGxldCBlbnZOYW1lIGluIHRoaXMuY3R4LmVudikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdHguZW52Lmhhc093blByb3BlcnR5KGVudk5hbWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbnZWYWx1ZSA9IHRoaXMuY3R4LmVudltlbnZOYW1lXTtcclxuICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFwkeycgKyBlbnZOYW1lICsgJ30nLCAnZycpLCBlbnZWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFyZztcclxuICAgIH1cclxuICAgIF9nZXRBbGxQcm9wZXJ0eU5hbWVzKCBvYmogKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSBbXTtcclxuXHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyggb2JqICkuZm9yRWFjaChmdW5jdGlvbiAoIHByb3AgKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIHByb3BzLmluZGV4T2YoIHByb3AgKSA9PT0gLTEgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMucHVzaCggcHJvcCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbmQtYXNzaWduXHJcbiAgICAgICAgfSB3aGlsZSAoIG9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiggb2JqICkgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHByb3BzO1xyXG4gICAgfVxyXG5cclxuICAgIF9jaGVja1N0ZXBSZXN1bHQocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrU3RlcFJlc3VsdChyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfd2FpdFN0ZXBSZXN1bHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fY2hlY2tTdGVwUmVzdWx0KHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldERlY3J5cHRlZEFyZ3NGb3JBcHBseShhcmdzLCBtb2R1bGVOYW1lKSB7XHJcbiAgICAgICAgaWYgKCFhcmdzIHx8ICFBcnJheS5pc0FycmF5KGFyZ3MpIHx8IGFyZ3MubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IF9uZXdBcmdzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYXJnIG9mIGFyZ3MpIHtcclxuICAgICAgICAgICAgX25ld0FyZ3MucHVzaCh0aGlzLl9kZWNyeXB0UGFyYW1ldGVyRm9yQXBwbHlJbkFyZ3VtZW50KGFyZywgbW9kdWxlTmFtZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX25ld0FyZ3M7XHJcbiAgICB9XHJcblxyXG4gICAgX2RlY3J5cHRQYXJhbWV0ZXJGb3JBcHBseUluQXJndW1lbnQoYXJnLCBtb2R1bGVOYW1lKSB7XHJcbiAgICAgICAgaWYgKGFyZyAmJiB0eXBlb2YgYXJnLmdldERlY3J5cHRSZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT09ICdsb2cnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0VOQ1JZUFRFRCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnLmdldERlY3J5cHRSZXN1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFyZztcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
1068
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL094eWdlbkNvcmUuanMiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnbG9iYWwiLCJnZXQiLCJvcmlnIiwiRXJyb3IiLCJwcmVwYXJlU3RhY2tUcmFjZSIsIl8iLCJzdGFjayIsImVyciIsImNhcHR1cmVTdGFja1RyYWNlIiwiREVGQVVMVF9USU1FT1VUIiwiREVGQVVMVF9PUFRTIiwiYmFja3RyYWNlIiwiY29tcGlsZXIiLCJmYWlsQW1iaWd1b3VzRGVmaW5pdGlvbnMiLCJmYWlsRmFzdCIsImlnbm9yZVVuZGVmaW5lZERlZmluaXRpb25zIiwibmFtZSIsInByb2ZpbGUiLCJyZXF1aXJlIiwib3JkZXIiLCJzbmlwcGV0U3ludGF4IiwidW5kZWZpbmVkIiwic25pcHBldHMiLCJzb3VyY2UiLCJzdHJpY3QiLCJ0YWdFeHByZXNzaW9uIiwidGFnc0luVGl0bGUiLCJ0aW1lb3V0IiwiTU9EVUxFX05BTUVfTUFUQ0hfUkVHRVgiLCJTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVgiLCJET19OT1RfV1JBUF9NRVRIT0RTIiwiREVGQVVMVF9DVFgiLCJwYXJhbXMiLCJ2YXJzIiwiZW52IiwiY2FwcyIsImF0dHJpYnV0ZXMiLCJERUZBVUxUX1JFU1VMVF9TVE9SRSIsInN0ZXBzIiwibG9ncyIsImF0dGFjaG1lbnRzIiwiaGFyIiwiT3h5Z2VuIiwiT3h5Z2VuRXZlbnRzIiwiY29uc3RydWN0b3IiLCJpc0luaXRpYWxpemVkIiwicmVzdWx0U3RvcmUiLCJjdHgiLCJtb2R1bGVzIiwic2VydmljZXMiLCJyZXBvIiwiY2FwYWJpbGl0aWVzIiwib3B0cyIsIm94QmFzZURpciIsInBhdGgiLCJqb2luIiwiX19kaXJuYW1lIiwibG9nZ2VyIiwiX3dyYXBMb2dnZXIiLCJfd2FpdFN0ZXBSZXN1bHRMaXN0IiwiaW5pdCIsIm9wdGlvbnMiLCJyZXN1bHRzIiwiYXNzaWduIiwiY3dkIiwicHJvY2VzcyIsImtleXMiLCJsZW5ndGgiLCJtYWtlT3hHbG9iYWwiLCJfbG9hZFNlcnZpY2VzIiwiX2xvYWRNb2R1bGVzIiwiZ2xvYmFsU2NvcGUiLCJtYWtlQ29udGV4dEFuZE1vZHVsZXNHbG9iYWwiLCJkaXNwb3NlTW9kdWxlcyIsInN0YXR1cyIsIl9kaXNwb3NlTW9kdWxlcyIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJkaXNwb3NlIiwiX2Rpc3Bvc2VTZXJ2aWNlcyIsImFkanVzdFNjcmlwdExpbmUiLCJpc0luRGVidWdNb2RlIiwib3h1dGlsIiwicmVzdWx0IiwiY29udGV4dCIsIm94IiwicmVwb3NpdG9yeSIsInRyYW5zU3RlcCIsImluY2x1ZGVzIiwidHJhbnNOYW1lIiwidHJhbnNhY3Rpb24iLCJkdXJhdGlvbiIsInN0ZXAiLCJlbmRUaW1lIiwiU1RBVFVTIiwiV0FSTklORyIsImdldE1vZHVsZXNDYXBhYmlsaXRpZXMiLCJtb2RDYXBzIiwibW9kdWxlTmFtZSIsIm1vZHVsZSIsIl9nZXRDYXBhYmlsaXRpZXMiLCJyZXNldFJlc3VsdHMiLCJvbkJlZm9yZUNhc2UiLCJfaXRlcmF0aW9uU3RhcnQiLCJvbkFmdGVyQ2FzZSIsIl9pdGVyYXRpb25FbmQiLCJhZGRBdHRyaWJ1dGUiLCJiaW5kIiwiYWRkQXR0YWNobWVudCIsInZhbHVlIiwiZmlsZVBhdGgiLCJmcyIsImV4aXN0c1N5bmMiLCJwdXNoIiwiY29yZVV0aWxzIiwibmV3RmlsZUF0dGFjaG1lbnQiLCJsb2FkUGFnZU9iamVjdEZpbGUiLCJwb1BhdGgiLCJwbyIsIl9sb2dnZXIiLCJsb2dnZXJXcmFwIiwiaW5mbyIsImFyZ3MiLCJfbG9nIiwiZGVidWciLCJ3YXJuIiwidXNlckluZm8iLCJJU1NVRVJTIiwiVVNFUiIsInVzZXJEZWJ1ZyIsInVzZXJFcnJvciIsInVzZXJXYXJuIiwibGV2ZWwiLCJzcmMiLCJERUZBVUxUX0xPR0dFUl9JU1NVRVIiLCJhcHBseSIsIm1lc3NhZ2UiLCJzdHJpbmdpZnkiLCJ0aW1lIiwiZ2V0VGltZVN0YW1wIiwidG9VcHBlckNhc2UiLCJtc2ciLCJzaGlmdCIsImVtaXRMb2ciLCJveFNlcnZpY2VzRGlyUGF0aCIsInJlc29sdmUiLCJzZXJ2aWNlRmlsZXMiLCJnbG9iIiwic3luYyIsImkiLCJzZXJ2aWNlRmlsZU5hbWUiLCJzZXJ2aWNlRmlsZVBhdGgiLCJtYXRjaCIsInNlcnZpY2VOYW1lIiwiQXJyYXkiLCJpc0FycmF5Iiwic2VydmljZSIsIl9sb2FkU2VydmljZSIsIkVPTCIsInN0YWNrdHJhY2UiLCJzZXJ2aWNlUGF0aCIsIlNlcnZpY2VDbGFzcyIsImRlZmF1bHQiLCJzZXJ2aWNlTG9nZ2VyIiwiX2xvYWRJbnRlcm5hbE1vZHVsZXMiLCJfbG9hZEV4dGVybmFsTW9kdWxlcyIsIm1vZHVsZXNGb2xkZXJQYXRoIiwibW9kdWxlc19leHQiLCJveE1vZHVsZXNEaXJQYXRoIiwibW9kdWxlRmlsZXMiLCJmb3JFYWNoIiwibW9kdWxlRmlsZU5hbWUiLCJzdGFydFRpbWUiLCJEYXRlIiwibW9kdWxlTG9nZ2VyIiwibW9kIiwibG9hZE1vZHVsZUZyb21GaWxlIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkIiwiX3dyYXBNb2R1bGUiLCJleGNsdWRlVW5kZWZpbmVkTW9kcyIsIk1vZHVsZXMiLCJNb2R1bGVDbGFzcyIsImdldE94TW9kdWxlc0RpciIsImxvYWRNb2R1bGVGcm9tQ2xhc3MiLCJ3cmFwcGVyIiwiX3RoaXMiLCJtb2R1bGVNZXRob2RzIiwic29tZSIsIngiLCJfZ2V0QWxsUHJvcGVydHlOYW1lcyIsIm1ldGhvZE5hbWUiLCJtZXRob2QiLCJGdW5jdGlvbiIsIk94eWdlblN1Yk1vZHVsZSIsImluZGV4T2YiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJhcmd1bWVudHMiLCJnZXRNZXRob2RTaWduYXR1cmUiLCJlcnJvckhlbHBlciIsImdldE94eWdlbkVycm9yIiwiX2NvbW1hbmRXcmFwcGVyIiwiT3hFcnJvciIsImNtZE5hbWUiLCJjbWRBcmdzIiwicmV0dmFsIiwiY21kRm4iLCJwdWJsaWNNZXRob2QiLCJzdGFydHNXaXRoIiwiZGVsYXkiLCJkZWFzeW5jIiwic2xlZXAiLCJlcnJvckNvZGUiLCJNT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SIiwiZGVjcnlwdGVkQXJncyIsIl9nZXREZWNyeXB0ZWRBcmdzRm9yQXBwbHkiLCJfcG9wdWxhdGVQYXJhbWV0ZXJzVmFsdWUiLCJjbWRMb2NhdGlvbiIsIl9nZXRDb21tYW5kTG9jYXRpb24iLCJlbWl0QmVmb3JlQ29tbWFuZCIsIl93cmFwQXN5bmMiLCJfY2FsbFNlcnZpY2VzT25Nb2R1bGVXaWxsRGlzcG9zZSIsInJldHZhbFByb21pc2UiLCJ0aGVuIiwicHJvbWlzZURvbmUiLCJsb29wV2hpbGUiLCJfY2FsbFNlcnZpY2VzT25Nb2R1bGVJbml0aWFsaXplZCIsInN0ZXBSZXN1bHQiLCJkb25lIiwid2FpdElkIiwiX2dldFN0ZXBSZXN1bHQiLCJpbmRleCIsInNwbGljZSIsImVtaXRBZnRlckNvbW1hbmQiLCJpc0ZhdGFsIiwiY29udGludWVPbkVycm9yIiwibG9jYXRpb24iLCJmYWlsdXJlIiwiZm4iLCJzZWxmIiwiRmliZXIiLCJjdXJyZW50IiwiZmluYWxWYWwiLCJQcm9taXNlIiwidmFsIiwiY2F0Y2giLCJmdXR1cmUiLCJGdXR1cmUiLCJyZXR1cm4iLCJ0aHJvdyIsIndhaXQiLCJfX3N0YWNrIiwiY2FsbGVyIiwiX19maWxlbmFtZSIsImdldEZpbGVOYW1lIiwiZ2V0TGluZU51bWJlciIsImdldENvbHVtbk51bWJlciIsIlN0ZXBSZXN1bHQiLCJkaXNwbGF5TmFtZSIsImdldFN0ZXBEaXNwbGF5TmFtZSIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiZXh0cmEiLCJodHRwIiwidHlwZSIsIkFTU0VSVF9QQVNTRUQiLCJQQVNTRUQiLCJGQUlMRUQiLCJhY3Rpb24iLCJfaXNBY3Rpb24iLCJfZ2V0U3RhdHMiLCJzdGF0cyIsIlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCIsIkFQUElVTV9TRVNTSU9OX1RJTUVPVVQiLCJnZXRGYWlsdXJlRnJvbUVycm9yIiwiX3Rha2VTY3JlZW5zaG90U2lsZW50IiwiZGlzYWJsZVNjcmVlbnNob3QiLCJzY3JlZW5zaG90Iiwia2V5IiwiZGlzcG9zZVJlc3VsdCIsIm9uTW9kdWxlTG9hZGVkIiwib25Nb2R1bGVJbml0aWFsaXplZCIsIm9uTW9kdWxlV2lsbERpc3Bvc2UiLCJfbmV3QXJncyIsImFyZyIsIl9yZXBsYWNlUGFyYW1ldGVySW5Bcmd1bWVudCIsImdldERlY3J5cHRSZXN1bHQiLCJwYXJhbU5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsInBhcmFtVmFsdWUiLCJyZXBsYWNlIiwiUmVnRXhwIiwiZW52TmFtZSIsImVudlZhbHVlIiwib2JqIiwicHJvcHMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcCIsImdldFByb3RvdHlwZU9mIiwiX2NoZWNrU3RlcFJlc3VsdCIsInJlamVjdCIsIl93YWl0U3RlcFJlc3VsdCIsIl9kZWNyeXB0UGFyYW1ldGVyRm9yQXBwbHlJbkFyZ3VtZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7Ozs7Ozs7QUFHQUEsTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxNQUF0QixFQUE4QixTQUE5QixFQUF5QztBQUNyQ0MsRUFBQUEsR0FBRyxFQUFFLFlBQVk7QUFDYixRQUFJQyxJQUFJLEdBQUdDLEtBQUssQ0FBQ0MsaUJBQWpCOztBQUNBRCxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLEdBQTBCLFVBQVVDLENBQVYsRUFBYUMsS0FBYixFQUFvQjtBQUFFLGFBQU9BLEtBQVA7QUFBZSxLQUEvRDs7QUFDQSxRQUFJQyxHQUFHLEdBQUcsSUFBSUosS0FBSixFQUFWO0FBQ0FBLElBQUFBLEtBQUssQ0FBQ0ssaUJBQU4sQ0FBd0JELEdBQXhCO0FBQ0EsUUFBSUQsS0FBSyxHQUFHQyxHQUFHLENBQUNELEtBQWhCO0FBQ0FILElBQUFBLEtBQUssQ0FBQ0Ms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LElBQUl6RCxPQUFKLENBQVksQ0FBQ25HLE9BQUQsRUFBVTJKLE1BQVYsS0FBcUI7QUFDcEMsV0FBS0QsZ0JBQUwsQ0FBc0IxSixPQUF0QixFQUErQjJKLE1BQS9CO0FBQ0gsS0FGTSxDQUFQO0FBR0g7O0FBRURwRixFQUFBQSx5QkFBeUIsQ0FBQzlGLElBQUQsRUFBT3hCLFVBQVAsRUFBbUI7QUFDeEMsUUFBSSxDQUFDd0IsSUFBRCxJQUFTLENBQUNnQyxLQUFLLENBQUNDLE9BQU4sQ0FBY2pDLElBQWQsQ0FBVixJQUFpQ0EsSUFBSSxDQUFDeEQsTUFBTCxJQUFlLENBQXBELEVBQXVEO0FBQ25ELGFBQU93RCxJQUFQO0FBQ0g7O0FBQ0QsVUFBTWlLLFFBQVEsR0FBRyxFQUFqQjs7QUFDQSxTQUFLLElBQUlDLEdBQVQsSUFBZ0JsSyxJQUFoQixFQUFzQjtBQUNsQmlLLE1BQUFBLFFBQVEsQ0FBQzFLLElBQVQsQ0FBYyxLQUFLNkwsbUNBQUwsQ0FBeUNsQixHQUF6QyxFQUE4QzFMLFVBQTlDLENBQWQ7QUFDSDs7QUFDRCxXQUFPeUwsUUFBUDtBQUNIOztBQUVEbUIsRUFBQUEsbUNBQW1DLENBQUNsQixHQUFELEVBQU0xTCxVQUFOLEVBQWtCO0FBQ2pELFFBQUkwTCxHQUFHLElBQUksT0FBT0EsR0FBRyxDQUFDRSxnQkFBWCxLQUFnQyxVQUEzQyxFQUF1RDtBQUNuRCxVQUFJNUwsVUFBVSxLQUFLLEtBQW5CLEVBQTBCO0FBQ3RCLGVBQU8sV0FBUDtBQUNILE9BRkQsTUFFTztBQUNILGVBQU8wTCxHQUFHLENBQUNFLGdCQUFKLEVBQVA7QUFDSDtBQUNKOztBQUVELFdBQU9GLEdBQVA7QUFDSDs7QUEvOEI0QyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xyXG5pbXBvcnQgZ2xvYiBmcm9tICdnbG9iJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBkZWFzeW5jIGZyb20gJ2RlYXN5bmMnO1xyXG5pbXBvcnQgRnV0dXJlIGZyb20gJ2ZpYmVycy9mdXR1cmUnO1xyXG5pbXBvcnQgRmliZXIgZnJvbSAnZmliZXJzJztcclxuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xyXG5pbXBvcnQgU3RlcFJlc3VsdCBmcm9tICcuLi9tb2RlbC9zdGVwLXJlc3VsdCc7XHJcbmltcG9ydCBPeHlnZW5FdmVudHMgZnJvbSAnLi9PeHlnZW5FdmVudHMnO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0ICogYXMgY29yZVV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBTVEFUVVMgZnJvbSAnLi4vbW9kZWwvc3RhdHVzLmpzJztcclxuaW1wb3J0ICogYXMgTW9kdWxlcyBmcm9tICcuLi9veF9tb2R1bGVzL2luZGV4JztcclxuXHJcbi8vIHNldHVwIGxvZ2dlclxyXG5pbXBvcnQgbG9nZ2VyLCB7IERFRkFVTFRfTE9HR0VSX0lTU1VFUiwgSVNTVUVSUyB9IGZyb20gJy4uL2xpYi9sb2dnZXInO1xyXG5pbXBvcnQgeyBPeHlnZW5TdWJNb2R1bGUgfSBmcm9tICcuL094eWdlblN1Yk1vZHVsZSc7XHJcblxyXG4vKmdsb2JhbCBfX3N0YWNrKi9cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwgJ19fc3RhY2snLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgb3JpZyA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xyXG4gICAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnVuY3Rpb24gKF8sIHN0YWNrKSB7IHJldHVybiBzdGFjazsgfTtcclxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCk7XHJcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyKTtcclxuICAgICAgICB2YXIgc3RhY2sgPSBlcnIuc3RhY2s7XHJcbiAgICAgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBvcmlnO1xyXG4gICAgICAgIHJldHVybiBzdGFjaztcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBERUZBVUxUX1RJTUVPVVQgPSAzMDAwMDtcclxuY29uc3QgREVGQVVMVF9PUFRTID0ge1xyXG4gICAgYmFja3RyYWNlOiBmYWxzZSwgLy8gPGJvb2xlYW4+IHNob3cgZnVsbCBiYWNrdHJhY2UgZm9yIGVycm9yc1xyXG4gICAgY29tcGlsZXI6IFtdLCAvLyA8c3RyaW5nW10+IChcImV4dGVuc2lvbjptb2R1bGVcIikgcmVxdWlyZSBmaWxlcyB3aXRoIHRoZSBnaXZlbiBFWFRFTlNJT04gYWZ0ZXIgcmVxdWlyaW5nIE1PRFVMRSAocmVwZWF0YWJsZSlcclxuICAgIGZhaWxBbWJpZ3VvdXNEZWZpbml0aW9uczogZmFsc2UsIC8vIDxib29sZWFuPiB0cmVhdCBhbWJpZ3VvdXMgZGVmaW5pdGlvbnMgYXMgZXJyb3JzXHJcbiAgICBmYWlsRmFzdDogZmFsc2UsIC8vIDxib29sZWFuPiBhYm9ydCB0aGUgcnVuIG9uIGZpcnN0IGZhaWx1cmVcclxuICAgIGlnbm9yZVVuZGVmaW5lZERlZmluaXRpb25zOiBmYWxzZSwgLy8gPGJvb2xlYW4+IHRyZWF0IHVuZGVmaW5lZCBkZWZpbml0aW9ucyBhcyB3YXJuaW5nc1xyXG4gICAgbmFtZTogW10sIC8vIDxSRUdFWFBbXT4gb25seSBleGVjdXRlIHRoZSBzY2VuYXJpb3Mgd2l0aCBuYW1lIG1hdGNoaW5nIHRoZSBleHByZXNzaW9uIChyZXBlYXRhYmxlKVxyXG4gICAgcHJvZmlsZTogW10sIC8vIDxzdHJpbmc+IChuYW1lKSBzcGVjaWZ5IHRoZSBwcm9maWxlIHRvIHVzZVxyXG4gICAgcmVxdWlyZTogW10sIC8vIDxzdHJpbmc+IChmaWxlL2Rpci9nbG9iKSByZXF1aXJlIGZpbGVzIGJlZm9yZSBleGVjdXRpbmcgZmVhdHVyZXNcclxuICAgIG9yZGVyOiAnZGVmaW5lZCcsIC8vIDxzdHJpbmc+IHN3aXRjaCBiZXR3ZWVuIGRldGVybWluaXN0aWMgIGFuZCByYW5kb20gZmVhdHVyZSBleGVjdXRpb24uIEVpdGhlciBcImRlZmluZWRcIiwgXCJyYW5kb21cIiBvciBcInJhbmRvbTo0MlwiIHdoZXJlYXMgNDIgaXMgdGhlIHNlZWQgZm9yIHJhbmRvbWl6YXRpb25cclxuICAgIHNuaXBwZXRTeW50YXg6IHVuZGVmaW5lZCwgLy8gPHN0cmluZz4gc3BlY2lmeSBhIGN1c3RvbSBzbmlwcGV0IHN5bnRheFxyXG4gICAgc25pcHBldHM6IHRydWUsIC8vIDxib29sZWFuPiBoaWRlIHN0ZXAgZGVmaW5pdGlvbiBzbmlwcGV0cyBmb3IgcGVuZGluZyBzdGVwc1xyXG4gICAgc291cmNlOiB0cnVlLCAvLyA8Ym9vbGVhbj4gaGlkZSBzb3VyY2UgdXJpc1xyXG4gICAgc3RyaWN0OiBmYWxzZSwgLy8gPGJvb2xlYW4+IGZhaWwgaWYgdGhlcmUgYXJlIGFueSB1bmRlZmluZWQgb3IgcGVuZGluZyBzdGVwc1xyXG4gICAgdGFnRXhwcmVzc2lvbjogJycsIC8vIDxzdHJpbmc+IChleHByZXNzaW9uKSBvbmx5IGV4ZWN1dGUgdGhlIGZlYXR1cmVzIG9yIHNjZW5hcmlvcyB3aXRoIHRhZ3MgbWF0Y2hpbmcgdGhlIGV4cHJlc3Npb25cclxuICAgIHRhZ3NJblRpdGxlOiBmYWxzZSwgLy8gPGJvb2xlYW4+IGFkZCBjdWN1bWJlciB0YWdzIHRvIGZlYXR1cmUgb3Igc2NlbmFyaW8gbmFtZVxyXG4gICAgdGltZW91dDogREVGQVVMVF9USU1FT1VUIC8vIDxudW1iZXI+IHRpbWVvdXQgZm9yIHN0ZXAgZGVmaW5pdGlvbnMgaW4gbWlsbGlzZWNvbmRzXHJcbn07XHJcbmNvbnN0IE1PRFVMRV9OQU1FX01BVENIX1JFR0VYID0gL15tb2R1bGUtKC4rPylcXC5qcyQvO1xyXG5jb25zdCBTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVggPSAvXnNlcnZpY2UtKC4rPylcXC5qcyQvO1xyXG5jb25zdCBET19OT1RfV1JBUF9NRVRIT0RTID0gWydkcml2ZXInLCAnZ2V0RHJpdmVyJ107XHJcblxyXG5jb25zdCBERUZBVUxUX0NUWCA9IHtcclxuICAgIHBhcmFtczoge30sXHJcbiAgICB2YXJzOiB7fSxcclxuICAgIGVudjoge30sXHJcbiAgICBjYXBzOiB7fSxcclxuICAgIGF0dHJpYnV0ZXM6IHt9LFxyXG59O1xyXG5jb25zdCBERUZBVUxUX1JFU1VMVF9TVE9SRSA9IHtcclxuICAgIHN0ZXBzOiBbXSxcclxuICAgIGxvZ3M6IFtdLFxyXG4gICAgYXR0YWNobWVudHM6IFtdLFxyXG4gICAgaGFyOiBudWxsLFxyXG4gICAgYXR0cmlidXRlczoge31cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE94eWdlbiBleHRlbmRzIE94eWdlbkV2ZW50cyB7XHJcbiAgICBjb25zdHJ1Y3RvciAoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlID0geyAuLi5ERUZBVUxUX1JFU1VMVF9TVE9SRSB9O1xyXG4gICAgICAgIHRoaXMuY3R4ID0geyAuLi5ERUZBVUxUX0NUWCB9O1xyXG4gICAgICAgIHRoaXMubW9kdWxlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuc2VydmljZXMgPSB7fTtcclxuICAgICAgICB0aGlzLnJlcG8gPSB7fTtcclxuICAgICAgICB0aGlzLmNhcGFiaWxpdGllcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5vcHRzID0gbnVsbDtcclxuICAgICAgICB0aGlzLm94QmFzZURpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8nKTtcclxuICAgICAgICB0aGlzLmxvZ2dlciA9IHRoaXMuX3dyYXBMb2dnZXIobG9nZ2VyKCdPeHlnZW4nKSk7XHJcbiAgICAgICAgdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdChvcHRpb25zLCBjYXBzLCBjdHggPSB7fSwgcmVzdWx0cyA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5vcHRzID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX09QVFMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuY3dkID0gdGhpcy5vcHRzLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgICAgIHRoaXMuY3R4ID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX0NUWCwgY3R4IHx8IHt9KTtcclxuICAgICAgICB0aGlzLmN0eC5jYXBzID0geyAuLi5jdHguY2FwcyB8fCB7fSwgLi4uY2FwcywgfTtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX1JFU1VMVF9TVE9SRSwgcmVzdWx0cyB8fCB7fSk7XHJcbiAgICAgICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB0aGlzLmN0eC5jYXBzID0gY2FwcztcclxuXHJcbiAgICAgICAgaWYgKGN0eC5hdHRyaWJ1dGVzICYmICghcmVzdWx0cy5hdHRyaWJ1dGVzIHx8ICFPYmplY3Qua2V5cyhyZXN1bHRzLmF0dHJpYnV0ZXMpLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRyaWJ1dGVzID0geyAuLi5jdHguYXR0cmlidXRlcyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZGVmaW5lICdveCcgb2JqZWN0IGluIGdsb2JhbCBKUyBzY29wZVxyXG4gICAgICAgIC8vIHdlIHdpbGwgdXNlIHRoaXMgb2JqZWN0IHRvIGFjY2VzcyBPeHlnZW4gbW9kdWxlcyBhbmQgdGVzdCBjb250ZXh0IGZyb20gbW9kdWxlcyB1c2VkIGluIHRoZSB0ZXN0IChpZiBhbnkpICAgICAgICBcclxuICAgICAgICB0aGlzLm1ha2VPeEdsb2JhbCgpO1xyXG4gICAgICAgIC8vIGxvYWQgc2VydmljZXNcclxuICAgICAgICB0aGlzLl9sb2FkU2VydmljZXMoKTtcclxuICAgICAgICAvLyBsb2FkIG1vZHVsZXNcclxuICAgICAgICB0aGlzLl9sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgIC8vIGlmIG9wdGlvbnMubWFrZU1vZHVsZXNHbG9iYWwgaXMgdHJ1ZSBvciB1bmRlZmluZWQgdGhhbiBkZWZpbmUgJ2N0eCcgY29udGVudCBhbmQgZWFjaCBtb2R1bGUgaW4gZ2xvYmFsIHNjb3BlXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmdsb2JhbFNjb3BlID09PSAndW5kZWZpbmVkJyB8fCBvcHRpb25zLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFrZUNvbnRleHRBbmRNb2R1bGVzR2xvYmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZU1vZHVsZXMoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2Rpc3Bvc2VNb2R1bGVzKHN0YXR1cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkaXNwb3NlIG1vZHVsZXM6ICcsIGUpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlTW9kdWxlcyhzdGF0dXMpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlU2VydmljZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZGlzcG9zZTogJywgZSk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBhZGp1c3RTY3JpcHRMaW5lKCkge1xyXG4gICAgICAgIGNvbnN0IGlzSW5EZWJ1Z01vZGUgPSBveHV0aWwuaXNJbkRlYnVnTW9kZSgpO1xyXG4gICAgICAgIC8vIGFkZCBleHRyYSBsaW5lIGlmIHdlIGFyZSBydW5uaW5nIGluIGRlYnVnZ2VyIG1vZGUgKFY4IGRlYnVnZ2VyIGFkZHMgYW4gZXh0cmEgbGluZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlKVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzSW5EZWJ1Z01vZGUgPyAtMSA6IDA7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29udGV4dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdHg7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNvbnRleHQoY3R4KSB7XHJcbiAgICAgICAgdGhpcy5jdHggPSBjdHg7XHJcbiAgICAgICAgaWYgKGdsb2JhbC5veCkge1xyXG4gICAgICAgICAgICBnbG9iYWwub3guY3R4ID0gY3R4O1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgXCJwYXJhbXNcIiBhbmQgXCJlbnZcIiBpbiBcIm94XCIgZ2xvYmFsIHZhcmlhYmxlXHJcbiAgICAgICAgICAgICAgICBnbG9iYWwucGFyYW1zID0gY3R4LnBhcmFtcyB8fCB7fTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5lbnYgPSBjdHguZW52IHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmF0dHJpYnV0ZXMgPSBjdHguYXR0cmlidXRlcyB8fCB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVwb3NpdG9yeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBvO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCByZXBvc2l0b3J5KHJlcG8pIHtcclxuICAgICAgICB0aGlzLnJlcG8gPSByZXBvO1xyXG4gICAgICAgIGlmIChnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94LnJlcG8gPSByZXBvO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVzdWx0cygpIHtcclxuICAgICAgICAvLyBjYWxjdWxhdGUgdGltZSBmb3IgdGhlIHRyYW5zYWN0aW9uIGl0c2VsZiAtIHN1bW1hcnkgb2YgZHVyYXRpb25zIGZvciBhbGwgdGhlIHN0ZXBzIGluIHRoaXMgdHJhbnNhY3Rpb25cclxuICAgICAgICAvLyBhbHNvIGFkanVzdCB0cmFuc2FjdGlvbiBlbmQgdGltZSB0byBtdWNoIGVuZCB0aW1lIGZvciB0aGUgbGFzdCBleGVjdXRlZCBzdGVwIHdpdGhpbiB0aGlzIHRyYW5zYWN0aW9uLlxyXG4gICAgICAgIGZvciAoY29uc3QgdHJhbnNTdGVwIG9mIHRoaXMucmVzdWx0U3RvcmUuc3RlcHMpIHtcclxuICAgICAgICAgICAgaWYgKHRyYW5zU3RlcC5uYW1lLmluY2x1ZGVzKCcudHJhbnNhY3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNOYW1lID0gdHJhbnNTdGVwLnRyYW5zYWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNTdGVwLmR1cmF0aW9uID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RlcCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uICYgaXMgbm90IHRoZSB0cmFuc2FjdGlvbiBzdGVwXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXAudHJhbnNhY3Rpb24gPT09IHRyYW5zTmFtZSAmJiBzdGVwICE9PSB0cmFuc1N0ZXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNTdGVwLmR1cmF0aW9uICs9IHN0ZXAuZHVyYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLmVuZFRpbWUgPiB0cmFuc1N0ZXAuZW5kVGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNTdGVwLmVuZFRpbWUgPSBzdGVwLmVuZFRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0cmFuc2FjdGlvbiBzdGF0dXMgdG8gd2FybmluZyBpZiBhdCBsZWFzdCBvbmUgb2Ygc3RlcHMgaGFzIHdhcm5pbmcgc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLnN0YXR1cyA9PT0gU1RBVFVTLldBUk5JTkcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5zdGF0dXMgPSBTVEFUVVMuV0FSTklORztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRTdG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNb2R1bGVzQ2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2RDYXBzID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgbW9kdWxlTmFtZSBpbiB0aGlzLm1vZHVsZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAobW9kdWxlLm5hbWUgJiYgbW9kdWxlLl9nZXRDYXBhYmlsaXRpZXMgJiYgdHlwZW9mIG1vZHVsZS5fZ2V0Q2FwYWJpbGl0aWVzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYXBzID0gbW9kdWxlLl9nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgICAgICAgICAgICAgIC8vIHN0b3JlIG9ubHkgbm9uLWVtcHR5IGNhcHMgcGVyIG1vZHVsZSB0aGF0IGhhcyB0aGlzLmNhcHMgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIGlmIChjYXBzICYmIHR5cGVvZiBjYXBzID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhjYXBzKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kQ2Fwc1ttb2R1bGUubmFtZV0gPSBjYXBzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtb2RDYXBzO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0UmVzdWx0cygpIHtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzID0gW107XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5sb2dzID0gW107XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRhY2htZW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaGFyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkJlZm9yZUNhc2UoY29udGV4dCkge1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUub25CZWZvcmVDYXNlICYmIGF3YWl0IG1vZHVsZS5vbkJlZm9yZUNhc2UoY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUuX2l0ZXJhdGlvblN0YXJ0ICYmIGF3YWl0IG1vZHVsZS5faXRlcmF0aW9uU3RhcnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjYWxsIFwib25CZWZvcmVDYXNlXCIgbWV0aG9kIG9mICR7bW9kdWxlTmFtZX0gbW9kdWxlLmAsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uQWZ0ZXJDYXNlKGVycm9yID0gbnVsbCkge1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhd2FpdCBmb3IgYXZvaWQgc3R1Y2sgb24gKi5kaXNwb3NlIGNhbGxcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5vbkFmdGVyQ2FzZSAmJiBhd2FpdCBtb2R1bGUub25BZnRlckNhc2UoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLl9pdGVyYXRpb25FbmQgJiYgYXdhaXQgbW9kdWxlLl9pdGVyYXRpb25FbmQoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbkFmdGVyQ2FzZVwiIG1ldGhvZCBvZiAke21vZHVsZU5hbWV9IG1vZHVsZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBtYWtlT3hHbG9iYWwoKSB7XHJcbiAgICAgICAgaWYgKCFnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94ID0ge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlczogdGhpcy5tb2R1bGVzLFxyXG4gICAgICAgICAgICAgICAgY3R4OiB0aGlzLmN0eCxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMub3B0cyxcclxuICAgICAgICAgICAgICAgIGNhcHM6IHRoaXMuY2FwYWJpbGl0aWVzLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0U3RvcmU6IHRoaXMucmVzdWx0U3RvcmUsXHJcbiAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGU6IHRoaXMuYWRkQXR0cmlidXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBhZGRBdHRhY2htZW50OiB0aGlzLmFkZEF0dGFjaG1lbnQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGdsb2JhbC52YXJzID0gdGhpcy5jdHgudmFycztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUNvbnRleHRBbmRNb2R1bGVzR2xvYmFsKCkge1xyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSAnb3gnIGlzIGFscmVhZHkgZ2xvYmFsXHJcbiAgICAgICAgaWYgKGdsb2JhbC5veCkge1xyXG4gICAgICAgICAgICAvLyBleHBvc2UgbW9kdWxlcyBhcyBnbG9iYWwgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdsb2JhbFttb2R1bGVOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFttb2R1bGVOYW1lXSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBleHBvc2UgXCJjdHhcIiwgXCJwYXJhbXNcIiBhbmQgXCJlbnZcIiBhcyBnbG9iYWwgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGdsb2JhbC5wYXJhbXMgPSBnbG9iYWwub3guY3R4LnBhcmFtcztcclxuICAgICAgICAgICAgZ2xvYmFsLmVudiA9IGdsb2JhbC5veC5jdHguZW52O1xyXG4gICAgICAgICAgICBnbG9iYWwuY3R4ID0gZ2xvYmFsLm94LmN0eDtcclxuICAgICAgICAgICAgZ2xvYmFsLmF0dHJpYnV0ZXMgPSBnbG9iYWwub3guY3R4LmF0dHJpYnV0ZXMgfHwge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdFN0b3JlICYmIHRoaXMucmVzdWx0U3RvcmUuYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLmF0dHJpYnV0ZXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQXR0YWNobWVudChmaWxlUGF0aCkge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXN1bHRTdG9yZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyKGBGaWxlICR7ZmlsZVBhdGh9IGRvZXNuJ3QgZXhpc3RgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUuYXR0YWNobWVudHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRhY2htZW50cy5wdXNoKFxyXG4gICAgICAgICAgICBjb3JlVXRpbHMubmV3RmlsZUF0dGFjaG1lbnQoZmlsZVBhdGgpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkUGFnZU9iamVjdEZpbGUocG9QYXRoKSB7XHJcbiAgICAgICAgaWYgKCFwb1BhdGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwbyA9IHJlcXVpcmUocG9QYXRoKTtcclxuICAgICAgICAgICAgLy8gc2V0IHBhZ2Ugb2JqZWN0IHJlcG9zaXRvcnkgYXMgdGhlIG1haW4gb25lXHJcbiAgICAgICAgICAgIHRoaXMucmVwb3NpdG9yeSA9IHBvO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBnbG9iYWwucG8gPSBwbztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLnBvID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIFByaXZhdGUgTWV0aG9kc1xyXG4gICAgICovXHJcbiAgICBfd3JhcExvZ2dlcihfbG9nZ2VyKSB7XHJcbiAgICAgICAgY29uc3QgbG9nZ2VyV3JhcCA9IHtcclxuICAgICAgICAgICAgaW5mbzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnaW5mbycsIGFyZ3MpLFxyXG4gICAgICAgICAgICBkZWJ1ZzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnZGVidWcnLCBhcmdzKSxcclxuICAgICAgICAgICAgZXJyb3I6ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2Vycm9yJywgYXJncyksXHJcbiAgICAgICAgICAgIHdhcm46ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ3dhcm4nLCBhcmdzKSxcclxuICAgICAgICAgICAgdXNlckluZm86ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2luZm8nLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxyXG4gICAgICAgICAgICB1c2VyRGVidWc6ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2RlYnVnJywgYXJncywgSVNTVUVSUy5VU0VSKSxcclxuICAgICAgICAgICAgdXNlckVycm9yOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdlcnJvcicsIGFyZ3MsIElTU1VFUlMuVVNFUiksXHJcbiAgICAgICAgICAgIHVzZXJXYXJuOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICd3YXJuJywgYXJncywgSVNTVUVSUy5VU0VSKSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBsb2dnZXJXcmFwO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2coX2xvZ2dlciwgbGV2ZWwsIGFyZ3MsIHNyYyA9IERFRkFVTFRfTE9HR0VSX0lTU1VFUikge1xyXG4gICAgICAgIGlmICghX2xvZ2dlcltsZXZlbF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBfbG9nZ2VyW2xldmVsXS5hcHBseShfbG9nZ2VyLCBhcmdzKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG94dXRpbC5zdHJpbmdpZnkoYXJncywgMik7XHJcbiAgICAgICAgY29uc3QgdGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAvLyBhZGQgdGhlIGxvZyBlbnRyeSB0byB0aGUgcmVzdWx0IHN0b3JlXHJcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0U3RvcmUgJiYgdGhpcy5yZXN1bHRTdG9yZS5sb2dzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUubG9ncy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRpbWU6IHRpbWUsXHJcbiAgICAgICAgICAgICAgICBsZXZlbDogbGV2ZWwudG9VcHBlckNhc2UoKSxcclxuICAgICAgICAgICAgICAgIG1zZzogbWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIHNyYzogc3JjXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZW1vdmUgZmlyc3QgYXJndW1lbnQsIGlmIGl0J3MgYSBtZXNzYWdlXHJcbiAgICAgICAgYXJncyA9IG1lc3NhZ2UgPyBhcmdzLnNoaWZ0KCkgOiBhcmdzO1xyXG4gICAgICAgIHRoaXMuZW1pdExvZyh0aW1lLCBsZXZlbCwgbWVzc2FnZSwgYXJncywgc3JjKTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFNlcnZpY2VzKCkge1xyXG4gICAgICAgIGNvbnN0IG94U2VydmljZXNEaXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3hCYXNlRGlyLCAnLi9veF9zZXJ2aWNlcycpO1xyXG4gICAgICAgIGNvbnN0IHNlcnZpY2VGaWxlcyA9IGdsb2Iuc3luYygnc2VydmljZS0qLmpzJywgeyBjd2Q6IG94U2VydmljZXNEaXJQYXRoIH0pO1xyXG4gICAgICAgIC8vIGluaXRpYWxpemUgYWxsIHNlcnZpY2VzXHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgc2VydmljZXMuLi4nKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJ2aWNlRmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUZpbGVOYW1lID0gc2VydmljZUZpbGVzW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlRmlsZVBhdGggPSBwYXRoLmpvaW4ob3hTZXJ2aWNlc0RpclBhdGgsIHNlcnZpY2VGaWxlTmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHNlcnZpY2VGaWxlTmFtZS5tYXRjaChTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVgpO1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHJlc3VsdFsxXTtcclxuXHJcbiAgICAgICAgICAgIC8vIHRoaXMub3B0cy5zZXJ2aWNlcyA9IHVuZGVmaW5lZCBpbiBzaW5nbGUgZmlsZSBtb2RlXHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0cy5zZXJ2aWNlcykgJiYgIXRoaXMub3B0cy5zZXJ2aWNlcy5pbmNsdWRlcyhzZXJ2aWNlTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgc2VydmljZTogJyArIHNlcnZpY2VOYW1lKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLl9sb2FkU2VydmljZShzZXJ2aWNlTmFtZSwgc2VydmljZUZpbGVQYXRoKTtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2UuaW5pdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc1tzZXJ2aWNlTmFtZV0gPSBzZXJ2aWNlO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIHNlcnZpY2UgXCInICsgc2VydmljZU5hbWUgKyAnXCI6ICcgKyBlLm1lc3NhZ2UgKyBFT0wgKyAoZS5zdGFja3RyYWNlID8gZS5zdGFja3RyYWNlIDogJycpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIF9sb2FkU2VydmljZShzZXJ2aWNlTmFtZSwgc2VydmljZVBhdGgpIHtcclxuICAgICAgICBsZXQgU2VydmljZUNsYXNzID0gcmVxdWlyZShzZXJ2aWNlUGF0aCk7XHJcbiAgICAgICAgLy8gRVM2IGNsYXNzIHdpbGwgYmUgdW5kZXIgJ2RlZmF1bHQnIHByb3BlcnR5XHJcbiAgICAgICAgaWYgKFNlcnZpY2VDbGFzcy5kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgIFNlcnZpY2VDbGFzcyA9IFNlcnZpY2VDbGFzcy5kZWZhdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzZXJ2aWNlTG9nZ2VyID0gdGhpcy5fd3JhcExvZ2dlcihsb2dnZXIoYFNlcnZpY2U6JHtzZXJ2aWNlTmFtZX1gKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlQ2xhc3ModGhpcy5vcHRzLCB0aGlzLmN0eCwgdGhpcy5yZXN1bHRTdG9yZSwgc2VydmljZUxvZ2dlcik7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRNb2R1bGVzKCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIGludGVybmFsIG1vZHVsZXMuLi4nKTtcclxuICAgICAgICB0aGlzLl9sb2FkSW50ZXJuYWxNb2R1bGVzKCk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgZXh0ZXJuYWwgbW9kdWxlcy4uLicpO1xyXG4gICAgICAgIHRoaXMuX2xvYWRFeHRlcm5hbE1vZHVsZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEV4dGVybmFsTW9kdWxlcygpIHtcclxuICAgICAgICBsZXQgbW9kdWxlc0ZvbGRlclBhdGggPSAnLi9tb2R1bGVzJztcclxuICAgICAgICBpZiAodGhpcy5vcHRzLm1vZHVsZXNfZXh0ICYmIHR5cGVvZiB0aGlzLm9wdHMubW9kdWxlc19leHQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIG1vZHVsZXNGb2xkZXJQYXRoID0gdGhpcy5vcHRzLm1vZHVsZXNfZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL2NvbnN0IG94TW9kdWxlc0RpclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5veEJhc2VEaXIsICcuL294X21vZHVsZXMnKTtcclxuICAgICAgICBjb25zdCBveE1vZHVsZXNEaXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuY3dkLCBtb2R1bGVzRm9sZGVyUGF0aCk7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG94TW9kdWxlc0RpclBhdGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG1vZHVsZUZpbGVzID0gW107XHJcbiAgICAgICAgLy8gaWYgcGFydGljdWxhciBtb2R1bGUgbmFtZXMgYXJlIGRlZmluZWQgaW4gdGhlIGNvbmZpZywgdGhlbiBsb2FkIG9ubHkgdGhlc2UgbW9kdWxlc1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0cy5tb2R1bGVzKSAmJiB0aGlzLm9wdHMubW9kdWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3B0cy5tb2R1bGVzLmZvckVhY2gobW9kdWxlTmFtZSA9PiBtb2R1bGVGaWxlcy5wdXNoKGBtb2R1bGUtJHttb2R1bGVOYW1lfS5qc2ApKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBsb2FkIGFsbCBhdmFpbGFibGUgbW9kdWxlcyAobWlnaHQgYmUgbW9yZSB0aW1lIGNvbnN1bWluZylcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbW9kdWxlRmlsZXMgPSBnbG9iLnN5bmMoJ21vZHVsZS0qLmpzJywgeyBjd2Q6IG94TW9kdWxlc0RpclBhdGggfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGluaXRpYWxpemUgYWxsIG1vZHVsZXMgICAgICAgIFxyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZUZpbGVOYW1lIG9mIG1vZHVsZUZpbGVzKSB7XHJcbiAgICAgICAgICAgIC8vIGV4dHJhY3QgbmFtZSBmcm9tIHRoZSBtb2R1bGUgZmlsZSBuYW1lIGJhc2VkIG9uIG1vZHVsZSBuYW1lIHBhdHRlcm5cclxuICAgICAgICAgICAgY29uc3QgbW9kdWxlTmFtZSA9IG1vZHVsZUZpbGVOYW1lLm1hdGNoKE1PRFVMRV9OQU1FX01BVENIX1JFR0VYKVsxXTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIG5ldyBsb2dnZXIgZm9yIHRoZSBtb2R1bGVcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZUxvZ2dlciA9IHRoaXMuX3dyYXBMb2dnZXIobG9nZ2VyKGBNb2R1bGU6JHttb2R1bGVOYW1lfWApKTtcclxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IG1vZHVsZSBpbnN0YW5jZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kID0gY29yZVV0aWxzLmxvYWRNb2R1bGVGcm9tRmlsZShtb2R1bGVOYW1lLCBtb2R1bGVGaWxlTmFtZSwgbW9kdWxlTG9nZ2VyLCBveE1vZHVsZXNEaXJQYXRoLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vIGNhbGwgb25Nb2R1bGVMb2FkZWQgaG9va1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbFNlcnZpY2VzT25Nb2R1bGVMb2FkZWQobW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgbW9kdWxlIHRvIHRoZSBtb2R1bGUgbGlzdFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdID0gZ2xvYmFsLm94Lm1vZHVsZXNbbW9kdWxlTmFtZV0gPSB0aGlzLl93cmFwTW9kdWxlKG1vZHVsZU5hbWUsIG1vZCk7XHJcbiAgICAgICAgICAgICAgICAvLyB3cmFwIHVwXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKGVuZFRpbWUgLSBzdGFydFRpbWUpIC8gMTAwMDtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIG1vZHVsZTogJyArIG1vZHVsZU5hbWUgKyAnIFsgJyArIGR1cmF0aW9uICsgJyBzZWMgXScpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIG1vZHVsZSBcIicgKyBtb2R1bGVOYW1lICsgJ1wiOiAnICsgZS5tZXNzYWdlICsgRU9MICsgKGUuc3RhY2t0cmFjZSA/IGUuc3RhY2t0cmFjZSA6ICcnKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgYW55IG1vZHVsZSB0aGF0IGZhaWxlZCB0byBsb2FkLCBleGNlcHQgV2ViIGFuZCBNb2IgbW9kdWxlc1xyXG4gICAgICAgICAgICAgICAgLy8gd2l0aG91dCBNb2IgYW5kIFdlYiBtb2R1bGVzIGxvYWRlZCwgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc2hhbGwgZmFpbFxyXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT09ICd3ZWInIHx8IG1vZHVsZU5hbWUgPT09ICdtb2InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRJbnRlcm5hbE1vZHVsZXMoKSB7XHJcbiAgICAgICAgLy8gaWYgYG1vZHVsZXNgIGlzIGVtcHR5IG9yIHVuZGVmaW5lZCBpbiBveHlnZW4uY29uZiB0aGVuIGxvYWQgYWxsIG1vZHVsZXNcclxuICAgICAgICAvLyBvdGhlcndpc2UsIGxvYWQgb25seSB0aG9zZSBpbXBsaWNpdGx5IGRlZmluZWRcclxuICAgICAgICBjb25zdCBleGNsdWRlVW5kZWZpbmVkTW9kcyA9IHRoaXMub3B0cy5tb2R1bGVzICYmIHRoaXMub3B0cy5tb2R1bGVzLmxlbmd0aCA+IDA7XHJcblxyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgb2YgT2JqZWN0LmtleXMoTW9kdWxlcykpIHtcclxuICAgICAgICAgICAgaWYgKGV4Y2x1ZGVVbmRlZmluZWRNb2RzICYmICF0aGlzLm9wdHMubW9kdWxlcy5pbmNsdWRlcyhtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgTW9kdWxlQ2xhc3MgPSBNb2R1bGVzW21vZHVsZU5hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBveE1vZHVsZXNEaXJQYXRoID0gb3h1dGlsLmdldE94TW9kdWxlc0RpcigpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IGxvZ2dlciBmb3IgdGhlIG1vZHVsZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlTG9nZ2VyID0gdGhpcy5fd3JhcExvZ2dlcihsb2dnZXIoYE1vZHVsZToke21vZHVsZU5hbWV9YCkpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBuZXcgbW9kdWxlIGluc3RhbmNlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2QgPSBjb3JlVXRpbHMubG9hZE1vZHVsZUZyb21DbGFzcyhtb2R1bGVOYW1lLCBNb2R1bGVDbGFzcywgbW9kdWxlTG9nZ2VyLCBveE1vZHVsZXNEaXJQYXRoLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vIGNhbGwgb25Nb2R1bGVMb2FkZWQgaG9va1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbFNlcnZpY2VzT25Nb2R1bGVMb2FkZWQobW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgbW9kdWxlIHRvIHRoZSBtb2R1bGUgbGlzdFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdID0gZ2xvYmFsLm94Lm1vZHVsZXNbbW9kdWxlTmFtZV0gPSB0aGlzLl93cmFwTW9kdWxlKG1vZHVsZU5hbWUsIG1vZCk7XHJcbiAgICAgICAgICAgICAgICAvLyB3cmFwIHVwXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKGVuZFRpbWUgLSBzdGFydFRpbWUpIC8gMTAwMDtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIG1vZHVsZTogJyArIG1vZHVsZU5hbWUgKyAnIFsgJyArIGR1cmF0aW9uICsgJyBzZWMgXScpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIG1vZHVsZSBcIicgKyBtb2R1bGVOYW1lICsgJ1wiOiAnICsgZS5tZXNzYWdlICsgRU9MICsgKGUuc3RhY2t0cmFjZSA/IGUuc3RhY2t0cmFjZSA6ICcnKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgYW55IG1vZHVsZSB0aGF0IGZhaWxlZCB0byBsb2FkLCBleGNlcHQgV2ViIGFuZCBNb2IgbW9kdWxlc1xyXG4gICAgICAgICAgICAgICAgLy8gd2l0aG91dCBNb2IgYW5kIFdlYiBtb2R1bGVzIGxvYWRlZCwgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc2hhbGwgZmFpbFxyXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT09ICd3ZWInIHx8IG1vZHVsZU5hbWUgPT09ICdtb2InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3dyYXBNb2R1bGUobmFtZSwgbW9kdWxlKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IHtcclxuICAgICAgICAgICAgbmFtZTogbmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGxldCBtb2R1bGVNZXRob2RzID0gT2JqZWN0LmtleXMobW9kdWxlKTtcclxuICAgICAgICBpZiAoIW1vZHVsZU1ldGhvZHMuc29tZSh4ID0+IHg9PT0gJ2V4cG9ydHMnKSkge1xyXG4gICAgICAgICAgICBtb2R1bGVNZXRob2RzID0gdGhpcy5fZ2V0QWxsUHJvcGVydHlOYW1lcyhtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBtZXRob2ROYW1lIG9mIG1vZHVsZU1ldGhvZHMpIHtcclxuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gbW9kdWxlW21ldGhvZE5hbWVdO1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgYW55IG1vZHVsZSBwcm9wZXJ0eSB0aGF0IGlzIG5vdCBhIGZ1bmN0aW9uIG9yIGEgT3h5Z2VuU3ViTW9kdWxlXHJcbiAgICAgICAgICAgIGlmICgoIShtZXRob2QgaW5zdGFuY2VvZiBGdW5jdGlvbikgJiYgIShtZXRob2QgaW5zdGFuY2VvZiBPeHlnZW5TdWJNb2R1bGUpICYmIHR5cGVvZiBtZXRob2QgIT09ICdmdW5jdGlvbicpIHx8IG1ldGhvZE5hbWUgPT09ICdleHBvcnRzJyB8fCBtZXRob2ROYW1lID09PSAnX2NvbXBpbGUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBtYXAgYW5kIHdyYXAgc3ViLW1vZHVsZSBtZXRob2RzIChyZWN1cnNpdmUgY2FsbCB0byBfd3JhcE1vZHVsZSlcclxuICAgICAgICAgICAgaWYgKG1ldGhvZCBpbnN0YW5jZW9mIE94eWdlblN1Yk1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9IHRoaXMuX3dyYXBNb2R1bGUoYCR7bmFtZX0uJHttZXRob2ROYW1lfWAsIG1ldGhvZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gZG8gbm90IHdyYXAgbWV0aG9kc1xyXG4gICAgICAgICAgICBlbHNlIGlmIChET19OT1RfV1JBUF9NRVRIT0RTLmluY2x1ZGVzKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyA9PT0gJ2RyaXZlcicgfHwgbWV0aG9kTmFtZSA9PT0gJ2dldERyaXZlcidcclxuICAgICAgICAgICAgICAgIHdyYXBwZXJbbWV0aG9kTmFtZV0gPSBtb2R1bGVbbWV0aG9kTmFtZV0uYmluZChtb2R1bGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHByaXZhdGUgbWV0aG9kcyBhbmQgZXZlbnQgaGFuZGxlcnNcclxuICAgICAgICAgICAgZWxzZSBpZiAobWV0aG9kTmFtZS5pbmRleE9mKCdfJykgPT09IDAgfHwgbWV0aG9kTmFtZS5pbmRleE9mKCdvbicpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5sb2dnZXIuZGVidWcoJ0V4ZWN1dGluZzogJyArIG94dXRpbC5nZXRNZXRob2RTaWduYXR1cmUobmFtZSwgbWV0aG9kTmFtZSwgYXJncykpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlW21ldGhvZE5hbWVdLmFwcGx5KG1vZHVsZSwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvckhlbHBlci5nZXRPeHlnZW5FcnJvcihlLCBuYW1lLCBtZXRob2ROYW1lLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGFuIGludGVybmFsIF9nZXRDYXBhYmlsaXRpZXMgbWV0aG9kIGZvciBpbnRlcm5hbCBPeHlnZW4gQ29yZSB1c2VcclxuICAgICAgICAgICAgICAgIC8vIGNhbGxpbmcgX2dldENhcGFiaWxpdGllcyBtZXRob2Qgd29uJ3QgYmUgdmlzaWJsZSBpbiB0aGUgdGVzdCByZXN1bHRzXHJcbiAgICAgICAgICAgICAgICBpZiAobWV0aG9kTmFtZSA9PT0gJ2dldENhcGFiaWxpdGllcycpIHtcclxuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyWydfZ2V0Q2FwYWJpbGl0aWVzJ10gPSBtZXRob2QuYmluZChtb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9ICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9jb21tYW5kV3JhcHBlcihtZXRob2ROYW1lLCBhcmdzLCBtb2R1bGUsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE94RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ1Rocm93aW5nIGFnYWluOicsIGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9ySGVscGVyLmdldE94eWdlbkVycm9yKGUsIG5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHdyYXBwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgX2NvbW1hbmRXcmFwcGVyKGNtZE5hbWUsIGNtZEFyZ3MsIG1vZHVsZSwgbW9kdWxlTmFtZSkge1xyXG4gICAgICAgIGlmICghbW9kdWxlIHx8ICFtb2R1bGVbY21kTmFtZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCByZXR2YWwgPSBudWxsO1xyXG4gICAgICAgIGxldCBlcnJvciA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgY21kRm4gPSBtb2R1bGVbY21kTmFtZV07XHJcbiAgICAgICAgY29uc3QgcHVibGljTWV0aG9kID0gIWNtZE5hbWUuc3RhcnRzV2l0aCgnXycpICYmIGNtZE5hbWUgIT09ICdkaXNwb3NlJztcclxuXHJcbiAgICAgICAgLy8gZGVsYXkgdGhlIGNvbW1hbmQgZXhlY3V0aW9uIGlmIHJlcXVpcmVkXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLm9wdHMuZGVsYXkgJiZcclxuICAgICAgICAgICAgcHVibGljTWV0aG9kICYmXHJcbiAgICAgICAgICAgIGNtZE5hbWUgIT09ICdpbml0JyAmJlxyXG4gICAgICAgICAgICBjbWROYW1lICE9PSAndHJhbnNhY3Rpb24nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGRlYXN5bmMuc2xlZXAodGhpcy5vcHRzLmRlbGF5ICogMTAwMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aHJvdyBpZiBhIGNvbW1hbmQgZXhlY3V0ZWQgb24gdW5pdGlhbGl6ZWQgbW9kdWxlIChleGNlcHQgaW50ZXJuYWwgbWV0aG9kcyBhbmQgYSBmZXcgb3RoZXIpXHJcbiAgICAgICAgaWYgKCFtb2R1bGUuaXNJbml0aWFsaXplZCAmJiBwdWJsaWNNZXRob2QgJiYgY21kTmFtZSAhPT0gJ2luaXQnICYmIGNtZE5hbWUgIT09ICd0cmFuc2FjdGlvbicpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdNaXNzaW5nICcgKyBtb2R1bGVOYW1lICsgJy5pbml0KCknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGRlY3R5cHQgYXJndW1lbnRzXHJcbiAgICAgICAgbGV0IGRlY3J5cHRlZEFyZ3MgPSB0aGlzLl9nZXREZWNyeXB0ZWRBcmdzRm9yQXBwbHkoY21kQXJncywgbW9kdWxlTmFtZSk7XHJcbiAgICAgICAgZGVjcnlwdGVkQXJncyA9IHRoaXMuX3BvcHVsYXRlUGFyYW1ldGVyc1ZhbHVlKGRlY3J5cHRlZEFyZ3MpO1xyXG5cclxuICAgICAgICAvLyByZXBsYWNlIHBhcmFtZXRlcnMgaW4gbWV0aG9kIGFyZ3VtZW50cyB3aXRoIGNvcnJlc3BvbmRpbmcgdmFsdWVzXHJcbiAgICAgICAgY21kQXJncyA9IHRoaXMuX3BvcHVsYXRlUGFyYW1ldGVyc1ZhbHVlKGNtZEFyZ3MpO1xyXG4gICAgICAgIC8vIHN0YXJ0IG1lYXN1cmluZyBtZXRob2QgZXhlY3V0aW9uIHRpbWVcclxuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcblxyXG4gICAgICAgIC8vIGFkZCBjb21tYW5kIGxvY2F0aW9uIGluZm9ybWF0aW9uIChlLmcuIGZpbGUgbmFtZSBhbmQgY29tbWFuZCBsaW5lKVxyXG4gICAgICAgIGxldCBjbWRMb2NhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgLy8gZG8gbm90IHJlcG9ydCByZXN1bHRzIG9yIGxpbmUgdXBkYXRlcyBvbiBpbnRlcm5hbCBtZXRob2RzIChzdGFydGVkIHdpdGggJ18nKVxyXG4gICAgICAgIGlmIChwdWJsaWNNZXRob2QpIHtcclxuICAgICAgICAgICAgY21kTG9jYXRpb24gPSB0aGlzLl9nZXRDb21tYW5kTG9jYXRpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0QmVmb3JlQ29tbWFuZChjbWROYW1lLCBtb2R1bGVOYW1lLCBjbWRGbiwgY21kQXJncywgdGhpcy5jdHgsIGNtZExvY2F0aW9uLCBzdGFydFRpbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0V4ZWN1dGluZzogJyArIG94dXRpbC5nZXRNZXRob2RTaWduYXR1cmUobW9kdWxlTmFtZSwgY21kTmFtZSwgY21kQXJncykpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBlbWl0IGJlZm9yZSBldmVudHNcclxuICAgICAgICAgICAgaWYgKGNtZE5hbWUgPT09ICdkaXNwb3NlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcEFzeW5jKHRoaXMuX2NhbGxTZXJ2aWNlc09uTW9kdWxlV2lsbERpc3Bvc2UpLmFwcGx5KHRoaXMsIFttb2R1bGVdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmV0dmFsUHJvbWlzZSA9IHRoaXMuX3dyYXBBc3luYyhtb2R1bGVbY21kTmFtZV0pLmFwcGx5KG1vZHVsZSwgZGVjcnlwdGVkQXJncyk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmV0dmFsUHJvbWlzZSAmJiByZXR2YWxQcm9taXNlLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlRG9uZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHZhbFByb21pc2UudGhlbigodmFsdWUpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZURvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZURvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4gIXByb21pc2VEb25lKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHZhbCA9IHJldHZhbFByb21pc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjbWROYW1lID09PSAnaW5pdCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXBBc3luYyh0aGlzLl9jYWxsU2VydmljZXNPbk1vZHVsZUluaXRpYWxpemVkKS5hcHBseSh0aGlzLCBbbW9kdWxlXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZSAmJiBlLm1lc3NhZ2UgJiYgdHlwZW9mIGUubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKCdpbnZhbGlkIHNlc3Npb24gaWQnKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkbyBub3RoaW5nIGlmIGVycm9yIG9jdXJyZWQgYWZ0ZXIgdGhlIG1vZHVsZSB3YXMgZGlzcG9zZWQgKG9yIGluIGEgcHJvY2VzcyBvZiBiZWluZyBkaXNwb3NlZClcclxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdCBmb3IgaW5pdCBtZXRob2RzIG9mIGNvdXJzZVxyXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgbW9kdWxlLmlzSW5pdGlhbGl6ZWQgPT09ICdib29sZWFuJyAmJiAhbW9kdWxlLmlzSW5pdGlhbGl6ZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgY21kTmFtZSAhPT0gJ2luaXQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnPT09PSBlcnJvciA9PT09JywgZSlcclxuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyb3JIZWxwZXIuZ2V0T3h5Z2VuRXJyb3IoZSwgbW9kdWxlTmFtZSwgY21kTmFtZSwgY21kQXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcblxyXG4gICAgICAgIGxldCBzdGVwUmVzdWx0O1xyXG4gICAgICAgIGxldCBkb25lID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChwdWJsaWNNZXRob2QpIHtcclxuICAgICAgICAgICAgY29uc3Qgd2FpdElkID0gK25ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdC5wdXNoKHdhaXRJZCk7XHJcblxyXG4gICAgICAgICAgICBzdGVwUmVzdWx0ID0gdGhpcy5fZ2V0U3RlcFJlc3VsdChtb2R1bGUsIG1vZHVsZU5hbWUsIGNtZE5hbWUsIGNtZEFyZ3MsIGNtZExvY2F0aW9uLCBzdGFydFRpbWUsIGVuZFRpbWUsIHJldHZhbCwgZXJyb3IpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl93YWl0U3RlcFJlc3VsdExpc3QuaW5kZXhPZih3YWl0SWQpO1xyXG4gICAgICAgICAgICB0aGlzLl93YWl0U3RlcFJlc3VsdExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vc3RlcFJlc3VsdC5sb2NhdGlvbiA9IGNtZExvY2F0aW9uO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5zdGVwcy5wdXNoKHN0ZXBSZXN1bHQpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRBZnRlckNvbW1hbmQoY21kTmFtZSwgbW9kdWxlTmFtZSwgY21kRm4sIGNtZEFyZ3MsIHRoaXMuY3R4LCBjbWRMb2NhdGlvbiwgZW5kVGltZSwgc3RlcFJlc3VsdCk7XHJcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLmlzRmF0YWwgJiYgIXRoaXMub3B0cy5jb250aW51ZU9uRXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCFlcnJvci5sb2NhdGlvbiAmJiBjbWRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZXJyb3IubG9jYXRpb24gPSBjbWRMb2NhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHN0ZXBSZXN1bHQgJiYgc3RlcFJlc3VsdC5mYWlsdXJlICYmIHN0ZXBSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZXJyb3IubG9jYXRpb24gPSBzdGVwUmVzdWx0LmZhaWx1cmUubG9jYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFwdWJsaWNNZXRob2QpIHtcclxuICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhZG9uZSAmJiAhZXJyb3IpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgfVxyXG5cclxuICAgIF93cmFwQXN5bmMgKGZuLCBjb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gY29udGV4dCB8fCB0aGlzO1xyXG4gICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCBjb2RlIGlzIG5vdCBydW5uaW5nIGluc2lkZSB0aGUgRmliZXIgY29udGV4dCwgdGhlbiBydW4gYXN5bmMgY29kZSBhcyBzeW5jIHVzaW5nIGRlYXN5bmMgbW9kdWxlXHJcbiAgICAgICAgICAgIGlmICghRmliZXIuY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dmFsID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmluYWxWYWwgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgJiYgcmV0dmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUocmV0dmFsKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh2YWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWwgPSB2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsVmFsID0gcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4gIWRvbmUgJiYgIWVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlICYmIGUubWVzc2FnZSAmJiB0eXBlb2YgZS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3JlYWR5U3RhdGUnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIHRoaXMgZXJyb3IgYXMgaXQgdXN1YWxseSBoYXBwZW5zIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gT3h5Z2VuIGlzIGRpc3Bvc2VkIGFuZCBwcm9jZXNzIGlzIGJlaW5nIGtpbGxlZFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdkZWFzeW5jLmxvb3BXaGlsZSgpIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluYWxWYWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IHJldHZhbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgaWYgd2UgYXJlIGluc2lkZSB0aGUgRmliZXIgY29udGV4dCwgdGhlbiB1c2UgRmliZXIncyBGdXR1cmVcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZ1dHVyZSA9IG5ldyBGdXR1cmUoKTtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnRoZW4oKHZhbCkgPT4gZnV0dXJlLnJldHVybih2YWwpLCAoZXJyKSA9PiBmdXR1cmUudGhyb3coZXJyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1dHVyZS53YWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG5cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhZG9uZSAmJiAhZXJyb3IpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHJldHJpZXZlIGN1cnJlbnQgbGluZSBhbmQgZnVuY3Rpb24gbmFtZSBmcm9tIHRoZSBjYWxsIHN0YWNrXHJcbiAgICBfZ2V0Q29tbWFuZExvY2F0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHN0YWNrID0gX19zdGFjaztcclxuICAgICAgICBsZXQgY2FsbGVyID0gbnVsbDtcclxuICAgICAgICBmb3IgKGxldCBjYWxsIG9mIHN0YWNrKSB7XHJcbiAgICAgICAgICAgIGlmIChfX2ZpbGVuYW1lID09PSBjYWxsLmdldEZpbGVOYW1lKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHJldHVybiB0aGUgZmlyc3QgY2FsbGVyLCB3aGljaCBpcyBub3QgdGhlIGN1cnJlbnQgZmlsZVxyXG4gICAgICAgICAgICBjYWxsZXIgPSBjYWxsO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhbGxlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7Y2FsbGVyLmdldEZpbGVOYW1lKCl9OiR7Y2FsbGVyLmdldExpbmVOdW1iZXIoKSArIHRoaXMuYWRqdXN0U2NyaXB0TGluZX06JHtjYWxsZXIuZ2V0Q29sdW1uTnVtYmVyKCl9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldFN0ZXBSZXN1bHQobW9kdWxlLCBtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBhcmdzLCBsb2NhdGlvbiwgc3RhcnRUaW1lLCBlbmRUaW1lLCByZXR2YWwsIGVycikge1xyXG4gICAgICAgIHZhciBzdGVwID0gbmV3IFN0ZXBSZXN1bHQoKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPVxyXG4gICAgICAgICAgICAobW9kdWxlLmdldFN0ZXBEaXNwbGF5TmFtZSAmJiBtb2R1bGUuZ2V0U3RlcERpc3BsYXlOYW1lKG1ldGhvZE5hbWUsIGFyZ3MsIHJldHZhbCwgZXJyKSkgfHxcclxuICAgICAgICAgICAgb3h1dGlsLmdldE1ldGhvZFNpZ25hdHVyZShtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBhcmdzKTtcclxuXHJcbiAgICAgICAgc3RlcC5uYW1lID0gZGlzcGxheU5hbWU7XHJcbiAgICAgICAgc3RlcC50cmFuc2FjdGlvbiA9IGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSB8fCBudWxsOyAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgaGVyZSBpZiBpdCdzIGFscmVhZHkgcG9wdWxhdGVkIGluIHJzP1xyXG4gICAgICAgIHN0ZXAubG9jYXRpb24gPSBsb2NhdGlvbjtcclxuICAgICAgICAvLyBtb2R1bGUuZXh0cmEgaXMgcmVzZXRlZCBmb3IgZWFjaCBzdGVwLCBzbyB3ZSBtdXN0IGNsb25lIGl0XHJcbiAgICAgICAgc3RlcC5leHRyYSA9IHsgLi4ubW9kdWxlLmV4dHJhIH07XHJcbiAgICAgICAgaWYgKG1vZHVsZS5leHRyYSAmJiBtb2R1bGUuZXh0cmEuaHR0cCkge1xyXG4gICAgICAgICAgICBzdGVwLnR5cGUgPSAnaHR0cCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyICYmIGVyci50eXBlICYmIGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX1BBU1NFRCkge1xyXG4gICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5QQVNTRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgc3RlcCBzdGF0dXNcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5pc0ZhdGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuRkFJTEVEO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuV0FSTklORztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtb2R1bGVOYW1lID09PSAnbG9nJyAmJiBtZXRob2ROYW1lID09PSAnd2FybicpIHtcclxuICAgICAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLldBUk5JTkc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5QQVNTRUQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0ZXAuYWN0aW9uID0gKHR5cGVvZiBtb2R1bGUuX2lzQWN0aW9uID09PSAnZnVuY3Rpb24nID8gbW9kdWxlLl9pc0FjdGlvbihtZXRob2ROYW1lKSA6IGZhbHNlKTtcclxuICAgICAgICBzdGVwLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcclxuICAgICAgICBzdGVwLmVuZFRpbWUgPSBlbmRUaW1lO1xyXG4gICAgICAgIHN0ZXAuZHVyYXRpb24gPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZS5fZ2V0U3RhdHMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgc3RlcC5zdGF0cyA9IG1vZHVsZS5fZ2V0U3RhdHMobWV0aG9kTmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcC5zdGF0cyA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICBpZiAoZXJyICYmIGVyci50eXBlICYmIGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX1BBU1NFRCkge1xyXG4gICAgICAgICAgICAgICAgLy9pZ25vcmVcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgZXJyLnR5cGUgJiYgKGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIHx8IGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVBQSVVNX1NFU1NJT05fVElNRU9VVCkpIHtcclxuICAgICAgICAgICAgICAgIC8vaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwLmZhaWx1cmUgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICBzdGVwLmZhaWx1cmUubG9jYXRpb24gPSBsb2NhdGlvbjtcclxuICAgICAgICAgICAgICAgIC8vIGxldCB0aGUgbW9kdWxlIGRlY2lkZSB3aGV0aGVyIGEgc2NyZWVuc2hvdCBzaG91bGQgYmUgdGFrZW4gb24gZXJyb3Igb3Igbm90XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUuX3Rha2VTY3JlZW5zaG90U2lsZW50ID09PSAnZnVuY3Rpb24nICYmICF0aGlzLm9wdHMuZGlzYWJsZVNjcmVlbnNob3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwLnNjcmVlbnNob3QgPSBtb2R1bGUuX3Rha2VTY3JlZW5zaG90U2lsZW50KG1ldGhvZE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSB1bmFibGUgdG8gZ2V0IGEgc2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gd2FpdCBmb3IgYSBtb21lbnQgKGluIFBlcmZlY3RvIENsb3VkLCB0aGUgc2NyZWVuc2hvdCBtaWdodCBub3QgYmUgaW1taWRpYXRlbHkgYXZhaWxhYmxlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWFzeW5jLnNsZWVwKDEwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudChtZXRob2ROYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGluZGljYXRlIHRvIHVzZXIgdGhhdCBhbiBhdHRlbXB0IHRvIHRha2UgYSBzY3JlZW5zaG90IGhhcyBmYWlsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RlcDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZGlzcG9zZVNlcnZpY2VzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlcyB8fCB0eXBlb2YgdGhpcy5zZXJ2aWNlcyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlc1trZXldO1xyXG4gICAgICAgICAgICBpZiAoc2VydmljZS5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZpY2UuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgc2VydmljZSBkaXNwb3NhbCBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGlzcG9zZSBzZXJ2aWNlICcke2tleX0nOmAsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9kaXNwb3NlTW9kdWxlcyhzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZHVsZXMgfHwgdHlwZW9mIHRoaXMubW9kdWxlcyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IHRoaXMubW9kdWxlc1trZXldO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1vZC5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3Bvc2VSZXN1bHQgPSBtb2QuZGlzcG9zZShzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXNwb3NlUmVzdWx0ICYmIHR5cGVvZiBkaXNwb3NlUmVzdWx0LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvYmFibHkgYSBwcm9taXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGRpc3Bvc2VSZXN1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBtb2R1bGUgZGlzcG9zYWwgZXJyb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkaXNwb3NlIG1vZHVsZSAnJHtrZXl9JzogYCwgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvKlxyXG4gICAgICogU2VydmljZXMgRXZlbnQgRW1pdHRlcnNcclxuICAgICAqL1xyXG4gICAgX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkKG1vZHVsZSkge1xyXG4gICAgICAgIGZvciAobGV0IHNlcnZpY2VOYW1lIGluIHRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNbc2VydmljZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlLm9uTW9kdWxlTG9hZGVkKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlTG9hZGVkXCIgbWV0aG9kIG9mICR7c2VydmljZU5hbWV9IHNlcnZpY2UuYCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBfY2FsbFNlcnZpY2VzT25Nb2R1bGVJbml0aWFsaXplZChtb2R1bGUpIHtcclxuICAgICAgICBmb3IgKGxldCBzZXJ2aWNlTmFtZSBpbiB0aGlzLnNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2VydmljZS5vbk1vZHVsZUluaXRpYWxpemVkKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlSW5pdGlhbGl6ZWRcIiBtZXRob2Qgb2YgJHtzZXJ2aWNlTmFtZX0gc2VydmljZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9jYWxsU2VydmljZXNPbk1vZHVsZVdpbGxEaXNwb3NlKG1vZHVsZSkge1xyXG4gICAgICAgIGlmICghdGhpcyB8fCAhdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHNlcnZpY2VOYW1lIGluIHRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNbc2VydmljZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZS5vbk1vZHVsZVdpbGxEaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZS5vbk1vZHVsZVdpbGxEaXNwb3NlKG1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlV2lsbERpc3Bvc2VcIiBtZXRob2Qgb2YgJHtzZXJ2aWNlTmFtZX0gc2VydmljZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIF9wb3B1bGF0ZVBhcmFtZXRlcnNWYWx1ZShhcmdzKSB7XHJcbiAgICAgICAgaWYgKCFhcmdzIHx8ICFBcnJheS5pc0FycmF5KGFyZ3MpIHx8IGFyZ3MubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IF9uZXdBcmdzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYXJnIG9mIGFyZ3MpIHtcclxuICAgICAgICAgICAgX25ld0FyZ3MucHVzaCh0aGlzLl9yZXBsYWNlUGFyYW1ldGVySW5Bcmd1bWVudChhcmcpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9uZXdBcmdzO1xyXG4gICAgfVxyXG4gICAgX3JlcGxhY2VQYXJhbWV0ZXJJbkFyZ3VtZW50KGFyZykge1xyXG4gICAgICAgIGlmIChhcmcgJiYgdHlwZW9mIGFyZy5nZXREZWNyeXB0UmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnRU5DUllQVEVEJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYXJnIHx8IHR5cGVvZiBhcmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHJlcGxhY2UgdXNlciBwYXJhbWV0ZXJzIHdpdGggdmFsdWVzXHJcbiAgICAgICAgLy8gbm90ZTogdXNlciBwYXJhbWV0ZXIgd2l0aCB0aGUgc2FtZSBuYW1lIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBlbnZpcm9ubWVudCB2YXJpYWJsZVxyXG4gICAgICAgIGZvciAobGV0IHBhcmFtTmFtZSBpbiB0aGlzLmN0eC5wYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3R4LnBhcmFtcy5oYXNPd25Qcm9wZXJ0eShwYXJhbU5hbWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbVZhbHVlID0gdGhpcy5jdHgucGFyYW1zW3BhcmFtTmFtZV07XHJcbiAgICAgICAgICAgICAgICBhcmcgPSBhcmcucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcJHsnICsgcGFyYW1OYW1lICsgJ30nLCAnZycpLCBwYXJhbVZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZXBsYWNlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIHZhbHVlc1xyXG4gICAgICAgIGZvciAobGV0IGVudk5hbWUgaW4gdGhpcy5jdHguZW52KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN0eC5lbnYuaGFzT3duUHJvcGVydHkoZW52TmFtZSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVudlZhbHVlID0gdGhpcy5jdHguZW52W2Vudk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXCR7JyArIGVudk5hbWUgKyAnfScsICdnJyksIGVudlZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgfVxyXG4gICAgX2dldEFsbFByb3BlcnR5TmFtZXMoIG9iaiApIHtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IFtdO1xyXG5cclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKCBvYmogKS5mb3JFYWNoKGZ1bmN0aW9uICggcHJvcCApIHtcclxuICAgICAgICAgICAgICAgIGlmICggcHJvcHMuaW5kZXhPZiggcHJvcCApID09PSAtMSApIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5wdXNoKCBwcm9wICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cclxuICAgICAgICB9IHdoaWxlICggb2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKCBvYmogKSApO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICB9XHJcblxyXG4gICAgX2NoZWNrU3RlcFJlc3VsdChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBpZiAodGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fY2hlY2tTdGVwUmVzdWx0KHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF93YWl0U3RlcFJlc3VsdCgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1N0ZXBSZXN1bHQocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0RGVjcnlwdGVkQXJnc0ZvckFwcGx5KGFyZ3MsIG1vZHVsZU5hbWUpIHtcclxuICAgICAgICBpZiAoIWFyZ3MgfHwgIUFycmF5LmlzQXJyYXkoYXJncykgfHwgYXJncy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJncztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgX25ld0FyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBhcmcgb2YgYXJncykge1xyXG4gICAgICAgICAgICBfbmV3QXJncy5wdXNoKHRoaXMuX2RlY3J5cHRQYXJhbWV0ZXJGb3JBcHBseUluQXJndW1lbnQoYXJnLCBtb2R1bGVOYW1lKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfbmV3QXJncztcclxuICAgIH1cclxuXHJcbiAgICBfZGVjcnlwdFBhcmFtZXRlckZvckFwcGx5SW5Bcmd1bWVudChhcmcsIG1vZHVsZU5hbWUpIHtcclxuICAgICAgICBpZiAoYXJnICYmIHR5cGVvZiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gJ2xvZycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnRU5DUllQVEVEJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -373,6 +373,8 @@ class OxygenRunner extends _events.EventEmitter {
|
|
|
373
373
|
}
|
|
374
374
|
|
|
375
375
|
const reRunOnFailure = this._options.reRunOnFailed || false;
|
|
376
|
+
const maxReruns = this._options.reRunCount || MAX_RERUNS;
|
|
377
|
+
const reRunDelay = this._options.reRunDelay;
|
|
376
378
|
const suiteIterations = [];
|
|
377
379
|
|
|
378
380
|
for (let suiteIteration = 1; suiteIteration <= suite.iterationCount; suiteIteration++) {
|
|
@@ -417,7 +419,7 @@ class OxygenRunner extends _events.EventEmitter {
|
|
|
417
419
|
await this._reporter.onCaseStart(this._id, suite.uri || suite.id, caze.uri || caze.id || caze.path, caze);
|
|
418
420
|
let caseResult;
|
|
419
421
|
|
|
420
|
-
for (let reRunCount = 0; reRunCount <
|
|
422
|
+
for (let reRunCount = 0; reRunCount < maxReruns; reRunCount++) {
|
|
421
423
|
caseResult = await this._runCase(suite, caze, suiteIteration, caseIteration, reRunCount);
|
|
422
424
|
|
|
423
425
|
if ((!caseResult || caseResult.status === _status.default.FAILED) && !reRunOnFailure) {
|
|
@@ -425,6 +427,10 @@ class OxygenRunner extends _events.EventEmitter {
|
|
|
425
427
|
} else if (caseResult && caseResult.status !== _status.default.FAILED) {
|
|
426
428
|
break;
|
|
427
429
|
}
|
|
430
|
+
|
|
431
|
+
if (reRunDelay && reRunCount < maxReruns - 1) {
|
|
432
|
+
await _util.default.sleep(reRunDelay);
|
|
433
|
+
}
|
|
428
434
|
}
|
|
429
435
|
|
|
430
436
|
await this._reporter.onCaseEnd(this._id, suite.uri || suite.id, caze.uri || caze.id, caseResult);
|
|
@@ -883,4 +889,4 @@ class OxygenRunner extends _events.EventEmitter {
|
|
|
883
889
|
}
|
|
884
890
|
|
|
885
891
|
exports.default = OxygenRunner;
|
|
886
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi9pbmRleC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJERUZBVUxUX0lTU1VFUiIsIk1BWF9SRVJVTlMiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImdldFN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVzIiwicmV0dmFsIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwibWFwIiwic3VpdGUiLCJjYXNlcyIsImNhemUiLCJicmVha3BvaW50cyIsImJyZWFrcG9pbnQiLCJwdXNoIiwicmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXMiLCJyZW1vdmVCcmVha3BvaW50IiwiaWR4IiwiZmlsZSIsImxpbmUiLCJzcGxpY2UiLCJPeHlnZW5SdW5uZXIiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJfaWQiLCJveHV0aWwiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwiX2lzUnVubmluZyIsIl9pc0luaXRpYWxpemluZyIsIl9pc0Rpc3Bvc2luZyIsIl93b3JrZXIiLCJfZGVidWdNb2RlIiwiX3dvcmtlclByb2NMYXN0RXJyb3IiLCJfbnBtR1Jvb3RFeGVjdXRpb24iLCJucG1HUm9vdEV4ZWN1dGlvbiIsIl9zdWl0ZSIsIl9lbnZWYXJzIiwiX3ZhcnMiLCJfY2FwcyIsIl9tb2RDYXBzIiwiX2F0dHJpYnV0ZXMiLCJfb3B0aW9ucyIsIl9sb2NhbFRpbWUiLCJfdGVzdEtpbGxlZCIsIl9zY3JpcHRDb250ZW50TGluZU9mZnNldCIsIl93aGVuRGlzcG9zZWQiLCJnZXRJZCIsImluaXQiLCJjYXBzIiwicmVwb3J0ZXIiLCJFcnJvciIsIl9jd2QiLCJjd2QiLCJwcm9jZXNzIiwiX3JlcG9ydGVyIiwiX2lzSW5pdGlhbGl6ZWQiLCJvcHRFbnYiLCJlbnYiLCJlbnZzIiwiT2JqZWN0Iiwia2V5cyIsImVudlZhcnMiLCJfZW52IiwidGVzdEF0dHJpYnV0ZXMiLCJfc3VpdGVzIiwiZGVidWdQb3J0SWRlIiwiZGVidWdQb3J0IiwiX2RlYnVnUG9ydCIsInNjcmlwdENvbnRlbnRMaW5lT2Zmc2V0IiwibG9jYWxUaW1lIiwiX3N0YXJ0V29ya2VyUHJvY2VzcyIsIl93b3JrZXJfSW5pdE94eWdlbiIsImRpc3Bvc2UiLCJzdGF0dXMiLCJzdG9wRGVidWdnZXIiLCJpc1J1bm5pbmciLCJzdG9wIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwiX3Jlc2V0R2xvYmFsVmFyaWFibGVzIiwicnVuIiwib25SdW5uZXJTdGFydCIsImVycm9yIiwicmVzdWx0IiwiX3J1blRlc3QiLCJmYWlsdXJlIiwib25SdW5uZXJFbmQiLCJraWxsIiwiZGVidWdDb250aW51ZSIsImRlYnVnZ2VyIiwiY29udGludWUiLCJ1cGRhdGVCcmVha3BvaW50cyIsImZpbGVQYXRoIiwic2V0QnJlYWtwb2ludHNBY3RpdmUiLCJwcm9taXNlcyIsInRzQnJlYWtwb2ludHMiLCJnZXRCcmVha3BvaW50cyIsInN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVCcCIsImluY2x1ZGVzIiwiYWN0dWFsQ3VycmVudEJwIiwicmVtb3ZlQnJlYWtwb2ludEJ5VmFsdWUiLCJ1c2VyU2V0QnAiLCJzZXRCcmVha3BvaW50IiwicHJvbWlzZUFsbFByb21pc2UiLCJhbGwiLCJ0aGVuIiwidmFsdWUiLCJkZWJ1ZyIsImJyZWFrcG9pbnRzQWZlck1hbmlwdWxhdGlvbnMiLCJyZXBsQ2xvc2UiLCJfc2VuZCIsImV2ZW50IiwibmFtZSIsInJlcGxTZW5kIiwiY21kIiwiY29udGVudCIsInJlcGxTdGFydCIsImludm9rZSIsImNsZWFyQnJlYWtwb2ludCIsIlRlc3RSZXN1bHQiLCJzdGFydFRpbWUiLCJnZXRUaW1lU3RhbXAiLCJTdGF0dXMiLCJQQVNTRUQiLCJfd29ya2VyX2NhbGxCZWZvcmVUZXN0SG9vayIsInN1aXRlUmVzdWx0IiwiX3J1blN1aXRlIiwiZW5kVGltZSIsImR1cmF0aW9uIiwiaGFzRmFpbGVkU3VpdGVzIiwic29tZSIsInN1aXRlSXRlcmF0aW9ucyIsIngiLCJGQUlMRUQiLCJlbnZpcm9ubWVudCIsImNhcGFiaWxpdGllcyIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl93b3JrZXJfY2FsbEFmdGVyVGVzdEhvb2siLCJwYXRoIiwiaXRlcmF0aW9uQ291bnQiLCJzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMiLCJyZVJ1bk9uRmFpbHVyZSIsInJlUnVuT25GYWlsZWQiLCJzdWl0ZUl0ZXJhdGlvbiIsIm9uSXRlcmF0aW9uU3RhcnQiLCJUZXN0U3VpdGVSZXN1bHQiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJpdGVyYXRpb25OdW0iLCJfd29ya2VyX2NhbGxCZWZvcmVTdWl0ZUhvb2siLCJvblN1aXRlU3RhcnQiLCJ1cmkiLCJjYXNlSXRlcmF0aW9uIiwic2hvd0Nhc2VJdGVyYXRpb25zTWVzc2FnZXMiLCJvbkNhc2VTdGFydCIsImlkIiwiY2FzZVJlc3VsdCIsInJlUnVuQ291bnQiLCJfcnVuQ2FzZSIsIm9uQ2FzZUVuZCIsIm9uSXRlcmF0aW9uRW5kIiwiV0FSTklORyIsIl93b3JrZXJfY2FsbEFmdGVyU3VpdGVIb29rIiwib25TdWl0ZUVuZCIsInBhcmFtcyIsInJlUnVuIiwicGFyYW1NYW5hZ2VyIiwicmVhZFByZXYiLCJfIiwiZXh0ZW5kIiwiZ2V0VmFsdWVzIiwiaSIsIl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rIiwiVGVzdENhc2VSZXN1bHQiLCJsb2NhdGlvbiIsInJlYWROZXh0IiwiX3dvcmtlcl9zdGFydFNlc3Npb24iLCJyZXN1bHRTdG9yZSIsImNvbnRleHQiLCJtb2R1bGVDYXBzIiwiX3dvcmtlcl9SdW4iLCJfcHJvY2Vzc1Rlc3RSZXN1bHRzIiwic3RlcHMiLCJsb2dzIiwiaGFyIiwiYXR0cmlidXRlcyIsImF0dGFjaG1lbnRzIiwiZmFpbGVkU3RlcHMiLCJmaW5kIiwid2FybmluZ1N0ZXBzIiwiaXNFbXB0eSIsIm1ha2VUcmFuc2FjdGlvbkZhaWxlZElmU3RlcEZhaWxlZCIsIl93b3JrZXJfY2FsbEFmdGVyQ2FzZUhvb2siLCJkaXNwb3NlT3h5Z2VuTW9kdWxlcyIsImF1dG9EaXNwb3NlIiwiX3dvcmtlcl9lbmRTZXNzaW9uIiwiX3doZW5UZXN0Q2FzZUZpbmlzaGVkIiwicmVqZWN0Iiwic2NyaXB0TmFtZSIsInNjcmlwdFBhdGgiLCJ2YXJzIiwidGVzdCIsImNhc2UiLCJpdGVyYXRpb24iLCJwb0ZpbGUiLCJwbyIsImluaXRPeHlnZW4iLCJzdGFydFNlc3Npb24iLCJkaXNwb3NlTW9kdWxlcyIsImVuZFNlc3Npb24iLCJpbnZva2VUZXN0SG9vayIsIm9uTG9nRW50cnkiLCJ3b3JrZXJQYXRoIiwiam9pbiIsIl9fZGlybmFtZSIsIldvcmtlclByb2Nlc3MiLCJzdGFydCIsIl9ob29rV29ya2VyRXZlbnRzIiwic3RhcnREZWJ1Z2dlciIsIl9ob29rV29ya2VyRGVidWdnZXJFdmVudHMiLCJfdGhpcyIsInN1YnNjcmliZSIsIl9oYW5kbGVCZWZvcmVDb21tYW5kIiwiYmluZCIsIl9oYW5kbGVBZnRlckNvbW1hbmQiLCJvbiIsInBheWxvYWQiLCJleGl0RG9uZSIsImVtaXQiLCJleGl0Q29kZSIsInByb21pc2UiLCJPeHlnZW5FcnJvciIsImVycm9yQ29kZSIsIlNDUklQVF9FUlJPUiIsIm1zZyIsImxldmVsIiwiaW5mbyIsImVyciIsInRpbWUiLCJzcmMiLCJzdGFjayIsIm1ldGhvZCIsImJyZWFrcG9pbnREYXRhIiwiYnJlYWtFcnJvciIsIm9uU3RlcFN0YXJ0IiwibW9kdWxlIiwib25TdGVwRW5kIiwiX2VtaXRJdGVyYXRpb25FbmQiLCJ0cyIsInRjIiwic3VpdGVJdGVyYXRpb25OdW0iLCJjYXNlSXRlcmF0aW9uTnVtIiwiY2FzZUl0ZXJhdGlvblJlc3VsdCIsIl9zdGF0dXMiLCJfZW1pdFRlc3RFbmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQVVBOztBQUtBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztB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InNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3IgKi9cclxuLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uLy4uL2xpYi9sb2dnZXInO1xyXG5jb25zdCBsb2cgPSBsb2dnZXIoJ094eWdlblJ1bm5lcicpO1xyXG5jb25zdCBERUZBVUxUX0lTU1VFUiA9ICd1c2VyJztcclxuY29uc3QgTUFYX1JFUlVOUyA9IDI7XHJcblxyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xyXG5pbXBvcnQgXyAgZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcblxyXG5pbXBvcnQgVGVzdFN1aXRlUmVzdWx0IGZyb20gJy4uLy4uL21vZGVsL3N1aXRlLXJlc3VsdCc7XHJcbmltcG9ydCBUZXN0Q2FzZVJlc3VsdCBmcm9tICcuLi8uLi9tb2RlbC9jYXNlLXJlc3VsdCc7XHJcbmltcG9ydCBUZXN0UmVzdWx0IGZyb20gJy4uLy4uL21vZGVsL3Rlc3QtcmVzdWx0JztcclxuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi8uLi9tb2RlbC9zdGF0dXMnO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uLy4uL2xpYi91dGlsJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uLy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3h5Z2VuRXJyb3IgZnJvbSAnLi4vLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IFBhcmFtZXRlck1hbmFnZXIgZnJvbSAnLi4vLi4vbGliL3BhcmFtLW1hbmFnZXIuanMnO1xyXG5pbXBvcnQgV29ya2VyUHJvY2VzcyBmcm9tICcuLi9Xb3JrZXJQcm9jZXNzJztcclxuXHJcbi8vIHNub296ZSBmdW5jdGlvbiAtIGFzeW5jIHdyYXBwZXIgYXJvdW5kIHNldFRpbWVvdXQgZnVuY3Rpb25cclxuY29uc3Qgc25vb3plID0gbXMgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XHJcblxyXG5jb25zdCBnZXRTdWl0ZXNCcmVha3BvaW50cyA9IChzdWl0ZXMpID0+IHtcclxuICAgIGNvbnN0IHJldHZhbCA9IFtdO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgICBzdWl0ZXMgJiZcclxuICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlcykgJiZcclxuICAgICAgICBzdWl0ZXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgc3VpdGUgJiZcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzICYmXHJcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlLmNhc2VzKSAmJlxyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzLm1hcCgoY2F6ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY2F6ZS5icmVha3BvaW50cykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMubWFwKChicmVha3BvaW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwucHVzaChicmVha3BvaW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0dmFsO1xyXG59O1xyXG5cclxuY29uc3QgcmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXMgPSAoc3VpdGVzLCByZW1vdmVCcmVha3BvaW50KSA9PiB7XHJcbiAgICBpZiAoXHJcbiAgICAgICAgc3VpdGVzICYmXHJcbiAgICAgICAgQXJyYXkuaXNBcnJheShzdWl0ZXMpICYmXHJcbiAgICAgICAgc3VpdGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICAgIHN1aXRlcy5tYXAoKHN1aXRlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHN1aXRlICYmXHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcyAmJlxyXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShzdWl0ZS5jYXNlcykgJiZcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcy5tYXAoKGNhemUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGNhemUuYnJlYWtwb2ludHMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLm1hcCgoYnJlYWtwb2ludCwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5maWxlID09PSByZW1vdmVCcmVha3BvaW50LmZpbGUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50LmxpbmUgPT09IHJlbW92ZUJyZWFrcG9pbnQubGluZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE94eWdlblJ1bm5lciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICAvLyBjbGFzcyB2YXJpYWJsZXNcclxuICAgICAgICB0aGlzLl9pZCA9IG94dXRpbC5nZW5lcmF0ZVVuaXF1ZUlkKCk7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXppbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0Rpc3Bvc2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyUHJvY0xhc3RFcnJvciA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuX25wbUdSb290RXhlY3V0aW9uID0gdHJ1ZTtcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5ucG1HUm9vdEV4ZWN1dGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24gPSBvcHRpb25zLm5wbUdSb290RXhlY3V0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZGVmaW5lIHZhcmlhYmxlcyB0byBpdGVyYXRlIHRocm91Z2ggdGVzdCBjYXNlcyBhbmQgdGVzdCBzdWl0ZSBpdGVyYXRpb25zXHJcbiAgICAgICAgdGhpcy5fc3VpdGU7XHJcbiAgICAgICAgdGhpcy5fZW52VmFycyA9IHt9OyAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGVzIHBhc3NlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXN0XHJcbiAgICAgICAgdGhpcy5fdmFycyA9IHt9OyAgICAgLy8gdXNlci1kZWZpbmVkIHZhcmlhYmxlcyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBkaWZmZXJlbnQgc2NyaXB0c1xyXG4gICAgICAgIHRoaXMuX2NhcHMgPSB7fTsgLy8gZGVzaXJlZCBjYXBhYmlsaXRpZXMgdGhhdCBhcmUgcGFzc2VkIHRvIGVhY2ggbW9kdWxlXHJcbiAgICAgICAgdGhpcy5fbW9kQ2FwcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSB7fTtcclxuICAgICAgICB0aGlzLl9vcHRpb25zID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9sb2NhbFRpbWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90ZXN0S2lsbGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fc2NyaXB0Q29udGVudExpbmVPZmZzZXQgPSAzO1xyXG4gICAgICAgIC8vIHByb21pc2VzXHJcbiAgICAgICAgdGhpcy5fd2hlbkRpc3Bvc2VkID0gZGVmZXIoKTtcclxuICAgIH1cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAqIFB1YmxpYyBtZXRob2RzXHJcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4gICAgZ2V0SWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQob3B0aW9ucywgY2FwcyA9IHt9LCByZXBvcnRlcikge1xyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSBhdCBsZWFzdCBvbmUgdGVzdCBzdWl0ZSBpcyBkZWZpbmVkXHJcbiAgICAgICAgaWYgKCFvcHRpb25zLnN1aXRlcykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luaXRpYWxpemF0aW9uIGZhaWxlZCAtIG5vIHRlc3Qgc3VpdGVzIGFyZSBkZWZpbmVkLiBZb3UgbXVzdCBkZWZpbmUgXCJzdWl0ZXNcIiBwcm9wZXJ0eSBpbiBPeHlnZW4gb3B0aW9ucy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgICAgIHRoaXMuX2N3ZCA9IHRoaXMuX29wdGlvbnMuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZXIgPSByZXBvcnRlcjtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgICAgICAvLyBtZXJnZSBjdXJyZW50IGFuZCB0ZXN0IGNvbmZpZ3VyYXRpb24gYmFzZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGxldCBvcHRFbnYgPSB7fTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW52KSB7XHJcbiAgICAgICAgICAgICAgICAvLyAnZW52JyBvcHRpb24gbWlnaHQgYmUgZGVmaW5lZCBlaXRoZXIgYXMgYSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCBvciBhcyBhbiBvYmplY3QgdGhhdCBsaXN0cyBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzXHJcbiAgICAgICAgICAgICAgICAvLyBpZiAnZW52JyBpcyBhIHN0cmluZywgdGhlbiByZXNvbHZlIHRoZSBhY3R1YWwgdmFyaWFibGVzIGZyb20gJ2VudnMnIG9iamVjdFxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmVudiA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG9wdGlvbnMuZW52cyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucy5lbnZzW29wdGlvbnMuZW52XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdEVudiA9IG9wdGlvbnMuZW52c1tvcHRpb25zLmVudl07XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWYgJ2VudicgaXMgYW4gb2JqZWN0LCB1c2UgdGhlIHZhcmlhYmxlcyBkZWZpbmVkIGluIGl0XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5lbnYgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuZW52KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdEVudiA9IG9wdGlvbnMuZW52O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbnZWYXJzICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuZW52VmFycykpIHtcclxuICAgICAgICAgICAgICAgIG9wdEVudiA9IHsgLi4ub3B0RW52LCAuLi5vcHRpb25zLmVudlZhcnMgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgICAgICAgIHRoaXMuX2VudiA9IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2VudixcclxuICAgICAgICAgICAgICAgIC4uLm9wdEVudlxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzID0gb3B0aW9ucy50ZXN0QXR0cmlidXRlcyB8fCB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NhcHMgPSB7IC4uLmNhcHMgfTsgLy8gYXNzaWduIGNhcHMgZm9yIGxhdGVyIHVzZVxyXG4gICAgICAgIHRoaXMuX3N1aXRlcyA9IFsgLi4ub3B0aW9ucy5zdWl0ZXMgXTtcclxuICAgICAgICAvLyBzZXQgdXAgZGVidWdnaW5nIG9wdGlvbnNcclxuICAgICAgICAvLyBUT0RPOiB0aGlzIG5lZWRzIHRvIGJlIHJlaW1wbGVtZW50ZWQuIEV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBkZWJ1Z2dpbmcgKGluaXRpYWxpemVEZWJ1Z2dlcikgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBPeHlnZW5cclxuICAgICAgICAvLyBhbmQgYWRkZWQgdG8gSURFIGluc3RlYWQuIEkuZS4gdGhlIG9ubHkgdGhpbmcgb3h5Z2VuIHNob3VsZCBkbyBpcyB0byBsYXVuY2ggdGhlIGNoaWxkIHByb2Nlc3Mgd2l0aCB0aGUgZGVidWdnaW5nIHN3aXRjaC5cclxuICAgICAgICB0aGlzLl9kZWJ1Z01vZGUgPSAgb3B0aW9ucy5kZWJ1Z1BvcnRJZGUgfHwgb3B0aW9ucy5kZWJ1Z1BvcnQgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fZGVidWdQb3J0ID0gb3B0aW9ucy5kZWJ1Z1BvcnQgfHwgb3B0aW9ucy5kZWJ1Z1BvcnRJZGUgfHwgbnVsbDtcclxuICAgICAgICBvcHRpb25zLnNjcmlwdENvbnRlbnRMaW5lT2Zmc2V0ID0gdGhpcy5fc2NyaXB0Q29udGVudExpbmVPZmZzZXQ7XHJcbiAgICAgICAgdGhpcy5fbG9jYWxUaW1lID0gKHRoaXMuX29wdGlvbnMgJiYgdGhpcy5fb3B0aW9ucy5sb2NhbFRpbWUpIHx8IHRoaXMuX2xvY2FsVGltZTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9zdGFydFdvcmtlclByb2Nlc3MoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfSW5pdE94eWdlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX2lzRGlzcG9zaW5nID0gdHJ1ZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZXIgJiYgYXdhaXQgdGhpcy5fd29ya2VyLnN0b3BEZWJ1Z2dlcigpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pc1J1bm5pbmcpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5zdG9wKHN0YXR1cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciB3aGVuIGRpc3Bvc2luZyBSdW5uZXInLCBlKTtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9ycyBkdXJpbmcgdGhlIGRpc3Bvc2VcclxuICAgICAgICAgICAgbG9nLndhcm4oJ0Vycm9yIHdoZW4gZGlzcG9zaW5nIFJ1bm5lcjonLCBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdDQU5DRUxFRCcpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzZXRHbG9iYWxWYXJpYWJsZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcnVuKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemluZykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbml0aWFsaXphdGlvbiBoYXNuJ3QgYmVlbiBjb21wbGV0ZWQgeWV0LCB3YWl0IGZvciAnaW5pdGlhbGl6ZWQnIGV2ZW50XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5faXNSdW5uaW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlByZXZpb3VzIHRlc3QgaXMgc3RpbGwgcnVubmluZywgd2FpdCBmb3IgJ3Rlc3QtZW5kZWQnIGV2ZW50XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vblJ1bm5lclN0YXJ0KHRoaXMuX2lkLCB0aGlzLl9vcHRpb25zLCB0aGlzLl9jYXBzKTtcclxuXHJcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLl9ydW5UZXN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZXJyb3IgJiYgcmVzdWx0ICYmIHJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gcmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vblJ1bm5lckVuZCh0aGlzLl9pZCwgcmVzdWx0LCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGtpbGwoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pc1J1bm5pbmcpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmtpbGwoc3RhdHVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVidWdDb250aW51ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlcikge1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIuY29udGludWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMsIGZpbGVQYXRoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKGZhbHNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNub296ZSg1MDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudXBkYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMsIGZpbGVQYXRoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHRzQnJlYWtwb2ludHMgPSB0aGlzLl93b3JrZXIuZGVidWdnZXIuZ2V0QnJlYWtwb2ludHMoZmlsZVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VpdGVzQnJlYWtwb2ludHMgPSBnZXRTdWl0ZXNCcmVha3BvaW50cyh0aGlzLl9zdWl0ZXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBicmVha3BvaW50cyBmcm9tIHN1aXRlcy9jYXNlcyB0cmVlXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBzdWl0ZUJwIG9mIHN1aXRlc0JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFicmVha3BvaW50cy5pbmNsdWRlcyhzdWl0ZUJwLmxpbmUpICYmICBmaWxlUGF0aCA9PT0gc3VpdGVCcC5maWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUJyZWFrcG9pbnRGcm9tU3VpdGVzKHRoaXMuX3N1aXRlcywgc3VpdGVCcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBkZWxldGVkIGJyZWFrcG9pbnRzXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhY3R1YWxDdXJyZW50QnAgb2YgdHNCcmVha3BvaW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYnJlYWtwb2ludHMuaW5jbHVkZXMoYWN0dWFsQ3VycmVudEJwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50QnlWYWx1ZShmaWxlUGF0aCwgYWN0dWFsQ3VycmVudEJwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGFkZCBuZXcgYnJlYWtwb2ludHNcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHVzZXJTZXRCcCBvZiBicmVha3BvaW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdHNCcmVha3BvaW50cy5pbmNsdWRlcyh1c2VyU2V0QnApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnQoZmlsZVBhdGgsIHVzZXJTZXRCcCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZUFsbFByb21pc2UgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUodHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgYXdhaXQgc25vb3plKDUwMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKCd1cGRhdGVCcmVha3BvaW50cygpIGRvbmUuJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgYnJlYWtwb2ludHNBZmVyTWFuaXB1bGF0aW9ucyA9IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5nZXRCcmVha3BvaW50cyhmaWxlUGF0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcHJvbWlzZUFsbFByb21pc2UgOiBwcm9taXNlQWxsUHJvbWlzZSwgYnJlYWtwb2ludHNBZmVyTWFuaXB1bGF0aW9ucyA6IGJyZWFrcG9pbnRzQWZlck1hbmlwdWxhdGlvbnMgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ0RlYnVnZ2VyIGVycm9yJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlcGxDbG9zZSgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuX3NlbmQoe1xyXG4gICAgICAgICAgICBldmVudDogJ3JlcGwnLFxyXG4gICAgICAgICAgICBuYW1lOiAncmVwbF9zdG9wJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlcGxTZW5kKGNtZCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5fc2VuZCh7XHJcbiAgICAgICAgICAgIGV2ZW50OiAncmVwbCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdyZXBsX2V2YWwnLFxyXG4gICAgICAgICAgICBjb250ZW50OiB7XHJcbiAgICAgICAgICAgICAgICBjbWQ6IGNtZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVwbFN0YXJ0KCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5pbnZva2UoJ3JlcGxTdGFydCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJyZWFrcG9pbnQobGluZSkge1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgaWYgKHRoaXMuZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIgJiYgdGhpcy5fc3VpdGUgJiYgdGhpcy5fc3VpdGUudGVzdGNhc2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRjID0gdGhpcy5fc3VpdGUudGVzdGNhc2VzW3RjaW5kZXhdO1xyXG4gICAgICAgICAgICBsb2cuZGVidWcoJ294eWdlbi5zZXRCcmVha3BvaW50OiAnICsgKGxpbmUgKyB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCkpO1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludCh0Yy5uYW1lLCBsaW5lICsgdGhpcy5fc2NyaXB0Q29udGVudExpbmVPZmZzZXQpO1xyXG4gICAgICAgIH0qL1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQnJlYWtwb2ludChsaW5lKSB7XHJcbiAgICAgICAgLypcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlcikge1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIuY2xlYXJCcmVha3BvaW50KGxpbmUgKyB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCwgbnVsbCk7XHJcbiAgICAgICAgfSovXHJcbiAgICB9XHJcblxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICogUHJpdmF0ZSBtZXRob2RzXHJcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICAgIGFzeW5jIF9ydW5UZXN0KCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBUZXN0UmVzdWx0KCk7XHJcbiAgICAgICAgcmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICByZXN1bHQuc3RhdHVzID0gU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICByZXN1bHQuc3VpdGVzID0gW107XHJcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICAvLyBjYWxsIGJlZm9yZVRlc3QgaG9va1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQmVmb3JlVGVzdEhvb2soKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBpdGVyYXRlIHRocm91Z2ggc3VpdGVzXHJcbiAgICAgICAgICAgIGZvciAobGV0IHN1aXRlIG9mIHRoaXMuX3N1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VpdGVSZXN1bHQgPSBhd2FpdCB0aGlzLl9ydW5TdWl0ZShzdWl0ZSk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuc3VpdGVzLnB1c2goc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgcmVzdWx0LmR1cmF0aW9uID0gcmVzdWx0LmVuZFRpbWUgLSByZXN1bHQuc3RhcnRUaW1lO1xyXG5cclxuICAgICAgICBjb25zdCBoYXNGYWlsZWRTdWl0ZXMgPSByZXN1bHQuc3VpdGVzLnNvbWUoc3VpdGVJdGVyYXRpb25zID0+IHtcclxuICAgICAgICAgICAgaWYgKHN1aXRlSXRlcmF0aW9ucyAmJiBBcnJheS5pc0FycmF5KHN1aXRlSXRlcmF0aW9ucykgJiYgc3VpdGVJdGVyYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdWl0ZUl0ZXJhdGlvbnMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXN1bHQuc3RhdHVzID0gaGFzRmFpbGVkU3VpdGVzID8gU3RhdHVzLkZBSUxFRCA6IFN0YXR1cy5QQVNTRUQ7XHJcbiAgICAgICAgcmVzdWx0LmVudmlyb25tZW50ID0geyAuLi50aGlzLl9lbnYgfTtcclxuICAgICAgICAvLyBjb21iaW5lIHRlc3QgZGVmaW5lZCBjYXBzIGFuZCBwZXIgbW9kdWxlIGNhcGFiaWxpdGllcywgdGhhdCB3ZXJlIHBhc3NlZCBieSB1c2VyIGluIGVhY2ggbW9kdWxlJ3MgaW5pdCBmdW5jdGlvblxyXG4gICAgICAgIHJlc3VsdC5jYXBhYmlsaXRpZXMgPSB7IC4uLnRoaXMuX2NhcHMsIC4uLnRoaXMuX21vZENhcHMgfTsgICAgLy8gYXNzaWduIGEgY29weSBvZiBfY2FwcyBvYmplY3RcclxuICAgICAgICByZXN1bHQub3B0aW9ucyA9IHsgLi4udGhpcy5fb3B0aW9ucyB9OyAgLy8gYXNzaWduIGEgY29weSBvZiBfb3B0aW9ucyBvYmplY3RcclxuXHJcbiAgICAgICAgLy8gaWYgZXJyb3Igb2NjdXJlZCwgYWRkIGl0IHRvIHRoZSBzdW1tYXJ5XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEFmdGVyVGVzdEhvb2socmVzdWx0KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9ydW5TdWl0ZShzdWl0ZSkge1xyXG4gICAgICAgIGlmICghc3VpdGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdzdWl0ZSBpcyBudWxsIGluIF9ydW5TdWl0ZSgpISEhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlnbm9yZSBzdWl0ZSB3aXRoIG1pc3NpbmcgbWFuZGF0b3J5IHByb3BlcnRpZXNcclxuICAgICAgICBpZiAoIXN1aXRlLm5hbWUgJiYgIXN1aXRlLnBhdGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gYWx3YXlzIHNwZWNpZnkgc3VpdGUuaXRlcmF0aW9uQ291bnRcclxuICAgICAgICBpZiAoIXN1aXRlLml0ZXJhdGlvbkNvdW50KSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHNob3dTdWl0ZUl0ZXJhdGlvbnNNZXNzYWdlcyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChzdWl0ZS5pdGVyYXRpb25Db3VudCA+IDEpIHtcclxuICAgICAgICAgICAgc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlUnVuT25GYWlsdXJlID0gdGhpcy5fb3B0aW9ucy5yZVJ1bk9uRmFpbGVkIHx8IGZhbHNlO1xyXG4gICAgICAgIC8vIHNpbmdsZSBzdWl0ZSBtaWdodCBwcm9kdWNlIG11bHRpcGxlIHJlc3VsdHMsIGJhc2VkIG9uIGFtb3VudCBvZiBkZWZpbmVkIGl0ZXJhdGlvbnNcclxuICAgICAgICBjb25zdCBzdWl0ZUl0ZXJhdGlvbnMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBzdWl0ZUl0ZXJhdGlvbj0xOyBzdWl0ZUl0ZXJhdGlvbiA8PSBzdWl0ZS5pdGVyYXRpb25Db3VudDsgc3VpdGVJdGVyYXRpb24rKykge1xyXG4gICAgICAgICAgICBpZiAoc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vbkl0ZXJhdGlvblN0YXJ0KHRoaXMuX2lkLCBzdWl0ZUl0ZXJhdGlvbiwgJ1N1aXRlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc3VpdGVSZXN1bHQgPSBuZXcgVGVzdFN1aXRlUmVzdWx0KCk7XHJcbiAgICAgICAgICAgIHN1aXRlSXRlcmF0aW9ucy5wdXNoKHN1aXRlUmVzdWx0KTtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQubmFtZSA9IHN1aXRlLm5hbWUgfHwgb3h1dGlsLmdldEZpbGVOYW1lV2l0aG91dEV4dChzdWl0ZS5wYXRoKTtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5pdGVyYXRpb25OdW0gPSBzdWl0ZUl0ZXJhdGlvbjtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxCZWZvcmVTdWl0ZUhvb2soc3VpdGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vblN1aXRlU3RhcnQodGhpcy5faWQsIHN1aXRlLnVyaSwgc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjYXplIG9mIHN1aXRlLmNhc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgY2FzZXMgd2l0aCBtaXNzaW5nIG1hbmRhdG9yeSAncGF0aCcgcHJvcGVydHkgXHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhemUucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjYXplLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXplLm5hbWUgPSBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhemUucGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhemUuaXRlcmF0aW9uQ291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXplLml0ZXJhdGlvbkNvdW50ID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNhc2VJdGVyYXRpb249MTsgY2FzZUl0ZXJhdGlvbiA8PSBjYXplLml0ZXJhdGlvbkNvdW50OyBjYXNlSXRlcmF0aW9uKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhemUgJiYgY2F6ZS5pdGVyYXRpb25Db3VudCAmJiBjYXplLml0ZXJhdGlvbkNvdW50ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vbkl0ZXJhdGlvblN0YXJ0KHRoaXMuX2lkLCBjYXNlSXRlcmF0aW9uLCAnQ2FzZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyByZXBvcnQgY2FzZSBzdGFydCBldmVudFxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uQ2FzZVN0YXJ0KHRoaXMuX2lkLCBzdWl0ZS51cmkgfHwgc3VpdGUuaWQsIGNhemUudXJpIHx8IGNhemUuaWQgfHwgY2F6ZS5wYXRoLCBjYXplKTtcclxuICAgICAgICAgICAgICAgICAgICAvL2xldCByZVJ1bkNvdW50ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2FzZVJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAvLyBydW4gb3IgcmUtcnVuIHRoZSBjdXJyZW50IHRlc3QgY2FzZVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHJlUnVuQ291bnQgPSAwOyByZVJ1bkNvdW50IDwgTUFYX1JFUlVOUzsgcmVSdW5Db3VudCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2VSZXN1bHQgPSBhd2FpdCB0aGlzLl9ydW5DYXNlKHN1aXRlLCBjYXplLCBzdWl0ZUl0ZXJhdGlvbiwgY2FzZUl0ZXJhdGlvbiwgcmVSdW5Db3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIWNhc2VSZXN1bHQgfHwgY2FzZVJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpICYmICFyZVJ1bk9uRmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FzZVJlc3VsdCAmJiBjYXNlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwb3J0IGNhc2UgZW5kIGV2ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25DYXNlRW5kKHRoaXMuX2lkLCBzdWl0ZS51cmkgfHwgc3VpdGUuaWQsIGNhemUudXJpIHx8IGNhemUuaWQsIGNhc2VSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vbkl0ZXJhdGlvbkVuZCh0aGlzLl9pZCwgY2FzZVJlc3VsdCwgJ0Nhc2UnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGNhc2UgcmVzdWx0IHRvIHRoZSBzdWl0ZSByZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICBzdWl0ZVJlc3VsdC5jYXNlcy5wdXNoKGNhc2VSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRlc3QgY2FzZSBpdGVyYXRpb24gaGFzIGZhaWxlZCwgdGhlbiBtYXJrIHRoZSBlbnRpcmUgdGVzdCBjYXNlIGFzIGZhaWxlZCwgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RvcCBpdGVyYXRpbmcgb3ZlciBpdCBhbmQgbW92ZSB0byB0aGUgbmV4dCB0ZXN0IGNhc2VcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FzZVJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FzZVJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5XQVJOSU5HO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5kdXJhdGlvbiA9IHN1aXRlUmVzdWx0LmVuZFRpbWUgLSBzdWl0ZVJlc3VsdC5zdGFydFRpbWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vbkl0ZXJhdGlvbkVuZCh0aGlzLl9pZCwgc3VpdGVSZXN1bHQsICdTdWl0ZScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEFmdGVyU3VpdGVIb29rKHN1aXRlLCBzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyLm9uU3VpdGVFbmQodGhpcy5faWQsIHN1aXRlLnVyaSwgc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VpdGVJdGVyYXRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9ydW5DYXNlKHN1aXRlLCBjYXplLCBzdWl0ZUl0ZXJhdGlvbiwgY2FzZUl0ZXJhdGlvbiwgcmVSdW5Db3VudCA9IDApIHtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcclxuICAgICAgICBjb25zdCByZVJ1biA9IHJlUnVuQ291bnQgPiAwO1xyXG4gICAgICAgIC8vIGdldCB0ZXN0IHN1aXRlJ3MgcGFyYW1ldGVycyBpZiBkZWZpbmVkXHJcbiAgICAgICAgLy8gZ2V0IHRoZW0gZmlyc3QgYW5kIHRoZW4gb3ZlcnJpZGUgd2l0aCB0ZXN0IGNhc2UgbGV2ZWwgcGFyYW1ldGVycyBpZiBkZWZpbmVkXHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICBpZiAocmVSdW4pIHtcclxuICAgICAgICAgICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlci5yZWFkUHJldigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF8uZXh0ZW5kKHBhcmFtcywgc3VpdGUucGFyYW1NYW5hZ2VyLmdldFZhbHVlcygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVhZCB0ZXN0IGNhc2UncyBuZXh0IGxpbmVzIG9mIHBhcmFtZXRlcnMgaWYgcGFyYW1ldGVyIG1hbmFnZXIgaXMgZGVmaW5lZFxyXG4gICAgICAgIGlmIChjYXplLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICBpZiAocmVSdW4pIHtcclxuICAgICAgICAgICAgICAgIGNhemUucGFyYW1NYW5hZ2VyLnJlYWRQcmV2KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXy5leHRlbmQocGFyYW1zLCBjYXplLnBhcmFtTWFuYWdlci5nZXRWYWx1ZXMoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGQgYnJlYWtwb2ludHMgYmVmb3JlIHJ1bm5pbmcgdGhlIHNjcmlwdCBpZiBpbiBkZWJ1ZyBtb2RlXHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIGNhemUuYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBlZGl0b3IgaW5kZXggc3RhcnRzIGZyb20gMSwgYnV0IHdlIG5lZWQgemVybyBiYXNlZCBpbmRleFxyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmUgPSBjYXplLmJyZWFrcG9pbnRzW2ldLmxpbmU7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IGNhemUuYnJlYWtwb2ludHNbaV0uZmlsZTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludChmaWxlLCBsaW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rKGNhemUpO1xyXG4gICAgICAgIGNvbnN0IGNhc2VSZXN1bHQgPSBuZXcgVGVzdENhc2VSZXN1bHQoKTtcclxuICAgICAgICBjYXNlUmVzdWx0Lm5hbWUgPSBjYXplLm5hbWU7XHJcbiAgICAgICAgY2FzZVJlc3VsdC5sb2NhdGlvbiA9IGNhemUucGF0aDtcclxuICAgICAgICBjYXNlUmVzdWx0Lml0ZXJhdGlvbk51bSA9IGNhc2VJdGVyYXRpb247XHJcbiAgICAgICAgY2FzZVJlc3VsdC5yZVJ1bkNvdW50ID0gcmVSdW5Db3VudDtcclxuXHJcbiAgICAgICAgLy8gdHJ5IHRvIGluaXRpYWxpemUgT3h5Z2VuIGFuZCBoYW5kbGUgYW55IHBvc3NpYmxlIGVycm9yXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKCEodGhpcy5fd29ya2VyKSAmJiB0aGlzLl93b3JrZXJfSW5pdE94eWdlbigpKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl93b3JrZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdfd29ya2VyX0luaXRPeHlnZW4oKSB0aHJvd24gYW4gZXJyb3I6JywgZSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhcnRUaW1lID0gY2FzZVJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmR1cmF0aW9uID0gMDtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICAgICAgc3VpdGUucGFyYW1NYW5hZ2VyLnJlYWROZXh0KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjYXplLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICAgICAgY2F6ZS5wYXJhbU1hbmFnZXIucmVhZE5leHQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNhc2VSZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0YXJ0IG5ldyB0ZXN0IHNlc3Npb25cclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfc3RhcnRTZXNzaW9uKCk7XHJcbiAgICAgICAgLy8gcnVuIHRoZSB0ZXN0IGluIHRoZSB3b3JrZXIgcHJvY2VzcyBhbmQgaGFuZGxlIGFueSBwb3NzaWJsZSBlcnJvclxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBjb25zdCB7IHJlc3VsdFN0b3JlLCBjb250ZXh0LCBtb2R1bGVDYXBzLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fd29ya2VyX1J1bihzdWl0ZSwgY2F6ZSwgc3VpdGVJdGVyYXRpb24sIGNhc2VJdGVyYXRpb24sIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NUZXN0UmVzdWx0cyh7IHJlc3VsdFN0b3JlLCBjb250ZXh0LCBlcnJvciwgbW9kdWxlQ2FwcyB9KTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmR1cmF0aW9uID0gY2FzZVJlc3VsdC5lbmRUaW1lIC0gY2FzZVJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RlcHMgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5zdGVwcyA/IHJlc3VsdFN0b3JlLnN0ZXBzIDogW107XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQubG9ncyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmxvZ3MgPyByZXN1bHRTdG9yZS5sb2dzIDogW107XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuaGFyID0gcmVzdWx0U3RvcmUgJiYgcmVzdWx0U3RvcmUuaGFyID8gcmVzdWx0U3RvcmUuaGFyIDogbnVsbDtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC50ZXN0QXR0cmlidXRlcyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmF0dHJpYnV0ZXMgPyByZXN1bHRTdG9yZS5hdHRyaWJ1dGVzIDogbnVsbDtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5hdHRhY2htZW50cyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzID8gcmVzdWx0U3RvcmUuYXR0YWNobWVudHMgOiBudWxsO1xyXG5cclxuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRlc3QgY2FzZSBpdGVyYXRpb24gc3RhdHVzIC0gbWFyayBpdCBhcyBmYWlsZWQgaWYgYW55IHN0ZXAgaGFzIGZhaWxlZFxyXG4gICAgICAgICAgICB2YXIgZmFpbGVkU3RlcHMgPSBfLmZpbmQoY2FzZVJlc3VsdC5zdGVwcywge3N0YXR1czogU3RhdHVzLkZBSUxFRH0pO1xyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN0ZXBzIHdpdGggV2FybmluZyBzdGF0dXNcclxuICAgICAgICAgICAgdmFyIHdhcm5pbmdTdGVwcyA9IF8uZmluZChjYXNlUmVzdWx0LnN0ZXBzLCB7c3RhdHVzOiBTdGF0dXMuV0FSTklOR30pO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IF8uaXNFbXB0eShmYWlsZWRTdGVwcykgJiYgIWVycm9yID8gU3RhdHVzLlBBU1NFRCA6IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3I7XHJcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LnN0ZXBzID0gb3h1dGlsLm1ha2VUcmFuc2FjdGlvbkZhaWxlZElmU3RlcEZhaWxlZChjYXNlUmVzdWx0LnN0ZXBzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghXy5pc0VtcHR5KHdhcm5pbmdTdGVwcykpIHtcclxuICAgICAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxBZnRlckNhc2VIb29rKGNhemUsIGNhc2VSZXN1bHQpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdfd29ya2VyX1J1bigpIHRocm93biBhbiBlcnJvcjonLCBlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGlzcG9zZU94eWdlbk1vZHVsZXMgPSB0eXBlb2YgdGhpcy5fb3B0aW9ucy5hdXRvRGlzcG9zZSAhPT0gJ2Jvb2xlYW4nIHx8IHRoaXMuX29wdGlvbnMuYXV0b0Rpc3Bvc2UgPT09IHRydWU7XHJcbiAgICAgICAgLy8gZW5kIHNlc3Npb24gYW5kIGRpc3Bvc2UgT3h5Z2VuIG1vZHVsZXMgaWYgcmVxdWlyZWRcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfZW5kU2Vzc2lvbihjYXNlUmVzdWx0LnN0YXR1cywgZGlzcG9zZU94eWdlbk1vZHVsZXMpO1xyXG5cclxuICAgICAgICBpZiAoc3VpdGUucGFyYW1NYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhemUucGFyYW1NYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIGNhemUucGFyYW1NYW5hZ2VyLnJlYWROZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FzZVJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX1J1bihzdWl0ZSwgY2F6ZSwgc3VpdGVJdGVyYXRpb24sIGNhc2VJdGVyYXRpb24sIHBhcmFtcykge1xyXG4gICAgICAgIGlmICghdGhpcy5fd29ya2VyKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignX3dvcmtlciBpcyBudWxsIGJ1dCBub3Qgc3VwcG9zZSB0byEnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93aGVuVGVzdENhc2VGaW5pc2hlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd2hlblRlc3RDYXNlRmluaXNoZWQucmVqZWN0KG5ldyBFcnJvcignX3dvcmtlciBpcyBudWxsJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc3RhcnQgcnVubmluZyB0aGUgdGVzdFxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl93b3JrZXIucnVuKHtcclxuICAgICAgICAgICAgc2NyaXB0TmFtZTogY2F6ZS5uYW1lLFxyXG4gICAgICAgICAgICBzY3JpcHRQYXRoOiBjYXplLnBhdGgsXHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgZW52OiB0aGlzLl9lbnYsXHJcbiAgICAgICAgICAgICAgICBjYXBzOiB0aGlzLl9jYXBzLFxyXG4gICAgICAgICAgICAgICAgdmFyczogdGhpcy5fdmFycyxcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRoaXMuX2F0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICB0ZXN0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjYXplLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogY2FzZUl0ZXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3VpdGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogc3VpdGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBzdWl0ZUl0ZXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcG9GaWxlOiB0aGlzLl9vcHRpb25zLnBvIHx8IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9Jbml0T3h5Z2VuKCkge1xyXG4gICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmluaXRPeHlnZW4odGhpcy5faWQsIHRoaXMuX29wdGlvbnMsIHRoaXMuX2NhcHMpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX3N0YXJ0U2Vzc2lvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5zdGFydFNlc3Npb24pIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0YXJ0U2Vzc2lvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX2VuZFNlc3Npb24oc3RhdHVzID0gbnVsbCwgZGlzcG9zZU1vZHVsZXMgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZW5kU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZW5kU2Vzc2lvbihzdGF0dXMsIGRpc3Bvc2VNb2R1bGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlVGVzdEhvb2soKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVUZXN0JywgW3RoaXMuX2lkLCB0aGlzLl9vcHRpb25zLCB0aGlzLl9jYXBzXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImJlZm9yZVRlc3RcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImJlZm9yZVRlc3RcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlU3VpdGVIb29rKHN1aXRlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVTdWl0ZScsIFtzdWl0ZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVTdWl0ZVwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYmVmb3JlU3VpdGVcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlQ2FzZUhvb2soY2F6ZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVDYXNlJywgW2NhemVdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVDYXNlXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVDYXNlXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEFmdGVyVGVzdEhvb2socmVzdWx0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyVGVzdCcsIFt0aGlzLl9pZCwgcmVzdWx0XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJUZXN0XCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlclRlc3RcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQWZ0ZXJTdWl0ZUhvb2soc3VpdGUsIHJlc3VsdCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdhZnRlclN1aXRlJywgW3N1aXRlLCByZXN1bHRdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJhZnRlclN1aXRlXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlclN1aXRlXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEFmdGVyQ2FzZUhvb2soY2F6ZSwgcmVzdWx0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyQ2FzZScsIFtjYXplLCByZXN1bHRdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJhZnRlckNhc2VcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImFmdGVyQ2FzZVwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc3RhcnRXb3JrZXJQcm9jZXNzKCkge1xyXG4gICAgICAgIGNvbnN0IHdvcmtlclBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnd29ya2VyLmpzJyk7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyID0gbmV3IFdvcmtlclByb2Nlc3ModGhpcy5faWQsIHdvcmtlclBhdGgsIHRoaXMuX2RlYnVnTW9kZSwgdGhpcy5fZGVidWdQb3J0LCAnT3h5Z2VuJywgdGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5zdGFydCgpO1xyXG4gICAgICAgIHRoaXMuX2hvb2tXb3JrZXJFdmVudHMoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuc3RhcnREZWJ1Z2dlcigpO1xyXG4gICAgICAgIHRoaXMuX2hvb2tXb3JrZXJEZWJ1Z2dlckV2ZW50cygpO1xyXG4gICAgfVxyXG5cclxuICAgIF9ob29rV29ya2VyRXZlbnRzKCkge1xyXG4gICAgICAgIC8vIHByZXNlcnZlIHRoaXMgb2JqZWN0XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlci5zdWJzY3JpYmUoJ2NvbW1hbmQ6YmVmb3JlJywgdGhpcy5faGFuZGxlQmVmb3JlQ29tbWFuZC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl93b3JrZXIuc3Vic2NyaWJlKCdjb21tYW5kOmFmdGVyJywgdGhpcy5faGFuZGxlQWZ0ZXJDb21tYW5kLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlci5vbignZXJyb3InLCAocGF5bG9hZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IGVycm9yIH0gPSBwYXlsb2FkO1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1dvcmtlciBwcm9jZXNzIGVycm9yOiAnLCBlcnJvcik7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5leGl0RG9uZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCd0ZXN0LWVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3dvcmtlclByb2NMYXN0RXJyb3IgPSBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlci5vbignZXhpdCcsIChwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhpdERvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb25zdCB7IGV4aXRDb2RlIH0gPSBwYXlsb2FkO1xyXG5cclxuICAgICAgICAgICAgaWYgKGV4aXRDb2RlICYmIGV4aXRDb2RlICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdGVzdCBpcyBydW5uaW5nIG9yIGlzIGJlaW5nIGRpc3Bvc2VkIGFuZCB0aGUgY2hpbGQgcHJvY2VzcyBoYXMgZGllZCxcclxuICAgICAgICAgICAgICAgIC8vIHRoZW4gZW5kIHRoZSB0ZXN0IG9yIGRpc3Bvc2FsIHdpdGggZmF0YWwgZXJyb3JcclxuICAgICAgICAgICAgICAgIC8vIChjaGlsZCBwcm9jZXNzIG5vdCBzdXBwb3NlIHRvIGRpZSB3aXRoIGNvZGUgPiAwKVxyXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLl9pc0Rpc3Bvc2luZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBfdGhpcy5fd2hlbkRpc3Bvc2VkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoX3RoaXMuX2lzUnVubmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBfdGhpcy5fd2hlblRlc3RDYXNlRmluaXNoZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBfdGhpcy5fd29ya2VyUHJvY0xhc3RFcnJvciB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4aXRDb2RlID09IDEzNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IE94eWdlbkVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdPdXQgb2YgbWVtb3J5IGVycm9yLiBNYWtlIHN1cmUgdGhhdCB5b3UgZG9uXFwndCBoYXZlIGFueSBtZW1vcnkgbGVha3MgaW4gdGhlIHRlc3Qgc2NyaXB0LicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgT3h5Z2VuRXJyb3IoYFdvcmtlciBwcm9jZXNzIGV4aXRlZCB3aXRoIGNvZGU6ICR7ZXhpdENvZGV9LmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHByb21pc2UgJiYgcHJvbWlzZS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3Jlc2V0R2xvYmFsVmFyaWFibGVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl93b3JrZXIub24oJ21lc3NhZ2UnLCBhc3luYyAobXNnKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAnbG9nJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1zZy5sZXZlbCA9PT0gJ0RFQlVHJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1Zyhtc2cubXNnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmxldmVsID09PSAnSU5GTycpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhtc2cubXNnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmxldmVsID09PSAnRVJST1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKG1zZy5tc2csIG1zZy5lcnIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cubGV2ZWwgPT09ICdXQVJOJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKG1zZy5tc2cpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2xvZycsIG1zZy50aW1lLCBtc2cubGV2ZWwsIG1zZy5tc2csIG1zZy5zcmMgfHwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcG9ydGVyICYmIF90aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG1zZy50aW1lLCBtc2cubGV2ZWwsIG1zZy5tc2csIG1zZy5zcmMgfHwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICdsaW5lLXVwZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2xpbmUtdXBkYXRlJywgbXNnLmxpbmUsIG1zZy5zdGFjaywgbXNnLnRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICdyZXN1bHQtdXBkYXRlJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1zZy5tZXRob2QgPT09ICdpbml0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2luaXQtZG9uZScsIG1zZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobXNnLmV2ZW50ICYmIG1zZy5ldmVudCA9PT0gJ3dvcmtlckVycm9yJykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3dvcmtlckVycm9yOicsIG1zZyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRpc3Bvc2UoJ2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5raWxsKCdmYWlsZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAncmVwbCcpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ3JlcGwnLCBtc2cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hvb2tXb3JrZXJEZWJ1Z2dlckV2ZW50cygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3dvcmtlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIub24oJ2RlYnVnZ2VyOmJyZWFrJywgKGJyZWFrcG9pbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnYnJlYWtwb2ludCcsIGJyZWFrcG9pbnREYXRhKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5vbignZGVidWdnZXI6YnJlYWtFcnJvcicsIChicmVha0Vycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnYnJlYWtwb2ludEVycm9yJywgYnJlYWtFcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2hhbmRsZUJlZm9yZUNvbW1hbmQoZSkge1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uU3RlcFN0YXJ0KHRoaXMuX2lkLCBlKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGUgJiYgZS5tb2R1bGUgJiYgZS5tb2R1bGUgPT09ICdsb2cnKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVDb21tYW5kJywgW2VdKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImJlZm9yZUNvbW1hbmRcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImJlZm9yZUNvbW1hbmRcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2hhbmRsZUFmdGVyQ29tbWFuZChlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25TdGVwRW5kKHRoaXMuX2lkLCBlLnJlc3VsdCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGUgJiYgZS5tb2R1bGUgJiYgZS5tb2R1bGUgPT09ICdsb2cnKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdhZnRlckNvbW1hbmQnLCBbZS5yZXN1bHRdKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImFmdGVyQ29tbWFuZFwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYWZ0ZXJDb21tYW5kXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9yZXNldEdsb2JhbFZhcmlhYmxlcygpIHtcclxuICAgICAgICB0aGlzLl9tb2RDYXBzID0ge307XHJcbiAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0Rpc3Bvc2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fdGVzdEtpbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3doZW5EaXNwb3NlZCA9IGRlZmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Byb2Nlc3NUZXN0UmVzdWx0cyh7IHJlc3VsdFN0b3JlLCBtb2R1bGVDYXBzLCBjb250ZXh0ID0ge30sIGVycm9yID0gbnVsbCB9KSB7XHJcbiAgICAgICAgLy8gaWYgdGVzdCB3YXMga2lsbGVkIGJlZm9yZSBhbnkgcmVzdWx0cyB3ZXJlIGdlbmVyYXRlZCwgdGhlbiBqdXN0IGZpbmFsaXplIHRoZSB0ZXN0IHdpdGhvdXQgcHJvY2Vzc2luZyByZXN1bHRzXHJcbiAgICAgICAgaWYgKHRoaXMuX3Rlc3RLaWxsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3Rlc3QtZXJyb3InLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0b3JlICd2YXJzJyBwYXJ0IG9mIHRoZSBjb250ZXh0IGZvciBhIGxhdGVyIHVzZVxyXG4gICAgICAgIHRoaXMuX3ZhcnMgPSBjb250ZXh0LnZhcnMgfHwgdGhpcy5fdmFycztcclxuICAgICAgICAvLyBzdG9yZSAnbW9kQ2FwcycgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgYSBsYXRlciB1c2VcclxuICAgICAgICB0aGlzLl9tb2RDYXBzID0geyAuLi50aGlzLl9tb2RDYXBzLCAuLi5tb2R1bGVDYXBzIHx8IHt9IH07XHJcbiAgICAgICAgLy8gY2xlYW4gdXAgY29udGV4dCBmcm9tIGludGVybmFsIGVsZW1lbnRzLCBub3QgbmVlZCBpbiB0aGUgcmVwb3J0OlxyXG4gICAgICAgIC8vIHJlbW92ZSBjYXBzIGZyb20gdGhlIGNvbnRleHQgYXMgaXQgYWxyZWFkeSBhcHBlYXJzIGluIFRlc3RSZXN1bHQgbm9kZVxyXG4gICAgICAgIGlmIChjb250ZXh0LmNhcHMpXHJcbiAgICAgICAgICAgIGRlbGV0ZSBjb250ZXh0LmNhcHM7XHJcbiAgICAgICAgLy8gcmVtb3ZlIGVudiBmcm9tIHRoZSBjb250ZXh0IGFzIGl0IGFscmVhZHkgYXBwZWFycyBpbiBUZXN0UmVzdWx0IG5vZGVcclxuICAgICAgICBpZiAoY29udGV4dC5lbnYpXHJcbiAgICAgICAgICAgIGRlbGV0ZSBjb250ZXh0LmVudjtcclxuICAgICAgICAvLyByZW1vdmUgdGVzdCBmcm9tIHRoZSBjb250ZXh0IGFzIGl0IGFscmVhZHkgYXBwZWFycyBpbiBUZXN0UmVzdWx0IG5vZGVcclxuICAgICAgICBpZiAoY29udGV4dC50ZXN0KVxyXG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC50ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIF9lbWl0SXRlcmF0aW9uRW5kKHRzLCB0Yywgc3VpdGVJdGVyYXRpb25OdW0sIGNhc2VJdGVyYXRpb25OdW0sIGNhc2VJdGVyYXRpb25SZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmVtaXQoJ2l0ZXJhdGlvbi1lbmQnLCB7XHJcbiAgICAgICAgICAgIHN0YXR1czogY2FzZUl0ZXJhdGlvblJlc3VsdC5fc3RhdHVzLFxyXG4gICAgICAgICAgICBmYWlsdXJlOiBjYXNlSXRlcmF0aW9uUmVzdWx0LmZhaWx1cmUgfHwgbnVsbCxcclxuICAgICAgICAgICAgY2FzZToge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRjLmlkIHx8IG51bGwsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0Yy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBjYXNlSXRlcmF0aW9uTnVtLFxyXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uQ291bnQ6IHRjLml0ZXJhdGlvbkNvdW50XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN1aXRlOiB7XHJcbiAgICAgICAgICAgICAgICBpZDogdHMuaWQgfHwgbnVsbCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IHRzLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBpdGVyYXRpb246IHN1aXRlSXRlcmF0aW9uTnVtLFxyXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uQ291bnQ6IHRzLml0ZXJhdGlvbkNvdW50XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZW1pdFRlc3RFbmQocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCd0ZXN0LWVuZCcsIHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgeyBQYXJhbWV0ZXJNYW5hZ2VyIH07Il19
|
|
892
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi9pbmRleC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJERUZBVUxUX0lTU1VFUiIsIk1BWF9SRVJVTlMiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImdldFN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVzIiwicmV0dmFsIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwibWFwIiwic3VpdGUiLCJjYXNlcyIsImNhemUiLCJicmVha3BvaW50cyIsImJyZWFrcG9pbnQiLCJwdXNoIiwicmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXMiLCJyZW1vdmVCcmVha3BvaW50IiwiaWR4IiwiZmlsZSIsImxpbmUiLCJzcGxpY2UiLCJPeHlnZW5SdW5uZXIiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJfaWQiLCJveHV0aWwiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwiX2lzUnVubmluZyIsIl9pc0luaXRpYWxpemluZyIsIl9pc0Rpc3Bvc2luZyIsIl93b3JrZXIiLCJfZGVidWdNb2RlIiwiX3dvcmtlclByb2NMYXN0RXJyb3IiLCJfbnBtR1Jvb3RFeGVjdXRpb24iLCJucG1HUm9vdEV4ZWN1dGlvbiIsIl9zdWl0ZSIsIl9lbnZWYXJzIiwiX3ZhcnMiLCJfY2FwcyIsIl9tb2RDYXBzIiwiX2F0dHJpYnV0ZXMiLCJfb3B0aW9ucyIsIl9sb2NhbFRpbWUiLCJfdGVzdEtpbGxlZCIsIl9zY3JpcHRDb250ZW50TGluZU9mZnNldCIsIl93aGVuRGlzcG9zZWQiLCJnZXRJZCIsImluaXQiLCJjYXBzIiwicmVwb3J0ZXIiLCJFcnJvciIsIl9jd2QiLCJjd2QiLCJwcm9jZXNzIiwiX3JlcG9ydGVyIiwiX2lzSW5pdGlhbGl6ZWQiLCJvcHRFbnYiLCJlbnYiLCJlbnZzIiwiT2JqZWN0Iiwia2V5cyIsImVudlZhcnMiLCJfZW52IiwidGVzdEF0dHJpYnV0ZXMiLCJfc3VpdGVzIiwiZGVidWdQb3J0SWRlIiwiZGVidWdQb3J0IiwiX2RlYnVnUG9ydCIsInNjcmlwdENvbnRlbnRMaW5lT2Zmc2V0IiwibG9jYWxUaW1lIiwiX3N0YXJ0V29ya2VyUHJvY2VzcyIsIl93b3JrZXJfSW5pdE94eWdlbiIsImRpc3Bvc2UiLCJzdGF0dXMiLCJzdG9wRGVidWdnZXIiLCJpc1J1bm5pbmciLCJzdG9wIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwiX3Jlc2V0R2xvYmFsVmFyaWFibGVzIiwicnVuIiwib25SdW5uZXJTdGFydCIsImVycm9yIiwicmVzdWx0IiwiX3J1blRlc3QiLCJmYWlsdXJlIiwib25SdW5uZXJFbmQiLCJraWxsIiwiZGVidWdDb250aW51ZSIsImRlYnVnZ2VyIiwiY29udGludWUiLCJ1cGRhdGVCcmVha3BvaW50cyIsImZpbGVQYXRoIiwic2V0QnJlYWtwb2ludHNBY3RpdmUiLCJwcm9taXNlcyIsInRzQnJlYWtwb2ludHMiLCJnZXRCcmVha3BvaW50cyIsInN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVCcCIsImluY2x1ZGVzIiwiYWN0dWFsQ3VycmVudEJwIiwicmVtb3ZlQnJlYWtwb2ludEJ5VmFsdWUiLCJ1c2VyU2V0QnAiLCJzZXRCcmVha3BvaW50IiwicHJvbWlzZUFsbFByb21pc2UiLCJhbGwiLCJ0aGVuIiwidmFsdWUiLCJkZWJ1ZyIsImJyZWFrcG9pbnRzQWZlck1hbmlwdWxhdGlvbnMiLCJyZXBsQ2xvc2UiLCJfc2VuZCIsImV2ZW50IiwibmFtZSIsInJlcGxTZW5kIiwiY21kIiwiY29udGVudCIsInJlcGxTdGFydCIsImludm9rZSIsImNsZWFyQnJlYWtwb2ludCIsIlRlc3RSZXN1bHQiLCJzdGFydFRpbWUiLCJnZXRUaW1lU3RhbXAiLCJTdGF0dXMiLCJQQVNTRUQiLCJfd29ya2VyX2NhbGxCZWZvcmVUZXN0SG9vayIsInN1aXRlUmVzdWx0IiwiX3J1blN1aXRlIiwiZW5kVGltZSIsImR1cmF0aW9uIiwiaGFzRmFpbGVkU3VpdGVzIiwic29tZSIsInN1aXRlSXRlcmF0aW9ucyIsIngiLCJGQUlMRUQiLCJlbnZpcm9ubWVudCIsImNhcGFiaWxpdGllcyIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl93b3JrZXJfY2FsbEFmdGVyVGVzdEhvb2siLCJwYXRoIiwiaXRlcmF0aW9uQ291bnQiLCJzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMiLCJyZVJ1bk9uRmFpbHVyZSIsInJlUnVuT25GYWlsZWQiLCJtYXhSZXJ1bnMiLCJyZVJ1bkNvdW50IiwicmVSdW5EZWxheSIsInN1aXRlSXRlcmF0aW9uIiwib25JdGVyYXRpb25TdGFydCIsIlRlc3RTdWl0ZVJlc3VsdCIsImdldEZpbGVOYW1lV2l0aG91dEV4dCIsIml0ZXJhdGlvbk51bSIsIl93b3JrZXJfY2FsbEJlZm9yZVN1aXRlSG9vayIsIm9uU3VpdGVTdGFydCIsInVyaSIsImNhc2VJdGVyYXRpb24iLCJzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcyIsIm9uQ2FzZVN0YXJ0IiwiaWQiLCJjYXNlUmVzdWx0IiwiX3J1bkNhc2UiLCJzbGVlcCIsIm9uQ2FzZUVuZCIsIm9uSXRlcmF0aW9uRW5kIiwiV0FSTklORyIsIl93b3JrZXJfY2FsbEFmdGVyU3VpdGVIb29rIiwib25TdWl0ZUVuZCIsInBhcmFtcyIsInJlUnVuIiwicGFyYW1NYW5hZ2VyIiwicmVhZFByZXYiLCJfIiwiZXh0ZW5kIiwiZ2V0VmFsdWVzIiwiaSIsIl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rIiwiVGVzdENhc2VSZXN1bHQiLCJsb2NhdGlvbiIsInJlYWROZXh0IiwiX3dvcmtlcl9zdGFydFNlc3Npb24iLCJyZXN1bHRTdG9yZSIsImNvbnRleHQiLCJtb2R1bGVDYXBzIiwiX3dvcmtlcl9SdW4iLCJfcHJvY2Vzc1Rlc3RSZXN1bHRzIiwic3RlcHMiLCJsb2dzIiwiaGFyIiwiYXR0cmlidXRlcyIsImF0dGFjaG1lbnRzIiwiZmFpbGVkU3RlcHMiLCJmaW5kIiwid2FybmluZ1N0ZXBzIiwiaXNFbXB0eSIsIm1ha2VUcmFuc2FjdGlvbkZhaWxlZElmU3RlcEZhaWxlZCIsIl93b3JrZXJfY2FsbEFmdGVyQ2FzZUhvb2siLCJkaXNwb3NlT3h5Z2VuTW9kdWxlcyIsImF1dG9EaXNwb3NlIiwiX3dvcmtlcl9lbmRTZXNzaW9uIiwiX3doZW5UZXN0Q2FzZUZpbmlzaGVkIiwicmVqZWN0Iiwic2NyaXB0TmFtZSIsInNjcmlwdFBhdGgiLCJ2YXJzIiwidGVzdCIsImNhc2UiLCJpdGVyYXRpb24iLCJwb0ZpbGUiLCJwbyIsImluaXRPeHlnZW4iLCJzdGFydFNlc3Npb24iLCJkaXNwb3NlTW9kdWxlcyIsImVuZFNlc3Npb24iLCJpbnZva2VUZXN0SG9vayIsIm9uTG9nRW50cnkiLCJ3b3JrZXJQYXRoIiwiam9pbiIsIl9fZGlybmFtZSIsIldvcmtlclByb2Nlc3MiLCJzdGFydCIsIl9ob29rV29ya2VyRXZlbnRzIiwic3RhcnREZWJ1Z2dlciIsIl9ob29rV29ya2VyRGVidWdnZXJFdmVudHMiLCJfdGhpcyIsInN1YnNjcmliZSIsIl9oYW5kbGVCZWZvcmVDb21tYW5kIiwiYmluZCIsIl9oYW5kbGVBZnRlckNvbW1hbmQiLCJvbiIsInBheWxvYWQiLCJleGl0RG9uZSIsImVtaXQiLCJleGl0Q29kZSIsInByb21pc2UiLCJPeHlnZW5FcnJvciIsImVycm9yQ29kZSIsIlNDUklQVF9FUlJPUiIsIm1zZyIsImxldmVsIiwiaW5mbyIsImVyciIsInRpbWUiLCJzcmMiLCJzdGFjayIsIm1ldGhvZCIsImJyZWFrcG9pbnREYXRhIiwiYnJlYWtFcnJvciIsIm9uU3RlcFN0YXJ0IiwibW9kdWxlIiwib25TdGVwRW5kIiwiX2VtaXRJdGVyYXRpb25FbmQiLCJ0cyIsInRjIiwic3VpdGVJdGVyYXRpb25OdW0iLCJjYXNlSXRlcmF0aW9uTnVtIiwiY2FzZUl0ZXJhdGlvblJlc3VsdCIsIl9zdGF0dXMiLCJfZW1pdFRlc3RFbmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQVVBOztBQUtBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNB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QUM3RixFQUFILElBQVMsSUFEVjtBQUVIOUMsUUFBQUEsSUFBSSxFQUFFMkksRUFBRSxDQUFDM0ksSUFGTjtBQUdIOEYsUUFBQUEsU0FBUyxFQUFFK0MsaUJBSFI7QUFJSGpILFFBQUFBLGNBQWMsRUFBRStHLEVBQUUsQ0FBQy9HO0FBSmhCO0FBVGdCLEtBQTNCO0FBZ0JIOztBQUVEcUgsRUFBQUEsWUFBWSxDQUFDL0ssTUFBRCxFQUFTO0FBQ2pCLFNBQUtxSixJQUFMLENBQVUsVUFBVixFQUFzQnJKLE1BQXRCO0FBQ0g7O0FBbnlCa0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yICovXHJcbi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi8uLi9saWIvbG9nZ2VyJztcclxuY29uc3QgbG9nID0gbG9nZ2VyKCdPeHlnZW5SdW5uZXInKTtcclxuY29uc3QgREVGQVVMVF9JU1NVRVIgPSAndXNlcic7XHJcbmNvbnN0IE1BWF9SRVJVTlMgPSAyO1xyXG5cclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcclxuaW1wb3J0IF8gIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAnd2hlbic7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5cclxuaW1wb3J0IFRlc3RTdWl0ZVJlc3VsdCBmcm9tICcuLi8uLi9tb2RlbC9zdWl0ZS1yZXN1bHQnO1xyXG5pbXBvcnQgVGVzdENhc2VSZXN1bHQgZnJvbSAnLi4vLi4vbW9kZWwvY2FzZS1yZXN1bHQnO1xyXG5pbXBvcnQgVGVzdFJlc3VsdCBmcm9tICcuLi8uLi9tb2RlbC90ZXN0LXJlc3VsdCc7XHJcbmltcG9ydCBTdGF0dXMgZnJvbSAnLi4vLi4vbW9kZWwvc3RhdHVzJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi8uLi9saWIvdXRpbCc7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi8uLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IE94eWdlbkVycm9yIGZyb20gJy4uLy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBQYXJhbWV0ZXJNYW5hZ2VyIGZyb20gJy4uLy4uL2xpYi9wYXJhbS1tYW5hZ2VyLmpzJztcclxuaW1wb3J0IFdvcmtlclByb2Nlc3MgZnJvbSAnLi4vV29ya2VyUHJvY2Vzcyc7XHJcblxyXG4vLyBzbm9vemUgZnVuY3Rpb24gLSBhc3luYyB3cmFwcGVyIGFyb3VuZCBzZXRUaW1lb3V0IGZ1bmN0aW9uXHJcbmNvbnN0IHNub296ZSA9IG1zID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG5cclxuY29uc3QgZ2V0U3VpdGVzQnJlYWtwb2ludHMgPSAoc3VpdGVzKSA9PiB7XHJcbiAgICBjb25zdCByZXR2YWwgPSBbXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICAgc3VpdGVzICYmXHJcbiAgICAgICAgQXJyYXkuaXNBcnJheShzdWl0ZXMpICYmXHJcbiAgICAgICAgc3VpdGVzLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICAgIHN1aXRlcy5tYXAoKHN1aXRlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHN1aXRlICYmXHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcyAmJlxyXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShzdWl0ZS5jYXNlcykgJiZcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcy5tYXAoKGNhemUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGNhemUuYnJlYWtwb2ludHMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLm1hcCgoYnJlYWtwb2ludCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsLnB1c2goYnJlYWtwb2ludCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldHZhbDtcclxufTtcclxuXHJcbmNvbnN0IHJlbW92ZUJyZWFrcG9pbnRGcm9tU3VpdGVzID0gKHN1aXRlcywgcmVtb3ZlQnJlYWtwb2ludCkgPT4ge1xyXG4gICAgaWYgKFxyXG4gICAgICAgIHN1aXRlcyAmJlxyXG4gICAgICAgIEFycmF5LmlzQXJyYXkoc3VpdGVzKSAmJlxyXG4gICAgICAgIHN1aXRlcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgICBzdWl0ZXMubWFwKChzdWl0ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBzdWl0ZSAmJlxyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMgJiZcclxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoc3VpdGUuY2FzZXMpICYmXHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMubWFwKChjYXplKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShjYXplLmJyZWFrcG9pbnRzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5tYXAoKGJyZWFrcG9pbnQsIGlkeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQuZmlsZSA9PT0gcmVtb3ZlQnJlYWtwb2ludC5maWxlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5saW5lID09PSByZW1vdmVCcmVha3BvaW50LmxpbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPeHlnZW5SdW5uZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgLy8gY2xhc3MgdmFyaWFibGVzXHJcbiAgICAgICAgdGhpcy5faWQgPSBveHV0aWwuZ2VuZXJhdGVVbmlxdWVJZCgpO1xyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5faXNEaXNwb3NpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl93b3JrZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlclByb2NMYXN0RXJyb3IgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbiA9IHRydWU7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubnBtR1Jvb3RFeGVjdXRpb24gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25wbUdSb290RXhlY3V0aW9uID0gb3B0aW9ucy5ucG1HUm9vdEV4ZWN1dGlvbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGRlZmluZSB2YXJpYWJsZXMgdG8gaXRlcmF0ZSB0aHJvdWdoIHRlc3QgY2FzZXMgYW5kIHRlc3Qgc3VpdGUgaXRlcmF0aW9uc1xyXG4gICAgICAgIHRoaXMuX3N1aXRlO1xyXG4gICAgICAgIHRoaXMuX2VudlZhcnMgPSB7fTsgIC8vIGVudmlyb25tZW50IHZhcmlhYmxlcyBwYXNzZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGVzdFxyXG4gICAgICAgIHRoaXMuX3ZhcnMgPSB7fTsgICAgIC8vIHVzZXItZGVmaW5lZCB2YXJpYWJsZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gZGlmZmVyZW50IHNjcmlwdHNcclxuICAgICAgICB0aGlzLl9jYXBzID0ge307IC8vIGRlc2lyZWQgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIHBhc3NlZCB0byBlYWNoIG1vZHVsZVxyXG4gICAgICAgIHRoaXMuX21vZENhcHMgPSB7fTtcclxuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fbG9jYWxUaW1lID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fdGVzdEtpbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0ID0gMztcclxuICAgICAgICAvLyBwcm9taXNlc1xyXG4gICAgICAgIHRoaXMuX3doZW5EaXNwb3NlZCA9IGRlZmVyKCk7XHJcbiAgICB9XHJcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgKiBQdWJsaWMgbWV0aG9kc1xyXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICAgIGdldElkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0KG9wdGlvbnMsIGNhcHMgPSB7fSwgcmVwb3J0ZXIpIHtcclxuICAgICAgICAvLyBtYWtlIHN1cmUgYXQgbGVhc3Qgb25lIHRlc3Qgc3VpdGUgaXMgZGVmaW5lZFxyXG4gICAgICAgIGlmICghb3B0aW9ucy5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbml0aWFsaXphdGlvbiBmYWlsZWQgLSBubyB0ZXN0IHN1aXRlcyBhcmUgZGVmaW5lZC4gWW91IG11c3QgZGVmaW5lIFwic3VpdGVzXCIgcHJvcGVydHkgaW4gT3h5Z2VuIG9wdGlvbnMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICB0aGlzLl9jd2QgPSB0aGlzLl9vcHRpb25zLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyID0gcmVwb3J0ZXI7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgLy8gbWVyZ2UgY3VycmVudCBhbmQgdGVzdCBjb25maWd1cmF0aW9uIGJhc2VkIGVudmlyb25tZW50IHZhcmlhYmxlc1xyXG4gICAgICAgICAgICBsZXQgb3B0RW52ID0ge307XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmVudikge1xyXG4gICAgICAgICAgICAgICAgLy8gJ2Vudicgb3B0aW9uIG1pZ2h0IGJlIGRlZmluZWQgZWl0aGVyIGFzIGEgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgb3IgYXMgYW4gb2JqZWN0IHRoYXQgbGlzdHMgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlc1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgJ2VudicgaXMgYSBzdHJpbmcsIHRoZW4gcmVzb2x2ZSB0aGUgYWN0dWFsIHZhcmlhYmxlcyBmcm9tICdlbnZzJyBvYmplY3RcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5lbnYgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBvcHRpb25zLmVudnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMuZW52c1tvcHRpb25zLmVudl0pIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRFbnYgPSBvcHRpb25zLmVudnNbb3B0aW9ucy5lbnZdO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlmICdlbnYnIGlzIGFuIG9iamVjdCwgdXNlIHRoZSB2YXJpYWJsZXMgZGVmaW5lZCBpbiBpdFxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuZW52ID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhvcHRpb25zLmVudikpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRFbnYgPSBvcHRpb25zLmVudjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW52VmFycyAmJiBPYmplY3Qua2V5cyhvcHRpb25zLmVudlZhcnMpKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRFbnYgPSB7IC4uLm9wdEVudiwgLi4ub3B0aW9ucy5lbnZWYXJzIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGFzc2lnbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIGxhdGVyIHVzZVxyXG4gICAgICAgICAgICB0aGlzLl9lbnYgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9lbnYsXHJcbiAgICAgICAgICAgICAgICAuLi5vcHRFbnZcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5fYXR0cmlidXRlcyA9IG9wdGlvbnMudGVzdEF0dHJpYnV0ZXMgfHwge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9jYXBzID0geyAuLi5jYXBzIH07IC8vIGFzc2lnbiBjYXBzIGZvciBsYXRlciB1c2VcclxuICAgICAgICB0aGlzLl9zdWl0ZXMgPSBbIC4uLm9wdGlvbnMuc3VpdGVzIF07XHJcbiAgICAgICAgLy8gc2V0IHVwIGRlYnVnZ2luZyBvcHRpb25zXHJcbiAgICAgICAgLy8gVE9ETzogdGhpcyBuZWVkcyB0byBiZSByZWltcGxlbWVudGVkLiBFdmVyeXRoaW5nIHJlbGF0ZWQgdG8gZGVidWdnaW5nIChpbml0aWFsaXplRGVidWdnZXIpIHNob3VsZCBiZSByZW1vdmVkIGZyb20gT3h5Z2VuXHJcbiAgICAgICAgLy8gYW5kIGFkZGVkIHRvIElERSBpbnN0ZWFkLiBJLmUuIHRoZSBvbmx5IHRoaW5nIG94eWdlbiBzaG91bGQgZG8gaXMgdG8gbGF1bmNoIHRoZSBjaGlsZCBwcm9jZXNzIHdpdGggdGhlIGRlYnVnZ2luZyBzd2l0Y2guXHJcbiAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gIG9wdGlvbnMuZGVidWdQb3J0SWRlIHx8IG9wdGlvbnMuZGVidWdQb3J0ID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnUG9ydCA9IG9wdGlvbnMuZGVidWdQb3J0IHx8IG9wdGlvbnMuZGVidWdQb3J0SWRlIHx8IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5zY3JpcHRDb250ZW50TGluZU9mZnNldCA9IHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0O1xyXG4gICAgICAgIHRoaXMuX2xvY2FsVGltZSA9ICh0aGlzLl9vcHRpb25zICYmIHRoaXMuX29wdGlvbnMubG9jYWxUaW1lKSB8fCB0aGlzLl9sb2NhbFRpbWU7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fc3RhcnRXb3JrZXJQcm9jZXNzKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX0luaXRPeHlnZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLl9pc0Rpc3Bvc2luZyA9IHRydWU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5fd29ya2VyICYmIGF3YWl0IHRoaXMuX3dvcmtlci5zdG9wRGVidWdnZXIoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaXNSdW5uaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuc3RvcChzdGF0dXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3Igd2hlbiBkaXNwb3NpbmcgUnVubmVyJywgZSk7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnMgZHVyaW5nIHRoZSBkaXNwb3NlXHJcbiAgICAgICAgICAgIGxvZy53YXJuKCdFcnJvciB3aGVuIGRpc3Bvc2luZyBSdW5uZXI6JywgZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnQ0FOQ0VMRUQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0R2xvYmFsVmFyaWFibGVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJ1bigpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNJbml0aWFsaXppbmcpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5pdGlhbGl6YXRpb24gaGFzbid0IGJlZW4gY29tcGxldGVkIHlldCwgd2FpdCBmb3IgJ2luaXRpYWxpemVkJyBldmVudFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzUnVubmluZykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcmV2aW91cyB0ZXN0IGlzIHN0aWxsIHJ1bm5pbmcsIHdhaXQgZm9yICd0ZXN0LWVuZGVkJyBldmVudFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25SdW5uZXJTdGFydCh0aGlzLl9pZCwgdGhpcy5fb3B0aW9ucywgdGhpcy5fY2Fwcyk7XHJcblxyXG4gICAgICAgIGxldCBlcnJvciA9IG51bGw7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5fcnVuVGVzdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWVycm9yICYmIHJlc3VsdCAmJiByZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICBlcnJvciA9IHJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25SdW5uZXJFbmQodGhpcy5faWQsIHJlc3VsdCwgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBraWxsKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLl90ZXN0S2lsbGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaXNSdW5uaW5nKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5raWxsKHN0YXR1cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRlYnVnQ29udGludWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLmNvbnRpbnVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwZGF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzLCBmaWxlUGF0aCkge1xyXG4gICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBzbm9vemUoNTAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVwZGF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzLCBmaWxlUGF0aCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0c0JyZWFrcG9pbnRzID0gdGhpcy5fd29ya2VyLmRlYnVnZ2VyLmdldEJyZWFrcG9pbnRzKGZpbGVQYXRoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN1aXRlc0JyZWFrcG9pbnRzID0gZ2V0U3VpdGVzQnJlYWtwb2ludHModGhpcy5fc3VpdGVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgYnJlYWtwb2ludHMgZnJvbSBzdWl0ZXMvY2FzZXMgdHJlZVxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgc3VpdGVCcCBvZiBzdWl0ZXNCcmVha3BvaW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYnJlYWtwb2ludHMuaW5jbHVkZXMoc3VpdGVCcC5saW5lKSAmJiAgZmlsZVBhdGggPT09IHN1aXRlQnAuZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVCcmVha3BvaW50RnJvbVN1aXRlcyh0aGlzLl9zdWl0ZXMsIHN1aXRlQnApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgZGVsZXRlZCBicmVha3BvaW50c1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYWN0dWFsQ3VycmVudEJwIG9mIHRzQnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnRzLmluY2x1ZGVzKGFjdHVhbEN1cnJlbnRCcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl93b3JrZXIuZGVidWdnZXIucmVtb3ZlQnJlYWtwb2ludEJ5VmFsdWUoZmlsZVBhdGgsIGFjdHVhbEN1cnJlbnRCcCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBhZGQgbmV3IGJyZWFrcG9pbnRzXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB1c2VyU2V0QnAgb2YgYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRzQnJlYWtwb2ludHMuaW5jbHVkZXModXNlclNldEJwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50KGZpbGVQYXRoLCB1c2VyU2V0QnApKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2VBbGxQcm9taXNlID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIGF3YWl0IHNub296ZSg1MDApO1xyXG5cclxuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygndXBkYXRlQnJlYWtwb2ludHMoKSBkb25lLicpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGJyZWFrcG9pbnRzQWZlck1hbmlwdWxhdGlvbnMgPSB0aGlzLl93b3JrZXIuZGVidWdnZXIuZ2V0QnJlYWtwb2ludHMoZmlsZVBhdGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHByb21pc2VBbGxQcm9taXNlIDogcHJvbWlzZUFsbFByb21pc2UsIGJyZWFrcG9pbnRzQWZlck1hbmlwdWxhdGlvbnMgOiBicmVha3BvaW50c0FmZXJNYW5pcHVsYXRpb25zIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdEZWJ1Z2dlciBlcnJvcicsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZXBsQ2xvc2UoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLl9zZW5kKHtcclxuICAgICAgICAgICAgZXZlbnQ6ICdyZXBsJyxcclxuICAgICAgICAgICAgbmFtZTogJ3JlcGxfc3RvcCdcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZXBsU2VuZChjbWQpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuX3NlbmQoe1xyXG4gICAgICAgICAgICBldmVudDogJ3JlcGwnLFxyXG4gICAgICAgICAgICBuYW1lOiAncmVwbF9ldmFsJyxcclxuICAgICAgICAgICAgY29udGVudDoge1xyXG4gICAgICAgICAgICAgICAgY21kOiBjbWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlcGxTdGFydCgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuaW52b2tlKCdyZXBsU3RhcnQnKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRCcmVha3BvaW50KGxpbmUpIHtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGlmICh0aGlzLmRlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIHRoaXMuX3N1aXRlICYmIHRoaXMuX3N1aXRlLnRlc3RjYXNlcykge1xyXG4gICAgICAgICAgICBjb25zdCB0YyA9IHRoaXMuX3N1aXRlLnRlc3RjYXNlc1t0Y2luZGV4XTtcclxuICAgICAgICAgICAgbG9nLmRlYnVnKCdveHlnZW4uc2V0QnJlYWtwb2ludDogJyArIChsaW5lICsgdGhpcy5fc2NyaXB0Q29udGVudExpbmVPZmZzZXQpKTtcclxuICAgICAgICAgICAgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnQodGMubmFtZSwgbGluZSArIHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0KTtcclxuICAgICAgICB9Ki9cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckJyZWFrcG9pbnQobGluZSkge1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgaWYgKHRoaXMuZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLmNsZWFyQnJlYWtwb2ludChsaW5lICsgdGhpcy5fc2NyaXB0Q29udGVudExpbmVPZmZzZXQsIG51bGwpO1xyXG4gICAgICAgIH0qL1xyXG4gICAgfVxyXG5cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAqIFByaXZhdGUgbWV0aG9kc1xyXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcbiAgICBhc3luYyBfcnVuVGVzdCgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgVGVzdFJlc3VsdCgpO1xyXG4gICAgICAgIHJlc3VsdC5zdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5QQVNTRUQ7XHJcbiAgICAgICAgcmVzdWx0LnN1aXRlcyA9IFtdO1xyXG4gICAgICAgIGxldCBlcnJvciA9IG51bGw7XHJcbiAgICAgICAgLy8gY2FsbCBiZWZvcmVUZXN0IGhvb2tcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEJlZm9yZVRlc3RIb29rKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gaXRlcmF0ZSB0aHJvdWdoIHN1aXRlc1xyXG4gICAgICAgICAgICBmb3IgKGxldCBzdWl0ZSBvZiB0aGlzLl9zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN1aXRlUmVzdWx0ID0gYXdhaXQgdGhpcy5fcnVuU3VpdGUoc3VpdGUpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN1aXRlcy5wdXNoKHN1aXRlUmVzdWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHJlc3VsdC5kdXJhdGlvbiA9IHJlc3VsdC5lbmRUaW1lIC0gcmVzdWx0LnN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgY29uc3QgaGFzRmFpbGVkU3VpdGVzID0gcmVzdWx0LnN1aXRlcy5zb21lKHN1aXRlSXRlcmF0aW9ucyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdWl0ZUl0ZXJhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShzdWl0ZUl0ZXJhdGlvbnMpICYmIHN1aXRlSXRlcmF0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VpdGVJdGVyYXRpb25zLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmVzdWx0LnN0YXR1cyA9IGhhc0ZhaWxlZFN1aXRlcyA/IFN0YXR1cy5GQUlMRUQgOiBTdGF0dXMuUEFTU0VEO1xyXG4gICAgICAgIHJlc3VsdC5lbnZpcm9ubWVudCA9IHsgLi4udGhpcy5fZW52IH07XHJcbiAgICAgICAgLy8gY29tYmluZSB0ZXN0IGRlZmluZWQgY2FwcyBhbmQgcGVyIG1vZHVsZSBjYXBhYmlsaXRpZXMsIHRoYXQgd2VyZSBwYXNzZWQgYnkgdXNlciBpbiBlYWNoIG1vZHVsZSdzIGluaXQgZnVuY3Rpb25cclxuICAgICAgICByZXN1bHQuY2FwYWJpbGl0aWVzID0geyAuLi50aGlzLl9jYXBzLCAuLi50aGlzLl9tb2RDYXBzIH07ICAgIC8vIGFzc2lnbiBhIGNvcHkgb2YgX2NhcHMgb2JqZWN0XHJcbiAgICAgICAgcmVzdWx0Lm9wdGlvbnMgPSB7IC4uLnRoaXMuX29wdGlvbnMgfTsgIC8vIGFzc2lnbiBhIGNvcHkgb2YgX29wdGlvbnMgb2JqZWN0XHJcblxyXG4gICAgICAgIC8vIGlmIGVycm9yIG9jY3VyZWQsIGFkZCBpdCB0byB0aGUgc3VtbWFyeVxyXG4gICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICByZXN1bHQuZmFpbHVyZSA9IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxBZnRlclRlc3RIb29rKHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfcnVuU3VpdGUoc3VpdGUpIHtcclxuICAgICAgICBpZiAoIXN1aXRlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignc3VpdGUgaXMgbnVsbCBpbiBfcnVuU3VpdGUoKSEhIScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZ25vcmUgc3VpdGUgd2l0aCBtaXNzaW5nIG1hbmRhdG9yeSBwcm9wZXJ0aWVzXHJcbiAgICAgICAgaWYgKCFzdWl0ZS5uYW1lICYmICFzdWl0ZS5wYXRoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGFsd2F5cyBzcGVjaWZ5IHN1aXRlLml0ZXJhdGlvbkNvdW50XHJcbiAgICAgICAgaWYgKCFzdWl0ZS5pdGVyYXRpb25Db3VudCkge1xyXG4gICAgICAgICAgICBzdWl0ZS5pdGVyYXRpb25Db3VudCA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMgPSBmYWxzZTtcclxuICAgICAgICBpZiAoc3VpdGUuaXRlcmF0aW9uQ291bnQgPiAxKSB7XHJcbiAgICAgICAgICAgIHNob3dTdWl0ZUl0ZXJhdGlvbnNNZXNzYWdlcyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZVJ1bk9uRmFpbHVyZSA9IHRoaXMuX29wdGlvbnMucmVSdW5PbkZhaWxlZCB8fCBmYWxzZTtcclxuICAgICAgICBjb25zdCBtYXhSZXJ1bnMgPSB0aGlzLl9vcHRpb25zLnJlUnVuQ291bnQgfHwgTUFYX1JFUlVOUztcclxuICAgICAgICBjb25zdCByZVJ1bkRlbGF5ID0gdGhpcy5fb3B0aW9ucy5yZVJ1bkRlbGF5O1xyXG4gICAgICAgIC8vIHNpbmdsZSBzdWl0ZSBtaWdodCBwcm9kdWNlIG11bHRpcGxlIHJlc3VsdHMsIGJhc2VkIG9uIGFtb3VudCBvZiBkZWZpbmVkIGl0ZXJhdGlvbnNcclxuICAgICAgICBjb25zdCBzdWl0ZUl0ZXJhdGlvbnMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBzdWl0ZUl0ZXJhdGlvbj0xOyBzdWl0ZUl0ZXJhdGlvbiA8PSBzdWl0ZS5pdGVyYXRpb25Db3VudDsgc3VpdGVJdGVyYXRpb24rKykge1xyXG4gICAgICAgICAgICBpZiAoc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vbkl0ZXJhdGlvblN0YXJ0KHRoaXMuX2lkLCBzdWl0ZUl0ZXJhdGlvbiwgJ1N1aXRlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc3VpdGVSZXN1bHQgPSBuZXcgVGVzdFN1aXRlUmVzdWx0KCk7XHJcbiAgICAgICAgICAgIHN1aXRlSXRlcmF0aW9ucy5wdXNoKHN1aXRlUmVzdWx0KTtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQubmFtZSA9IHN1aXRlLm5hbWUgfHwgb3h1dGlsLmdldEZpbGVOYW1lV2l0aG91dEV4dChzdWl0ZS5wYXRoKTtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5pdGVyYXRpb25OdW0gPSBzdWl0ZUl0ZXJhdGlvbjtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxCZWZvcmVTdWl0ZUhvb2soc3VpdGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vblN1aXRlU3RhcnQodGhpcy5faWQsIHN1aXRlLnVyaSwgc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjYXplIG9mIHN1aXRlLmNhc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgY2FzZXMgd2l0aCBtaXNzaW5nIG1hbmRhdG9yeSAncGF0aCcgcHJvcGVydHkgXHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhemUucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjYXplLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXplLm5hbWUgPSBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhemUucGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhemUuaXRlcmF0aW9uQ291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXplLml0ZXJhdGlvbkNvdW50ID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNhc2VJdGVyYXRpb249MTsgY2FzZUl0ZXJhdGlvbiA8PSBjYXplLml0ZXJhdGlvbkNvdW50OyBjYXNlSXRlcmF0aW9uKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhemUgJiYgY2F6ZS5pdGVyYXRpb25Db3VudCAmJiBjYXplLml0ZXJhdGlvbkNvdW50ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vbkl0ZXJhdGlvblN0YXJ0KHRoaXMuX2lkLCBjYXNlSXRlcmF0aW9uLCAnQ2FzZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyByZXBvcnQgY2FzZSBzdGFydCBldmVudFxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uQ2FzZVN0YXJ0KHRoaXMuX2lkLCBzdWl0ZS51cmkgfHwgc3VpdGUuaWQsIGNhemUudXJpIHx8IGNhemUuaWQgfHwgY2F6ZS5wYXRoLCBjYXplKTtcclxuICAgICAgICAgICAgICAgICAgICAvL2xldCByZVJ1bkNvdW50ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2FzZVJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAvLyBydW4gb3IgcmUtcnVuIHRoZSBjdXJyZW50IHRlc3QgY2FzZVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHJlUnVuQ291bnQgPSAwOyByZVJ1bkNvdW50IDwgbWF4UmVydW5zOyByZVJ1bkNvdW50KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZVJlc3VsdCA9IGF3YWl0IHRoaXMuX3J1bkNhc2Uoc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCByZVJ1bkNvdW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCghY2FzZVJlc3VsdCB8fCBjYXNlUmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkgJiYgIXJlUnVuT25GYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjYXNlUmVzdWx0ICYmIGNhc2VSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVSdW5EZWxheSAmJiByZVJ1bkNvdW50IDwgbWF4UmVydW5zIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgb3h1dGlsLnNsZWVwKHJlUnVuRGVsYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlcG9ydCBjYXNlIGVuZCBldmVudFxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uQ2FzZUVuZCh0aGlzLl9pZCwgc3VpdGUudXJpIHx8IHN1aXRlLmlkLCBjYXplLnVyaSB8fCBjYXplLmlkLCBjYXNlUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd0Nhc2VJdGVyYXRpb25zTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIub25JdGVyYXRpb25FbmQodGhpcy5faWQsIGNhc2VSZXN1bHQsICdDYXNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBjYXNlIHJlc3VsdCB0byB0aGUgc3VpdGUgcmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgc3VpdGVSZXN1bHQuY2FzZXMucHVzaChjYXNlUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0ZXN0IGNhc2UgaXRlcmF0aW9uIGhhcyBmYWlsZWQsIHRoZW4gbWFyayB0aGUgZW50aXJlIHRlc3QgY2FzZSBhcyBmYWlsZWQsIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3AgaXRlcmF0aW5nIG92ZXIgaXQgYW5kIG1vdmUgdG8gdGhlIG5leHQgdGVzdCBjYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNhc2VSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuV0FSTklORykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuV0FSTklORztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuZHVyYXRpb24gPSBzdWl0ZVJlc3VsdC5lbmRUaW1lIC0gc3VpdGVSZXN1bHQuc3RhcnRUaW1lO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNob3dTdWl0ZUl0ZXJhdGlvbnNNZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIub25JdGVyYXRpb25FbmQodGhpcy5faWQsIHN1aXRlUmVzdWx0LCAnU3VpdGUnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxBZnRlclN1aXRlSG9vayhzdWl0ZSwgc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlci5vblN1aXRlRW5kKHRoaXMuX2lkLCBzdWl0ZS51cmksIHN1aXRlUmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlSXRlcmF0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfcnVuQ2FzZShzdWl0ZSwgY2F6ZSwgc3VpdGVJdGVyYXRpb24sIGNhc2VJdGVyYXRpb24sIHJlUnVuQ291bnQgPSAwKSB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge307XHJcbiAgICAgICAgY29uc3QgcmVSdW4gPSByZVJ1bkNvdW50ID4gMDtcclxuICAgICAgICAvLyBnZXQgdGVzdCBzdWl0ZSdzIHBhcmFtZXRlcnMgaWYgZGVmaW5lZFxyXG4gICAgICAgIC8vIGdldCB0aGVtIGZpcnN0IGFuZCB0aGVuIG92ZXJyaWRlIHdpdGggdGVzdCBjYXNlIGxldmVsIHBhcmFtZXRlcnMgaWYgZGVmaW5lZFxyXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIpIHtcclxuICAgICAgICAgICAgaWYgKHJlUnVuKSB7XHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIucmVhZFByZXYoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfLmV4dGVuZChwYXJhbXMsIHN1aXRlLnBhcmFtTWFuYWdlci5nZXRWYWx1ZXMoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHJlYWQgdGVzdCBjYXNlJ3MgbmV4dCBsaW5lcyBvZiBwYXJhbWV0ZXJzIGlmIHBhcmFtZXRlciBtYW5hZ2VyIGlzIGRlZmluZWRcclxuICAgICAgICBpZiAoY2F6ZS5wYXJhbU1hbmFnZXIpIHtcclxuICAgICAgICAgICAgaWYgKHJlUnVuKSB7XHJcbiAgICAgICAgICAgICAgICBjYXplLnBhcmFtTWFuYWdlci5yZWFkUHJldigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF8uZXh0ZW5kKHBhcmFtcywgY2F6ZS5wYXJhbU1hbmFnZXIuZ2V0VmFsdWVzKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWRkIGJyZWFrcG9pbnRzIGJlZm9yZSBydW5uaW5nIHRoZSBzY3JpcHQgaWYgaW4gZGVidWcgbW9kZVxyXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiBjYXplLmJyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTwgY2F6ZS5icmVha3BvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgLy8gZWRpdG9yIGluZGV4IHN0YXJ0cyBmcm9tIDEsIGJ1dCB3ZSBuZWVkIHplcm8gYmFzZWQgaW5kZXhcclxuICAgICAgICAgICAgICAgIGxldCBsaW5lID0gY2F6ZS5icmVha3BvaW50c1tpXS5saW5lO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbGUgPSBjYXplLmJyZWFrcG9pbnRzW2ldLmZpbGU7XHJcblxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnQoZmlsZSwgbGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxCZWZvcmVDYXNlSG9vayhjYXplKTtcclxuICAgICAgICBjb25zdCBjYXNlUmVzdWx0ID0gbmV3IFRlc3RDYXNlUmVzdWx0KCk7XHJcbiAgICAgICAgY2FzZVJlc3VsdC5uYW1lID0gY2F6ZS5uYW1lO1xyXG4gICAgICAgIGNhc2VSZXN1bHQubG9jYXRpb24gPSBjYXplLnBhdGg7XHJcbiAgICAgICAgY2FzZVJlc3VsdC5pdGVyYXRpb25OdW0gPSBjYXNlSXRlcmF0aW9uO1xyXG4gICAgICAgIGNhc2VSZXN1bHQucmVSdW5Db3VudCA9IHJlUnVuQ291bnQ7XHJcblxyXG4gICAgICAgIC8vIHRyeSB0byBpbml0aWFsaXplIE94eWdlbiBhbmQgaGFuZGxlIGFueSBwb3NzaWJsZSBlcnJvclxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICghKHRoaXMuX3dvcmtlcikgJiYgdGhpcy5fd29ya2VyX0luaXRPeHlnZW4oKSk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fd29ya2VyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignX3dvcmtlcl9Jbml0T3h5Z2VuKCkgdGhyb3duIGFuIGVycm9yOicsIGUpO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXJ0VGltZSA9IGNhc2VSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5kdXJhdGlvbiA9IDA7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuZmFpbHVyZSA9IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIpIHtcclxuICAgICAgICAgICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY2F6ZS5wYXJhbU1hbmFnZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhemUucGFyYW1NYW5hZ2VyLnJlYWROZXh0KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjYXNlUmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzdGFydCBuZXcgdGVzdCBzZXNzaW9uXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX3N0YXJ0U2Vzc2lvbigpO1xyXG4gICAgICAgIC8vIHJ1biB0aGUgdGVzdCBpbiB0aGUgd29ya2VyIHByb2Nlc3MgYW5kIGhhbmRsZSBhbnkgcG9zc2libGUgZXJyb3JcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgY29uc3QgeyByZXN1bHRTdG9yZSwgY29udGV4dCwgbW9kdWxlQ2FwcywgZXJyb3IgfSA9IGF3YWl0IHRoaXMuX3dvcmtlcl9SdW4oc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCBwYXJhbXMpO1xyXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzVGVzdFJlc3VsdHMoeyByZXN1bHRTdG9yZSwgY29udGV4dCwgZXJyb3IsIG1vZHVsZUNhcHMgfSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5kdXJhdGlvbiA9IGNhc2VSZXN1bHQuZW5kVGltZSAtIGNhc2VSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0ZXBzID0gcmVzdWx0U3RvcmUgJiYgcmVzdWx0U3RvcmUuc3RlcHMgPyByZXN1bHRTdG9yZS5zdGVwcyA6IFtdO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmxvZ3MgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5sb2dzID8gcmVzdWx0U3RvcmUubG9ncyA6IFtdO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmhhciA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmhhciA/IHJlc3VsdFN0b3JlLmhhciA6IG51bGw7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQudGVzdEF0dHJpYnV0ZXMgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5hdHRyaWJ1dGVzID8gcmVzdWx0U3RvcmUuYXR0cmlidXRlcyA6IG51bGw7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuYXR0YWNobWVudHMgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5hdHRhY2htZW50cyA/IHJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzIDogbnVsbDtcclxuXHJcbiAgICAgICAgICAgIC8vIGRldGVybWluZSB0ZXN0IGNhc2UgaXRlcmF0aW9uIHN0YXR1cyAtIG1hcmsgaXQgYXMgZmFpbGVkIGlmIGFueSBzdGVwIGhhcyBmYWlsZWRcclxuICAgICAgICAgICAgdmFyIGZhaWxlZFN0ZXBzID0gXy5maW5kKGNhc2VSZXN1bHQuc3RlcHMsIHtzdGF0dXM6IFN0YXR1cy5GQUlMRUR9KTtcclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzdGVwcyB3aXRoIFdhcm5pbmcgc3RhdHVzXHJcbiAgICAgICAgICAgIHZhciB3YXJuaW5nU3RlcHMgPSBfLmZpbmQoY2FzZVJlc3VsdC5zdGVwcywge3N0YXR1czogU3RhdHVzLldBUk5JTkd9KTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBfLmlzRW1wdHkoZmFpbGVkU3RlcHMpICYmICFlcnJvciA/IFN0YXR1cy5QQVNTRUQgOiBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNhc2VSZXN1bHQuZmFpbHVyZSA9IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGVwcyA9IG94dXRpbC5tYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQoY2FzZVJlc3VsdC5zdGVwcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIV8uaXNFbXB0eSh3YXJuaW5nU3RlcHMpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5XQVJOSU5HO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQWZ0ZXJDYXNlSG9vayhjYXplLCBjYXNlUmVzdWx0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignX3dvcmtlcl9SdW4oKSB0aHJvd24gYW4gZXJyb3I6JywgZSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuZmFpbHVyZSA9IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRpc3Bvc2VPeHlnZW5Nb2R1bGVzID0gdHlwZW9mIHRoaXMuX29wdGlvbnMuYXV0b0Rpc3Bvc2UgIT09ICdib29sZWFuJyB8fCB0aGlzLl9vcHRpb25zLmF1dG9EaXNwb3NlID09PSB0cnVlO1xyXG4gICAgICAgIC8vIGVuZCBzZXNzaW9uIGFuZCBkaXNwb3NlIE94eWdlbiBtb2R1bGVzIGlmIHJlcXVpcmVkXHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2VuZFNlc3Npb24oY2FzZVJlc3VsdC5zdGF0dXMsIGRpc3Bvc2VPeHlnZW5Nb2R1bGVzKTtcclxuXHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIucmVhZE5leHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjYXplLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICBjYXplLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNhc2VSZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9SdW4oc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCBwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3dvcmtlcikge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ193b3JrZXIgaXMgbnVsbCBidXQgbm90IHN1cHBvc2UgdG8hJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fd2hlblRlc3RDYXNlRmluaXNoZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3doZW5UZXN0Q2FzZUZpbmlzaGVkLnJlamVjdChuZXcgRXJyb3IoJ193b3JrZXIgaXMgbnVsbCcpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0YXJ0IHJ1bm5pbmcgdGhlIHRlc3RcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fd29ya2VyLnJ1bih7XHJcbiAgICAgICAgICAgIHNjcmlwdE5hbWU6IGNhemUubmFtZSxcclxuICAgICAgICAgICAgc2NyaXB0UGF0aDogY2F6ZS5wYXRoLFxyXG4gICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIGVudjogdGhpcy5fZW52LFxyXG4gICAgICAgICAgICAgICAgY2FwczogdGhpcy5fY2FwcyxcclxuICAgICAgICAgICAgICAgIHZhcnM6IHRoaXMuX3ZhcnMsXHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0aGlzLl9hdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgdGVzdDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2U6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY2F6ZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRpb246IGNhc2VJdGVyYXRpb25cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHN1aXRlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogc3VpdGVJdGVyYXRpb25cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBvRmlsZTogdGhpcy5fb3B0aW9ucy5wbyB8fCBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfSW5pdE94eWdlbigpIHtcclxuICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbml0T3h5Z2VuKHRoaXMuX2lkLCB0aGlzLl9vcHRpb25zLCB0aGlzLl9jYXBzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9zdGFydFNlc3Npb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuc3RhcnRTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5zdGFydFNlc3Npb24oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9lbmRTZXNzaW9uKHN0YXR1cyA9IG51bGwsIGRpc3Bvc2VNb2R1bGVzID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmVuZFNlc3Npb24pIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmVuZFNlc3Npb24oc3RhdHVzLCBkaXNwb3NlTW9kdWxlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEJlZm9yZVRlc3RIb29rKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzICYmIHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2spIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlVGVzdCcsIFt0aGlzLl9pZCwgdGhpcy5fb3B0aW9ucywgdGhpcy5fY2Fwc10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVUZXN0XCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVUZXN0XCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEJlZm9yZVN1aXRlSG9vayhzdWl0ZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzICYmIHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2spIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlU3VpdGUnLCBbc3VpdGVdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYmVmb3JlU3VpdGVcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImJlZm9yZVN1aXRlXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rKGNhemUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlQ2FzZScsIFtjYXplXSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYmVmb3JlQ2FzZVwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYmVmb3JlQ2FzZVwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX2NhbGxBZnRlclRlc3RIb29rKHJlc3VsdCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdhZnRlclRlc3QnLCBbdGhpcy5faWQsIHJlc3VsdF0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImFmdGVyVGVzdFwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYWZ0ZXJUZXN0XCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEFmdGVyU3VpdGVIb29rKHN1aXRlLCByZXN1bHQpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYWZ0ZXJTdWl0ZScsIFtzdWl0ZSwgcmVzdWx0XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJTdWl0ZVwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYWZ0ZXJTdWl0ZVwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX2NhbGxBZnRlckNhc2VIb29rKGNhemUsIHJlc3VsdCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdhZnRlckNhc2UnLCBbY2F6ZSwgcmVzdWx0XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJDYXNlXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlckNhc2VcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3N0YXJ0V29ya2VyUHJvY2VzcygpIHtcclxuICAgICAgICBjb25zdCB3b3JrZXJQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3dvcmtlci5qcycpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlciA9IG5ldyBXb3JrZXJQcm9jZXNzKHRoaXMuX2lkLCB3b3JrZXJQYXRoLCB0aGlzLl9kZWJ1Z01vZGUsIHRoaXMuX2RlYnVnUG9ydCwgJ094eWdlbicsIHRoaXMuX25wbUdSb290RXhlY3V0aW9uKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuc3RhcnQoKTtcclxuICAgICAgICB0aGlzLl9ob29rV29ya2VyRXZlbnRzKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0YXJ0RGVidWdnZXIoKTtcclxuICAgICAgICB0aGlzLl9ob29rV29ya2VyRGVidWdnZXJFdmVudHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBfaG9va1dvcmtlckV2ZW50cygpIHtcclxuICAgICAgICAvLyBwcmVzZXJ2ZSB0aGlzIG9iamVjdFxyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLl93b3JrZXIuc3Vic2NyaWJlKCdjb21tYW5kOmJlZm9yZScsIHRoaXMuX2hhbmRsZUJlZm9yZUNvbW1hbmQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyLnN1YnNjcmliZSgnY29tbWFuZDphZnRlcicsIHRoaXMuX2hhbmRsZUFmdGVyQ29tbWFuZC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl93b3JrZXIub24oJ2Vycm9yJywgKHBheWxvYWQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdXb3JrZXIgcHJvY2VzcyBlcnJvcjogJywgZXJyb3IpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZXhpdERvbmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgndGVzdC1lcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLl93b3JrZXJQcm9jTGFzdEVycm9yID0gZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl93b3JrZXIub24oJ2V4aXQnLCAocGF5bG9hZCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmV4aXREb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgeyBleGl0Q29kZSB9ID0gcGF5bG9hZDtcclxuXHJcbiAgICAgICAgICAgIGlmIChleGl0Q29kZSAmJiBleGl0Q29kZSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRlc3QgaXMgcnVubmluZyBvciBpcyBiZWluZyBkaXNwb3NlZCBhbmQgdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGRpZWQsXHJcbiAgICAgICAgICAgICAgICAvLyB0aGVuIGVuZCB0aGUgdGVzdCBvciBkaXNwb3NhbCB3aXRoIGZhdGFsIGVycm9yXHJcbiAgICAgICAgICAgICAgICAvLyAoY2hpbGQgcHJvY2VzcyBub3Qgc3VwcG9zZSB0byBkaWUgd2l0aCBjb2RlID4gMClcclxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5faXNEaXNwb3NpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gX3RoaXMuX3doZW5EaXNwb3NlZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLl9pc1J1bm5pbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gX3RoaXMuX3doZW5UZXN0Q2FzZUZpbmlzaGVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yID0gX3RoaXMuX3dvcmtlclByb2NMYXN0RXJyb3IgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmIChleGl0Q29kZSA9PSAxMzQpIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBPeHlnZW5FcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnT3V0IG9mIG1lbW9yeSBlcnJvci4gTWFrZSBzdXJlIHRoYXQgeW91IGRvblxcJ3QgaGF2ZSBhbnkgbWVtb3J5IGxlYWtzIGluIHRoZSB0ZXN0IHNjcmlwdC4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IE94eWdlbkVycm9yKGBXb3JrZXIgcHJvY2VzcyBleGl0ZWQgd2l0aCBjb2RlOiAke2V4aXRDb2RlfS5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwcm9taXNlICYmIHByb21pc2UucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9yZXNldEdsb2JhbFZhcmlhYmxlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyLm9uKCdtZXNzYWdlJywgYXN5bmMgKG1zZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAobXNnLmV2ZW50ICYmIG1zZy5ldmVudCA9PT0gJ2xvZycpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtc2cubGV2ZWwgPT09ICdERUJVRycpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcobXNnLm1zZyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5sZXZlbCA9PT0gJ0lORk8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8obXNnLm1zZyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5sZXZlbCA9PT0gJ0VSUk9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcihtc2cubXNnLCBtc2cuZXJyKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmxldmVsID09PSAnV0FSTicpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cud2Fybihtc2cubXNnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdsb2cnLCBtc2cudGltZSwgbXNnLmxldmVsLCBtc2cubXNnLCBtc2cuc3JjIHx8IERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9yZXBvcnRlciAmJiBfdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShtc2cudGltZSwgbXNnLmxldmVsLCBtc2cubXNnLCBtc2cuc3JjIHx8IERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAnbGluZS11cGRhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdsaW5lLXVwZGF0ZScsIG1zZy5saW5lLCBtc2cuc3RhY2ssIG1zZy50aW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAncmVzdWx0LXVwZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtc2cubWV0aG9kID09PSAnaW5pdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdpbml0LWRvbmUnLCBtc2cpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICd3b3JrZXJFcnJvcicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd3b3JrZXJFcnJvcjonLCBtc2cpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNwb3NlKCdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMua2lsbCgnZmFpbGVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobXNnLmV2ZW50ICYmIG1zZy5ldmVudCA9PT0gJ3JlcGwnKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdyZXBsJywgbXNnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9ob29rV29ya2VyRGVidWdnZXJFdmVudHMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl93b3JrZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLm9uKCdkZWJ1Z2dlcjpicmVhaycsIChicmVha3BvaW50RGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2JyZWFrcG9pbnQnLCBicmVha3BvaW50RGF0YSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIub24oJ2RlYnVnZ2VyOmJyZWFrRXJyb3InLCAoYnJlYWtFcnJvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2JyZWFrcG9pbnRFcnJvcicsIGJyZWFrRXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9oYW5kbGVCZWZvcmVDb21tYW5kKGUpIHtcclxuICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiB0aGlzLl9yZXBvcnRlci5vblN0ZXBTdGFydCh0aGlzLl9pZCwgZSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChlICYmIGUubW9kdWxlICYmIGUubW9kdWxlID09PSAnbG9nJykge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlQ29tbWFuZCcsIFtlXSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVDb21tYW5kXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVDb21tYW5kXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9oYW5kbGVBZnRlckNvbW1hbmQoZSkge1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIHRoaXMuX3JlcG9ydGVyLm9uU3RlcEVuZCh0aGlzLl9pZCwgZS5yZXN1bHQpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChlICYmIGUubW9kdWxlICYmIGUubW9kdWxlID09PSAnbG9nJykge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYWZ0ZXJDb21tYW5kJywgW2UucmVzdWx0XSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJhZnRlckNvbW1hbmRcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImFmdGVyQ29tbWFuZFwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfcmVzZXRHbG9iYWxWYXJpYWJsZXMoKSB7XHJcbiAgICAgICAgdGhpcy5fbW9kQ2FwcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5faXNEaXNwb3NpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl93aGVuRGlzcG9zZWQgPSBkZWZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzVGVzdFJlc3VsdHMoeyByZXN1bHRTdG9yZSwgbW9kdWxlQ2FwcywgY29udGV4dCA9IHt9LCBlcnJvciA9IG51bGwgfSkge1xyXG4gICAgICAgIC8vIGlmIHRlc3Qgd2FzIGtpbGxlZCBiZWZvcmUgYW55IHJlc3VsdHMgd2VyZSBnZW5lcmF0ZWQsIHRoZW4ganVzdCBmaW5hbGl6ZSB0aGUgdGVzdCB3aXRob3V0IHByb2Nlc3NpbmcgcmVzdWx0c1xyXG4gICAgICAgIGlmICh0aGlzLl90ZXN0S2lsbGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCd0ZXN0LWVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzdG9yZSAndmFycycgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgYSBsYXRlciB1c2VcclxuICAgICAgICB0aGlzLl92YXJzID0gY29udGV4dC52YXJzIHx8IHRoaXMuX3ZhcnM7XHJcbiAgICAgICAgLy8gc3RvcmUgJ21vZENhcHMnIHBhcnQgb2YgdGhlIGNvbnRleHQgZm9yIGEgbGF0ZXIgdXNlXHJcbiAgICAgICAgdGhpcy5fbW9kQ2FwcyA9IHsgLi4udGhpcy5fbW9kQ2FwcywgLi4ubW9kdWxlQ2FwcyB8fCB7fSB9O1xyXG4gICAgICAgIC8vIGNsZWFuIHVwIGNvbnRleHQgZnJvbSBpbnRlcm5hbCBlbGVtZW50cywgbm90IG5lZWQgaW4gdGhlIHJlcG9ydDpcclxuICAgICAgICAvLyByZW1vdmUgY2FwcyBmcm9tIHRoZSBjb250ZXh0IGFzIGl0IGFscmVhZHkgYXBwZWFycyBpbiBUZXN0UmVzdWx0IG5vZGVcclxuICAgICAgICBpZiAoY29udGV4dC5jYXBzKVxyXG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC5jYXBzO1xyXG4gICAgICAgIC8vIHJlbW92ZSBlbnYgZnJvbSB0aGUgY29udGV4dCBhcyBpdCBhbHJlYWR5IGFwcGVhcnMgaW4gVGVzdFJlc3VsdCBub2RlXHJcbiAgICAgICAgaWYgKGNvbnRleHQuZW52KVxyXG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC5lbnY7XHJcbiAgICAgICAgLy8gcmVtb3ZlIHRlc3QgZnJvbSB0aGUgY29udGV4dCBhcyBpdCBhbHJlYWR5IGFwcGVhcnMgaW4gVGVzdFJlc3VsdCBub2RlXHJcbiAgICAgICAgaWYgKGNvbnRleHQudGVzdClcclxuICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQudGVzdDtcclxuICAgIH1cclxuXHJcbiAgICBfZW1pdEl0ZXJhdGlvbkVuZCh0cywgdGMsIHN1aXRlSXRlcmF0aW9uTnVtLCBjYXNlSXRlcmF0aW9uTnVtLCBjYXNlSXRlcmF0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdpdGVyYXRpb24tZW5kJywge1xyXG4gICAgICAgICAgICBzdGF0dXM6IGNhc2VJdGVyYXRpb25SZXN1bHQuX3N0YXR1cyxcclxuICAgICAgICAgICAgZmFpbHVyZTogY2FzZUl0ZXJhdGlvblJlc3VsdC5mYWlsdXJlIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGNhc2U6IHtcclxuICAgICAgICAgICAgICAgIGlkOiB0Yy5pZCB8fCBudWxsLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdGMubmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogY2FzZUl0ZXJhdGlvbk51bSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbkNvdW50OiB0Yy5pdGVyYXRpb25Db3VudFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdWl0ZToge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRzLmlkIHx8IG51bGwsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0cy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBzdWl0ZUl0ZXJhdGlvbk51bSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbkNvdW50OiB0cy5pdGVyYXRpb25Db3VudFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2VtaXRUZXN0RW5kKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgndGVzdC1lbmQnLCByZXN1bHQpO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IHsgUGFyYW1ldGVyTWFuYWdlciB9OyJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oxygen-cli",
|
|
3
|
-
"version": "1.37.
|
|
3
|
+
"version": "1.37.2",
|
|
4
4
|
"description": "Automation framework for testing modern applications",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
"xlsx": "0.18.5"
|
|
115
115
|
},
|
|
116
116
|
"optionalDependencies": {
|
|
117
|
-
"odbc": "2.4.
|
|
117
|
+
"odbc": "2.4.8"
|
|
118
118
|
},
|
|
119
119
|
"scripts": {
|
|
120
120
|
"build": "npm run clean && npm run compile",
|