oxygen-cli 1.20.0 → 1.21.0-beta.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 +8 -0
- package/build/core/OxygenCore.js +3 -2
- package/build/errors/helper.js +6 -2
- package/build/lib/util.js +22 -9
- package/build/ox_modules/module-db.js +2 -2
- package/build/ox_modules/module-email.js +42 -49
- package/build/ox_modules/module-eyes.js +4 -21
- package/build/ox_modules/module-http.js +59 -49
- package/build/ox_modules/module-mailinator.js +25 -32
- package/build/ox_modules/module-mob/commands/selectWindow.js +4 -7
- package/build/ox_modules/module-mob/commands/sendKeys.js +2 -2
- package/build/ox_modules/module-mob.js +65 -52
- package/build/ox_modules/module-pdf.js +12 -32
- package/build/ox_modules/module-proxy.js +9 -9
- package/build/ox_modules/module-serial.js +14 -12
- package/build/ox_modules/module-soap.js +88 -78
- package/build/ox_modules/module-twilio.js +27 -27
- package/build/ox_modules/module-utils.js +29 -5
- package/build/ox_modules/module-web/commands/selectWindow.js +4 -7
- package/build/ox_modules/module-web/commands/waitForNotExist.js +2 -3
- package/build/ox_modules/module-web.js +88 -64
- package/build/ox_modules/utils.js +13 -2
- package/build/runners/WorkerProcess.js +22 -20
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
package/build/core/OxygenCore.js
CHANGED
|
@@ -581,8 +581,9 @@ class Oxygen extends _OxygenEvents.default {
|
|
|
581
581
|
throw new _OxygenError.default(_helper.default.errorCode.MODULE_NOT_INITIALIZED_ERROR, 'Missing ' + moduleName + '.init()');
|
|
582
582
|
}
|
|
583
583
|
|
|
584
|
-
|
|
584
|
+
let decryptedArgs = this._getDecryptedArgsForApply(cmdArgs, moduleName);
|
|
585
585
|
|
|
586
|
+
decryptedArgs = this._populateParametersValue(decryptedArgs);
|
|
586
587
|
cmdArgs = this._populateParametersValue(cmdArgs);
|
|
587
588
|
|
|
588
589
|
const startTime = _util.default.getTimeStamp();
|
|
@@ -1012,4 +1013,4 @@ class Oxygen extends _OxygenEvents.default {
|
|
|
1012
1013
|
}
|
|
1013
1014
|
|
|
1014
1015
|
exports.default = Oxygen;
|
|
1015
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL094eWdlbkNvcmUuanMiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnbG9iYWwiLCJnZXQiLCJvcmlnIiwiRXJyb3IiLCJwcmVwYXJlU3RhY2tUcmFjZSIsIl8iLCJzdGFjayIsImVyciIsImNhcHR1cmVTdGFja1RyYWNlIiwiREVGQVVMVF9USU1FT1VUIiwiREVGQVVMVF9PUFRTIiwiYmFja3RyYWNlIiwiY29tcGlsZXIiLCJmYWlsQW1iaWd1b3VzRGVmaW5pdGlvbnMiLCJmYWlsRmFzdCIsImlnbm9yZVVuZGVmaW5lZERlZmluaXRpb25zIiwibmFtZSIsInByb2ZpbGUiLCJyZXF1aXJlIiwib3JkZXIiLCJzbmlwcGV0U3ludGF4IiwidW5kZWZpbmVkIiwic25pcHBldHMiLCJzb3VyY2UiLCJzdHJpY3QiLCJ0YWdFeHByZXNzaW9uIiwidGFnc0luVGl0bGUiLCJ0aW1lb3V0IiwiTU9EVUxFX05BTUVfTUFUQ0hfUkVHRVgiLCJTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVgiLCJET19OT1RfV1JBUF9NRVRIT0RTIiwiREVGQVVMVF9DVFgiLCJwYXJhbXMiLCJ2YXJzIiwiZW52IiwiY2FwcyIsIkRFRkFVTFRfUkVTVUxUX1NUT1JFIiwic3RlcHMiLCJsb2dzIiwiaGFyIiwiT3h5Z2VuIiwiT3h5Z2VuRXZlbnRzIiwiY29uc3RydWN0b3IiLCJpc0luaXRpYWxpemVkIiwicmVzdWx0U3RvcmUiLCJjdHgiLCJtb2R1bGVzIiwic2VydmljZXMiLCJyZXBvIiwiY2FwYWJpbGl0aWVzIiwib3B0cyIsIm94QmFzZURpciIsInBhdGgiLCJqb2luIiwiX19kaXJuYW1lIiwibG9nZ2VyIiwiX3dyYXBMb2dnZXIiLCJfd2FpdFN0ZXBSZXN1bHRMaXN0IiwiaW5pdCIsIm9wdGlvbnMiLCJyZXN1bHRzIiwiYXNzaWduIiwiY3dkIiwicHJvY2VzcyIsIm1ha2VPeEdsb2JhbCIsIl9sb2FkU2VydmljZXMiLCJfbG9hZE1vZHVsZXMiLCJnbG9iYWxTY29wZSIsIm1ha2VDb250ZXh0QW5kTW9kdWxlc0dsb2JhbCIsImRpc3Bvc2VNb2R1bGVzIiwic3RhdHVzIiwiX2Rpc3Bvc2VNb2R1bGVzIiwiZSIsImNvbnNvbGUiLCJlcnJvciIsImRpc3Bvc2UiLCJfZGlzcG9zZVNlcnZpY2VzIiwiYWRqdXN0U2NyaXB0TGluZSIsImlzSW5EZWJ1Z01vZGUiLCJveHV0aWwiLCJyZXN1bHQiLCJjb250ZXh0Iiwib3giLCJyZXBvc2l0b3J5IiwidHJhbnNTdGVwIiwiaW5jbHVkZXMiLCJ0cmFuc05hbWUiLCJ0cmFuc2FjdGlvbiIsImR1cmF0aW9uIiwic3RlcCIsImVuZFRpbWUiLCJnZXRNb2R1bGVzQ2FwYWJpbGl0aWVzIiwibW9kQ2FwcyIsIm1vZHVsZU5hbWUiLCJtb2R1bGUiLCJfZ2V0Q2FwYWJpbGl0aWVzIiwia2V5cyIsImxlbmd0aCIsInJlc2V0UmVzdWx0cyIsIm9uQmVmb3JlQ2FzZSIsIl9pdGVyYXRpb25TdGFydCIsIm9uQWZ0ZXJDYXNlIiwiX2l0ZXJhdGlvbkVuZCIsImxvYWRQYWdlT2JqZWN0RmlsZSIsInBvUGF0aCIsInBvIiwiX2xvZ2dlciIsImxvZ2dlcldyYXAiLCJpbmZvIiwiYXJncyIsIl9sb2ciLCJkZWJ1ZyIsIndhcm4iLCJ1c2VySW5mbyIsIklTU1VFUlMiLCJVU0VSIiwidXNlckRlYnVnIiwidXNlckVycm9yIiwidXNlcldhcm4iLCJsZXZlbCIsInNyYyIsIkRFRkFVTFRfTE9HR0VSX0lTU1VFUiIsImFwcGx5IiwibWVzc2FnZSIsInN0cmluZ2lmeSIsInRpbWUiLCJnZXRUaW1lU3RhbXAiLCJwdXNoIiwidG9VcHBlckNhc2UiLCJtc2ciLCJzaGlmdCIsImVtaXRMb2ciLCJveFNlcnZpY2VzRGlyUGF0aCIsInJlc29sdmUiLCJzZXJ2aWNlRmlsZXMiLCJnbG9iIiwic3luYyIsImkiLCJzZXJ2aWNlRmlsZU5hbWUiLCJzZXJ2aWNlRmlsZVBhdGgiLCJtYXRjaCIsInNlcnZpY2VOYW1lIiwiQXJyYXkiLCJpc0FycmF5Iiwic2VydmljZSIsIl9sb2FkU2VydmljZSIsIkVPTCIsInN0YWNrdHJhY2UiLCJzZXJ2aWNlUGF0aCIsIlNlcnZpY2VDbGFzcyIsImRlZmF1bHQiLCJzZXJ2aWNlTG9nZ2VyIiwiX2xvYWRJbnRlcm5hbE1vZHVsZXMiLCJfbG9hZEV4dGVybmFsTW9kdWxlcyIsIm1vZHVsZXNGb2xkZXJQYXRoIiwibW9kdWxlc19leHQiLCJveE1vZHVsZXNEaXJQYXRoIiwiZnMiLCJleGlzdHNTeW5jIiwibW9kdWxlRmlsZXMiLCJmb3JFYWNoIiwibW9kdWxlRmlsZU5hbWUiLCJzdGFydFRpbWUiLCJEYXRlIiwibW9kdWxlTG9nZ2VyIiwibW9kIiwiY29yZVV0aWxzIiwibG9hZE1vZHVsZUZyb21GaWxlIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkIiwiX3dyYXBNb2R1bGUiLCJleGNsdWRlVW5kZWZpbmVkTW9kcyIsIk1vZHVsZXMiLCJNb2R1bGVDbGFzcyIsImdldE94TW9kdWxlc0RpciIsImxvYWRNb2R1bGVGcm9tQ2xhc3MiLCJ3cmFwcGVyIiwiX3RoaXMiLCJtb2R1bGVNZXRob2RzIiwic29tZSIsIngiLCJfZ2V0QWxsUHJvcGVydHlOYW1lcyIsIm1ldGhvZE5hbWUiLCJtZXRob2QiLCJGdW5jdGlvbiIsIk94eWdlblN1Yk1vZHVsZSIsImJpbmQiLCJpbmRleE9mIiwicHJvdG90eXBlIiwic2xpY2UiLCJjYWxsIiwiYXJndW1lbnRzIiwiZ2V0TWV0aG9kU2lnbmF0dXJlIiwiZXJyb3JIZWxwZXIiLCJnZXRPeHlnZW5FcnJvciIsIl9jb21tYW5kV3JhcHBlciIsIk94RXJyb3IiLCJjbWROYW1lIiwiY21kQXJncyIsInJldHZhbCIsImNtZEZuIiwicHVibGljTWV0aG9kIiwic3RhcnRzV2l0aCIsImRlbGF5IiwiZGVhc3luYyIsInNsZWVwIiwiZXJyb3JDb2RlIiwiTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiIsImRlY3J5cHRlZEFyZ3MiLCJfZ2V0RGVjcnlwdGVkQXJnc0ZvckFwcGx5IiwiX3BvcHVsYXRlUGFyYW1ldGVyc1ZhbHVlIiwiY21kTG9jYXRpb24iLCJfZ2V0Q29tbWFuZExvY2F0aW9uIiwiZW1pdEJlZm9yZUNvbW1hbmQiLCJfd3JhcEFzeW5jIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlV2lsbERpc3Bvc2UiLCJyZXR2YWxQcm9taXNlIiwidGhlbiIsInByb21pc2VEb25lIiwidmFsdWUiLCJsb29wV2hpbGUiLCJfY2FsbFNlcnZpY2VzT25Nb2R1bGVJbml0aWFsaXplZCIsInN0ZXBSZXN1bHQiLCJkb25lIiwid2FpdElkIiwiX2dldFN0ZXBSZXN1bHQiLCJpbmRleCIsInNwbGljZSIsImVtaXRBZnRlckNvbW1hbmQiLCJpc0ZhdGFsIiwiY29udGludWVPbkVycm9yIiwibG9jYXRpb24iLCJmYWlsdXJlIiwiZm4iLCJzZWxmIiwiRmliZXIiLCJjdXJyZW50IiwiZmluYWxWYWwiLCJQcm9taXNlIiwidmFsIiwiY2F0Y2giLCJmdXR1cmUiLCJGdXR1cmUiLCJyZXR1cm4iLCJ0aHJvdyIsIndhaXQiLCJfX3N0YWNrIiwiY2FsbGVyIiwiX19maWxlbmFtZSIsImdldEZpbGVOYW1lIiwiZ2V0TGluZU51bWJlciIsImdldENvbHVtbk51bWJlciIsIlN0ZXBSZXN1bHQiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsInR5cGUiLCJBU1NFUlRfUEFTU0VEIiwiU1RBVFVTIiwiUEFTU0VEIiwiRkFJTEVEIiwiV0FSTklORyIsImFjdGlvbiIsIl9pc0FjdGlvbiIsIl9nZXRTdGF0cyIsInN0YXRzIiwiU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsImRpc2FibGVTY3JlZW5zaG90Iiwic2NyZWVuc2hvdCIsImtleSIsImRpc3Bvc2VSZXN1bHQiLCJvbk1vZHVsZUxvYWRlZCIsIm9uTW9kdWxlSW5pdGlhbGl6ZWQiLCJvbk1vZHVsZVdpbGxEaXNwb3NlIiwiX25ld0FyZ3MiLCJhcmciLCJfcmVwbGFjZVBhcmFtZXRlckluQXJndW1lbnQiLCJnZXREZWNyeXB0UmVzdWx0IiwicGFyYW1OYW1lIiwiaGFzT3duUHJvcGVydHkiLCJwYXJhbVZhbHVlIiwicmVwbGFjZSIsIlJlZ0V4cCIsImVudk5hbWUiLCJlbnZWYWx1ZSIsIm9iaiIsInByb3BzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3AiLCJnZXRQcm90b3R5cGVPZiIsIl9jaGVja1N0ZXBSZXN1bHQiLCJyZWplY3QiLCJfd2FpdFN0ZXBSZXN1bHQiLCJfZGVjcnlwdFBhcmFtZXRlckZvckFwcGx5SW5Bcmd1bWVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7Ozs7Ozs7O0FBR0FBLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsRUFBOEIsU0FBOUIsRUFBeUM7QUFDckNDLEVBQUFBLEdBQUcsRUFBRSxZQUFZO0FBQ2IsUUFBSUMsSUFBSSxHQUFHQyxLQUFLLENBQUNDLGlCQUFqQjs7QUFDQUQsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixHQUEwQixVQUFVQyxDQUFWLEVBQWFDLEtBQWIsRUFBb0I7QUFBRSxhQUFPQSxLQUFQO0FBQWUsS0FBL0Q7O0FBQ0EsUUFBSUMsR0FBRyxHQUFHLElBQUlKLEtBQUosRUFBVjtBQUNBQSxJQUFBQSxLQUFLLENBQUNLLGlCQUFOLENBQXdCRCxHQUF4QjtBQUNBLFFBQUlELEtBQUssR0FBR0MsR0FBRyxDQUFDRCxLQUFoQjtBQUNBSCxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLEdBQTBCRixJQUExQjtBQUNBLFdBQU9JLEtBQVA7QUFDSDtBQVRvQyxDQUF6QztBQVlBLE1BQU1HLGVBQWUsR0FBRyxLQUF4QjtBQUNBLE1BQU1DLFlBQVksR0FBRztBQUNqQkMsRUFBQUEsU0FBUyxFQUFFLEtBRE07QUFFakJDLEVBQUFBLFFBQVEsRUFBRSxFQUZPO0FBR2pCQyxF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SUFBSSxDQUFDWixNQUFMLElBQWUsQ0FBcEQsRUFBdUQ7QUFDbkQsYUFBT1ksSUFBUDtBQUNIOztBQUNELFVBQU1vSyxRQUFRLEdBQUcsRUFBakI7O0FBQ0EsU0FBSyxJQUFJQyxHQUFULElBQWdCckssSUFBaEIsRUFBc0I7QUFDbEJvSyxNQUFBQSxRQUFRLENBQUNsSixJQUFULENBQWMsS0FBS3FLLG1DQUFMLENBQXlDbEIsR0FBekMsRUFBOENyTCxVQUE5QyxDQUFkO0FBQ0g7O0FBQ0QsV0FBT29MLFFBQVA7QUFDSDs7QUFFRG1CLEVBQUFBLG1DQUFtQyxDQUFDbEIsR0FBRCxFQUFNckwsVUFBTixFQUFrQjtBQUNqRCxRQUFJcUwsR0FBRyxJQUFJLE9BQU9BLEdBQUcsQ0FBQ0UsZ0JBQVgsS0FBZ0MsVUFBM0MsRUFBdUQ7QUFDbkQsVUFBSXZMLFVBQVUsS0FBSyxLQUFuQixFQUEwQjtBQUN0QixlQUFPLFdBQVA7QUFDSCxPQUZELE1BRU87QUFDSCxlQUFPcUwsR0FBRyxDQUFDRSxnQkFBSixFQUFQO0FBQ0g7QUFDSjs7QUFFRCxXQUFPRixHQUFQO0FBQ0g7O0FBNTVCNEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cclxuaW1wb3J0IGdsb2IgZnJvbSAnZ2xvYic7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgZGVhc3luYyBmcm9tICdkZWFzeW5jJztcclxuaW1wb3J0IEZ1dHVyZSBmcm9tICdmaWJlcnMvZnV0dXJlJztcclxuaW1wb3J0IEZpYmVyIGZyb20gJ2ZpYmVycyc7XHJcbmltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcclxuaW1wb3J0IFN0ZXBSZXN1bHQgZnJvbSAnLi4vbW9kZWwvc3RlcC1yZXN1bHQnO1xyXG5pbXBvcnQgT3h5Z2VuRXZlbnRzIGZyb20gJy4vT3h5Z2VuRXZlbnRzJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmltcG9ydCAqIGFzIGNvcmVVdGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgU1RBVFVTIGZyb20gJy4uL21vZGVsL3N0YXR1cy5qcyc7XHJcbmltcG9ydCAqIGFzIE1vZHVsZXMgZnJvbSAnLi4vb3hfbW9kdWxlcy9pbmRleCc7XHJcblxyXG4vLyBzZXR1cCBsb2dnZXJcclxuaW1wb3J0IGxvZ2dlciwgeyBERUZBVUxUX0xPR0dFUl9JU1NVRVIsIElTU1VFUlMgfSBmcm9tICcuLi9saWIvbG9nZ2VyJztcclxuaW1wb3J0IHsgT3h5Z2VuU3ViTW9kdWxlIH0gZnJvbSAnLi9PeHlnZW5TdWJNb2R1bGUnO1xyXG5cclxuLypnbG9iYWwgX19zdGFjayovXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwsICdfX3N0YWNrJywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG9yaWcgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtcclxuICAgICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIChfLCBzdGFjaykgeyByZXR1cm4gc3RhY2s7IH07XHJcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcigpO1xyXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVycik7XHJcbiAgICAgICAgdmFyIHN0YWNrID0gZXJyLnN0YWNrO1xyXG4gICAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gb3JpZztcclxuICAgICAgICByZXR1cm4gc3RhY2s7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuY29uc3QgREVGQVVMVF9USU1FT1VUID0gMzAwMDA7XHJcbmNvbnN0IERFRkFVTFRfT1BUUyA9IHtcclxuICAgIGJhY2t0cmFjZTogZmFsc2UsIC8vIDxib29sZWFuPiBzaG93IGZ1bGwgYmFja3RyYWNlIGZvciBlcnJvcnNcclxuICAgIGNvbXBpbGVyOiBbXSwgLy8gPHN0cmluZ1tdPiAoXCJleHRlbnNpb246bW9kdWxlXCIpIHJlcXVpcmUgZmlsZXMgd2l0aCB0aGUgZ2l2ZW4gRVhURU5TSU9OIGFmdGVyIHJlcXVpcmluZyBNT0RVTEUgKHJlcGVhdGFibGUpXHJcbiAgICBmYWlsQW1iaWd1b3VzRGVmaW5pdGlvbnM6IGZhbHNlLCAvLyA8Ym9vbGVhbj4gdHJlYXQgYW1iaWd1b3VzIGRlZmluaXRpb25zIGFzIGVycm9yc1xyXG4gICAgZmFpbEZhc3Q6IGZhbHNlLCAvLyA8Ym9vbGVhbj4gYWJvcnQgdGhlIHJ1biBvbiBmaXJzdCBmYWlsdXJlXHJcbiAgICBpZ25vcmVVbmRlZmluZWREZWZpbml0aW9uczogZmFsc2UsIC8vIDxib29sZWFuPiB0cmVhdCB1bmRlZmluZWQgZGVmaW5pdGlvbnMgYXMgd2FybmluZ3NcclxuICAgIG5hbWU6IFtdLCAvLyA8UkVHRVhQW10+IG9ubHkgZXhlY3V0ZSB0aGUgc2NlbmFyaW9zIHdpdGggbmFtZSBtYXRjaGluZyB0aGUgZXhwcmVzc2lvbiAocmVwZWF0YWJsZSlcclxuICAgIHByb2ZpbGU6IFtdLCAvLyA8c3RyaW5nPiAobmFtZSkgc3BlY2lmeSB0aGUgcHJvZmlsZSB0byB1c2VcclxuICAgIHJlcXVpcmU6IFtdLCAvLyA8c3RyaW5nPiAoZmlsZS9kaXIvZ2xvYikgcmVxdWlyZSBmaWxlcyBiZWZvcmUgZXhlY3V0aW5nIGZlYXR1cmVzXHJcbiAgICBvcmRlcjogJ2RlZmluZWQnLCAvLyA8c3RyaW5nPiBzd2l0Y2ggYmV0d2VlbiBkZXRlcm1pbmlzdGljICBhbmQgcmFuZG9tIGZlYXR1cmUgZXhlY3V0aW9uLiBFaXRoZXIgXCJkZWZpbmVkXCIsIFwicmFuZG9tXCIgb3IgXCJyYW5kb206NDJcIiB3aGVyZWFzIDQyIGlzIHRoZSBzZWVkIGZvciByYW5kb21pemF0aW9uXHJcbiAgICBzbmlwcGV0U3ludGF4OiB1bmRlZmluZWQsIC8vIDxzdHJpbmc+IHNwZWNpZnkgYSBjdXN0b20gc25pcHBldCBzeW50YXhcclxuICAgIHNuaXBwZXRzOiB0cnVlLCAvLyA8Ym9vbGVhbj4gaGlkZSBzdGVwIGRlZmluaXRpb24gc25pcHBldHMgZm9yIHBlbmRpbmcgc3RlcHNcclxuICAgIHNvdXJjZTogdHJ1ZSwgLy8gPGJvb2xlYW4+IGhpZGUgc291cmNlIHVyaXNcclxuICAgIHN0cmljdDogZmFsc2UsIC8vIDxib29sZWFuPiBmYWlsIGlmIHRoZXJlIGFyZSBhbnkgdW5kZWZpbmVkIG9yIHBlbmRpbmcgc3RlcHNcclxuICAgIHRhZ0V4cHJlc3Npb246ICcnLCAvLyA8c3RyaW5nPiAoZXhwcmVzc2lvbikgb25seSBleGVjdXRlIHRoZSBmZWF0dXJlcyBvciBzY2VuYXJpb3Mgd2l0aCB0YWdzIG1hdGNoaW5nIHRoZSBleHByZXNzaW9uXHJcbiAgICB0YWdzSW5UaXRsZTogZmFsc2UsIC8vIDxib29sZWFuPiBhZGQgY3VjdW1iZXIgdGFncyB0byBmZWF0dXJlIG9yIHNjZW5hcmlvIG5hbWVcclxuICAgIHRpbWVvdXQ6IERFRkFVTFRfVElNRU9VVCAvLyA8bnVtYmVyPiB0aW1lb3V0IGZvciBzdGVwIGRlZmluaXRpb25zIGluIG1pbGxpc2Vjb25kc1xyXG59O1xyXG5jb25zdCBNT0RVTEVfTkFNRV9NQVRDSF9SRUdFWCA9IC9ebW9kdWxlLSguKz8pXFwuanMkLztcclxuY29uc3QgU0VSVklDRV9OQU1FX01BVENIX1JFR0VYID0gL15zZXJ2aWNlLSguKz8pXFwuanMkLztcclxuY29uc3QgRE9fTk9UX1dSQVBfTUVUSE9EUyA9IFsnZHJpdmVyJywgJ2dldERyaXZlciddO1xyXG5cclxuY29uc3QgREVGQVVMVF9DVFggPSB7XHJcbiAgICBwYXJhbXM6IHt9LFxyXG4gICAgdmFyczoge30sXHJcbiAgICBlbnY6IHt9LFxyXG4gICAgY2Fwczoge31cclxufTtcclxuY29uc3QgREVGQVVMVF9SRVNVTFRfU1RPUkUgPSB7XHJcbiAgICBzdGVwczogW10sXHJcbiAgICBsb2dzOiBbXSxcclxuICAgIGhhcjogbnVsbFxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3h5Z2VuIGV4dGVuZHMgT3h5Z2VuRXZlbnRzIHtcclxuICAgIGNvbnN0cnVjdG9yICgpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzdWx0U3RvcmUgPSB7IC4uLkRFRkFVTFRfUkVTVUxUX1NUT1JFIH07XHJcbiAgICAgICAgdGhpcy5jdHggPSB7IC4uLkRFRkFVTFRfQ1RYIH07XHJcbiAgICAgICAgdGhpcy5tb2R1bGVzID0ge307XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMucmVwbyA9IHt9O1xyXG4gICAgICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gbnVsbDtcclxuICAgICAgICB0aGlzLm9wdHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMub3hCYXNlRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLycpO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyID0gdGhpcy5fd3JhcExvZ2dlcihsb2dnZXIoJ094eWdlbicpKTtcclxuICAgICAgICB0aGlzLl93YWl0U3RlcFJlc3VsdExpc3QgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0KG9wdGlvbnMsIGNhcHMsIGN0eCA9IHt9LCByZXN1bHRzID0ge30pIHtcclxuICAgICAgICB0aGlzLm9wdHMgPSBPYmplY3QuYXNzaWduKERFRkFVTFRfT1BUUywgb3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5jd2QgPSB0aGlzLm9wdHMuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICAgICAgdGhpcy5jdHggPSBPYmplY3QuYXNzaWduKERFRkFVTFRfQ1RYLCBjdHggfHwge30pO1xyXG4gICAgICAgIHRoaXMuY3R4LmNhcHMgPSB7IC4uLmN0eC5jYXBzIHx8IHt9LCAuLi5jYXBzLCB9O1xyXG4gICAgICAgIHRoaXMucmVzdWx0U3RvcmUgPSBPYmplY3QuYXNzaWduKERFRkFVTFRfUkVTVUxUX1NUT1JFLCByZXN1bHRzIHx8IHt9KTtcclxuICAgICAgICB0aGlzLmNhcGFiaWxpdGllcyA9IHRoaXMuY3R4LmNhcHMgPSBjYXBzO1xyXG5cclxuICAgICAgICAvLyBkZWZpbmUgJ294JyBvYmplY3QgaW4gZ2xvYmFsIEpTIHNjb3BlXHJcbiAgICAgICAgLy8gd2Ugd2lsbCB1c2UgdGhpcyBvYmplY3QgdG8gYWNjZXNzIE94eWdlbiBtb2R1bGVzIGFuZCB0ZXN0IGNvbnRleHQgZnJvbSBtb2R1bGVzIHVzZWQgaW4gdGhlIHRlc3QgKGlmIGFueSkgICAgICAgIFxyXG4gICAgICAgIHRoaXMubWFrZU94R2xvYmFsKCk7XHJcbiAgICAgICAgLy8gbG9hZCBzZXJ2aWNlc1xyXG4gICAgICAgIHRoaXMuX2xvYWRTZXJ2aWNlcygpO1xyXG4gICAgICAgIC8vIGxvYWQgbW9kdWxlc1xyXG4gICAgICAgIHRoaXMuX2xvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgLy8gaWYgb3B0aW9ucy5tYWtlTW9kdWxlc0dsb2JhbCBpcyB0cnVlIG9yIHVuZGVmaW5lZCB0aGFuIGRlZmluZSAnY3R4JyBjb250ZW50IGFuZCBlYWNoIG1vZHVsZSBpbiBnbG9iYWwgc2NvcGVcclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZ2xvYmFsU2NvcGUgPT09ICd1bmRlZmluZWQnIHx8IG9wdGlvbnMuZ2xvYmFsU2NvcGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5tYWtlQ29udGV4dEFuZE1vZHVsZXNHbG9iYWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkaXNwb3NlTW9kdWxlcyhzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGlzcG9zZU1vZHVsZXMoc3RhdHVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRpc3Bvc2UgbW9kdWxlczogJywgZSk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2Rpc3Bvc2VNb2R1bGVzKHN0YXR1cyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2Rpc3Bvc2VTZXJ2aWNlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkaXNwb3NlOiAnLCBlKTtcclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGFkanVzdFNjcmlwdExpbmUoKSB7XHJcbiAgICAgICAgY29uc3QgaXNJbkRlYnVnTW9kZSA9IG94dXRpbC5pc0luRGVidWdNb2RlKCk7XHJcbiAgICAgICAgLy8gYWRkIGV4dHJhIGxpbmUgaWYgd2UgYXJlIHJ1bm5pbmcgaW4gZGVidWdnZXIgbW9kZSAoVjggZGVidWdnZXIgYWRkcyBhbiBleHRyYSBsaW5lIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUpXHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaXNJbkRlYnVnTW9kZSA/IC0xIDogMDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb250ZXh0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN0eDtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgY29udGV4dChjdHgpIHtcclxuICAgICAgICB0aGlzLmN0eCA9IGN0eDtcclxuICAgICAgICBpZiAoZ2xvYmFsLm94KSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5veC5jdHggPSBjdHg7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBcInBhcmFtc1wiIGFuZCBcImVudlwiIGluIFwib3hcIiBnbG9iYWwgdmFyaWFibGVcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5wYXJhbXMgPSBjdHgucGFyYW1zIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmVudiA9IGN0eC5lbnYgfHwge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlcG9zaXRvcnkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwbztcclxuICAgIH1cclxuXHJcbiAgICBzZXQgcmVwb3NpdG9yeShyZXBvKSB7XHJcbiAgICAgICAgdGhpcy5yZXBvID0gcmVwbztcclxuICAgICAgICBpZiAoZ2xvYmFsLm94KSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5veC5yZXBvID0gcmVwbztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlc3VsdHMoKSB7XHJcbiAgICAgICAgLy8gY2FsY3VsYXRlIHRpbWUgZm9yIHRoZSB0cmFuc2FjdGlvbiBpdHNlbGYgLSBzdW1tYXJ5IG9mIGR1cmF0aW9ucyBmb3IgYWxsIHRoZSBzdGVwcyBpbiB0aGlzIHRyYW5zYWN0aW9uXHJcbiAgICAgICAgLy8gYWxzbyBhZGp1c3QgdHJhbnNhY3Rpb24gZW5kIHRpbWUgdG8gbXVjaCBlbmQgdGltZSBmb3IgdGhlIGxhc3QgZXhlY3V0ZWQgc3RlcCB3aXRoaW4gdGhpcyB0cmFuc2FjdGlvbi5cclxuICAgICAgICBmb3IgKGNvbnN0IHRyYW5zU3RlcCBvZiB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzKSB7XHJcbiAgICAgICAgICAgIGlmICh0cmFuc1N0ZXAubmFtZS5pbmNsdWRlcygnLnRyYW5zYWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zTmFtZSA9IHRyYW5zU3RlcC50cmFuc2FjdGlvbjtcclxuICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5kdXJhdGlvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgdGhpcy5yZXN1bHRTdG9yZS5zdGVwcykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0ZXAgYmVsb25ncyB0byB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiAmIGlzIG5vdCB0aGUgdHJhbnNhY3Rpb24gc3RlcFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLnRyYW5zYWN0aW9uID09PSB0cmFuc05hbWUgJiYgc3RlcCAhPT0gdHJhbnNTdGVwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5kdXJhdGlvbiArPSBzdGVwLmR1cmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RlcC5lbmRUaW1lID4gdHJhbnNTdGVwLmVuZFRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5lbmRUaW1lID0gc3RlcC5lbmRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdFN0b3JlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1vZHVsZXNDYXBhYmlsaXRpZXMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZHVsZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZENhcHMgPSB7fTtcclxuICAgICAgICBmb3IgKGxldCBtb2R1bGVOYW1lIGluIHRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV07XHJcbiAgICAgICAgICAgIGlmIChtb2R1bGUubmFtZSAmJiBtb2R1bGUuX2dldENhcGFiaWxpdGllcyAmJiB0eXBlb2YgbW9kdWxlLl9nZXRDYXBhYmlsaXRpZXMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhcHMgPSBtb2R1bGUuX2dldENhcGFiaWxpdGllcygpO1xyXG4gICAgICAgICAgICAgICAgLy8gc3RvcmUgb25seSBub24tZW1wdHkgY2FwcyBwZXIgbW9kdWxlIHRoYXQgaGFzIHRoaXMuY2FwcyBwcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgaWYgKGNhcHMgJiYgdHlwZW9mIGNhcHMgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKGNhcHMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBtb2RDYXBzW21vZHVsZS5uYW1lXSA9IGNhcHM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1vZENhcHM7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRSZXN1bHRzKCkge1xyXG4gICAgICAgIHRoaXMucmVzdWx0U3RvcmUuc3RlcHMgPSBbXTtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLmxvZ3MgPSBbXTtcclxuICAgICAgICB0aGlzLmhhciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25CZWZvcmVDYXNlKGNvbnRleHQpIHtcclxuICAgICAgICBmb3IgKGxldCBtb2R1bGVOYW1lIGluIHRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV07XHJcbiAgICAgICAgICAgIGlmICghbW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLm9uQmVmb3JlQ2FzZSAmJiBhd2FpdCBtb2R1bGUub25CZWZvcmVDYXNlKGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLl9pdGVyYXRpb25TdGFydCAmJiBhd2FpdCBtb2R1bGUuX2l0ZXJhdGlvblN0YXJ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uQmVmb3JlQ2FzZVwiIG1ldGhvZCBvZiAke21vZHVsZU5hbWV9IG1vZHVsZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkFmdGVyQ2FzZShlcnJvciA9IG51bGwpIHtcclxuICAgICAgICBmb3IgKGxldCBtb2R1bGVOYW1lIGluIHRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV07XHJcbiAgICAgICAgICAgIGlmICghbW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gYXdhaXQgZm9yIGF2b2lkIHN0dWNrIG9uICouZGlzcG9zZSBjYWxsXHJcbiAgICAgICAgICAgICAgICBtb2R1bGUub25BZnRlckNhc2UgJiYgYXdhaXQgbW9kdWxlLm9uQWZ0ZXJDYXNlKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5faXRlcmF0aW9uRW5kICYmIGF3YWl0IG1vZHVsZS5faXRlcmF0aW9uRW5kKGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjYWxsIFwib25BZnRlckNhc2VcIiBtZXRob2Qgb2YgJHttb2R1bGVOYW1lfSBtb2R1bGUuYCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZU94R2xvYmFsKCkge1xyXG4gICAgICAgIGlmICghZ2xvYmFsLm94KSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5veCA9IHtcclxuICAgICAgICAgICAgICAgIG1vZHVsZXM6IHRoaXMubW9kdWxlcyxcclxuICAgICAgICAgICAgICAgIGN0eDogdGhpcy5jdHgsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLm9wdHMsXHJcbiAgICAgICAgICAgICAgICBjYXBzOiB0aGlzLmNhcGFiaWxpdGllcyxcclxuICAgICAgICAgICAgICAgIHJlc3VsdFN0b3JlOiB0aGlzLnJlc3VsdFN0b3JlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBnbG9iYWwudmFycyA9IHRoaXMuY3R4LnZhcnM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VDb250ZXh0QW5kTW9kdWxlc0dsb2JhbCgpIHtcclxuICAgICAgICAvLyBtYWtlIHN1cmUgJ294JyBpcyBhbHJlYWR5IGdsb2JhbFxyXG4gICAgICAgIGlmIChnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgLy8gZXhwb3NlIG1vZHVsZXMgYXMgZ2xvYmFsIHZhcmlhYmxlc1xyXG4gICAgICAgICAgICBmb3IgKGxldCBtb2R1bGVOYW1lIGluIHRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFnbG9iYWxbbW9kdWxlTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBnbG9iYWxbbW9kdWxlTmFtZV0gPSB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gZXhwb3NlIFwiY3R4XCIsIFwicGFyYW1zXCIgYW5kIFwiZW52XCIgYXMgZ2xvYmFsIHZhcmlhYmxlc1xyXG4gICAgICAgICAgICBnbG9iYWwucGFyYW1zID0gZ2xvYmFsLm94LmN0eC5wYXJhbXM7XHJcbiAgICAgICAgICAgIGdsb2JhbC5lbnYgPSBnbG9iYWwub3guY3R4LmVudjtcclxuICAgICAgICAgICAgZ2xvYmFsLmN0eCA9IGdsb2JhbC5veC5jdHg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQYWdlT2JqZWN0RmlsZShwb1BhdGgpIHtcclxuICAgICAgICBpZiAoIXBvUGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvID0gcmVxdWlyZShwb1BhdGgpO1xyXG4gICAgICAgICAgICAvLyBzZXQgcGFnZSBvYmplY3QgcmVwb3NpdG9yeSBhcyB0aGUgbWFpbiBvbmVcclxuICAgICAgICAgICAgdGhpcy5yZXBvc2l0b3J5ID0gcG87XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5wbyA9IHBvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvclxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBnbG9iYWwucG8gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZSBNZXRob2RzXHJcbiAgICAgKi9cclxuICAgIF93cmFwTG9nZ2VyKF9sb2dnZXIpIHtcclxuICAgICAgICBjb25zdCBsb2dnZXJXcmFwID0ge1xyXG4gICAgICAgICAgICBpbmZvOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdpbmZvJywgYXJncyksXHJcbiAgICAgICAgICAgIGRlYnVnOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdkZWJ1ZycsIGFyZ3MpLFxyXG4gICAgICAgICAgICBlcnJvcjogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnZXJyb3InLCBhcmdzKSxcclxuICAgICAgICAgICAgd2FybjogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnd2FybicsIGFyZ3MpLFxyXG4gICAgICAgICAgICB1c2VySW5mbzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnaW5mbycsIGFyZ3MsIElTU1VFUlMuVVNFUiksXHJcbiAgICAgICAgICAgIHVzZXJEZWJ1ZzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnZGVidWcnLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxyXG4gICAgICAgICAgICB1c2VyRXJyb3I6ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2Vycm9yJywgYXJncywgSVNTVUVSUy5VU0VSKSxcclxuICAgICAgICAgICAgdXNlcldhcm46ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ3dhcm4nLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGxvZ2dlcldyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvZyhfbG9nZ2VyLCBsZXZlbCwgYXJncywgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XHJcbiAgICAgICAgaWYgKCFfbG9nZ2VyW2xldmVsXSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sb2dnZXJbbGV2ZWxdLmFwcGx5KF9sb2dnZXIsIGFyZ3MpO1xyXG5cclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gb3h1dGlsLnN0cmluZ2lmeShhcmdzLCAyKTtcclxuICAgICAgICBjb25zdCB0aW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIC8vIGFkZCB0aGUgbG9nIGVudHJ5IHRvIHRoZSByZXN1bHQgc3RvcmVcclxuICAgICAgICBpZiAodGhpcy5yZXN1bHRTdG9yZSAmJiB0aGlzLnJlc3VsdFN0b3JlLmxvZ3MpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5sb2dzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGltZTogdGltZSxcclxuICAgICAgICAgICAgICAgIGxldmVsOiBsZXZlbC50b1VwcGVyQ2FzZSgpLFxyXG4gICAgICAgICAgICAgICAgbXNnOiBtZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgc3JjOiBzcmNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHJlbW92ZSBmaXJzdCBhcmd1bWVudCwgaWYgaXQncyBhIG1lc3NhZ2VcclxuICAgICAgICBhcmdzID0gbWVzc2FnZSA/IGFyZ3Muc2hpZnQoKSA6IGFyZ3M7XHJcbiAgICAgICAgdGhpcy5lbWl0TG9nKHRpbWUsIGxldmVsLCBtZXNzYWdlLCBhcmdzLCBzcmMpO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkU2VydmljZXMoKSB7XHJcbiAgICAgICAgY29uc3Qgb3hTZXJ2aWNlc0RpclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5veEJhc2VEaXIsICcuL294X3NlcnZpY2VzJyk7XHJcbiAgICAgICAgY29uc3Qgc2VydmljZUZpbGVzID0gZ2xvYi5zeW5jKCdzZXJ2aWNlLSouanMnLCB7IGN3ZDogb3hTZXJ2aWNlc0RpclBhdGggfSk7XHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBhbGwgc2VydmljZXNcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBzZXJ2aWNlcy4uLicpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcnZpY2VGaWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlRmlsZU5hbWUgPSBzZXJ2aWNlRmlsZXNbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VGaWxlUGF0aCA9IHBhdGguam9pbihveFNlcnZpY2VzRGlyUGF0aCwgc2VydmljZUZpbGVOYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc2VydmljZUZpbGVOYW1lLm1hdGNoKFNFUlZJQ0VfTkFNRV9NQVRDSF9SRUdFWCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gcmVzdWx0WzFdO1xyXG5cclxuICAgICAgICAgICAgLy8gdGhpcy5vcHRzLnNlcnZpY2VzID0gdW5kZWZpbmVkIGluIHNpbmdsZSBmaWxlIG1vZGVcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRzLnNlcnZpY2VzKSAmJiAhdGhpcy5vcHRzLnNlcnZpY2VzLmluY2x1ZGVzKHNlcnZpY2VOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBzZXJ2aWNlOiAnICsgc2VydmljZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuX2xvYWRTZXJ2aWNlKHNlcnZpY2VOYW1lLCBzZXJ2aWNlRmlsZVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgc2VydmljZS5pbml0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXSA9IHNlcnZpY2U7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgc2VydmljZSBcIicgKyBzZXJ2aWNlTmFtZSArICdcIjogJyArIGUubWVzc2FnZSArIEVPTCArIChlLnN0YWNrdHJhY2UgPyBlLnN0YWNrdHJhY2UgOiAnJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX2xvYWRTZXJ2aWNlKHNlcnZpY2VOYW1lLCBzZXJ2aWNlUGF0aCkge1xyXG4gICAgICAgIGxldCBTZXJ2aWNlQ2xhc3MgPSByZXF1aXJlKHNlcnZpY2VQYXRoKTtcclxuICAgICAgICAvLyBFUzYgY2xhc3Mgd2lsbCBiZSB1bmRlciAnZGVmYXVsdCcgcHJvcGVydHlcclxuICAgICAgICBpZiAoU2VydmljZUNsYXNzLmRlZmF1bHQpIHtcclxuICAgICAgICAgICAgU2VydmljZUNsYXNzID0gU2VydmljZUNsYXNzLmRlZmF1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNlcnZpY2VMb2dnZXIgPSB0aGlzLl93cmFwTG9nZ2VyKGxvZ2dlcihgU2VydmljZToke3NlcnZpY2VOYW1lfWApKTtcclxuICAgICAgICByZXR1cm4gbmV3IFNlcnZpY2VDbGFzcyh0aGlzLm9wdHMsIHRoaXMuY3R4LCB0aGlzLnJlc3VsdFN0b3JlLCBzZXJ2aWNlTG9nZ2VyKTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZE1vZHVsZXMoKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgaW50ZXJuYWwgbW9kdWxlcy4uLicpO1xyXG4gICAgICAgIHRoaXMuX2xvYWRJbnRlcm5hbE1vZHVsZXMoKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBleHRlcm5hbCBtb2R1bGVzLi4uJyk7XHJcbiAgICAgICAgdGhpcy5fbG9hZEV4dGVybmFsTW9kdWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkRXh0ZXJuYWxNb2R1bGVzKCkge1xyXG4gICAgICAgIGxldCBtb2R1bGVzRm9sZGVyUGF0aCA9ICcuL21vZHVsZXMnO1xyXG4gICAgICAgIGlmICh0aGlzLm9wdHMubW9kdWxlc19leHQgJiYgdHlwZW9mIHRoaXMub3B0cy5tb2R1bGVzX2V4dCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgbW9kdWxlc0ZvbGRlclBhdGggPSB0aGlzLm9wdHMubW9kdWxlc19leHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vY29uc3Qgb3hNb2R1bGVzRGlyUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLm94QmFzZURpciwgJy4vb3hfbW9kdWxlcycpO1xyXG4gICAgICAgIGNvbnN0IG94TW9kdWxlc0RpclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5jd2QsIG1vZHVsZXNGb2xkZXJQYXRoKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMob3hNb2R1bGVzRGlyUGF0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbW9kdWxlRmlsZXMgPSBbXTtcclxuICAgICAgICAvLyBpZiBwYXJ0aWN1bGFyIG1vZHVsZSBuYW1lcyBhcmUgZGVmaW5lZCBpbiB0aGUgY29uZmlnLCB0aGVuIGxvYWQgb25seSB0aGVzZSBtb2R1bGVzXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRzLm1vZHVsZXMpICYmIHRoaXMub3B0cy5tb2R1bGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vcHRzLm1vZHVsZXMuZm9yRWFjaChtb2R1bGVOYW1lID0+IG1vZHVsZUZpbGVzLnB1c2goYG1vZHVsZS0ke21vZHVsZU5hbWV9LmpzYCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBvdGhlcndpc2UsIGxvYWQgYWxsIGF2YWlsYWJsZSBtb2R1bGVzIChtaWdodCBiZSBtb3JlIHRpbWUgY29uc3VtaW5nKVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtb2R1bGVGaWxlcyA9IGdsb2Iuc3luYygnbW9kdWxlLSouanMnLCB7IGN3ZDogb3hNb2R1bGVzRGlyUGF0aCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBhbGwgbW9kdWxlcyAgICAgICAgXHJcbiAgICAgICAgZm9yIChsZXQgbW9kdWxlRmlsZU5hbWUgb2YgbW9kdWxlRmlsZXMpIHtcclxuICAgICAgICAgICAgLy8gZXh0cmFjdCBuYW1lIGZyb20gdGhlIG1vZHVsZSBmaWxlIG5hbWUgYmFzZWQgb24gbW9kdWxlIG5hbWUgcGF0dGVyblxyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGVOYW1lID0gbW9kdWxlRmlsZU5hbWUubWF0Y2goTU9EVUxFX05BTUVfTUFUQ0hfUkVHRVgpWzFdO1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIG5ldyBsb2dnZXIgZm9yIHRoZSBtb2R1bGVcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZUxvZ2dlciA9IHRoaXMuX3dyYXBMb2dnZXIobG9nZ2VyKGBNb2R1bGU6JHttb2R1bGVOYW1lfWApKTtcclxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IG1vZHVsZSBpbnN0YW5jZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kID0gY29yZVV0aWxzLmxvYWRNb2R1bGVGcm9tRmlsZShtb2R1bGVOYW1lLCBtb2R1bGVGaWxlTmFtZSwgbW9kdWxlTG9nZ2VyLCBveE1vZHVsZXNEaXJQYXRoLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vIGNhbGwgb25Nb2R1bGVMb2FkZWQgaG9va1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbFNlcnZpY2VzT25Nb2R1bGVMb2FkZWQobW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgbW9kdWxlIHRvIHRoZSBtb2R1bGUgbGlzdFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdID0gZ2xvYmFsLm94Lm1vZHVsZXNbbW9kdWxlTmFtZV0gPSB0aGlzLl93cmFwTW9kdWxlKG1vZHVsZU5hbWUsIG1vZCk7XHJcbiAgICAgICAgICAgICAgICAvLyB3cmFwIHVwXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKGVuZFRpbWUgLSBzdGFydFRpbWUpIC8gMTAwMDtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIG1vZHVsZTogJyArIG1vZHVsZU5hbWUgKyAnIFsgJyArIGR1cmF0aW9uICsgJyBzZWMgXScpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIG1vZHVsZSBcIicgKyBtb2R1bGVOYW1lICsgJ1wiOiAnICsgZS5tZXNzYWdlICsgRU9MICsgKGUuc3RhY2t0cmFjZSA/IGUuc3RhY2t0cmFjZSA6ICcnKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgYW55IG1vZHVsZSB0aGF0IGZhaWxlZCB0byBsb2FkLCBleGNlcHQgV2ViIGFuZCBNb2IgbW9kdWxlc1xyXG4gICAgICAgICAgICAgICAgLy8gd2l0aG91dCBNb2IgYW5kIFdlYiBtb2R1bGVzIGxvYWRlZCwgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc2hhbGwgZmFpbFxyXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT09ICd3ZWInIHx8IG1vZHVsZU5hbWUgPT09ICdtb2InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRJbnRlcm5hbE1vZHVsZXMoKSB7XHJcbiAgICAgICAgLy8gaWYgYG1vZHVsZXNgIGlzIGVtcHR5IG9yIHVuZGVmaW5lZCBpbiBveHlnZW4uY29uZiB0aGVuIGxvYWQgYWxsIG1vZHVsZXNcclxuICAgICAgICAvLyBvdGhlcndpc2UsIGxvYWQgb25seSB0aG9zZSBpbXBsaWNpdGx5IGRlZmluZWRcclxuICAgICAgICBjb25zdCBleGNsdWRlVW5kZWZpbmVkTW9kcyA9IHRoaXMub3B0cy5tb2R1bGVzICYmIHRoaXMub3B0cy5tb2R1bGVzLmxlbmd0aCA+IDA7XHJcblxyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgb2YgT2JqZWN0LmtleXMoTW9kdWxlcykpIHtcclxuICAgICAgICAgICAgaWYgKGV4Y2x1ZGVVbmRlZmluZWRNb2RzICYmICF0aGlzLm9wdHMubW9kdWxlcy5pbmNsdWRlcyhtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgTW9kdWxlQ2xhc3MgPSBNb2R1bGVzW21vZHVsZU5hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBveE1vZHVsZXNEaXJQYXRoID0gb3h1dGlsLmdldE94TW9kdWxlc0RpcigpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IGxvZ2dlciBmb3IgdGhlIG1vZHVsZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlTG9nZ2VyID0gdGhpcy5fd3JhcExvZ2dlcihsb2dnZXIoYE1vZHVsZToke21vZHVsZU5hbWV9YCkpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBuZXcgbW9kdWxlIGluc3RhbmNlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2QgPSBjb3JlVXRpbHMubG9hZE1vZHVsZUZyb21DbGFzcyhtb2R1bGVOYW1lLCBNb2R1bGVDbGFzcywgbW9kdWxlTG9nZ2VyLCBveE1vZHVsZXNEaXJQYXRoLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vIGNhbGwgb25Nb2R1bGVMb2FkZWQgaG9va1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbFNlcnZpY2VzT25Nb2R1bGVMb2FkZWQobW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgbW9kdWxlIHRvIHRoZSBtb2R1bGUgbGlzdFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdID0gZ2xvYmFsLm94Lm1vZHVsZXNbbW9kdWxlTmFtZV0gPSB0aGlzLl93cmFwTW9kdWxlKG1vZHVsZU5hbWUsIG1vZCk7XHJcbiAgICAgICAgICAgICAgICAvLyB3cmFwIHVwXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKGVuZFRpbWUgLSBzdGFydFRpbWUpIC8gMTAwMDtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIG1vZHVsZTogJyArIG1vZHVsZU5hbWUgKyAnIFsgJyArIGR1cmF0aW9uICsgJyBzZWMgXScpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIG1vZHVsZSBcIicgKyBtb2R1bGVOYW1lICsgJ1wiOiAnICsgZS5tZXNzYWdlICsgRU9MICsgKGUuc3RhY2t0cmFjZSA/IGUuc3RhY2t0cmFjZSA6ICcnKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgYW55IG1vZHVsZSB0aGF0IGZhaWxlZCB0byBsb2FkLCBleGNlcHQgV2ViIGFuZCBNb2IgbW9kdWxlc1xyXG4gICAgICAgICAgICAgICAgLy8gd2l0aG91dCBNb2IgYW5kIFdlYiBtb2R1bGVzIGxvYWRlZCwgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc2hhbGwgZmFpbFxyXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT09ICd3ZWInIHx8IG1vZHVsZU5hbWUgPT09ICdtb2InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3dyYXBNb2R1bGUobmFtZSwgbW9kdWxlKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IHtcclxuICAgICAgICAgICAgbmFtZTogbmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGxldCBtb2R1bGVNZXRob2RzID0gT2JqZWN0LmtleXMobW9kdWxlKTtcclxuICAgICAgICBpZiAoIW1vZHVsZU1ldGhvZHMuc29tZSh4ID0+IHg9PT0gJ2V4cG9ydHMnKSkge1xyXG4gICAgICAgICAgICBtb2R1bGVNZXRob2RzID0gdGhpcy5fZ2V0QWxsUHJvcGVydHlOYW1lcyhtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBtZXRob2ROYW1lIG9mIG1vZHVsZU1ldGhvZHMpIHtcclxuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gbW9kdWxlW21ldGhvZE5hbWVdO1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgYW55IG1vZHVsZSBwcm9wZXJ0eSB0aGF0IGlzIG5vdCBhIGZ1bmN0aW9uIG9yIGEgT3h5Z2VuU3ViTW9kdWxlXHJcbiAgICAgICAgICAgIGlmICgoIShtZXRob2QgaW5zdGFuY2VvZiBGdW5jdGlvbikgJiYgIShtZXRob2QgaW5zdGFuY2VvZiBPeHlnZW5TdWJNb2R1bGUpICYmIHR5cGVvZiBtZXRob2QgIT09ICdmdW5jdGlvbicpIHx8IG1ldGhvZE5hbWUgPT09ICdleHBvcnRzJyB8fCBtZXRob2ROYW1lID09PSAnX2NvbXBpbGUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBtYXAgYW5kIHdyYXAgc3ViLW1vZHVsZSBtZXRob2RzIChyZWN1cnNpdmUgY2FsbCB0byBfd3JhcE1vZHVsZSlcclxuICAgICAgICAgICAgaWYgKG1ldGhvZCBpbnN0YW5jZW9mIE94eWdlblN1Yk1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9IHRoaXMuX3dyYXBNb2R1bGUoYCR7bmFtZX0uJHttZXRob2ROYW1lfWAsIG1ldGhvZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gZG8gbm90IHdyYXAgbWV0aG9kc1xyXG4gICAgICAgICAgICBlbHNlIGlmIChET19OT1RfV1JBUF9NRVRIT0RTLmluY2x1ZGVzKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyA9PT0gJ2RyaXZlcicgfHwgbWV0aG9kTmFtZSA9PT0gJ2dldERyaXZlcidcclxuICAgICAgICAgICAgICAgIHdyYXBwZXJbbWV0aG9kTmFtZV0gPSBtb2R1bGVbbWV0aG9kTmFtZV0uYmluZChtb2R1bGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHByaXZhdGUgbWV0aG9kcyBhbmQgZXZlbnQgaGFuZGxlcnNcclxuICAgICAgICAgICAgZWxzZSBpZiAobWV0aG9kTmFtZS5pbmRleE9mKCdfJykgPT09IDAgfHwgbWV0aG9kTmFtZS5pbmRleE9mKCdvbicpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5sb2dnZXIuZGVidWcoJ0V4ZWN1dGluZzogJyArIG94dXRpbC5nZXRNZXRob2RTaWduYXR1cmUobmFtZSwgbWV0aG9kTmFtZSwgYXJncykpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlW21ldGhvZE5hbWVdLmFwcGx5KG1vZHVsZSwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvckhlbHBlci5nZXRPeHlnZW5FcnJvcihlLCBuYW1lLCBtZXRob2ROYW1lLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGFuIGludGVybmFsIF9nZXRDYXBhYmlsaXRpZXMgbWV0aG9kIGZvciBpbnRlcm5hbCBPeHlnZW4gQ29yZSB1c2VcclxuICAgICAgICAgICAgICAgIC8vIGNhbGxpbmcgX2dldENhcGFiaWxpdGllcyBtZXRob2Qgd29uJ3QgYmUgdmlzaWJsZSBpbiB0aGUgdGVzdCByZXN1bHRzXHJcbiAgICAgICAgICAgICAgICBpZiAobWV0aG9kTmFtZSA9PT0gJ2dldENhcGFiaWxpdGllcycpIHtcclxuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyWydfZ2V0Q2FwYWJpbGl0aWVzJ10gPSBtZXRob2QuYmluZChtb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9ICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9jb21tYW5kV3JhcHBlcihtZXRob2ROYW1lLCBhcmdzLCBtb2R1bGUsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE94RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ1Rocm93aW5nIGFnYWluOicsIGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9ySGVscGVyLmdldE94eWdlbkVycm9yKGUsIG5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHdyYXBwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgX2NvbW1hbmRXcmFwcGVyKGNtZE5hbWUsIGNtZEFyZ3MsIG1vZHVsZSwgbW9kdWxlTmFtZSkge1xyXG4gICAgICAgIGlmICghbW9kdWxlIHx8ICFtb2R1bGVbY21kTmFtZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCByZXR2YWwgPSBudWxsO1xyXG4gICAgICAgIGxldCBlcnJvciA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgY21kRm4gPSBtb2R1bGVbY21kTmFtZV07XHJcbiAgICAgICAgY29uc3QgcHVibGljTWV0aG9kID0gIWNtZE5hbWUuc3RhcnRzV2l0aCgnXycpICYmIGNtZE5hbWUgIT09ICdkaXNwb3NlJztcclxuXHJcbiAgICAgICAgLy8gZGVsYXkgdGhlIGNvbW1hbmQgZXhlY3V0aW9uIGlmIHJlcXVpcmVkXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLm9wdHMuZGVsYXkgJiZcclxuICAgICAgICAgICAgcHVibGljTWV0aG9kICYmXHJcbiAgICAgICAgICAgIGNtZE5hbWUgIT09ICdpbml0JyAmJlxyXG4gICAgICAgICAgICBjbWROYW1lICE9PSAndHJhbnNhY3Rpb24nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGRlYXN5bmMuc2xlZXAodGhpcy5vcHRzLmRlbGF5ICogMTAwMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aHJvdyBpZiBhIGNvbW1hbmQgZXhlY3V0ZWQgb24gdW5pdGlhbGl6ZWQgbW9kdWxlIChleGNlcHQgaW50ZXJuYWwgbWV0aG9kcyBhbmQgYSBmZXcgb3RoZXIpXHJcbiAgICAgICAgaWYgKCFtb2R1bGUuaXNJbml0aWFsaXplZCAmJiBwdWJsaWNNZXRob2QgJiYgY21kTmFtZSAhPT0gJ2luaXQnICYmIGNtZE5hbWUgIT09ICd0cmFuc2FjdGlvbicpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdNaXNzaW5nICcgKyBtb2R1bGVOYW1lICsgJy5pbml0KCknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGRlY3R5cHQgYXJndW1lbnRzXHJcbiAgICAgICAgY29uc3QgZGVjcnlwdGVkQXJncyA9IHRoaXMuX2dldERlY3J5cHRlZEFyZ3NGb3JBcHBseShjbWRBcmdzLCBtb2R1bGVOYW1lKTtcclxuXHJcbiAgICAgICAgLy8gcmVwbGFjZSBwYXJhbWV0ZXJzIGluIG1ldGhvZCBhcmd1bWVudHMgd2l0aCBjb3JyZXNwb25kaW5nIHZhbHVlc1xyXG4gICAgICAgIGNtZEFyZ3MgPSB0aGlzLl9wb3B1bGF0ZVBhcmFtZXRlcnNWYWx1ZShjbWRBcmdzKTtcclxuICAgICAgICAvLyBzdGFydCBtZWFzdXJpbmcgbWV0aG9kIGV4ZWN1dGlvbiB0aW1lXHJcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG5cclxuICAgICAgICAvLyBhZGQgY29tbWFuZCBsb2NhdGlvbiBpbmZvcm1hdGlvbiAoZS5nLiBmaWxlIG5hbWUgYW5kIGNvbW1hbmQgbGluZSlcclxuICAgICAgICBsZXQgY21kTG9jYXRpb24gPSBudWxsO1xyXG4gICAgICAgIC8vIGRvIG5vdCByZXBvcnQgcmVzdWx0cyBvciBsaW5lIHVwZGF0ZXMgb24gaW50ZXJuYWwgbWV0aG9kcyAoc3RhcnRlZCB3aXRoICdfJylcclxuICAgICAgICBpZiAocHVibGljTWV0aG9kKSB7XHJcbiAgICAgICAgICAgIGNtZExvY2F0aW9uID0gdGhpcy5fZ2V0Q29tbWFuZExvY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdEJlZm9yZUNvbW1hbmQoY21kTmFtZSwgbW9kdWxlTmFtZSwgY21kRm4sIGNtZEFyZ3MsIHRoaXMuY3R4LCBjbWRMb2NhdGlvbiwgc3RhcnRUaW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdFeGVjdXRpbmc6ICcgKyBveHV0aWwuZ2V0TWV0aG9kU2lnbmF0dXJlKG1vZHVsZU5hbWUsIGNtZE5hbWUsIGNtZEFyZ3MpKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gZW1pdCBiZWZvcmUgZXZlbnRzXHJcbiAgICAgICAgICAgIGlmIChjbWROYW1lID09PSAnZGlzcG9zZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXBBc3luYyh0aGlzLl9jYWxsU2VydmljZXNPbk1vZHVsZVdpbGxEaXNwb3NlKS5hcHBseSh0aGlzLCBbbW9kdWxlXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJldHZhbFByb21pc2UgPSB0aGlzLl93cmFwQXN5bmMobW9kdWxlW2NtZE5hbWVdKS5hcHBseShtb2R1bGUsIGRlY3J5cHRlZEFyZ3MpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJldHZhbFByb21pc2UgJiYgcmV0dmFsUHJvbWlzZS50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZURvbmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR2YWxQcm9taXNlLnRoZW4oKHZhbHVlKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VEb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0sIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VEb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFwcm9taXNlRG9uZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR2YWwgPSByZXR2YWxQcm9taXNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY21kTmFtZSA9PT0gJ2luaXQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwQXN5bmModGhpcy5fY2FsbFNlcnZpY2VzT25Nb2R1bGVJbml0aWFsaXplZCkuYXBwbHkodGhpcywgW21vZHVsZV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUgJiYgZS5tZXNzYWdlICYmIHR5cGVvZiBlLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIGUubWVzc2FnZS5pbmNsdWRlcygnaW52YWxpZCBzZXNzaW9uIGlkJykpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZyBpZiBlcnJvciBvY3VycmVkIGFmdGVyIHRoZSBtb2R1bGUgd2FzIGRpc3Bvc2VkIChvciBpbiBhIHByb2Nlc3Mgb2YgYmVpbmcgZGlzcG9zZWQpXHJcbiAgICAgICAgICAgICAgICAvLyBleGNlcHQgZm9yIGluaXQgbWV0aG9kcyBvZiBjb3Vyc2VcclxuICAgICAgICAgICAgICAgIGlmIChtb2R1bGUgJiZcclxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIG1vZHVsZS5pc0luaXRpYWxpemVkID09PSAnYm9vbGVhbicgJiYgIW1vZHVsZS5pc0luaXRpYWxpemVkKVxyXG4gICAgICAgICAgICAgICAgICAgICYmIGNtZE5hbWUgIT09ICdpbml0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJz09PT0gZXJyb3IgPT09PScsIGUpXHJcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycm9ySGVscGVyLmdldE94eWdlbkVycm9yKGUsIG1vZHVsZU5hbWUsIGNtZE5hbWUsIGNtZEFyZ3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG5cclxuICAgICAgICBsZXQgc3RlcFJlc3VsdDtcclxuICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAocHVibGljTWV0aG9kKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdhaXRJZCA9ICtuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl93YWl0U3RlcFJlc3VsdExpc3QucHVzaCh3YWl0SWQpO1xyXG5cclxuICAgICAgICAgICAgc3RlcFJlc3VsdCA9IHRoaXMuX2dldFN0ZXBSZXN1bHQobW9kdWxlLCBtb2R1bGVOYW1lLCBjbWROYW1lLCBjbWRBcmdzLCBjbWRMb2NhdGlvbiwgc3RhcnRUaW1lLCBlbmRUaW1lLCByZXR2YWwsIGVycm9yKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0LmluZGV4T2Yod2FpdElkKTtcclxuICAgICAgICAgICAgdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcblxyXG4gICAgICAgICAgICAvL3N0ZXBSZXN1bHQubG9jYXRpb24gPSBjbWRMb2NhdGlvbjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUuc3RlcHMucHVzaChzdGVwUmVzdWx0KTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0QWZ0ZXJDb21tYW5kKGNtZE5hbWUsIG1vZHVsZU5hbWUsIGNtZEZuLCBjbWRBcmdzLCB0aGlzLmN0eCwgY21kTG9jYXRpb24sIGVuZFRpbWUsIHN0ZXBSZXN1bHQpO1xyXG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5pc0ZhdGFsICYmICF0aGlzLm9wdHMuY29udGludWVPbkVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICghZXJyb3IubG9jYXRpb24gJiYgY21kTG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGVycm9yLmxvY2F0aW9uID0gY21kTG9jYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdGVwUmVzdWx0ICYmIHN0ZXBSZXN1bHQuZmFpbHVyZSAmJiBzdGVwUmVzdWx0LmZhaWx1cmUubG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGVycm9yLmxvY2F0aW9uID0gc3RlcFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9uO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcHVibGljTWV0aG9kKSB7XHJcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4gIWRvbmUgJiYgIWVycm9yKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgIH1cclxuXHJcbiAgICBfd3JhcEFzeW5jIChmbiwgY29udGV4dCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IGNvbnRleHQgfHwgdGhpcztcclxuICAgICAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgY29kZSBpcyBub3QgcnVubmluZyBpbnNpZGUgdGhlIEZpYmVyIGNvbnRleHQsIHRoZW4gcnVuIGFzeW5jIGNvZGUgYXMgc3luYyB1c2luZyBkZWFzeW5jIG1vZHVsZVxyXG4gICAgICAgICAgICBpZiAoIUZpYmVyLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHZhbCA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBkb25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbmFsVmFsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmV0dmFsICYmIHJldHZhbC50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHJldHZhbClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigodmFsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsVmFsID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbCA9IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFkb25lICYmICFlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLm1lc3NhZ2UgJiYgdHlwZW9mIGUubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKCdyZWFkeVN0YXRlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB0aGlzIGVycm9yIGFzIGl0IHVzdWFsbHkgaGFwcGVucyBcclxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIE94eWdlbiBpcyBkaXNwb3NlZCBhbmQgcHJvY2VzcyBpcyBiZWluZyBraWxsZWRcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZGVhc3luYy5sb29wV2hpbGUoKSBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsVmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBlcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBkb25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCByZXR2YWwgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIGlmIHdlIGFyZSBpbnNpZGUgdGhlIEZpYmVyIGNvbnRleHQsIHRoZW4gdXNlIEZpYmVyJ3MgRnV0dXJlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmdXR1cmUgPSBuZXcgRnV0dXJlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKCh2YWwpID0+IGZ1dHVyZS5yZXR1cm4odmFsKSwgKGVycikgPT4gZnV0dXJlLnRocm93KGVycikpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdXR1cmUud2FpdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4gIWRvbmUgJiYgIWVycm9yKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXRyaWV2ZSBjdXJyZW50IGxpbmUgYW5kIGZ1bmN0aW9uIG5hbWUgZnJvbSB0aGUgY2FsbCBzdGFja1xyXG4gICAgX2dldENvbW1hbmRMb2NhdGlvbigpIHtcclxuICAgICAgICBjb25zdCBzdGFjayA9IF9fc3RhY2s7XHJcbiAgICAgICAgbGV0IGNhbGxlciA9IG51bGw7XHJcbiAgICAgICAgZm9yIChsZXQgY2FsbCBvZiBzdGFjaykge1xyXG4gICAgICAgICAgICBpZiAoX19maWxlbmFtZSA9PT0gY2FsbC5nZXRGaWxlTmFtZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyByZXR1cm4gdGhlIGZpcnN0IGNhbGxlciwgd2hpY2ggaXMgbm90IHRoZSBjdXJyZW50IGZpbGVcclxuICAgICAgICAgICAgY2FsbGVyID0gY2FsbDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYWxsZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke2NhbGxlci5nZXRGaWxlTmFtZSgpfToke2NhbGxlci5nZXRMaW5lTnVtYmVyKCkgKyB0aGlzLmFkanVzdFNjcmlwdExpbmV9OiR7Y2FsbGVyLmdldENvbHVtbk51bWJlcigpfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIF9nZXRTdGVwUmVzdWx0KG1vZHVsZSwgbW9kdWxlTmFtZSwgbWV0aG9kTmFtZSwgYXJncywgbG9jYXRpb24sIHN0YXJ0VGltZSwgZW5kVGltZSwgcmV0dmFsLCBlcnIpIHtcclxuICAgICAgICB2YXIgc3RlcCA9IG5ldyBTdGVwUmVzdWx0KCk7XHJcblxyXG4gICAgICAgIHN0ZXAubmFtZSA9IG94dXRpbC5nZXRNZXRob2RTaWduYXR1cmUobW9kdWxlTmFtZSwgbWV0aG9kTmFtZSwgYXJncyk7XHJcbiAgICAgICAgc3RlcC50cmFuc2FjdGlvbiA9IGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZTsgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aHkgaXMgdGhpcyBoZXJlIGlmIGl0J3MgYWxyZWFkeSBwb3B1bGF0ZWQgaW4gcnM/XHJcbiAgICAgICAgc3RlcC5sb2NhdGlvbiA9IGxvY2F0aW9uO1xyXG5cclxuICAgICAgICBpZiAoZXJyICYmIGVyci50eXBlICYmIGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX1BBU1NFRCkge1xyXG4gICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5QQVNTRUQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHN0ZXAgc3RhdHVzXHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuaXNGYXRhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5QQVNTRUQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0ZXAuYWN0aW9uID0gKHR5cGVvZiBtb2R1bGUuX2lzQWN0aW9uID09PSAnZnVuY3Rpb24nID8gbW9kdWxlLl9pc0FjdGlvbihtZXRob2ROYW1lKSA6IGZhbHNlKTtcclxuICAgICAgICBzdGVwLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcclxuICAgICAgICBzdGVwLmVuZFRpbWUgPSBlbmRUaW1lO1xyXG4gICAgICAgIHN0ZXAuZHVyYXRpb24gPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZS5fZ2V0U3RhdHMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgc3RlcC5zdGF0cyA9IG1vZHVsZS5fZ2V0U3RhdHMobWV0aG9kTmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcC5zdGF0cyA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICBpZiAoZXJyICYmIGVyci50eXBlICYmIGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX1BBU1NFRCkge1xyXG4gICAgICAgICAgICAgICAgLy9pZ25vcmVcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgZXJyLnR5cGUgJiYgZXJyLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgICAgIC8vaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwLmZhaWx1cmUgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICBzdGVwLmZhaWx1cmUubG9jYXRpb24gPSBsb2NhdGlvbjtcclxuICAgICAgICAgICAgICAgIC8vIGxldCB0aGUgbW9kdWxlIGRlY2lkZSB3aGV0aGVyIGEgc2NyZWVuc2hvdCBzaG91bGQgYmUgdGFrZW4gb24gZXJyb3Igb3Igbm90XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUuX3Rha2VTY3JlZW5zaG90U2lsZW50ID09PSAnZnVuY3Rpb24nICYmICF0aGlzLm9wdHMuZGlzYWJsZVNjcmVlbnNob3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwLnNjcmVlbnNob3QgPSBtb2R1bGUuX3Rha2VTY3JlZW5zaG90U2lsZW50KG1ldGhvZE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSB1bmFibGUgdG8gZ2V0IGEgc2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gd2FpdCBmb3IgYSBtb21lbnQgKGluIFBlcmZlY3RvIENsb3VkLCB0aGUgc2NyZWVuc2hvdCBtaWdodCBub3QgYmUgaW1taWRpYXRlbHkgYXZhaWxhYmxlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWFzeW5jLnNsZWVwKDEwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudChtZXRob2ROYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGluZGljYXRlIHRvIHVzZXIgdGhhdCBhbiBhdHRlbXB0IHRvIHRha2UgYSBzY3JlZW5zaG90IGhhcyBmYWlsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RlcDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZGlzcG9zZVNlcnZpY2VzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlcyB8fCB0eXBlb2YgdGhpcy5zZXJ2aWNlcyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlc1trZXldO1xyXG4gICAgICAgICAgICBpZiAoc2VydmljZS5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZpY2UuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgc2VydmljZSBkaXNwb3NhbCBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGlzcG9zZSBzZXJ2aWNlICcke2tleX0nOmAsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9kaXNwb3NlTW9kdWxlcyhzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZHVsZXMgfHwgdHlwZW9mIHRoaXMubW9kdWxlcyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IHRoaXMubW9kdWxlc1trZXldO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1vZC5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3Bvc2VSZXN1bHQgPSBtb2QuZGlzcG9zZShzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXNwb3NlUmVzdWx0ICYmIHR5cGVvZiBkaXNwb3NlUmVzdWx0LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvYmFibHkgYSBwcm9taXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGRpc3Bvc2VSZXN1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBtb2R1bGUgZGlzcG9zYWwgZXJyb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkaXNwb3NlIG1vZHVsZSAnJHtrZXl9JzogYCwgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvKlxyXG4gICAgICogU2VydmljZXMgRXZlbnQgRW1pdHRlcnNcclxuICAgICAqL1xyXG4gICAgX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkKG1vZHVsZSkge1xyXG4gICAgICAgIGZvciAobGV0IHNlcnZpY2VOYW1lIGluIHRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNbc2VydmljZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlLm9uTW9kdWxlTG9hZGVkKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlTG9hZGVkXCIgbWV0aG9kIG9mICR7c2VydmljZU5hbWV9IHNlcnZpY2UuYCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBfY2FsbFNlcnZpY2VzT25Nb2R1bGVJbml0aWFsaXplZChtb2R1bGUpIHtcclxuICAgICAgICBmb3IgKGxldCBzZXJ2aWNlTmFtZSBpbiB0aGlzLnNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2VydmljZS5vbk1vZHVsZUluaXRpYWxpemVkKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlSW5pdGlhbGl6ZWRcIiBtZXRob2Qgb2YgJHtzZXJ2aWNlTmFtZX0gc2VydmljZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9jYWxsU2VydmljZXNPbk1vZHVsZVdpbGxEaXNwb3NlKG1vZHVsZSkge1xyXG4gICAgICAgIGlmICghdGhpcyB8fCAhdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHNlcnZpY2VOYW1lIGluIHRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNbc2VydmljZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZS5vbk1vZHVsZVdpbGxEaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZS5vbk1vZHVsZVdpbGxEaXNwb3NlKG1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlV2lsbERpc3Bvc2VcIiBtZXRob2Qgb2YgJHtzZXJ2aWNlTmFtZX0gc2VydmljZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIF9wb3B1bGF0ZVBhcmFtZXRlcnNWYWx1ZShhcmdzKSB7XHJcbiAgICAgICAgaWYgKCFhcmdzIHx8ICFBcnJheS5pc0FycmF5KGFyZ3MpIHx8IGFyZ3MubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IF9uZXdBcmdzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYXJnIG9mIGFyZ3MpIHtcclxuICAgICAgICAgICAgX25ld0FyZ3MucHVzaCh0aGlzLl9yZXBsYWNlUGFyYW1ldGVySW5Bcmd1bWVudChhcmcpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9uZXdBcmdzO1xyXG4gICAgfVxyXG4gICAgX3JlcGxhY2VQYXJhbWV0ZXJJbkFyZ3VtZW50KGFyZykge1xyXG4gICAgICAgIGlmIChhcmcgJiYgdHlwZW9mIGFyZy5nZXREZWNyeXB0UmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnRU5DUllQVEVEJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYXJnIHx8IHR5cGVvZiBhcmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHJlcGxhY2UgdXNlciBwYXJhbWV0ZXJzIHdpdGggdmFsdWVzXHJcbiAgICAgICAgLy8gbm90ZTogdXNlciBwYXJhbWV0ZXIgd2l0aCB0aGUgc2FtZSBuYW1lIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBlbnZpcm9ubWVudCB2YXJpYWJsZVxyXG4gICAgICAgIGZvciAobGV0IHBhcmFtTmFtZSBpbiB0aGlzLmN0eC5wYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3R4LnBhcmFtcy5oYXNPd25Qcm9wZXJ0eShwYXJhbU5hbWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbVZhbHVlID0gdGhpcy5jdHgucGFyYW1zW3BhcmFtTmFtZV07XHJcbiAgICAgICAgICAgICAgICBhcmcgPSBhcmcucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcJHsnICsgcGFyYW1OYW1lICsgJ30nLCAnZycpLCBwYXJhbVZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZXBsYWNlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIHZhbHVlc1xyXG4gICAgICAgIGZvciAobGV0IGVudk5hbWUgaW4gdGhpcy5jdHguZW52KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN0eC5lbnYuaGFzT3duUHJvcGVydHkoZW52TmFtZSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVudlZhbHVlID0gdGhpcy5jdHguZW52W2Vudk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXCR7JyArIGVudk5hbWUgKyAnfScsICdnJyksIGVudlZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgfVxyXG4gICAgX2dldEFsbFByb3BlcnR5TmFtZXMoIG9iaiApIHtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IFtdO1xyXG5cclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKCBvYmogKS5mb3JFYWNoKGZ1bmN0aW9uICggcHJvcCApIHtcclxuICAgICAgICAgICAgICAgIGlmICggcHJvcHMuaW5kZXhPZiggcHJvcCApID09PSAtMSApIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5wdXNoKCBwcm9wICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cclxuICAgICAgICB9IHdoaWxlICggb2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKCBvYmogKSApO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICB9XHJcblxyXG4gICAgX2NoZWNrU3RlcFJlc3VsdChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBpZiAodGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fY2hlY2tTdGVwUmVzdWx0KHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF93YWl0U3RlcFJlc3VsdCgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1N0ZXBSZXN1bHQocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0RGVjcnlwdGVkQXJnc0ZvckFwcGx5KGFyZ3MsIG1vZHVsZU5hbWUpIHtcclxuICAgICAgICBpZiAoIWFyZ3MgfHwgIUFycmF5LmlzQXJyYXkoYXJncykgfHwgYXJncy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJncztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgX25ld0FyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBhcmcgb2YgYXJncykge1xyXG4gICAgICAgICAgICBfbmV3QXJncy5wdXNoKHRoaXMuX2RlY3J5cHRQYXJhbWV0ZXJGb3JBcHBseUluQXJndW1lbnQoYXJnLCBtb2R1bGVOYW1lKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfbmV3QXJncztcclxuICAgIH1cclxuXHJcbiAgICBfZGVjcnlwdFBhcmFtZXRlckZvckFwcGx5SW5Bcmd1bWVudChhcmcsIG1vZHVsZU5hbWUpIHtcclxuICAgICAgICBpZiAoYXJnICYmIHR5cGVvZiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gJ2xvZycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnRU5DUllQVEVEJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
1016
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL094eWdlbkNvcmUuanMiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnbG9iYWwiLCJnZXQiLCJvcmlnIiwiRXJyb3IiLCJwcmVwYXJlU3RhY2tUcmFjZSIsIl8iLCJzdGFjayIsImVyciIsImNhcHR1cmVTdGFja1RyYWNlIiwiREVGQVVMVF9USU1FT1VUIiwiREVGQVVMVF9PUFRTIiwiYmFja3RyYWNlIiwiY29tcGlsZXIiLCJmYWlsQW1iaWd1b3VzRGVmaW5pdGlvbnMiLCJmYWlsRmFzdCIsImlnbm9yZVVuZGVmaW5lZERlZmluaXRpb25zIiwibmFtZSIsInByb2ZpbGUiLCJyZXF1aXJlIiwib3JkZXIiLCJzbmlwcGV0U3ludGF4IiwidW5kZWZpbmVkIiwic25pcHBldHMiLCJzb3VyY2UiLCJzdHJpY3QiLCJ0YWdFeHByZXNzaW9uIiwidGFnc0luVGl0bGUiLCJ0aW1lb3V0IiwiTU9EVUxFX05BTUVfTUFUQ0hfUkVHRVgiLCJTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVgiLCJET19OT1RfV1JBUF9NRVRIT0RTIiwiREVGQVVMVF9DVFgiLCJwYXJhbXMiLCJ2YXJzIiwiZW52IiwiY2FwcyIsIkRFRkFVTFRfUkVTVUxUX1NUT1JFIiwic3RlcHMiLCJsb2dzIiwiaGFyIiwiT3h5Z2VuIiwiT3h5Z2VuRXZlbnRzIiwiY29uc3RydWN0b3IiLCJpc0luaXRpYWxpemVkIiwicmVzdWx0U3RvcmUiLCJjdHgiLCJtb2R1bGVzIiwic2VydmljZXMiLCJyZXBvIiwiY2FwYWJpbGl0aWVzIiwib3B0cyIsIm94QmFzZURpciIsInBhdGgiLCJqb2luIiwiX19kaXJuYW1lIiwibG9nZ2VyIiwiX3dyYXBMb2dnZXIiLCJfd2FpdFN0ZXBSZXN1bHRMaXN0IiwiaW5pdCIsIm9wdGlvbnMiLCJyZXN1bHRzIiwiYXNzaWduIiwiY3dkIiwicHJvY2VzcyIsIm1ha2VPeEdsb2JhbCIsIl9sb2FkU2VydmljZXMiLCJfbG9hZE1vZHVsZXMiLCJnbG9iYWxTY29wZSIsIm1ha2VDb250ZXh0QW5kTW9kdWxlc0dsb2JhbCIsImRpc3Bvc2VNb2R1bGVzIiwic3RhdHVzIiwiX2Rpc3Bvc2VNb2R1bGVzIiwiZSIsImNvbnNvbGUiLCJlcnJvciIsImRpc3Bvc2UiLCJfZGlzcG9zZVNlcnZpY2VzIiwiYWRqdXN0U2NyaXB0TGluZSIsImlzSW5EZWJ1Z01vZGUiLCJveHV0aWwiLCJyZXN1bHQiLCJjb250ZXh0Iiwib3giLCJyZXBvc2l0b3J5IiwidHJhbnNTdGVwIiwiaW5jbHVkZXMiLCJ0cmFuc05hbWUiLCJ0cmFuc2FjdGlvbiIsImR1cmF0aW9uIiwic3RlcCIsImVuZFRpbWUiLCJnZXRNb2R1bGVzQ2FwYWJpbGl0aWVzIiwibW9kQ2FwcyIsIm1vZHVsZU5hbWUiLCJtb2R1bGUiLCJfZ2V0Q2FwYWJpbGl0aWVzIiwia2V5cyIsImxlbmd0aCIsInJlc2V0UmVzdWx0cyIsIm9uQmVmb3JlQ2FzZSIsIl9pdGVyYXRpb25TdGFydCIsIm9uQWZ0ZXJDYXNlIiwiX2l0ZXJhdGlvbkVuZCIsImxvYWRQYWdlT2JqZWN0RmlsZSIsInBvUGF0aCIsInBvIiwiX2xvZ2dlciIsImxvZ2dlcldyYXAiLCJpbmZvIiwiYXJncyIsIl9sb2ciLCJkZWJ1ZyIsIndhcm4iLCJ1c2VySW5mbyIsIklTU1VFUlMiLCJVU0VSIiwidXNlckRlYnVnIiwidXNlckVycm9yIiwidXNlcldhcm4iLCJsZXZlbCIsInNyYyIsIkRFRkFVTFRfTE9HR0VSX0lTU1VFUiIsImFwcGx5IiwibWVzc2FnZSIsInN0cmluZ2lmeSIsInRpbWUiLCJnZXRUaW1lU3RhbXAiLCJwdXNoIiwidG9VcHBlckNhc2UiLCJtc2ciLCJzaGlmdCIsImVtaXRMb2ciLCJveFNlcnZpY2VzRGlyUGF0aCIsInJlc29sdmUiLCJzZXJ2aWNlRmlsZXMiLCJnbG9iIiwic3luYyIsImkiLCJzZXJ2aWNlRmlsZU5hbWUiLCJzZXJ2aWNlRmlsZVBhdGgiLCJtYXRjaCIsInNlcnZpY2VOYW1lIiwiQXJyYXkiLCJpc0FycmF5Iiwic2VydmljZSIsIl9sb2FkU2VydmljZSIsIkVPTCIsInN0YWNrdHJhY2UiLCJzZXJ2aWNlUGF0aCIsIlNlcnZpY2VDbGFzcyIsImRlZmF1bHQiLCJzZXJ2aWNlTG9nZ2VyIiwiX2xvYWRJbnRlcm5hbE1vZHVsZXMiLCJfbG9hZEV4dGVybmFsTW9kdWxlcyIsIm1vZHVsZXNGb2xkZXJQYXRoIiwibW9kdWxlc19leHQiLCJveE1vZHVsZXNEaXJQYXRoIiwiZnMiLCJleGlzdHNTeW5jIiwibW9kdWxlRmlsZXMiLCJmb3JFYWNoIiwibW9kdWxlRmlsZU5hbWUiLCJzdGFydFRpbWUiLCJEYXRlIiwibW9kdWxlTG9nZ2VyIiwibW9kIiwiY29yZVV0aWxzIiwibG9hZE1vZHVsZUZyb21GaWxlIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkIiwiX3dyYXBNb2R1bGUiLCJleGNsdWRlVW5kZWZpbmVkTW9kcyIsIk1vZHVsZXMiLCJNb2R1bGVDbGFzcyIsImdldE94TW9kdWxlc0RpciIsImxvYWRNb2R1bGVGcm9tQ2xhc3MiLCJ3cmFwcGVyIiwiX3RoaXMiLCJtb2R1bGVNZXRob2RzIiwic29tZSIsIngiLCJfZ2V0QWxsUHJvcGVydHlOYW1lcyIsIm1ldGhvZE5hbWUiLCJtZXRob2QiLCJGdW5jdGlvbiIsIk94eWdlblN1Yk1vZHVsZSIsImJpbmQiLCJpbmRleE9mIiwicHJvdG90eXBlIiwic2xpY2UiLCJjYWxsIiwiYXJndW1lbnRzIiwiZ2V0TWV0aG9kU2lnbmF0dXJlIiwiZXJyb3JIZWxwZXIiLCJnZXRPeHlnZW5FcnJvciIsIl9jb21tYW5kV3JhcHBlciIsIk94RXJyb3IiLCJjbWROYW1lIiwiY21kQXJncyIsInJldHZhbCIsImNtZEZuIiwicHVibGljTWV0aG9kIiwic3RhcnRzV2l0aCIsImRlbGF5IiwiZGVhc3luYyIsInNsZWVwIiwiZXJyb3JDb2RlIiwiTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiIsImRlY3J5cHRlZEFyZ3MiLCJfZ2V0RGVjcnlwdGVkQXJnc0ZvckFwcGx5IiwiX3BvcHVsYXRlUGFyYW1ldGVyc1ZhbHVlIiwiY21kTG9jYXRpb24iLCJfZ2V0Q29tbWFuZExvY2F0aW9uIiwiZW1pdEJlZm9yZUNvbW1hbmQiLCJfd3JhcEFzeW5jIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlV2lsbERpc3Bvc2UiLCJyZXR2YWxQcm9taXNlIiwidGhlbiIsInByb21pc2VEb25lIiwidmFsdWUiLCJsb29wV2hpbGUiLCJfY2FsbFNlcnZpY2VzT25Nb2R1bGVJbml0aWFsaXplZCIsInN0ZXBSZXN1bHQiLCJkb25lIiwid2FpdElkIiwiX2dldFN0ZXBSZXN1bHQiLCJpbmRleCIsInNwbGljZSIsImVtaXRBZnRlckNvbW1hbmQiLCJpc0ZhdGFsIiwiY29udGludWVPbkVycm9yIiwibG9jYXRpb24iLCJmYWlsdXJlIiwiZm4iLCJzZWxmIiwiRmliZXIiLCJjdXJyZW50IiwiZmluYWxWYWwiLCJQcm9taXNlIiwidmFsIiwiY2F0Y2giLCJmdXR1cmUiLCJGdXR1cmUiLCJyZXR1cm4iLCJ0aHJvdyIsIndhaXQiLCJfX3N0YWNrIiwiY2FsbGVyIiwiX19maWxlbmFtZSIsImdldEZpbGVOYW1lIiwiZ2V0TGluZU51bWJlciIsImdldENvbHVtbk51bWJlciIsIlN0ZXBSZXN1bHQiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsInR5cGUiLCJBU1NFUlRfUEFTU0VEIiwiU1RBVFVTIiwiUEFTU0VEIiwiRkFJTEVEIiwiV0FSTklORyIsImFjdGlvbiIsIl9pc0FjdGlvbiIsIl9nZXRTdGF0cyIsInN0YXRzIiwiU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsImRpc2FibGVTY3JlZW5zaG90Iiwic2NyZWVuc2hvdCIsImtleSIsImRpc3Bvc2VSZXN1bHQiLCJvbk1vZHVsZUxvYWRlZCIsIm9uTW9kdWxlSW5pdGlhbGl6ZWQiLCJvbk1vZHVsZVdpbGxEaXNwb3NlIiwiX25ld0FyZ3MiLCJhcmciLCJfcmVwbGFjZVBhcmFtZXRlckluQXJndW1lbnQiLCJnZXREZWNyeXB0UmVzdWx0IiwicGFyYW1OYW1lIiwiaGFzT3duUHJvcGVydHkiLCJwYXJhbVZhbHVlIiwicmVwbGFjZSIsIlJlZ0V4cCIsImVudk5hbWUiLCJlbnZWYWx1ZSIsIm9iaiIsInByb3BzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3AiLCJnZXRQcm90b3R5cGVPZiIsIl9jaGVja1N0ZXBSZXN1bHQiLCJyZWplY3QiLCJfd2FpdFN0ZXBSZXN1bHQiLCJfZGVjcnlwdFBhcmFtZXRlckZvckFwcGx5SW5Bcmd1bWVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7Ozs7Ozs7O0FBR0FBLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsRUFBOEIsU0FBOUIsRUFBeUM7QUFDckNDLEVBQUFBLEdBQUcsRUFBRSxZQUFZO0FBQ2IsUUFBSUMsSUFBSSxHQUFHQyxLQUFLLENBQUNDLGlCQUFqQjs7QUFDQUQsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixHQUEwQixVQUFVQyxDQUFWLEVBQWFDLEtBQWIsRUFBb0I7QUFBRSxhQUFPQSxLQUFQO0FBQWUsS0FBL0Q7O0FBQ0EsUUFBSUMsR0FBRyxHQUFHLElBQUlKLEtBQUosRUFBVjtBQUNBQSxJQUFBQSxLQUFLLENBQUNLLGlCQUFOLENBQXdCRCxHQUF4QjtBQUNBLFFBQUlELEtBQUssR0FBR0MsR0FBRyxDQUFDRCxLQUFoQjtBQUNBSCxJQUFBQSxLQUFLLENBQUNDLGlCQUFOLEdBQTBCRixJQUExQjtBQUNBLFdBQU9JLEtBQVA7QUFDSDtBQVRvQyxDQUF6QztBQVlBLE1BQU1HLGVBQWUsR0FBRyxLQUF4QjtBQUNBLE1BQU1DLFlBQVksR0FBRztBQUNqQkMsRUFBQUEsU0FBUyxFQUFFLEtBRE07QUFFakJDLEVBQUFBLFFBQVEsRUFBRSxFQUZPO0FBR2pCQyxF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LElBQVMsQ0FBQ2lDLEtBQUssQ0FBQ0MsT0FBTixDQUFjbEMsSUFBZCxDQUFWLElBQWlDQSxJQUFJLENBQUNaLE1BQUwsSUFBZSxDQUFwRCxFQUF1RDtBQUNuRCxhQUFPWSxJQUFQO0FBQ0g7O0FBQ0QsVUFBTW9LLFFBQVEsR0FBRyxFQUFqQjs7QUFDQSxTQUFLLElBQUlDLEdBQVQsSUFBZ0JySyxJQUFoQixFQUFzQjtBQUNsQm9LLE1BQUFBLFFBQVEsQ0FBQ2xKLElBQVQsQ0FBYyxLQUFLcUssbUNBQUwsQ0FBeUNsQixHQUF6QyxFQUE4Q3JMLFVBQTlDLENBQWQ7QUFDSDs7QUFDRCxXQUFPb0wsUUFBUDtBQUNIOztBQUVEbUIsRUFBQUEsbUNBQW1DLENBQUNsQixHQUFELEVBQU1yTCxVQUFOLEVBQWtCO0FBQ2pELFFBQUlxTCxHQUFHLElBQUksT0FBT0EsR0FBRyxDQUFDRSxnQkFBWCxLQUFnQyxVQUEzQyxFQUF1RDtBQUNuRCxVQUFJdkwsVUFBVSxLQUFLLEtBQW5CLEVBQTBCO0FBQ3RCLGVBQU8sV0FBUDtBQUNILE9BRkQsTUFFTztBQUNILGVBQU9xTCxHQUFHLENBQUNFLGdCQUFKLEVBQVA7QUFDSDtBQUNKOztBQUVELFdBQU9GLEdBQVA7QUFDSDs7QUE3NUI0QyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xyXG5pbXBvcnQgZ2xvYiBmcm9tICdnbG9iJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBkZWFzeW5jIGZyb20gJ2RlYXN5bmMnO1xyXG5pbXBvcnQgRnV0dXJlIGZyb20gJ2ZpYmVycy9mdXR1cmUnO1xyXG5pbXBvcnQgRmliZXIgZnJvbSAnZmliZXJzJztcclxuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xyXG5pbXBvcnQgU3RlcFJlc3VsdCBmcm9tICcuLi9tb2RlbC9zdGVwLXJlc3VsdCc7XHJcbmltcG9ydCBPeHlnZW5FdmVudHMgZnJvbSAnLi9PeHlnZW5FdmVudHMnO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0ICogYXMgY29yZVV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBTVEFUVVMgZnJvbSAnLi4vbW9kZWwvc3RhdHVzLmpzJztcclxuaW1wb3J0ICogYXMgTW9kdWxlcyBmcm9tICcuLi9veF9tb2R1bGVzL2luZGV4JztcclxuXHJcbi8vIHNldHVwIGxvZ2dlclxyXG5pbXBvcnQgbG9nZ2VyLCB7IERFRkFVTFRfTE9HR0VSX0lTU1VFUiwgSVNTVUVSUyB9IGZyb20gJy4uL2xpYi9sb2dnZXInO1xyXG5pbXBvcnQgeyBPeHlnZW5TdWJNb2R1bGUgfSBmcm9tICcuL094eWdlblN1Yk1vZHVsZSc7XHJcblxyXG4vKmdsb2JhbCBfX3N0YWNrKi9cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwgJ19fc3RhY2snLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgb3JpZyA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xyXG4gICAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnVuY3Rpb24gKF8sIHN0YWNrKSB7IHJldHVybiBzdGFjazsgfTtcclxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCk7XHJcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyKTtcclxuICAgICAgICB2YXIgc3RhY2sgPSBlcnIuc3RhY2s7XHJcbiAgICAgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBvcmlnO1xyXG4gICAgICAgIHJldHVybiBzdGFjaztcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBERUZBVUxUX1RJTUVPVVQgPSAzMDAwMDtcclxuY29uc3QgREVGQVVMVF9PUFRTID0ge1xyXG4gICAgYmFja3RyYWNlOiBmYWxzZSwgLy8gPGJvb2xlYW4+IHNob3cgZnVsbCBiYWNrdHJhY2UgZm9yIGVycm9yc1xyXG4gICAgY29tcGlsZXI6IFtdLCAvLyA8c3RyaW5nW10+IChcImV4dGVuc2lvbjptb2R1bGVcIikgcmVxdWlyZSBmaWxlcyB3aXRoIHRoZSBnaXZlbiBFWFRFTlNJT04gYWZ0ZXIgcmVxdWlyaW5nIE1PRFVMRSAocmVwZWF0YWJsZSlcclxuICAgIGZhaWxBbWJpZ3VvdXNEZWZpbml0aW9uczogZmFsc2UsIC8vIDxib29sZWFuPiB0cmVhdCBhbWJpZ3VvdXMgZGVmaW5pdGlvbnMgYXMgZXJyb3JzXHJcbiAgICBmYWlsRmFzdDogZmFsc2UsIC8vIDxib29sZWFuPiBhYm9ydCB0aGUgcnVuIG9uIGZpcnN0IGZhaWx1cmVcclxuICAgIGlnbm9yZVVuZGVmaW5lZERlZmluaXRpb25zOiBmYWxzZSwgLy8gPGJvb2xlYW4+IHRyZWF0IHVuZGVmaW5lZCBkZWZpbml0aW9ucyBhcyB3YXJuaW5nc1xyXG4gICAgbmFtZTogW10sIC8vIDxSRUdFWFBbXT4gb25seSBleGVjdXRlIHRoZSBzY2VuYXJpb3Mgd2l0aCBuYW1lIG1hdGNoaW5nIHRoZSBleHByZXNzaW9uIChyZXBlYXRhYmxlKVxyXG4gICAgcHJvZmlsZTogW10sIC8vIDxzdHJpbmc+IChuYW1lKSBzcGVjaWZ5IHRoZSBwcm9maWxlIHRvIHVzZVxyXG4gICAgcmVxdWlyZTogW10sIC8vIDxzdHJpbmc+IChmaWxlL2Rpci9nbG9iKSByZXF1aXJlIGZpbGVzIGJlZm9yZSBleGVjdXRpbmcgZmVhdHVyZXNcclxuICAgIG9yZGVyOiAnZGVmaW5lZCcsIC8vIDxzdHJpbmc+IHN3aXRjaCBiZXR3ZWVuIGRldGVybWluaXN0aWMgIGFuZCByYW5kb20gZmVhdHVyZSBleGVjdXRpb24uIEVpdGhlciBcImRlZmluZWRcIiwgXCJyYW5kb21cIiBvciBcInJhbmRvbTo0MlwiIHdoZXJlYXMgNDIgaXMgdGhlIHNlZWQgZm9yIHJhbmRvbWl6YXRpb25cclxuICAgIHNuaXBwZXRTeW50YXg6IHVuZGVmaW5lZCwgLy8gPHN0cmluZz4gc3BlY2lmeSBhIGN1c3RvbSBzbmlwcGV0IHN5bnRheFxyXG4gICAgc25pcHBldHM6IHRydWUsIC8vIDxib29sZWFuPiBoaWRlIHN0ZXAgZGVmaW5pdGlvbiBzbmlwcGV0cyBmb3IgcGVuZGluZyBzdGVwc1xyXG4gICAgc291cmNlOiB0cnVlLCAvLyA8Ym9vbGVhbj4gaGlkZSBzb3VyY2UgdXJpc1xyXG4gICAgc3RyaWN0OiBmYWxzZSwgLy8gPGJvb2xlYW4+IGZhaWwgaWYgdGhlcmUgYXJlIGFueSB1bmRlZmluZWQgb3IgcGVuZGluZyBzdGVwc1xyXG4gICAgdGFnRXhwcmVzc2lvbjogJycsIC8vIDxzdHJpbmc+IChleHByZXNzaW9uKSBvbmx5IGV4ZWN1dGUgdGhlIGZlYXR1cmVzIG9yIHNjZW5hcmlvcyB3aXRoIHRhZ3MgbWF0Y2hpbmcgdGhlIGV4cHJlc3Npb25cclxuICAgIHRhZ3NJblRpdGxlOiBmYWxzZSwgLy8gPGJvb2xlYW4+IGFkZCBjdWN1bWJlciB0YWdzIHRvIGZlYXR1cmUgb3Igc2NlbmFyaW8gbmFtZVxyXG4gICAgdGltZW91dDogREVGQVVMVF9USU1FT1VUIC8vIDxudW1iZXI+IHRpbWVvdXQgZm9yIHN0ZXAgZGVmaW5pdGlvbnMgaW4gbWlsbGlzZWNvbmRzXHJcbn07XHJcbmNvbnN0IE1PRFVMRV9OQU1FX01BVENIX1JFR0VYID0gL15tb2R1bGUtKC4rPylcXC5qcyQvO1xyXG5jb25zdCBTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVggPSAvXnNlcnZpY2UtKC4rPylcXC5qcyQvO1xyXG5jb25zdCBET19OT1RfV1JBUF9NRVRIT0RTID0gWydkcml2ZXInLCAnZ2V0RHJpdmVyJ107XHJcblxyXG5jb25zdCBERUZBVUxUX0NUWCA9IHtcclxuICAgIHBhcmFtczoge30sXHJcbiAgICB2YXJzOiB7fSxcclxuICAgIGVudjoge30sXHJcbiAgICBjYXBzOiB7fVxyXG59O1xyXG5jb25zdCBERUZBVUxUX1JFU1VMVF9TVE9SRSA9IHtcclxuICAgIHN0ZXBzOiBbXSxcclxuICAgIGxvZ3M6IFtdLFxyXG4gICAgaGFyOiBudWxsXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPeHlnZW4gZXh0ZW5kcyBPeHlnZW5FdmVudHMge1xyXG4gICAgY29uc3RydWN0b3IgKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZSA9IHsgLi4uREVGQVVMVF9SRVNVTFRfU1RPUkUgfTtcclxuICAgICAgICB0aGlzLmN0eCA9IHsgLi4uREVGQVVMVF9DVFggfTtcclxuICAgICAgICB0aGlzLm1vZHVsZXMgPSB7fTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VzID0ge307XHJcbiAgICAgICAgdGhpcy5yZXBvID0ge307XHJcbiAgICAgICAgdGhpcy5jYXBhYmlsaXRpZXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMub3B0cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5veEJhc2VEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vJyk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSB0aGlzLl93cmFwTG9nZ2VyKGxvZ2dlcignT3h5Z2VuJykpO1xyXG4gICAgICAgIHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdCA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQob3B0aW9ucywgY2FwcywgY3R4ID0ge30sIHJlc3VsdHMgPSB7fSkge1xyXG4gICAgICAgIHRoaXMub3B0cyA9IE9iamVjdC5hc3NpZ24oREVGQVVMVF9PUFRTLCBvcHRpb25zKTtcclxuICAgICAgICB0aGlzLmN3ZCA9IHRoaXMub3B0cy5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgICAgICB0aGlzLmN0eCA9IE9iamVjdC5hc3NpZ24oREVGQVVMVF9DVFgsIGN0eCB8fCB7fSk7XHJcbiAgICAgICAgdGhpcy5jdHguY2FwcyA9IHsgLi4uY3R4LmNhcHMgfHwge30sIC4uLmNhcHMsIH07XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZSA9IE9iamVjdC5hc3NpZ24oREVGQVVMVF9SRVNVTFRfU1RPUkUsIHJlc3VsdHMgfHwge30pO1xyXG4gICAgICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gdGhpcy5jdHguY2FwcyA9IGNhcHM7XHJcblxyXG4gICAgICAgIC8vIGRlZmluZSAnb3gnIG9iamVjdCBpbiBnbG9iYWwgSlMgc2NvcGVcclxuICAgICAgICAvLyB3ZSB3aWxsIHVzZSB0aGlzIG9iamVjdCB0byBhY2Nlc3MgT3h5Z2VuIG1vZHVsZXMgYW5kIHRlc3QgY29udGV4dCBmcm9tIG1vZHVsZXMgdXNlZCBpbiB0aGUgdGVzdCAoaWYgYW55KSAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tYWtlT3hHbG9iYWwoKTtcclxuICAgICAgICAvLyBsb2FkIHNlcnZpY2VzXHJcbiAgICAgICAgdGhpcy5fbG9hZFNlcnZpY2VzKCk7XHJcbiAgICAgICAgLy8gbG9hZCBtb2R1bGVzXHJcbiAgICAgICAgdGhpcy5fbG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAvLyBpZiBvcHRpb25zLm1ha2VNb2R1bGVzR2xvYmFsIGlzIHRydWUgb3IgdW5kZWZpbmVkIHRoYW4gZGVmaW5lICdjdHgnIGNvbnRlbnQgYW5kIGVhY2ggbW9kdWxlIGluIGdsb2JhbCBzY29wZVxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgb3B0aW9ucy5nbG9iYWxTY29wZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLm1ha2VDb250ZXh0QW5kTW9kdWxlc0dsb2JhbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2VNb2R1bGVzKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlTW9kdWxlcyhzdGF0dXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZGlzcG9zZSBtb2R1bGVzOiAnLCBlKTtcclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGlzcG9zZU1vZHVsZXMoc3RhdHVzKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGlzcG9zZVNlcnZpY2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRpc3Bvc2U6ICcsIGUpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgYWRqdXN0U2NyaXB0TGluZSgpIHtcclxuICAgICAgICBjb25zdCBpc0luRGVidWdNb2RlID0gb3h1dGlsLmlzSW5EZWJ1Z01vZGUoKTtcclxuICAgICAgICAvLyBhZGQgZXh0cmEgbGluZSBpZiB3ZSBhcmUgcnVubmluZyBpbiBkZWJ1Z2dlciBtb2RlIChWOCBkZWJ1Z2dlciBhZGRzIGFuIGV4dHJhIGxpbmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSlcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBpc0luRGVidWdNb2RlID8gLTEgOiAwO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbnRleHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4O1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBjb250ZXh0KGN0eCkge1xyXG4gICAgICAgIHRoaXMuY3R4ID0gY3R4O1xyXG4gICAgICAgIGlmIChnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94LmN0eCA9IGN0eDtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIFwicGFyYW1zXCIgYW5kIFwiZW52XCIgaW4gXCJveFwiIGdsb2JhbCB2YXJpYWJsZVxyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLnBhcmFtcyA9IGN0eC5wYXJhbXMgfHwge307XHJcbiAgICAgICAgICAgICAgICBnbG9iYWwuZW52ID0gY3R4LmVudiB8fCB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVwb3NpdG9yeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBvO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCByZXBvc2l0b3J5KHJlcG8pIHtcclxuICAgICAgICB0aGlzLnJlcG8gPSByZXBvO1xyXG4gICAgICAgIGlmIChnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94LnJlcG8gPSByZXBvO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVzdWx0cygpIHtcclxuICAgICAgICAvLyBjYWxjdWxhdGUgdGltZSBmb3IgdGhlIHRyYW5zYWN0aW9uIGl0c2VsZiAtIHN1bW1hcnkgb2YgZHVyYXRpb25zIGZvciBhbGwgdGhlIHN0ZXBzIGluIHRoaXMgdHJhbnNhY3Rpb25cclxuICAgICAgICAvLyBhbHNvIGFkanVzdCB0cmFuc2FjdGlvbiBlbmQgdGltZSB0byBtdWNoIGVuZCB0aW1lIGZvciB0aGUgbGFzdCBleGVjdXRlZCBzdGVwIHdpdGhpbiB0aGlzIHRyYW5zYWN0aW9uLlxyXG4gICAgICAgIGZvciAoY29uc3QgdHJhbnNTdGVwIG9mIHRoaXMucmVzdWx0U3RvcmUuc3RlcHMpIHtcclxuICAgICAgICAgICAgaWYgKHRyYW5zU3RlcC5uYW1lLmluY2x1ZGVzKCcudHJhbnNhY3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNOYW1lID0gdHJhbnNTdGVwLnRyYW5zYWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNTdGVwLmR1cmF0aW9uID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RlcCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uICYgaXMgbm90IHRoZSB0cmFuc2FjdGlvbiBzdGVwXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXAudHJhbnNhY3Rpb24gPT09IHRyYW5zTmFtZSAmJiBzdGVwICE9PSB0cmFuc1N0ZXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNTdGVwLmR1cmF0aW9uICs9IHN0ZXAuZHVyYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLmVuZFRpbWUgPiB0cmFuc1N0ZXAuZW5kVGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNTdGVwLmVuZFRpbWUgPSBzdGVwLmVuZFRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0U3RvcmU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kdWxlc0NhcGFiaWxpdGllcygpIHtcclxuICAgICAgICBpZiAoIXRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kQ2FwcyA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKG1vZHVsZS5uYW1lICYmIG1vZHVsZS5fZ2V0Q2FwYWJpbGl0aWVzICYmIHR5cGVvZiBtb2R1bGUuX2dldENhcGFiaWxpdGllcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FwcyA9IG1vZHVsZS5fZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBzdG9yZSBvbmx5IG5vbi1lbXB0eSBjYXBzIHBlciBtb2R1bGUgdGhhdCBoYXMgdGhpcy5jYXBzIHByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FwcyAmJiB0eXBlb2YgY2FwcyA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoY2FwcykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZENhcHNbbW9kdWxlLm5hbWVdID0gY2FwcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbW9kQ2FwcztcclxuICAgIH1cclxuXHJcbiAgICByZXNldFJlc3VsdHMoKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5zdGVwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucmVzdWx0U3RvcmUubG9ncyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaGFyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkJlZm9yZUNhc2UoY29udGV4dCkge1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUub25CZWZvcmVDYXNlICYmIGF3YWl0IG1vZHVsZS5vbkJlZm9yZUNhc2UoY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUuX2l0ZXJhdGlvblN0YXJ0ICYmIGF3YWl0IG1vZHVsZS5faXRlcmF0aW9uU3RhcnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjYWxsIFwib25CZWZvcmVDYXNlXCIgbWV0aG9kIG9mICR7bW9kdWxlTmFtZX0gbW9kdWxlLmAsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uQWZ0ZXJDYXNlKGVycm9yID0gbnVsbCkge1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhd2FpdCBmb3IgYXZvaWQgc3R1Y2sgb24gKi5kaXNwb3NlIGNhbGxcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5vbkFmdGVyQ2FzZSAmJiBhd2FpdCBtb2R1bGUub25BZnRlckNhc2UoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLl9pdGVyYXRpb25FbmQgJiYgYXdhaXQgbW9kdWxlLl9pdGVyYXRpb25FbmQoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbkFmdGVyQ2FzZVwiIG1ldGhvZCBvZiAke21vZHVsZU5hbWV9IG1vZHVsZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBtYWtlT3hHbG9iYWwoKSB7XHJcbiAgICAgICAgaWYgKCFnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94ID0ge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlczogdGhpcy5tb2R1bGVzLFxyXG4gICAgICAgICAgICAgICAgY3R4OiB0aGlzLmN0eCxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMub3B0cyxcclxuICAgICAgICAgICAgICAgIGNhcHM6IHRoaXMuY2FwYWJpbGl0aWVzLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0U3RvcmU6IHRoaXMucmVzdWx0U3RvcmVcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGdsb2JhbC52YXJzID0gdGhpcy5jdHgudmFycztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUNvbnRleHRBbmRNb2R1bGVzR2xvYmFsKCkge1xyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSAnb3gnIGlzIGFscmVhZHkgZ2xvYmFsXHJcbiAgICAgICAgaWYgKGdsb2JhbC5veCkge1xyXG4gICAgICAgICAgICAvLyBleHBvc2UgbW9kdWxlcyBhcyBnbG9iYWwgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdsb2JhbFttb2R1bGVOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFttb2R1bGVOYW1lXSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBleHBvc2UgXCJjdHhcIiwgXCJwYXJhbXNcIiBhbmQgXCJlbnZcIiBhcyBnbG9iYWwgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGdsb2JhbC5wYXJhbXMgPSBnbG9iYWwub3guY3R4LnBhcmFtcztcclxuICAgICAgICAgICAgZ2xvYmFsLmVudiA9IGdsb2JhbC5veC5jdHguZW52O1xyXG4gICAgICAgICAgICBnbG9iYWwuY3R4ID0gZ2xvYmFsLm94LmN0eDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFBhZ2VPYmplY3RGaWxlKHBvUGF0aCkge1xyXG4gICAgICAgIGlmICghcG9QYXRoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcG8gPSByZXF1aXJlKHBvUGF0aCk7XHJcbiAgICAgICAgICAgIC8vIHNldCBwYWdlIG9iamVjdCByZXBvc2l0b3J5IGFzIHRoZSBtYWluIG9uZVxyXG4gICAgICAgICAgICB0aGlzLnJlcG9zaXRvcnkgPSBwbztcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLnBvID0gcG87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5wbyA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBQcml2YXRlIE1ldGhvZHNcclxuICAgICAqL1xyXG4gICAgX3dyYXBMb2dnZXIoX2xvZ2dlcikge1xyXG4gICAgICAgIGNvbnN0IGxvZ2dlcldyYXAgPSB7XHJcbiAgICAgICAgICAgIGluZm86ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2luZm8nLCBhcmdzKSxcclxuICAgICAgICAgICAgZGVidWc6ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2RlYnVnJywgYXJncyksXHJcbiAgICAgICAgICAgIGVycm9yOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdlcnJvcicsIGFyZ3MpLFxyXG4gICAgICAgICAgICB3YXJuOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICd3YXJuJywgYXJncyksXHJcbiAgICAgICAgICAgIHVzZXJJbmZvOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdpbmZvJywgYXJncywgSVNTVUVSUy5VU0VSKSxcclxuICAgICAgICAgICAgdXNlckRlYnVnOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdkZWJ1ZycsIGFyZ3MsIElTU1VFUlMuVVNFUiksXHJcbiAgICAgICAgICAgIHVzZXJFcnJvcjogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnZXJyb3InLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxyXG4gICAgICAgICAgICB1c2VyV2FybjogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnd2FybicsIGFyZ3MsIElTU1VFUlMuVVNFUiksXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gbG9nZ2VyV3JhcDtcclxuICAgIH1cclxuXHJcbiAgICBfbG9nKF9sb2dnZXIsIGxldmVsLCBhcmdzLCBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVIpIHtcclxuICAgICAgICBpZiAoIV9sb2dnZXJbbGV2ZWxdKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgX2xvZ2dlcltsZXZlbF0uYXBwbHkoX2xvZ2dlciwgYXJncyk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBveHV0aWwuc3RyaW5naWZ5KGFyZ3MsIDIpO1xyXG4gICAgICAgIGNvbnN0IHRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgLy8gYWRkIHRoZSBsb2cgZW50cnkgdG8gdGhlIHJlc3VsdCBzdG9yZVxyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdFN0b3JlICYmIHRoaXMucmVzdWx0U3RvcmUubG9ncykge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLmxvZ3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0aW1lOiB0aW1lLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGxldmVsLnRvVXBwZXJDYXNlKCksXHJcbiAgICAgICAgICAgICAgICBtc2c6IG1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICBzcmM6IHNyY1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVtb3ZlIGZpcnN0IGFyZ3VtZW50LCBpZiBpdCdzIGEgbWVzc2FnZVxyXG4gICAgICAgIGFyZ3MgPSBtZXNzYWdlID8gYXJncy5zaGlmdCgpIDogYXJncztcclxuICAgICAgICB0aGlzLmVtaXRMb2codGltZSwgbGV2ZWwsIG1lc3NhZ2UsIGFyZ3MsIHNyYyk7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRTZXJ2aWNlcygpIHtcclxuICAgICAgICBjb25zdCBveFNlcnZpY2VzRGlyUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLm94QmFzZURpciwgJy4vb3hfc2VydmljZXMnKTtcclxuICAgICAgICBjb25zdCBzZXJ2aWNlRmlsZXMgPSBnbG9iLnN5bmMoJ3NlcnZpY2UtKi5qcycsIHsgY3dkOiBveFNlcnZpY2VzRGlyUGF0aCB9KTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGFsbCBzZXJ2aWNlc1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIHNlcnZpY2VzLi4uJyk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VydmljZUZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VGaWxlTmFtZSA9IHNlcnZpY2VGaWxlc1tpXTtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUZpbGVQYXRoID0gcGF0aC5qb2luKG94U2VydmljZXNEaXJQYXRoLCBzZXJ2aWNlRmlsZU5hbWUpO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBzZXJ2aWNlRmlsZU5hbWUubWF0Y2goU0VSVklDRV9OQU1FX01BVENIX1JFR0VYKTtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSByZXN1bHRbMV07XHJcblxyXG4gICAgICAgICAgICAvLyB0aGlzLm9wdHMuc2VydmljZXMgPSB1bmRlZmluZWQgaW4gc2luZ2xlIGZpbGUgbW9kZVxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdHMuc2VydmljZXMpICYmICF0aGlzLm9wdHMuc2VydmljZXMuaW5jbHVkZXMoc2VydmljZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIHNlcnZpY2U6ICcgKyBzZXJ2aWNlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5fbG9hZFNlcnZpY2Uoc2VydmljZU5hbWUsIHNlcnZpY2VGaWxlUGF0aCk7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlLmluaXQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXNbc2VydmljZU5hbWVdID0gc2VydmljZTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBzZXJ2aWNlIFwiJyArIHNlcnZpY2VOYW1lICsgJ1wiOiAnICsgZS5tZXNzYWdlICsgRU9MICsgKGUuc3RhY2t0cmFjZSA/IGUuc3RhY2t0cmFjZSA6ICcnKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfbG9hZFNlcnZpY2Uoc2VydmljZU5hbWUsIHNlcnZpY2VQYXRoKSB7XHJcbiAgICAgICAgbGV0IFNlcnZpY2VDbGFzcyA9IHJlcXVpcmUoc2VydmljZVBhdGgpO1xyXG4gICAgICAgIC8vIEVTNiBjbGFzcyB3aWxsIGJlIHVuZGVyICdkZWZhdWx0JyBwcm9wZXJ0eVxyXG4gICAgICAgIGlmIChTZXJ2aWNlQ2xhc3MuZGVmYXVsdCkge1xyXG4gICAgICAgICAgICBTZXJ2aWNlQ2xhc3MgPSBTZXJ2aWNlQ2xhc3MuZGVmYXVsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2VydmljZUxvZ2dlciA9IHRoaXMuX3dyYXBMb2dnZXIobG9nZ2VyKGBTZXJ2aWNlOiR7c2VydmljZU5hbWV9YCkpO1xyXG4gICAgICAgIHJldHVybiBuZXcgU2VydmljZUNsYXNzKHRoaXMub3B0cywgdGhpcy5jdHgsIHRoaXMucmVzdWx0U3RvcmUsIHNlcnZpY2VMb2dnZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkTW9kdWxlcygpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBpbnRlcm5hbCBtb2R1bGVzLi4uJyk7XHJcbiAgICAgICAgdGhpcy5fbG9hZEludGVybmFsTW9kdWxlcygpO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIGV4dGVybmFsIG1vZHVsZXMuLi4nKTtcclxuICAgICAgICB0aGlzLl9sb2FkRXh0ZXJuYWxNb2R1bGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRFeHRlcm5hbE1vZHVsZXMoKSB7XHJcbiAgICAgICAgbGV0IG1vZHVsZXNGb2xkZXJQYXRoID0gJy4vbW9kdWxlcyc7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0cy5tb2R1bGVzX2V4dCAmJiB0eXBlb2YgdGhpcy5vcHRzLm1vZHVsZXNfZXh0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBtb2R1bGVzRm9sZGVyUGF0aCA9IHRoaXMub3B0cy5tb2R1bGVzX2V4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9jb25zdCBveE1vZHVsZXNEaXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3hCYXNlRGlyLCAnLi9veF9tb2R1bGVzJyk7XHJcbiAgICAgICAgY29uc3Qgb3hNb2R1bGVzRGlyUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmN3ZCwgbW9kdWxlc0ZvbGRlclBhdGgpO1xyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhveE1vZHVsZXNEaXJQYXRoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBtb2R1bGVGaWxlcyA9IFtdO1xyXG4gICAgICAgIC8vIGlmIHBhcnRpY3VsYXIgbW9kdWxlIG5hbWVzIGFyZSBkZWZpbmVkIGluIHRoZSBjb25maWcsIHRoZW4gbG9hZCBvbmx5IHRoZXNlIG1vZHVsZXNcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdHMubW9kdWxlcykgJiYgdGhpcy5vcHRzLm1vZHVsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wdHMubW9kdWxlcy5mb3JFYWNoKG1vZHVsZU5hbWUgPT4gbW9kdWxlRmlsZXMucHVzaChgbW9kdWxlLSR7bW9kdWxlTmFtZX0uanNgKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG90aGVyd2lzZSwgbG9hZCBhbGwgYXZhaWxhYmxlIG1vZHVsZXMgKG1pZ2h0IGJlIG1vcmUgdGltZSBjb25zdW1pbmcpXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1vZHVsZUZpbGVzID0gZ2xvYi5zeW5jKCdtb2R1bGUtKi5qcycsIHsgY3dkOiBveE1vZHVsZXNEaXJQYXRoIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpbml0aWFsaXplIGFsbCBtb2R1bGVzICAgICAgICBcclxuICAgICAgICBmb3IgKGxldCBtb2R1bGVGaWxlTmFtZSBvZiBtb2R1bGVGaWxlcykge1xyXG4gICAgICAgICAgICAvLyBleHRyYWN0IG5hbWUgZnJvbSB0aGUgbW9kdWxlIGZpbGUgbmFtZSBiYXNlZCBvbiBtb2R1bGUgbmFtZSBwYXR0ZXJuXHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBtb2R1bGVGaWxlTmFtZS5tYXRjaChNT0RVTEVfTkFNRV9NQVRDSF9SRUdFWClbMV07XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IGxvZ2dlciBmb3IgdGhlIG1vZHVsZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlTG9nZ2VyID0gdGhpcy5fd3JhcExvZ2dlcihsb2dnZXIoYE1vZHVsZToke21vZHVsZU5hbWV9YCkpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBuZXcgbW9kdWxlIGluc3RhbmNlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2QgPSBjb3JlVXRpbHMubG9hZE1vZHVsZUZyb21GaWxlKG1vZHVsZU5hbWUsIG1vZHVsZUZpbGVOYW1lLCBtb2R1bGVMb2dnZXIsIG94TW9kdWxlc0RpclBhdGgsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gY2FsbCBvbk1vZHVsZUxvYWRlZCBob29rXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsU2VydmljZXNPbk1vZHVsZUxvYWRlZChtb2QpO1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBtb2R1bGUgdG8gdGhlIG1vZHVsZSBsaXN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV0gPSBnbG9iYWwub3gubW9kdWxlc1ttb2R1bGVOYW1lXSA9IHRoaXMuX3dyYXBNb2R1bGUobW9kdWxlTmFtZSwgbW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIHdyYXAgdXBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoZW5kVGltZSAtIHN0YXJ0VGltZSkgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgbW9kdWxlOiAnICsgbW9kdWxlTmFtZSArICcgWyAnICsgZHVyYXRpb24gKyAnIHNlYyBdJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgbW9kdWxlIFwiJyArIG1vZHVsZU5hbWUgKyAnXCI6ICcgKyBlLm1lc3NhZ2UgKyBFT0wgKyAoZS5zdGFja3RyYWNlID8gZS5zdGFja3RyYWNlIDogJycpKTtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgbW9kdWxlIHRoYXQgZmFpbGVkIHRvIGxvYWQsIGV4Y2VwdCBXZWIgYW5kIE1vYiBtb2R1bGVzXHJcbiAgICAgICAgICAgICAgICAvLyB3aXRob3V0IE1vYiBhbmQgV2ViIG1vZHVsZXMgbG9hZGVkLCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzaGFsbCBmYWlsXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gJ3dlYicgfHwgbW9kdWxlTmFtZSA9PT0gJ21vYicpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEludGVybmFsTW9kdWxlcygpIHtcclxuICAgICAgICAvLyBpZiBgbW9kdWxlc2AgaXMgZW1wdHkgb3IgdW5kZWZpbmVkIGluIG94eWdlbi5jb25mIHRoZW4gbG9hZCBhbGwgbW9kdWxlc1xyXG4gICAgICAgIC8vIG90aGVyd2lzZSwgbG9hZCBvbmx5IHRob3NlIGltcGxpY2l0bHkgZGVmaW5lZFxyXG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVVbmRlZmluZWRNb2RzID0gdGhpcy5vcHRzLm1vZHVsZXMgJiYgdGhpcy5vcHRzLm1vZHVsZXMubGVuZ3RoID4gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgbW9kdWxlTmFtZSBvZiBPYmplY3Qua2V5cyhNb2R1bGVzKSkge1xyXG4gICAgICAgICAgICBpZiAoZXhjbHVkZVVuZGVmaW5lZE1vZHMgJiYgIXRoaXMub3B0cy5tb2R1bGVzLmluY2x1ZGVzKG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBNb2R1bGVDbGFzcyA9IE1vZHVsZXNbbW9kdWxlTmFtZV07XHJcbiAgICAgICAgICAgIGNvbnN0IG94TW9kdWxlc0RpclBhdGggPSBveHV0aWwuZ2V0T3hNb2R1bGVzRGlyKCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBuZXcgbG9nZ2VyIGZvciB0aGUgbW9kdWxlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGVMb2dnZXIgPSB0aGlzLl93cmFwTG9nZ2VyKGxvZ2dlcihgTW9kdWxlOiR7bW9kdWxlTmFtZX1gKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIG5ldyBtb2R1bGUgaW5zdGFuY2VcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZCA9IGNvcmVVdGlscy5sb2FkTW9kdWxlRnJvbUNsYXNzKG1vZHVsZU5hbWUsIE1vZHVsZUNsYXNzLCBtb2R1bGVMb2dnZXIsIG94TW9kdWxlc0RpclBhdGgsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gY2FsbCBvbk1vZHVsZUxvYWRlZCBob29rXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsU2VydmljZXNPbk1vZHVsZUxvYWRlZChtb2QpO1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBtb2R1bGUgdG8gdGhlIG1vZHVsZSBsaXN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV0gPSBnbG9iYWwub3gubW9kdWxlc1ttb2R1bGVOYW1lXSA9IHRoaXMuX3dyYXBNb2R1bGUobW9kdWxlTmFtZSwgbW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIHdyYXAgdXBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoZW5kVGltZSAtIHN0YXJ0VGltZSkgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgbW9kdWxlOiAnICsgbW9kdWxlTmFtZSArICcgWyAnICsgZHVyYXRpb24gKyAnIHNlYyBdJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgbW9kdWxlIFwiJyArIG1vZHVsZU5hbWUgKyAnXCI6ICcgKyBlLm1lc3NhZ2UgKyBFT0wgKyAoZS5zdGFja3RyYWNlID8gZS5zdGFja3RyYWNlIDogJycpKTtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgbW9kdWxlIHRoYXQgZmFpbGVkIHRvIGxvYWQsIGV4Y2VwdCBXZWIgYW5kIE1vYiBtb2R1bGVzXHJcbiAgICAgICAgICAgICAgICAvLyB3aXRob3V0IE1vYiBhbmQgV2ViIG1vZHVsZXMgbG9hZGVkLCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzaGFsbCBmYWlsXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gJ3dlYicgfHwgbW9kdWxlTmFtZSA9PT0gJ21vYicpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfd3JhcE1vZHVsZShuYW1lLCBtb2R1bGUpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3cmFwcGVyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBuYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgbGV0IG1vZHVsZU1ldGhvZHMgPSBPYmplY3Qua2V5cyhtb2R1bGUpO1xyXG4gICAgICAgIGlmICghbW9kdWxlTWV0aG9kcy5zb21lKHggPT4geD09PSAnZXhwb3J0cycpKSB7XHJcbiAgICAgICAgICAgIG1vZHVsZU1ldGhvZHMgPSB0aGlzLl9nZXRBbGxQcm9wZXJ0eU5hbWVzKG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG1ldGhvZE5hbWUgb2YgbW9kdWxlTWV0aG9kcykge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2QgPSBtb2R1bGVbbWV0aG9kTmFtZV07XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgbW9kdWxlIHByb3BlcnR5IHRoYXQgaXMgbm90IGEgZnVuY3Rpb24gb3IgYSBPeHlnZW5TdWJNb2R1bGVcclxuICAgICAgICAgICAgaWYgKCghKG1ldGhvZCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSAmJiAhKG1ldGhvZCBpbnN0YW5jZW9mIE94eWdlblN1Yk1vZHVsZSkgJiYgdHlwZW9mIG1ldGhvZCAhPT0gJ2Z1bmN0aW9uJykgfHwgbWV0aG9kTmFtZSA9PT0gJ2V4cG9ydHMnIHx8IG1ldGhvZE5hbWUgPT09ICdfY29tcGlsZScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIG1hcCBhbmQgd3JhcCBzdWItbW9kdWxlIG1ldGhvZHMgKHJlY3Vyc2l2ZSBjYWxsIHRvIF93cmFwTW9kdWxlKVxyXG4gICAgICAgICAgICBpZiAobWV0aG9kIGluc3RhbmNlb2YgT3h5Z2VuU3ViTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyW21ldGhvZE5hbWVdID0gdGhpcy5fd3JhcE1vZHVsZShgJHtuYW1lfS4ke21ldGhvZE5hbWV9YCwgbWV0aG9kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBkbyBub3Qgd3JhcCBtZXRob2RzXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKERPX05PVF9XUkFQX01FVEhPRFMuaW5jbHVkZXMobWV0aG9kTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vID09PSAnZHJpdmVyJyB8fCBtZXRob2ROYW1lID09PSAnZ2V0RHJpdmVyJ1xyXG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9IG1vZHVsZVttZXRob2ROYW1lXS5iaW5kKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gcHJpdmF0ZSBtZXRob2RzIGFuZCBldmVudCBoYW5kbGVyc1xyXG4gICAgICAgICAgICBlbHNlIGlmIChtZXRob2ROYW1lLmluZGV4T2YoJ18nKSA9PT0gMCB8fCBtZXRob2ROYW1lLmluZGV4T2YoJ29uJykgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHdyYXBwZXJbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmxvZ2dlci5kZWJ1ZygnRXhlY3V0aW5nOiAnICsgb3h1dGlsLmdldE1ldGhvZFNpZ25hdHVyZShuYW1lLCBtZXRob2ROYW1lLCBhcmdzKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVbbWV0aG9kTmFtZV0uYXBwbHkobW9kdWxlLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9ySGVscGVyLmdldE94eWdlbkVycm9yKGUsIG5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYW4gaW50ZXJuYWwgX2dldENhcGFiaWxpdGllcyBtZXRob2QgZm9yIGludGVybmFsIE94eWdlbiBDb3JlIHVzZVxyXG4gICAgICAgICAgICAgICAgLy8gY2FsbGluZyBfZ2V0Q2FwYWJpbGl0aWVzIG1ldGhvZCB3b24ndCBiZSB2aXNpYmxlIGluIHRoZSB0ZXN0IHJlc3VsdHNcclxuICAgICAgICAgICAgICAgIGlmIChtZXRob2ROYW1lID09PSAnZ2V0Q2FwYWJpbGl0aWVzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXJbJ19nZXRDYXBhYmlsaXRpZXMnXSA9IG1ldGhvZC5iaW5kKG1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyW21ldGhvZE5hbWVdID0gKC4uLmFyZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2NvbW1hbmRXcmFwcGVyKG1ldGhvZE5hbWUsIGFyZ3MsIG1vZHVsZSwgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgT3hFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnVGhyb3dpbmcgYWdhaW46JywgZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JIZWxwZXIuZ2V0T3h5Z2VuRXJyb3IoZSwgbmFtZSwgbWV0aG9kTmFtZSwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gd3JhcHBlcjtcclxuICAgIH1cclxuXHJcbiAgICBfY29tbWFuZFdyYXBwZXIoY21kTmFtZSwgY21kQXJncywgbW9kdWxlLCBtb2R1bGVOYW1lKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGUgfHwgIW1vZHVsZVtjbWROYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJldHZhbCA9IG51bGw7XHJcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICBjb25zdCBjbWRGbiA9IG1vZHVsZVtjbWROYW1lXTtcclxuICAgICAgICBjb25zdCBwdWJsaWNNZXRob2QgPSAhY21kTmFtZS5zdGFydHNXaXRoKCdfJykgJiYgY21kTmFtZSAhPT0gJ2Rpc3Bvc2UnO1xyXG5cclxuICAgICAgICAvLyBkZWxheSB0aGUgY29tbWFuZCBleGVjdXRpb24gaWYgcmVxdWlyZWRcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMub3B0cy5kZWxheSAmJlxyXG4gICAgICAgICAgICBwdWJsaWNNZXRob2QgJiZcclxuICAgICAgICAgICAgY21kTmFtZSAhPT0gJ2luaXQnICYmXHJcbiAgICAgICAgICAgIGNtZE5hbWUgIT09ICd0cmFuc2FjdGlvbidcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgZGVhc3luYy5zbGVlcCh0aGlzLm9wdHMuZGVsYXkgKiAxMDAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRocm93IGlmIGEgY29tbWFuZCBleGVjdXRlZCBvbiB1bml0aWFsaXplZCBtb2R1bGUgKGV4Y2VwdCBpbnRlcm5hbCBtZXRob2RzIGFuZCBhIGZldyBvdGhlcilcclxuICAgICAgICBpZiAoIW1vZHVsZS5pc0luaXRpYWxpemVkICYmIHB1YmxpY01ldGhvZCAmJiBjbWROYW1lICE9PSAnaW5pdCcgJiYgY21kTmFtZSAhPT0gJ3RyYW5zYWN0aW9uJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ01pc3NpbmcgJyArIG1vZHVsZU5hbWUgKyAnLmluaXQoKScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZGVjdHlwdCBhcmd1bWVudHNcclxuICAgICAgICBsZXQgZGVjcnlwdGVkQXJncyA9IHRoaXMuX2dldERlY3J5cHRlZEFyZ3NGb3JBcHBseShjbWRBcmdzLCBtb2R1bGVOYW1lKTtcclxuICAgICAgICBkZWNyeXB0ZWRBcmdzID0gdGhpcy5fcG9wdWxhdGVQYXJhbWV0ZXJzVmFsdWUoZGVjcnlwdGVkQXJncyk7XHJcblxyXG4gICAgICAgIC8vIHJlcGxhY2UgcGFyYW1ldGVycyBpbiBtZXRob2QgYXJndW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyB2YWx1ZXNcclxuICAgICAgICBjbWRBcmdzID0gdGhpcy5fcG9wdWxhdGVQYXJhbWV0ZXJzVmFsdWUoY21kQXJncyk7XHJcbiAgICAgICAgLy8gc3RhcnQgbWVhc3VyaW5nIG1ldGhvZCBleGVjdXRpb24gdGltZVxyXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuXHJcbiAgICAgICAgLy8gYWRkIGNvbW1hbmQgbG9jYXRpb24gaW5mb3JtYXRpb24gKGUuZy4gZmlsZSBuYW1lIGFuZCBjb21tYW5kIGxpbmUpXHJcbiAgICAgICAgbGV0IGNtZExvY2F0aW9uID0gbnVsbDtcclxuICAgICAgICAvLyBkbyBub3QgcmVwb3J0IHJlc3VsdHMgb3IgbGluZSB1cGRhdGVzIG9uIGludGVybmFsIG1ldGhvZHMgKHN0YXJ0ZWQgd2l0aCAnXycpXHJcbiAgICAgICAgaWYgKHB1YmxpY01ldGhvZCkge1xyXG4gICAgICAgICAgICBjbWRMb2NhdGlvbiA9IHRoaXMuX2dldENvbW1hbmRMb2NhdGlvbigpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRCZWZvcmVDb21tYW5kKGNtZE5hbWUsIG1vZHVsZU5hbWUsIGNtZEZuLCBjbWRBcmdzLCB0aGlzLmN0eCwgY21kTG9jYXRpb24sIHN0YXJ0VGltZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnRXhlY3V0aW5nOiAnICsgb3h1dGlsLmdldE1ldGhvZFNpZ25hdHVyZShtb2R1bGVOYW1lLCBjbWROYW1lLCBjbWRBcmdzKSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGVtaXQgYmVmb3JlIGV2ZW50c1xyXG4gICAgICAgICAgICBpZiAoY21kTmFtZSA9PT0gJ2Rpc3Bvc2UnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwQXN5bmModGhpcy5fY2FsbFNlcnZpY2VzT25Nb2R1bGVXaWxsRGlzcG9zZSkuYXBwbHkodGhpcywgW21vZHVsZV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXR2YWxQcm9taXNlID0gdGhpcy5fd3JhcEFzeW5jKG1vZHVsZVtjbWROYW1lXSkuYXBwbHkobW9kdWxlLCBkZWNyeXB0ZWRBcmdzKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXR2YWxQcm9taXNlICYmIHJldHZhbFByb21pc2UudGhlbikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2VEb25lID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dmFsUHJvbWlzZS50aGVuKCh2YWx1ZSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlRG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlRG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhcHJvbWlzZURvbmUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dmFsID0gcmV0dmFsUHJvbWlzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNtZE5hbWUgPT09ICdpbml0Jykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcEFzeW5jKHRoaXMuX2NhbGxTZXJ2aWNlc09uTW9kdWxlSW5pdGlhbGl6ZWQpLmFwcGx5KHRoaXMsIFttb2R1bGVdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChlICYmIGUubWVzc2FnZSAmJiB0eXBlb2YgZS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ2ludmFsaWQgc2Vzc2lvbiBpZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcgaWYgZXJyb3Igb2N1cnJlZCBhZnRlciB0aGUgbW9kdWxlIHdhcyBkaXNwb3NlZCAob3IgaW4gYSBwcm9jZXNzIG9mIGJlaW5nIGRpc3Bvc2VkKVxyXG4gICAgICAgICAgICAgICAgLy8gZXhjZXB0IGZvciBpbml0IG1ldGhvZHMgb2YgY291cnNlXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBtb2R1bGUuaXNJbml0aWFsaXplZCA9PT0gJ2Jvb2xlYW4nICYmICFtb2R1bGUuaXNJbml0aWFsaXplZClcclxuICAgICAgICAgICAgICAgICAgICAmJiBjbWROYW1lICE9PSAnaW5pdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCc9PT09IGVycm9yID09PT0nLCBlKVxyXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnJvckhlbHBlci5nZXRPeHlnZW5FcnJvcihlLCBtb2R1bGVOYW1lLCBjbWROYW1lLCBjbWRBcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuXHJcbiAgICAgICAgbGV0IHN0ZXBSZXN1bHQ7XHJcbiAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHB1YmxpY01ldGhvZCkge1xyXG4gICAgICAgICAgICBjb25zdCB3YWl0SWQgPSArbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0LnB1c2god2FpdElkKTtcclxuXHJcbiAgICAgICAgICAgIHN0ZXBSZXN1bHQgPSB0aGlzLl9nZXRTdGVwUmVzdWx0KG1vZHVsZSwgbW9kdWxlTmFtZSwgY21kTmFtZSwgY21kQXJncywgY21kTG9jYXRpb24sIHN0YXJ0VGltZSwgZW5kVGltZSwgcmV0dmFsLCBlcnJvcik7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdC5pbmRleE9mKHdhaXRJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgICAgICAgICAgLy9zdGVwUmVzdWx0LmxvY2F0aW9uID0gY21kTG9jYXRpb247XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzLnB1c2goc3RlcFJlc3VsdCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdEFmdGVyQ29tbWFuZChjbWROYW1lLCBtb2R1bGVOYW1lLCBjbWRGbiwgY21kQXJncywgdGhpcy5jdHgsIGNtZExvY2F0aW9uLCBlbmRUaW1lLCBzdGVwUmVzdWx0KTtcclxuICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IuaXNGYXRhbCAmJiAhdGhpcy5vcHRzLmNvbnRpbnVlT25FcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoIWVycm9yLmxvY2F0aW9uICYmIGNtZExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvci5sb2NhdGlvbiA9IGNtZExvY2F0aW9uO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RlcFJlc3VsdCAmJiBzdGVwUmVzdWx0LmZhaWx1cmUgJiYgc3RlcFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvci5sb2NhdGlvbiA9IHN0ZXBSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXB1YmxpY01ldGhvZCkge1xyXG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFkb25lICYmICFlcnJvcik7XHJcblxyXG4gICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgX3dyYXBBc3luYyAoZm4sIGNvbnRleHQpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSBjb250ZXh0IHx8IHRoaXM7XHJcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGNvZGUgaXMgbm90IHJ1bm5pbmcgaW5zaWRlIHRoZSBGaWJlciBjb250ZXh0LCB0aGVuIHJ1biBhc3luYyBjb2RlIGFzIHN5bmMgdXNpbmcgZGVhc3luYyBtb2R1bGVcclxuICAgICAgICAgICAgaWYgKCFGaWJlci5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR2YWwgPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGxldCBmaW5hbFZhbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJldHZhbCAmJiByZXR2YWwudGhlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShyZXR2YWwpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHZhbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbCA9IHZhbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmluYWxWYWwgPSByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhZG9uZSAmJiAhZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgZS5tZXNzYWdlICYmIHR5cGVvZiBlLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIGUubWVzc2FnZS5pbmNsdWRlcygncmVhZHlTdGF0ZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgdGhpcyBlcnJvciBhcyBpdCB1c3VhbGx5IGhhcHBlbnMgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBPeHlnZW4gaXMgZGlzcG9zZWQgYW5kIHByb2Nlc3MgaXMgYmVpbmcga2lsbGVkXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ2RlYXN5bmMubG9vcFdoaWxlKCkgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5hbFZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgcmV0dmFsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBpZiB3ZSBhcmUgaW5zaWRlIHRoZSBGaWJlciBjb250ZXh0LCB0aGVuIHVzZSBGaWJlcidzIEZ1dHVyZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZnV0dXJlID0gbmV3IEZ1dHVyZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQudGhlbigodmFsKSA9PiBmdXR1cmUucmV0dXJuKHZhbCksIChlcnIpID0+IGZ1dHVyZS50aHJvdyhlcnIpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnV0dXJlLndhaXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcblxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFkb25lICYmICFlcnJvcik7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmV0cmlldmUgY3VycmVudCBsaW5lIGFuZCBmdW5jdGlvbiBuYW1lIGZyb20gdGhlIGNhbGwgc3RhY2tcclxuICAgIF9nZXRDb21tYW5kTG9jYXRpb24oKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBfX3N0YWNrO1xyXG4gICAgICAgIGxldCBjYWxsZXIgPSBudWxsO1xyXG4gICAgICAgIGZvciAobGV0IGNhbGwgb2Ygc3RhY2spIHtcclxuICAgICAgICAgICAgaWYgKF9fZmlsZW5hbWUgPT09IGNhbGwuZ2V0RmlsZU5hbWUoKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBmaXJzdCBjYWxsZXIsIHdoaWNoIGlzIG5vdCB0aGUgY3VycmVudCBmaWxlXHJcbiAgICAgICAgICAgIGNhbGxlciA9IGNhbGw7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2FsbGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtjYWxsZXIuZ2V0RmlsZU5hbWUoKX06JHtjYWxsZXIuZ2V0TGluZU51bWJlcigpICsgdGhpcy5hZGp1c3RTY3JpcHRMaW5lfToke2NhbGxlci5nZXRDb2x1bW5OdW1iZXIoKX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0U3RlcFJlc3VsdChtb2R1bGUsIG1vZHVsZU5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MsIGxvY2F0aW9uLCBzdGFydFRpbWUsIGVuZFRpbWUsIHJldHZhbCwgZXJyKSB7XHJcbiAgICAgICAgdmFyIHN0ZXAgPSBuZXcgU3RlcFJlc3VsdCgpO1xyXG5cclxuICAgICAgICBzdGVwLm5hbWUgPSBveHV0aWwuZ2V0TWV0aG9kU2lnbmF0dXJlKG1vZHVsZU5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpO1xyXG4gICAgICAgIHN0ZXAudHJhbnNhY3Rpb24gPSBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWU7ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgaGVyZSBpZiBpdCdzIGFscmVhZHkgcG9wdWxhdGVkIGluIHJzP1xyXG4gICAgICAgIHN0ZXAubG9jYXRpb24gPSBsb2NhdGlvbjtcclxuXHJcbiAgICAgICAgaWYgKGVyciAmJiBlcnIudHlwZSAmJiBlcnIudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9QQVNTRUQpIHtcclxuICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuUEFTU0VEO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGRldGVybWluZSBzdGVwIHN0YXR1c1xyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmlzRmF0YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5GQUlMRUQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5XQVJOSU5HO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuUEFTU0VEO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGVwLmFjdGlvbiA9ICh0eXBlb2YgbW9kdWxlLl9pc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IG1vZHVsZS5faXNBY3Rpb24obWV0aG9kTmFtZSkgOiBmYWxzZSk7XHJcbiAgICAgICAgc3RlcC5zdGFydFRpbWUgPSBzdGFydFRpbWU7XHJcbiAgICAgICAgc3RlcC5lbmRUaW1lID0gZW5kVGltZTtcclxuICAgICAgICBzdGVwLmR1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUuX2dldFN0YXRzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHN0ZXAuc3RhdHMgPSBtb2R1bGUuX2dldFN0YXRzKG1ldGhvZE5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0ZXAuc3RhdHMgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgaWYgKGVyciAmJiBlcnIudHlwZSAmJiBlcnIudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9QQVNTRUQpIHtcclxuICAgICAgICAgICAgICAgIC8vaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyICYmIGVyci50eXBlICYmIGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUKSB7XHJcbiAgICAgICAgICAgICAgICAvL2lnbm9yZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RlcC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgc3RlcC5mYWlsdXJlLmxvY2F0aW9uID0gbG9jYXRpb247XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGhlIG1vZHVsZSBkZWNpZGUgd2hldGhlciBhIHNjcmVlbnNob3Qgc2hvdWxkIGJlIHRha2VuIG9uIGVycm9yIG9yIG5vdFxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudCA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpcy5vcHRzLmRpc2FibGVTY3JlZW5zaG90KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudChtZXRob2ROYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgdW5hYmxlIHRvIGdldCBhIHNjcmVlbnNob3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHdhaXQgZm9yIGEgbW9tZW50IChpbiBQZXJmZWN0byBDbG91ZCwgdGhlIHNjcmVlbnNob3QgbWlnaHQgbm90IGJlIGltbWlkaWF0ZWx5IGF2YWlsYWJsZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVhc3luYy5zbGVlcCgxMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXAuc2NyZWVuc2hvdCA9IG1vZHVsZS5fdGFrZVNjcmVlbnNob3RTaWxlbnQobWV0aG9kTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbmRpY2F0ZSB0byB1c2VyIHRoYXQgYW4gYXR0ZW1wdCB0byB0YWtlIGEgc2NyZWVuc2hvdCBoYXMgZmFpbGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0ZXA7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2Rpc3Bvc2VTZXJ2aWNlcygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VydmljZXMgfHwgdHlwZW9mIHRoaXMuc2VydmljZXMgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNba2V5XTtcclxuICAgICAgICAgICAgaWYgKHNlcnZpY2UuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzZXJ2aWNlLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIHNlcnZpY2UgZGlzcG9zYWwgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRpc3Bvc2Ugc2VydmljZSAnJHtrZXl9JzpgLCBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZGlzcG9zZU1vZHVsZXMoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5tb2R1bGVzIHx8IHR5cGVvZiB0aGlzLm1vZHVsZXMgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICBjb25zdCBtb2QgPSB0aGlzLm1vZHVsZXNba2V5XTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtb2QuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXNwb3NlUmVzdWx0ID0gbW9kLmRpc3Bvc2Uoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcG9zZVJlc3VsdCAmJiB0eXBlb2YgZGlzcG9zZVJlc3VsdC50aGVuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2JhYmx5IGEgcHJvbWlzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBkaXNwb3NlUmVzdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgbW9kdWxlIGRpc3Bvc2FsIGVycm9yIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGlzcG9zZSBtb2R1bGUgJyR7a2V5fSc6IGAsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLypcclxuICAgICAqIFNlcnZpY2VzIEV2ZW50IEVtaXR0ZXJzXHJcbiAgICAgKi9cclxuICAgIF9jYWxsU2VydmljZXNPbk1vZHVsZUxvYWRlZChtb2R1bGUpIHtcclxuICAgICAgICBmb3IgKGxldCBzZXJ2aWNlTmFtZSBpbiB0aGlzLnNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc2VydmljZS5vbk1vZHVsZUxvYWRlZChtb2R1bGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbk1vZHVsZUxvYWRlZFwiIG1ldGhvZCBvZiAke3NlcnZpY2VOYW1lfSBzZXJ2aWNlLmAsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgX2NhbGxTZXJ2aWNlc09uTW9kdWxlSW5pdGlhbGl6ZWQobW9kdWxlKSB7XHJcbiAgICAgICAgZm9yIChsZXQgc2VydmljZU5hbWUgaW4gdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlc1tzZXJ2aWNlTmFtZV07XHJcbiAgICAgICAgICAgIGlmICghc2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZpY2Uub25Nb2R1bGVJbml0aWFsaXplZChtb2R1bGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbk1vZHVsZUluaXRpYWxpemVkXCIgbWV0aG9kIG9mICR7c2VydmljZU5hbWV9IHNlcnZpY2UuYCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBfY2FsbFNlcnZpY2VzT25Nb2R1bGVXaWxsRGlzcG9zZShtb2R1bGUpIHtcclxuICAgICAgICBpZiAoIXRoaXMgfHwgIXRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBzZXJ2aWNlTmFtZSBpbiB0aGlzLnNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2Uub25Nb2R1bGVXaWxsRGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2Uub25Nb2R1bGVXaWxsRGlzcG9zZShtb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbk1vZHVsZVdpbGxEaXNwb3NlXCIgbWV0aG9kIG9mICR7c2VydmljZU5hbWV9IHNlcnZpY2UuYCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfcG9wdWxhdGVQYXJhbWV0ZXJzVmFsdWUoYXJncykge1xyXG4gICAgICAgIGlmICghYXJncyB8fCAhQXJyYXkuaXNBcnJheShhcmdzKSB8fCBhcmdzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmdzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBfbmV3QXJncyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGFyZyBvZiBhcmdzKSB7XHJcbiAgICAgICAgICAgIF9uZXdBcmdzLnB1c2godGhpcy5fcmVwbGFjZVBhcmFtZXRlckluQXJndW1lbnQoYXJnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfbmV3QXJncztcclxuICAgIH1cclxuICAgIF9yZXBsYWNlUGFyYW1ldGVySW5Bcmd1bWVudChhcmcpIHtcclxuICAgICAgICBpZiAoYXJnICYmIHR5cGVvZiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ0VOQ1JZUFRFRCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWFyZyB8fCB0eXBlb2YgYXJnICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZXBsYWNlIHVzZXIgcGFyYW1ldGVycyB3aXRoIHZhbHVlc1xyXG4gICAgICAgIC8vIG5vdGU6IHVzZXIgcGFyYW1ldGVyIHdpdGggdGhlIHNhbWUgbmFtZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZW52aXJvbm1lbnQgdmFyaWFibGVcclxuICAgICAgICBmb3IgKGxldCBwYXJhbU5hbWUgaW4gdGhpcy5jdHgucGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN0eC5wYXJhbXMuaGFzT3duUHJvcGVydHkocGFyYW1OYW1lKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHRoaXMuY3R4LnBhcmFtc1twYXJhbU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXCR7JyArIHBhcmFtTmFtZSArICd9JywgJ2cnKSwgcGFyYW1WYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVwbGFjZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCB2YWx1ZXNcclxuICAgICAgICBmb3IgKGxldCBlbnZOYW1lIGluIHRoaXMuY3R4LmVudikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdHguZW52Lmhhc093blByb3BlcnR5KGVudk5hbWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbnZWYWx1ZSA9IHRoaXMuY3R4LmVudltlbnZOYW1lXTtcclxuICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFwkeycgKyBlbnZOYW1lICsgJ30nLCAnZycpLCBlbnZWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFyZztcclxuICAgIH1cclxuICAgIF9nZXRBbGxQcm9wZXJ0eU5hbWVzKCBvYmogKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSBbXTtcclxuXHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyggb2JqICkuZm9yRWFjaChmdW5jdGlvbiAoIHByb3AgKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIHByb3BzLmluZGV4T2YoIHByb3AgKSA9PT0gLTEgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMucHVzaCggcHJvcCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbmQtYXNzaWduXHJcbiAgICAgICAgfSB3aGlsZSAoIG9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiggb2JqICkgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHByb3BzO1xyXG4gICAgfVxyXG5cclxuICAgIF9jaGVja1N0ZXBSZXN1bHQocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrU3RlcFJlc3VsdChyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfd2FpdFN0ZXBSZXN1bHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fY2hlY2tTdGVwUmVzdWx0KHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldERlY3J5cHRlZEFyZ3NGb3JBcHBseShhcmdzLCBtb2R1bGVOYW1lKSB7XHJcbiAgICAgICAgaWYgKCFhcmdzIHx8ICFBcnJheS5pc0FycmF5KGFyZ3MpIHx8IGFyZ3MubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IF9uZXdBcmdzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYXJnIG9mIGFyZ3MpIHtcclxuICAgICAgICAgICAgX25ld0FyZ3MucHVzaCh0aGlzLl9kZWNyeXB0UGFyYW1ldGVyRm9yQXBwbHlJbkFyZ3VtZW50KGFyZywgbW9kdWxlTmFtZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX25ld0FyZ3M7XHJcbiAgICB9XHJcblxyXG4gICAgX2RlY3J5cHRQYXJhbWV0ZXJGb3JBcHBseUluQXJndW1lbnQoYXJnLCBtb2R1bGVOYW1lKSB7XHJcbiAgICAgICAgaWYgKGFyZyAmJiB0eXBlb2YgYXJnLmdldERlY3J5cHRSZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT09ICdsb2cnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0VOQ1JZUFRFRCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnLmdldERlY3J5cHRSZXN1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFyZztcclxuICAgIH1cclxufVxyXG4iXX0=
|