@microsoft/ocsdk 0.5.15 → 0.5.16-main.32300c9

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/lib/SDK.js CHANGED
@@ -696,7 +696,7 @@ var SDK = /*#__PURE__*/function () {
696
696
  var _this$configuration$d5,
697
697
  _this4 = this;
698
698
 
699
- var timer, authenticatedUserToken, requestPath, requestHeaders, url, method, options, axiosInstance, requestId;
699
+ var timer, authenticatedUserToken, requestId, requestPath, requestHeaders, url, method, options, axiosInstance;
700
700
  return _regenerator["default"].wrap(function _callee8$(_context8) {
701
701
  while (1) {
702
702
  switch (_context8.prev = _context8.next) {
@@ -704,11 +704,12 @@ var SDK = /*#__PURE__*/function () {
704
704
  timer = _Timer.Timer.TIMER();
705
705
  authenticatedUserToken = reconnectableChatsParams.authenticatedUserToken;
706
706
  this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETRECONNECTABLECHATSSTARTED, "Get Reconnectable chat Started");
707
- requestPath = "/".concat(_OmnichannelEndpoints["default"].LiveChatGetReconnectableChatsPath, "/").concat(this.omnichannelConfiguration.orgId, "/").concat(this.omnichannelConfiguration.widgetId, "/").concat((reconnectableChatsParams === null || reconnectableChatsParams === void 0 ? void 0 : reconnectableChatsParams.requestId) || this.omnichannelConfiguration.orgId, "?channelId=").concat(this.omnichannelConfiguration.channelId);
707
+ requestId = reconnectableChatsParams === null || reconnectableChatsParams === void 0 ? void 0 : reconnectableChatsParams.requestId;
708
+ requestPath = "/".concat(_OmnichannelEndpoints["default"].LiveChatGetReconnectableChatsPath, "/").concat(this.omnichannelConfiguration.orgId, "/").concat(this.omnichannelConfiguration.widgetId, "/").concat(requestId, "?channelId=").concat(this.omnichannelConfiguration.channelId);
708
709
  requestHeaders = _Constants["default"].defaultHeaders;
709
710
  requestHeaders[_OmnichannelHTTPHeaders["default"].authenticatedUserToken] = authenticatedUserToken;
710
711
  requestHeaders[_OmnichannelHTTPHeaders["default"].authCodeNonce] = this.configuration.authCodeNonce;
711
- this.addDefaultHeaders(reconnectableChatsParams === null || reconnectableChatsParams === void 0 ? void 0 : reconnectableChatsParams.requestId, requestHeaders);
712
+ this.addDefaultHeaders(requestId, requestHeaders);
712
713
  url = "".concat(this.omnichannelConfiguration.orgUrl).concat(requestPath);
713
714
  method = "GET";
714
715
  options = {
@@ -718,7 +719,6 @@ var SDK = /*#__PURE__*/function () {
718
719
  timeout: (_this$configuration$d5 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d5 !== void 0 ? _this$configuration$d5 : this.configuration.requestTimeoutConfig.getReconnectableChats
719
720
  };
720
721
  axiosInstance = _axios["default"].create();
721
- requestId = this.omnichannelConfiguration.orgId;
722
722
  return _context8.abrupt("return", new Promise( /*#__PURE__*/function () {
723
723
  var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(resolve, reject) {
724
724
  var response, elapsedTimeInMilliseconds, data, headers, _elapsedTimeInMilliseconds5;
@@ -2711,4 +2711,4 @@ exports["default"] = SDK;
2711
2711
  waitTimeBetweenRetriesConfig: _waitTimeBetweenRetriesConfigs.waitTimeBetweenRetriesConfigs,
2712
2712
  ocUserAgent: []
2713
2713
  });
2714
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TREsudHMiXSwibmFtZXMiOlsiU0RLIiwib21uaWNoYW5uZWxDb25maWd1cmF0aW9uIiwiY29uZmlndXJhdGlvbiIsImRlZmF1bHRDb25maWd1cmF0aW9uIiwibG9nZ2VyIiwiU0RLRXJyb3IiLCJDbGllbnRIVFRQVGltZW91dEVycm9yTmFtZSIsIkNsaWVudEhUVFBUaW1lb3V0RXJyb3JNZXNzYWdlIiwiaGVhZGVycyIsImF1dGhjb2Rlbm9uY2UiLCJhdXRoQ29kZU5vbmNlIiwic2Vzc2lvbklkIiwiT21uaWNoYW5uZWxIVFRQSGVhZGVycyIsIm9jU2Vzc2lvbklkIiwicmVxdWVzdElkIiwiY29ycmVsYXRpb25JZCIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSIsImNoYW5uZWxJZCIsInZhbHVlcyIsIkNoYW5uZWxJZCIsImluY2x1ZGVzIiwiRXJyb3IiLCJjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyIsIkNvbnN0YW50cyIsInJlcXVpcmVkT21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyIsIm9jVXNlckFnZW50IiwibGl2ZUNoYXRWZXJzaW9uIiwiTGl2ZUNoYXRWZXJzaW9uIiwiVjIiLCJ0aW1lciIsIlRpbWVyIiwiVElNRVIiLCJsb2dXaXRoTG9nZ2VyIiwiTG9nTGV2ZWwiLCJJTkZPIiwiT0NTREtUZWxlbWV0cnlFdmVudCIsIkdFVExDV0ZDU0RFVEFJTFNTVEFSVEVEIiwicmVxdWVzdFBhdGgiLCJPbW5pY2hhbm5lbEVuZHBvaW50cyIsIkxjd0Zjc0RldGFpbHNQYXRoIiwib3JnSWQiLCJtZXRob2QiLCJ1cmwiLCJvcmdVcmwiLCJheGlvc0luc3RhbmNlIiwiYXhpb3MiLCJjcmVhdGUiLCJyZXRyaWVzIiwibWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUiLCJ3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllcyIsIndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWciLCJnZXRDaGF0Q29uZmlnIiwicmVxdWVzdEhlYWRlcnMiLCJnZXQiLCJ0aW1lb3V0IiwiZGVmYXVsdFJlcXVlc3RUaW1lb3V0IiwicmVxdWVzdFRpbWVvdXRDb25maWciLCJyZXNwb25zZSIsImVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMiLCJtaWxsaVNlY29uZHNFbGFwc2VkIiwiZGF0YSIsIkdFVExDV0ZDU0RFVEFJTFNTVUNDRUVERUQiLCJ1bmRlZmluZWQiLCJHRVRMQ1dGQ1NERVRBSUxTRkFJTEVEIiwiYnlwYXNzQ2FjaGUiLCJHRVRDSEFUQ09ORklHRlNUQVJURUQiLCJMaXZlQ2hhdENvbmZpZ1BhdGgiLCJ3aWRnZXRJZCIsImFkZERlZmF1bHRIZWFkZXJzIiwiYnlwYXNzQ2FjaGVIZWFkZXJzIiwiR0VUQ0hBVENPTkZJR1NVQ0NFRURFRCIsIkdFVENIQVRDT05GSUdGQUlMRUQiLCJQcm9taXNlIiwicmVqZWN0IiwiZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIiwiR0VUTFdJU1RBVFVTU1RBUlRFRCIsIkxpdmVDaGF0TGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGgiLCJoZWFkZXJPdmVyd3JpdGVzIiwiZ2V0TFdJRGV0YWlscyIsImF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4iLCJyZWNvbm5lY3RJZCIsImRlZmF1bHRIZWFkZXJzIiwiTGl2ZUNoYXRBdXRoTGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGgiLCJzaG91bGRVc2VTaWdRdWVyeVBhcmFtIiwidXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtIiwicGFyYW1zIiwic2lnIiwib3B0aW9ucyIsInJlc29sdmUiLCJzZXRBdXRoQ29kZU5vbmNlIiwiR0VUTFdJU1RBVFVTU1VDQ0VFREVEIiwiRVJST1IiLCJHRVRMV0lTVEFUVVNGQUlMRUQiLCJheGlvc1RpbWVvdXRFcnJvckNvZGUiLCJIVFRQVGltZU91dEVycm9yTWVzc2FnZSIsImdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zIiwiY3VycmVudFJldHJ5Q291bnQiLCJjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIiwicmVmcmVzaFRva2VuIiwiTXNPY0JvdEFwcGxpY2F0aW9uSWQiLCJtdWx0aUJvdCIsIkdFVENIQVRUT0tFTlNUQVJURUQiLCJlbmRwb2ludCIsImdldENoYXRUb2tlbiIsInJldHJ5T240MjkiLCJnZXRDaGF0VG9rZW5SZXRyeU9uNDI5IiwidG9Mb3dlckNhc2UiLCJHRVRDSEFUVE9LRU5TVUNDRUVERUQiLCJzdGF0dXMiLCJub0NvbnRlbnRTdGF0dXNDb2RlIiwiR0VUQ0hBVFRPS0VORkFJTEVEIiwicmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIiwiR0VUUkVDT05ORUNUQUJMRUNIQVRTU1RBUlRFRCIsIkxpdmVDaGF0R2V0UmVjb25uZWN0YWJsZUNoYXRzUGF0aCIsImdldFJlY29ubmVjdGFibGVDaGF0cyIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NVQ0NFRURFRCIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU0ZBSUxFRCIsIm9wdGlvbmFsUGFyYW1zIiwiR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1RBUlRFRCIsIkxpdmVDaGF0UmVjb25uZWN0QXZhaWxhYmlsaXR5UGF0aCIsImdldFJlY29ubmVjdEF2YWlsYWJpbGl0eSIsIkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNVQ0NFRURFRCIsIldBUk4iLCJHRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlGQUlMRUQiLCJxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIiwiR0VUQUdFTlRBVkFJTEFCSUxJVFlTVEFSVEVEIiwiR2V0QWdlbnRBdmFpbGFiaWxpdHlQYXRoIiwiZ2V0QWdlbnRBdmFpbGFiaWxpdHkiLCJpbml0Q29udGV4dCIsImdldENvbnRleHQiLCJjYWNoT2JqIiwiY3VzdG9tQ29udGV4dERhdGEiLCJ0ZW1wQXJyIiwiQ3VzdG9tQ29udGV4dERhdGEiLCJzb3J0IiwiYXNzaWduIiwicG9ydGFsY29udGFjdGlkIiwiY2FjaGVLZXkiLCJoYXNoIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkaWdlc3QiLCJ0b1N0cmluZyIsIndpbmRvdyIsImRvY3VtZW50IiwiYnJvd3NlciIsIkJyb3dzZXJJbmZvIiwiZ2V0QnJvd3Nlck5hbWUiLCJkZXZpY2UiLCJEZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVHlwZSIsIm9yaWdpbnVybCIsImxvY2F0aW9uIiwiaHJlZiIsIm9zIiwiT1NJbmZvIiwiZ2V0T3NUeXBlIiwibG9jYWxlIiwiZGVmYXVsdExvY2FsZSIsIkxvY2FsZXMiLCJzdXBwb3J0ZWRMb2NhbGVzIiwiR0VUQUdFTlRBVkFJTEFCSUxJVFlTVUNDRUVERUQiLCJHRVRBR0VOVEFWQUlMQUJJTElUWUZBSUxFRCIsInNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMiLCJTRVNTSU9OSU5JVFNUQVJURUQiLCJzZXNzaW9uSW5pdCIsInNob3VsZFJldHJ5IiwiZXJyb3IiLCJiYXNlUGF0aCIsIkxpdmVDaGF0QXV0aFNlc3Npb25Jbml0UGF0aCIsIkxpdmVDaGF0U2Vzc2lvbkluaXRQYXRoIiwic2V0UmVxdWVzdElkSGVhZGVyIiwiU0VTU0lPTklOSVRTVUNDRUVERUQiLCJTRVNTSU9OSU5JVEZBSUxFRCIsIkNSRUFURVNFU1NJT05TVEFSVEVEIiwiTGl2ZUNoYXRDb25uZWN0b3JBdXRoUGF0aCIsIkxpdmVDaGF0Q29ubmVjdG9yUGF0aCIsIkNSRUFURVNFU1NJT05TVUNDRUVERUQiLCJDUkVBVEVTRVNTSU9ORkFJTEVEIiwic2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXMiLCJTRVNTSU9OQ0xPU0VTVEFSVEVEIiwiTGl2ZUNoYXRTZXNzaW9uQ2xvc2VQYXRoIiwic2Vzc2lvbkNsb3NlIiwiaXNSZWNvbm5lY3RDaGF0IiwiaXNQZXJzaXN0ZW50Q2hhdCIsImNoYXRJZCIsIkxpdmVDaGF0QXV0aFNlc3Npb25DbG9zZVBhdGgiLCJTRVNTSU9OQ0xPU0VTVUNDRUVERUQiLCJTRVNTSU9OQ0xPU0VGQUlMRUQiLCJjb2RlIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zIiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNUQVJURUQiLCJMaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRoIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZCIsInZhbGlkYXRlQXV0aENoYXRSZWNvcmRUaW1lb3V0IiwiYXV0aENoYXRFeGlzdCIsIlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQiLCJWQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVEIiwicG9zdENoYXRSZXNwb25zZSIsInN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcyIsIlNVQk1JVFBPU1RDSEFUU1RBUlRFRCIsIkxpdmVDaGF0U3VibWl0UG9zdENoYXRQYXRoIiwic3VibWl0UG9zdENoYXRSZXNwb25zZSIsIkxpdmVDaGF0QXV0aFN1Ym1pdFBvc3RDaGF0UGF0aCIsIlNVQk1JVFBPU1RDSEFUU1VDQ0VFREVEIiwiU1VCTUlUUE9TVENIQVRGQUlMRUQiLCJzdXJ2ZXlPd25lcklkIiwic3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHkiLCJnZXRzdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXMiLCJsb2ciLCJHRVRTVVJWRVlJTlZJVEVMSU5LU1RBUlRFRCIsIlN1cnZleU93bmVySWQiLCJMaXZlQ2hhdEdldFN1cnZleUludml0ZUxpbmtQYXRoIiwiZ2V0U3VydmV5SW52aXRlTGluayIsIkxpdmVDaGF0QXV0aEdldFN1cnZleUludml0ZUxpbmtQYXRoIiwid2lkZ2V0QXBwSWQiLCJHRVRTVVJWRVlJTlZJVEVMSU5LU1VDQ0VFREVEIiwiR0VUU1VSVkVZSU5WSVRFTElOS0ZBSUxFRCIsInRva2VuIiwiZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMiLCJHRVRDSEFUVFJBTlNDUklQVFNUQVJURUQiLCJMaXZlQ2hhdEdldENoYXRUcmFuc2NyaXB0UGF0aCIsImdldENoYXRUcmFuc2NyaXB0cyIsIm9yZ2FuaXphdGlvbklkIiwiYXV0aG9yaXphdGlvbiIsIkxpdmVDaGF0djJHZXRDaGF0VHJhbnNjcmlwdFBhdGgiLCJMaXZlQ2hhdHYyQXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aCIsIkxpdmVDaGF0QXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aCIsIkdFVENIQVRUUkFOU0NSSVBUU1VDQ0VFREVEIiwiR0VUQ0hBVFRSQU5TQ1JJUFRGQUlMRUQiLCJlbWFpbFJlcXVlc3RCb2R5IiwiZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMiLCJFTUFJTFRSQU5TQ1JJUFRTVEFSVEVEIiwiTGl2ZUNoYXRUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aCIsImVtYWlsVHJhbnNjcmlwdCIsIkxpdmVDaGF0QXV0aFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoIiwiRU1BSUxUUkFOU0NSSVBUU1VDQ0VFREVEIiwiRU1BSUxUUkFOU0NSSVBURkFJTEVEIiwiRkVUQ0hEQVRBTUFTS0lOR1NUQVJURUQiLCJMaXZlQ2hhdEZldGNoRGF0YU1hc2tpbmdJbmZvUGF0aCIsImZldGNoRGF0YU1hc2tpbmdJbmZvIiwiRkVUQ0hEQVRBTUFTS0lOR1NVQ0NFRURFRCIsIkZFVENIREFUQU1BU0tJTkdGQUlMRUQiLCJzZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Qm9keSIsInNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQiLCJMaXZlQ2hhdFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdCIsIkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJkZWZhdWx0Q2hhbm5lbElkIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNVQ0NFRURFRCIsIlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RGQUlMRUQiLCJzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXMiLCJjdXN0b21lckRpc3BsYXlOYW1lIiwiU2VuZFR5cGluZ0luZGljYXRvclBhdGgiLCJzZW5kVHlwaW5nSW5kaWNhdG9yIiwiU0VORFRZUElOR0lORElDQVRPUlNVQ0NFRURFRCIsIlNFTkRUWVBJTkdJTkRJQ0FUT1JGQUlMRUQiLCJsb2dMZXZlbCIsInRlbGVtZXRyeUV2ZW50VHlwZSIsImRlc2NyaXB0aW9uIiwicmVxdWVzdFBheWxvYWQiLCJMb2dnaW5nU2FuaXRpemVyIiwic3RyaXBFcnJvclNlbnNpdGl2ZVByb3BlcnRpZXMiLCJzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCIsInN0cmlwQ3VzdG9tQ29udGV4dERhdGFWYWx1ZXMiLCJwcmVDaGF0UmVzcG9uc2UiLCJzdHJpcFByZUNoYXRSZXNwb25zZSIsInN0cmlwR2VvbG9jYXRpb24iLCJzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyIsImF1dGhUb2tlbkRldGFpbHMiLCJzdHJpcFJlcXVlc3RIZWFkZXJzU2Vuc2l0aXZlUHJvcGVydGllcyIsImF0b2IiLCJwYXlsb2FkIiwic3BsaXQiLCJqc29uRGF0YSIsInBhcnNlIiwibHdpQ29udGV4dHMiLCJzdWIiLCJleHAiLCJsd2lDb250ZXh0c0RhdGEiLCJjdXN0b21EYXRhIiwiUmVxdWVzdElkIiwiUmVnaW9uIiwiRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIlRyYW5zYWN0aW9uSWQiLCJ0cmFuc2FjdGlvbmlkIiwiUmVxdWVzdFBhdGgiLCJSZXF1ZXN0TWV0aG9kIiwiUmVzcG9uc2VTdGF0dXNDb2RlIiwiRXhjZXB0aW9uRGV0YWlscyIsIlJlcXVlc3RQYXlsb2FkIiwiUmVxdWVzdEhlYWRlcnMiLCJSZXNwb25zZUVycm9yY29kZSIsImVycm9yY29kZSIsIkF1dGhUb2tlbkRldGFpbHMiLCJzZXRTZXNzaW9uSWRIZWFkZXIiLCJzZXRDb3JyZWxhdGlvbklkSW5IZWFkZXIiLCJzdWJzdHJpbmciLCJnZXRDaGF0VG9rZW5SZXRyeUNvdW50IiwiZ2V0Q2hhdFRva2VuVGltZUJldHdlZW5SZXRyaWVzT25GYWlsdXJlIiwiZGVmYXVsdFJlcXVlc3RUaW1lb3V0Q29uZmlnIiwi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LEVBQUFBLGtCQUFrQixFQUFFLEtBVjZDO0FBV2pFWSxFQUFBQSxlQUFlLEVBQUUsSUFYZ0Q7QUFZakVNLEVBQUFBLG9CQUFvQixFQUFFLElBWjJDO0FBYWpFTyxFQUFBQSxnQ0FBZ0MsRUFBRSxLQWIrQjtBQWNqRTFILEVBQUFBLG9CQUFvQixFQUFFLEtBZDJDO0FBZWpFa0ksRUFBQUEsbUJBQW1CLEVBQUUsSUFmNEM7QUFnQmpFN0QsRUFBQUEsNkJBQTZCLEVBQUU7QUFoQmtDLEM7aUNBRGhEeE0sRywwQkFvQnNDO0FBQ3ZEVSxFQUFBQSxhQUFhLEVBQUUsb0JBQVNzUyxTQUFULENBQW1CLENBQW5CLEVBQXNCLENBQXRCLENBRHdDO0FBRXZEQyxFQUFBQSxzQkFBc0IsRUFBRSxFQUYrQjtBQUd2REMsRUFBQUEsdUNBQXVDLEVBQUUsS0FIYztBQUl2RHJNLEVBQUFBLHNCQUFzQixFQUFFLElBSitCO0FBS3ZEekQsRUFBQUEsMEJBQTBCLEVBQUUsQ0FMMkI7QUFNdkRPLEVBQUFBLHFCQUFxQixFQUFFTyxTQU5nQztBQU92RE4sRUFBQUEsb0JBQW9CLEVBQUU1RCxHQUFHLENBQUNtVCwyQkFQNkI7QUFRdkQzTixFQUFBQSxpQ0FBaUMsRUFBRSxLQVJvQjtBQVN2RGxDLEVBQUFBLDRCQUE0QixFQUFFOFAsNERBVHlCO0FBVXZEdlIsRUFBQUEsV0FBVyxFQUFFO0FBVjBDLEMiLCJzb3VyY2VSb290Ijoib2NzZGs6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaGFzaCBmcm9tIFwiY3J5cHRvXCI7XG5cbmltcG9ydCB7IENoYW5uZWxJZCwgTGl2ZUNoYXRWZXJzaW9uLCBPQ1NES1RlbGVtZXRyeUV2ZW50LCBTREtFcnJvciB9IGZyb20gXCIuL0NvbW1vbi9FbnVtc1wiO1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zUmVxdWVzdENvbmZpZywgQXhpb3NSZXNwb25zZSB9IGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IGF4aW9zUmV0cnlIYW5kbGVyLCB7IGF4aW9zUmV0cnlIYW5kbGVyV2l0aE5vdEZvdW5kIH0gZnJvbSBcIi4vVXRpbHMvYXhpb3NSZXRyeUhhbmRsZXJcIjtcblxuaW1wb3J0IHsgQnJvd3NlckluZm8gfSBmcm9tIFwiLi9VdGlscy9Ccm93c2VySW5mb1wiO1xuaW1wb3J0IENvbnN0YW50cyBmcm9tIFwiLi9Db21tb24vQ29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDdXN0b21Db250ZXh0RGF0YSB9IGZyb20gXCIuL1V0aWxzL0N1c3RvbUNvbnRleHREYXRhXCI7XG5pbXBvcnQgeyBEZXZpY2VJbmZvIH0gZnJvbSBcIi4vVXRpbHMvRGV2aWNlSW5mb1wiO1xuaW1wb3J0IEZldGNoQ2hhdFRva2VuUmVzcG9uc2UgZnJvbSBcIi4vTW9kZWwvRmV0Y2hDaGF0VG9rZW5SZXNwb25zZVwiO1xuaW1wb3J0IElEYXRhTWFza2luZ0luZm8gZnJvbSBcIi4vSW50ZXJmYWNlcy9JRGF0YU1hc2tpbmdJbmZvXCI7XG5pbXBvcnQgSUVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSUdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSUdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSUdldExXSURldGFpbHNPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0UXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRTdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJT21uaWNoYW5uZWxDb25maWd1cmF0aW9uIGZyb20gXCIuL0ludGVyZmFjZXMvSU9tbmljaGFubmVsQ29uZmlndXJhdGlvblwiO1xuaW1wb3J0IElSZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JUmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zXCI7XG5pbXBvcnQgSVNESyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTREtcIjtcbmltcG9ydCBJU0RLQ29uZmlndXJhdGlvbiBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTREtDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgSVNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXNcIlxuaW1wb3J0IElTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJU3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JVmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSW5pdENvbnRleHQgZnJvbSBcIi4vTW9kZWwvSW5pdENvbnRleHRcIjtcbmltcG9ydCBMb2NhbGVzIGZyb20gXCIuL0NvbW1vbi9Mb2NhbGVzXCI7XG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gXCIuL01vZGVsL0xvZ0xldmVsXCI7XG5pbXBvcnQgeyBMb2dnaW5nU2FuaXRpemVyIH0gZnJvbSBcIi4vVXRpbHMvTG9nZ2luZ1Nhbml0aXplclwiO1xuaW1wb3J0IE9DU0RLTG9nZ2VyIGZyb20gXCIuL0NvbW1vbi9PQ1NES0xvZ2dlclwiO1xuaW1wb3J0IHsgT1NJbmZvIH0gZnJvbSBcIi4vVXRpbHMvT1NJbmZvXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxFbmRwb2ludHMgZnJvbSBcIi4vQ29tbW9uL09tbmljaGFubmVsRW5kcG9pbnRzXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxIVFRQSGVhZGVycyBmcm9tIFwiLi9Db21tb24vT21uaWNoYW5uZWxIVFRQSGVhZGVyc1wiO1xuaW1wb3J0IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgZnJvbSBcIi4vSW50ZXJmYWNlcy9PbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyXCI7XG5pbXBvcnQgUXVldWVBdmFpbGFiaWxpdHkgZnJvbSBcIi4vTW9kZWwvUXVldWVBdmFpbGFiaWxpdHlcIjtcbmltcG9ydCBSZWNvbm5lY3RBdmFpbGFiaWxpdHkgZnJvbSBcIi4vTW9kZWwvUmVjb25uZWN0QXZhaWxhYmlsaXR5XCI7XG5pbXBvcnQgUmVjb25uZWN0TWFwcGluZ1JlY29yZCBmcm9tIFwiLi9Nb2RlbC9SZWNvbm5lY3RNYXBwaW5nUmVjb3JkXCI7XG5pbXBvcnQgeyBSZXF1ZXN0VGltZW91dENvbmZpZyB9IGZyb20gXCIuL0NvbW1vbi9SZXF1ZXN0VGltZW91dENvbmZpZ1wiO1xuaW1wb3J0IHsgU3RyaW5nTWFwIH0gZnJvbSBcIi4vQ29tbW9uL01hcHBpbmdzXCI7XG5pbXBvcnQgeyBUaW1lciB9IGZyb20gXCIuL1V0aWxzL1RpbWVyXCI7XG5pbXBvcnQgeyBhZGRPY1VzZXJBZ2VudEhlYWRlciB9IGZyb20gXCIuL1V0aWxzL2h0dHBIZWFkZXJzVXRpbHNcIjtcbmltcG9ydCB7IGNyZWF0ZUdldENoYXRUb2tlbkVuZHBvaW50IH0gZnJvbSBcIi4vVXRpbHMvZW5kcG9pbnRzQ3JlYXRvcnNcIjtcbmltcG9ydCBpc0V4cGVjdGVkQXhpb3NFcnJvciBmcm9tIFwiLi9VdGlscy9pc0V4cGVjdGVkQXhpb3NFcnJvclwiO1xuaW1wb3J0IHNlc3Npb25Jbml0UmV0cnlIYW5kbGVyIGZyb20gXCIuL1V0aWxzL1Nlc3Npb25Jbml0UmV0cnlIYW5kbGVyXCI7XG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi9VdGlscy91dWlkXCI7XG5pbXBvcnQgeyB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyB9IGZyb20gXCIuL1V0aWxzL3dhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWdzXCI7XG5pbXBvcnQgSVJlY29ubmVjdEF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVJlY29ubmVjdEF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyBpbXBsZW1lbnRzIElTREsge1xuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWc6IFJlcXVlc3RUaW1lb3V0Q29uZmlnID0ge1xuICAgIGdldENoYXRDb25maWc6IDEyMDAwMCxcbiAgICBnZXRMV0lEZXRhaWxzOiAxNTAwMCxcbiAgICBnZXRDaGF0VG9rZW46IDE1MDAwLFxuICAgIHNlc3Npb25Jbml0OiAxNTAwMCxcbiAgICBzZXNzaW9uQ2xvc2U6IDE1MDAwLFxuICAgIGdldFJlY29ubmVjdGFibGVDaGF0czogMTUwMDAsXG4gICAgZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5OiAxNTAwMCxcbiAgICBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlOiAxNTAwMCxcbiAgICBnZXRTdXJ2ZXlJbnZpdGVMaW5rOiAxNTAwMCxcbiAgICBnZXRDaGF0VHJhbnNjcmlwdHM6IDMwMDAwLFxuICAgIGVtYWlsVHJhbnNjcmlwdDogNTAwMCxcbiAgICBmZXRjaERhdGFNYXNraW5nSW5mbzogNTAwMCxcbiAgICBtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdDogMTUwMDAsXG4gICAgZ2V0QWdlbnRBdmFpbGFiaWxpdHk6IDE1MDAwLFxuICAgIHNlbmRUeXBpbmdJbmRpY2F0b3I6IDUwMDAsXG4gICAgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZFRpbWVvdXQ6IDE1MDAwXG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZGVmYXVsdENvbmZpZ3VyYXRpb246IElTREtDb25maWd1cmF0aW9uID0ge1xuICAgIGF1dGhDb2RlTm9uY2U6IHV1aWR2NCgpLnN1YnN0cmluZygwLCA4KSxcbiAgICBnZXRDaGF0VG9rZW5SZXRyeUNvdW50OiAxMCxcbiAgICBnZXRDaGF0VG9rZW5UaW1lQmV0d2VlblJldHJpZXNPbkZhaWx1cmU6IDEwMDAwLFxuICAgIGdldENoYXRUb2tlblJldHJ5T240Mjk6IHRydWUsXG4gICAgbWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmU6IDUsXG4gICAgZGVmYXVsdFJlcXVlc3RUaW1lb3V0OiB1bmRlZmluZWQsXG4gICAgcmVxdWVzdFRpbWVvdXRDb25maWc6IFNESy5kZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWcsXG4gICAgdXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtOiBmYWxzZSxcbiAgICB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnOiB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyxcbiAgICBvY1VzZXJBZ2VudDogW11cbiAgfTtcblxuICBsaXZlQ2hhdFZlcnNpb246IG51bWJlcjtcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBvY1VzZXJBZ2VudDogc3RyaW5nW107XG4gIEhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlID0gYCR7U0RLRXJyb3IuQ2xpZW50SFRUUFRpbWVvdXRFcnJvck5hbWV9OiAke1NES0Vycm9yLkNsaWVudEhUVFBUaW1lb3V0RXJyb3JNZXNzYWdlfWA7XG5cblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb246IElPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24sIHByaXZhdGUgY29uZmlndXJhdGlvbjogSVNES0NvbmZpZ3VyYXRpb24gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb24sIHByaXZhdGUgbG9nZ2VyPzogT0NTREtMb2dnZXIpIHtcbiAgICAvLyBTZXRzIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpZiBwYXNzZWQgY29uZmlndXJhdGlvbiBpcyBlbXB0eSBvciBpcyBub3QgYW4gb2JqZWN0XG4gICAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmNvbmZpZ3VyYXRpb24pLmxlbmd0aCB8fCB0eXBlb2YgKGNvbmZpZ3VyYXRpb24pICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb247XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgU0RLIGNvbmZpZ1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbikpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uLmhhc093blByb3BlcnR5KGtleSkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uW2Ake2tleX1gXSA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbltgJHtrZXl9YF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgaW5kaXZpZHVhbCBlbmRwb2ludFRpbWVvdXQgY29uZmlnXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl0pKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbltcInJlcXVlc3RUaW1lb3V0Q29uZmlnXCJdLmhhc093blByb3BlcnR5KGtleSkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl1bYCR7a2V5fWBdID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl1bYCR7a2V5fWBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGNoYW5uZWxJZFxuICAgIGNvbnN0IHsgY2hhbm5lbElkIH0gPSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb247XG4gICAgaWYgKCFPYmplY3QudmFsdWVzKENoYW5uZWxJZCkuaW5jbHVkZXMoY2hhbm5lbElkIGFzIENoYW5uZWxJZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFubmVsSWRgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBPQyBjb25maWdcbiAgICBjb25zdCBjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9tbmljaGFubmVsQ29uZmlndXJhdGlvbik7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgQ29uc3RhbnRzLnJlcXVpcmVkT21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycykge1xuICAgICAgaWYgKCFjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAnJHtrZXl9JyBpbiBPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9jVXNlckFnZW50ID0gdGhpcy5jb25maWd1cmF0aW9uLm9jVXNlckFnZW50O1xuICAgIHRoaXMubGl2ZUNoYXRWZXJzaW9uID0gTGl2ZUNoYXRWZXJzaW9uLlYyO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgTENXIEZDUyBEZXRhaWxzIG9mIHRoZSBPcmcuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TGN3RmNzRGV0YWlscygpOiBQcm9taXNlPG9iamVjdCB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTENXRkNTREVUQUlMU1NUQVJURUQsIFwiR2V0IExDVyBGQ1MgZGV0YWlscyBzdGFydGVkXCIsIFwiXCIpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGN3RmNzRGV0YWlsc1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IHt9O1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2UuZ2V0KHVybCwge1xuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdENvbmZpZ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMQ1dGQ1NERVRBSUxTU1VDQ0VFREVELCBcIkdldCBMQ1cgRkNTIGRldGFpbHMgc3VjY2VlZGVkXCIsIFwiXCIsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTENXRkNTREVUQUlMU0ZBSUxFRCwgXCJHZXQgTENXIEZDUyBkZXRhaWxzIGZhaWxlZFwiLCBcIlwiLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGNoYXQgY29uZmlnLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIHRvIGdldCBjaGF0IGNvbmZpZyAoT3B0aW9uYWwpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENoYXRDb25maWcocmVxdWVzdElkOiBzdHJpbmcsIGJ5cGFzc0NhY2hlID0gZmFsc2UpOiBQcm9taXNlPG9iamVjdCB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVENPTkZJR0ZTVEFSVEVELCBcIkdldCBDaGF0IGNvbmZpZyBzdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0Q29uZmlnUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0/cmVxdWVzdElkPSR7cmVxdWVzdElkfSZjaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgfSk7XG5cbiAgICBsZXQgcmVxdWVzdEhlYWRlcnMgPSB7fTtcbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKGJ5cGFzc0NhY2hlKSB7XG4gICAgICByZXF1ZXN0SGVhZGVycyA9IHsgLi4uQ29uc3RhbnRzLmJ5cGFzc0NhY2hlSGVhZGVycywgLi4ucmVxdWVzdEhlYWRlcnMgfTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlLmdldCh1cmwsIHtcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldENoYXRDb25maWdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuXG4gICAgICBpZiAoZGF0YS5MaXZlQ2hhdFZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5saXZlQ2hhdFZlcnNpb24gPSBkYXRhLkxpdmVDaGF0VmVyc2lvbjtcbiAgICAgIH1cblxuICAgICAgZGF0YS5oZWFkZXJzID0ge307XG4gICAgICBpZiAocmVzcG9uc2UuaGVhZGVycyAmJiByZXNwb25zZS5oZWFkZXJzW1wiZGF0ZVwiXSkge1xuICAgICAgICBkYXRhLmhlYWRlcnNbXCJkYXRlXCJdID0gcmVzcG9uc2UuaGVhZGVyc1tcImRhdGVcIl07XG4gICAgICB9XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHU1VDQ0VFREVELCBcIkdldCBDaGF0IGNvbmZpZyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVENPTkZJR0ZBSUxFRCwgXCJHZXQgQ2hhdCBjb25maWcgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIExXSSBkZXRhaWxzLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIHRvIGdldCBjaGF0IGNvbmZpZyAoT3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgTFdJIERldGFpbHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TFdJRGV0YWlscyhyZXF1ZXN0SWQ6IHN0cmluZywgZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zOiBJR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNTVEFSVEVELCBcIkdldCBMV0kgRGV0YWlscyBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgLy8gY29uc3RydWN0IGEgZW5kcG9pbnQgZm9yIGFub255bW91cyBjaGF0cyB0byBnZXQgTFdJIERldGFpbHNcbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXJXaXRoTm90Rm91bmQoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0TFdJRGV0YWlscyxcbiAgICB9KTtcblxuICAgIC8vIEV4dHJhY3QgYXV0aCB0b2tlbiBhbmQgcmVjb25uZWN0IGlkIGZyb20gb3B0aW9uYWwgcGFyYW1cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHJlY29ubmVjdElkIH0gPSBnZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcblxuICAgIC8vIHVwZGF0ZWQgYXV0aCBlbmRwb2ludCBmb3IgYXV0aGVudGljYXRlZCBjaGF0cyBhbmQgYWRkIGF1dGggdG9rZW4gaW4gaGVhZGVyXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aExpdmVXb3JrSXRlbURldGFpbHNQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIC8vIElmIHNob3VsZCBvbmx5IGJlIGFwcGxpY2FibGUgb24gdW5hdXRoIGNoYXQgJiB0aGUgZmxhZyBlbmFibGVkXG4gICAgY29uc3Qgc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSA9ICFhdXRoZW50aWNhdGVkVXNlclRva2VuICYmIHRoaXMuY29uZmlndXJhdGlvbi51c2VVbmF1dGhSZWNvbm5lY3RJZFNpZ1F1ZXJ5UGFyYW0gPT09IHRydWU7XG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoIXNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcmVxdWVzdFBhdGggKz0gYC8ke3JlY29ubmVjdElkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zOiBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyID0ge1xuICAgICAgY2hhbm5lbElkOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWRcbiAgICB9O1xuXG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICBwYXJhbXMuc2lnID0gcmVjb25uZWN0SWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0TFdJRGV0YWlsc1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVExXSVNUQVRVU1NVQ0NFRURFRCwgXCJHZXQgTFdJIERldGFpbHMgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTRkFJTEVELCBcIkdldCBMV0kgRGV0YWlscyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBjaGF0IHRva2VuIGZyb20gT21uaWNoYW5uZWwgdG8gam9pbiBUMSB0aHJlYWQuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIGdldGNoYXR0b2tlbiAoT3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGdldCBjaGF0IHRva2VuLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENoYXRUb2tlbihyZXF1ZXN0SWQ6IHN0cmluZywgZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXM6IElHZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcyA9IHt9LCBjdXJyZW50UmV0cnlDb3VudDogbnVtYmVyID0gMCk6IFByb21pc2U8RmV0Y2hDaGF0VG9rZW5SZXNwb25zZT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbmZlcnJhYmxlLXR5cGVzXG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIGNvbnN0IHsgcmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24sIHJlZnJlc2hUb2tlbiwgTXNPY0JvdEFwcGxpY2F0aW9uSWQgfSA9IGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IG11bHRpQm90ID0gKE1zT2NCb3RBcHBsaWNhdGlvbklkICYmIE1zT2NCb3RBcHBsaWNhdGlvbklkLmxlbmd0aCA+IDApPyB0cnVlOiBmYWxzZTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5TVEFSVEVELCBcIkdldCBDaGF0IFRva2VuIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGlmIChjdXJyZW50UmV0cnlDb3VudCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjdXJyZW50UmV0cnlDb3VudGApO1xuICAgIH1cblxuICAgIGlmICghcmVxdWVzdElkKSB7XG4gICAgICByZXF1ZXN0SWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGNyZWF0ZUdldENoYXRUb2tlbkVuZHBvaW50KGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gYXMgTGl2ZUNoYXRWZXJzaW9uIHx8IHRoaXMubGl2ZUNoYXRWZXJzaW9uLCBhdXRoZW50aWNhdGVkVXNlclRva2VuID8gdHJ1ZSA6IGZhbHNlLCBtdWx0aUJvdCk7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke2VuZHBvaW50fS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgIFxuICAgIC8vIElmIHNob3VsZCBvbmx5IGJlIGFwcGxpY2FibGUgb24gdW5hdXRoIGNoYXQgJiB0aGUgZmxhZyBlbmFibGVkXG4gICAgY29uc3Qgc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSA9ICFhdXRoZW50aWNhdGVkVXNlclRva2VuICYmIHRoaXMuY29uZmlndXJhdGlvbi51c2VVbmF1dGhSZWNvbm5lY3RJZFNpZ1F1ZXJ5UGFyYW0gPT09IHRydWU7XG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoIXNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcmVxdWVzdFBhdGggKz0gYC8ke3JlY29ubmVjdElkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zOiBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyID0ge1xuICAgICAgY2hhbm5lbElkOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWRcbiAgICB9XG4gICAgaWYgKE1zT2NCb3RBcHBsaWNhdGlvbklkICYmIE1zT2NCb3RBcHBsaWNhdGlvbklkLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcmFtc1snTXMtT2MtQm90LUFwcGxpY2F0aW9uLUlkJ10gPSBNc09jQm90QXBwbGljYXRpb25JZDtcbiAgICB9XG5cbiAgICBpZiAocmVmcmVzaFRva2VuKSB7XG4gICAgICBwYXJhbXMucmVmcmVzaFRva2VuID0gJ3RydWUnXG4gICAgfVxuXG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICBwYXJhbXMuc2lnID0gcmVjb25uZWN0SWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdFRva2VuXG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IChjdXJyZW50UmV0cnlDb3VudCA+IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSkgPyBjdXJyZW50UmV0cnlDb3VudCA6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHJldHJ5T240Mjk6IHRoaXMuY29uZmlndXJhdGlvbi5nZXRDaGF0VG9rZW5SZXRyeU9uNDI5LFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRUb2tlblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBpZiAoaGVhZGVycykge1xuICAgICAgICAgIGlmIChoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbklkID0gaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc29sdmVzIG9ubHkgaWYgaXQgY29udGFpbnMgY2hhdCB0b2tlbiByZXNwb25zZSB3aGljaCBvbmx5IGhhcHBlbnMgb24gc3RhdHVzIDIwMFxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIGNoZWNrIGlmIGRhdGEgaXMgZW1wdHksIGlmIHNvLCB0aGVuIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJFbXB0eSBkYXRhIHJlY2VpdmVkIGZyb20gZ2V0Q2hhdFRva2VuXCIpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhLnJlcXVlc3RJZCA9IHJlcXVlc3RJZDtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5TVUNDRUVERUQsIFwiR2V0IENoYXQgVG9rZW4gc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBObyBjb250ZW50IGZvciByZWNvbm5lY3QgY2hhdCBjYXNlIHNob3VsZG4ndCBiZSByZXRyaWVkLlxuICAgICAgICBpZiAocmVjb25uZWN0SWQgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSBDb25zdGFudHMubm9Db250ZW50U3RhdHVzQ29kZSkge1xuICAgICAgICAgIHJlamVjdChyZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VORkFJTEVELCBcIkdldCBDaGF0IFRva2VuIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgcmVjb25uZWN0YWJsZSBjaGF0cyBmcm9tIG9tbmljaGFubmVsIGZyb20gdGhlIGdpdmVuIHVzZXIgaW5mb3JtYXRpb24gaW4gSldUIHRva2VuKGNsYWltIG5hbWU6IHN1YikuXG4gICAqIEBwYXJhbSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMgTWFuZGF0ZSBwYXJhbWV0ZXJzIGZvciBnZXQgcmVjb25uZWN0YWJsZSBjaGF0cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRSZWNvbm5lY3RhYmxlQ2hhdHMocmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zOiBJUmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zKTogUHJvbWlzZTxSZWNvbm5lY3RNYXBwaW5nUmVjb3JkIHwgdm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IHJlY29ubmVjdGFibGVDaGF0c1BhcmFtcztcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBQkxFQ0hBVFNTVEFSVEVELCBcIkdldCBSZWNvbm5lY3RhYmxlIGNoYXQgU3RhcnRlZFwiKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0R2V0UmVjb25uZWN0YWJsZUNoYXRzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXM/LnJlcXVlc3RJZCB8fCB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlY29ubmVjdGFibGVDaGF0c1BhcmFtcz8ucmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRSZWNvbm5lY3RhYmxlQ2hhdHNcbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuXG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIC8vIFJlc29sdmVzIG9ubHkgaWYgaXQgY29udGFpbnMgcmVjb25uZWN0YWJsZSBjaGF0cyByZXNwb25zZSB3aGljaCBvbmx5IGhhcHBlbnMgb24gc3RhdHVzIDIwMFxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NVQ0NFRURFRCwgXCJHZXQgUmVjb25uZWN0YWJsZSBDaGF0cyBTdWNjZWVkZWQgYW5kIG9sZCBzZXNzaW9uIHJldHVybmVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gZGF0YSBmb3VuZCBpbiB0aGUgb2xkIHNlc3Npb25zIHNvIHJldHVybmluZyBudWxsXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBQkxFQ0hBVFNGQUlMRUQsIFwiR2V0IFJlY29ubmVjdGFibGUgQ2hhdHMgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gKiBGZXRjaGVzIHRoZSByZWNvbm5lY3RhYmxlIGNoYXRzIGZyb20gb21uaWNoYW5uZWwgZnJvbSB0aGUgZ2l2ZW4gdXNlciBpbmZvcm1hdGlvbiBpbiBKV1QgdG9rZW4oY2xhaW0gbmFtZTogc3ViKS5cbiAqIEBwYXJhbSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMgTWFuZGF0ZSBwYXJhbWV0ZXJzIGZvciBnZXQgcmVjb25uZWN0YWJsZSBjaGF0cy5cbiAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5KHJlY29ubmVjdElkOiBzdHJpbmcsIG9wdGlvbmFsUGFyYW1zOiBJUmVjb25uZWN0QXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8UmVjb25uZWN0QXZhaWxhYmlsaXR5IHwgdm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlTVEFSVEVELCBcIkdldCBSZWNvbm5lY3RhYmxlIGF2YWlsYWJpbGl0eSBTdGFydGVkXCIpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRSZWNvbm5lY3RBdmFpbGFiaWxpdHlQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlY29ubmVjdElkfWA7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMob3B0aW9uYWxQYXJhbXM/LnJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5XG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlTVUNDRUVERUQsIFwiR2V0IFJlY29ubmVjdCBhdmFpbGFiaWxpdHkgc3VjY2VlZGVkXCIsIG9wdGlvbmFsUGFyYW1zPy5yZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gZGF0YSBmb3VuZCBzbyByZXR1cm5pbmcgbnVsbFxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuV0FSTiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlTVUNDRUVERUQsIFwiR2V0IFJlY29ubmVjdCBhdmFpbGFiaWxpdHkgZGlkbid0IHNlbmQgYW55IHZhbGlkIGRhdGFcIiwgb3B0aW9uYWxQYXJhbXM/LnJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWUZBSUxFRCwgXCJHZXQgUmVjb25uZWN0IEF2YWlsYWJpbGl0eSBmYWlsZWRcIiwgb3B0aW9uYWxQYXJhbXM/LnJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gaW5pdC5cbiAgICogQHBhcmFtIHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlc3Npb24gaW5pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRBZ2VudEF2YWlsYWJpbGl0eShyZXF1ZXN0SWQ6IHN0cmluZywgcXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtczogSUdldFF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8UXVldWVBdmFpbGFiaWxpdHk+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQUdFTlRBVkFJTEFCSUxJVFlTVEFSVEVELCBcIkdldCBhZ2VudCBhdmFpbGFiaWxpdHkgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuR2V0QWdlbnRBdmFpbGFiaWxpdHlQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPWxjd2A7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldEFnZW50QXZhaWxhYmlsaXR5XG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGluaXRDb250ZXh0LCBnZXRDb250ZXh0IH0gPSBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgZGF0YTogSW5pdENvbnRleHQgPSBpbml0Q29udGV4dCB8fCB7fTtcblxuICAgIGNvbnN0IGNhY2hPYmogPSB7XG4gICAgICBcIm9yZ0lkXCI6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkLFxuICAgICAgXCJ3aWRnZXRJZFwiOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZFxuICAgIH1cblxuICAgIGlmIChkYXRhICYmIGRhdGEuY3VzdG9tQ29udGV4dERhdGEpIHtcbiAgICAgIGNvbnN0IHRlbXBBcnIgPSBDdXN0b21Db250ZXh0RGF0YS5zb3J0KGRhdGEuY3VzdG9tQ29udGV4dERhdGEpO1xuICAgICAgT2JqZWN0LmFzc2lnbihjYWNoT2JqLCB7IFwiY3VzdG9tQ29udGV4dFwiOiB0ZW1wQXJyIH0pO1xuICAgIH1cblxuICAgIGlmIChkYXRhLnBvcnRhbGNvbnRhY3RpZCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihjYWNoT2JqLCB7IFwicG9ydGFsY29udGFjdGlkXCI6IGRhdGEucG9ydGFsY29udGFjdGlkIH0pO1xuICAgIH1cblxuICAgIGRhdGEuY2FjaGVLZXkgPSBoYXNoLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShKU09OLnN0cmluZ2lmeShjYWNoT2JqKSkuZGlnZXN0KCdoZXgnKS50b1N0cmluZygpO1xuXG4gICAgaWYgKGdldENvbnRleHQgJiYgIXdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgZ2V0Q29udGV4dCBpcyBvbmx5IHN1cHBvcnRlZCBvbiB3ZWIgYnJvd3NlcnNgKSk7XG4gICAgfVxuXG4gICAgaWYgKGdldENvbnRleHQpIHtcbiAgICAgIGRhdGEuYnJvd3NlciA9IEJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICBkYXRhLmRldmljZSA9IERldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgZGF0YS5vcmlnaW51cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIGRhdGEub3MgPSBPU0luZm8uZ2V0T3NUeXBlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuXG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0QWdlbnRBdmFpbGFiaWxpdHlcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVEFHRU5UQVZBSUxBQklMSVRZU1VDQ0VFREVELCBcIkdldCBhZ2VudCBhdmFpbGFiaWxpdHkgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVEFHRU5UQVZBSUxBQklMSVRZRkFJTEVELCBcIkdldCBhZ2VudCBhdmFpbGFiaWxpdHkgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqJ1xuICAgKiBTdGFydHMgYSBzZXNzaW9uIHRvIG9tbmljaGFubmVsLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZXNzaW9uIGluaXQuXG4gICAqIEBwYXJhbSBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGluaXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2Vzc2lvbkluaXQocmVxdWVzdElkOiBzdHJpbmcsIHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTklOSVRTVEFSVEVELCBcIlNlc3Npb24gSW5pdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGNvbnN0IHJldHJ5T240MjkgPSB0cnVlO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5zZXNzaW9uSW5pdCxcbiAgICAgIHNob3VsZFJldHJ5OiAoZXJyb3IpID0+IHNlc3Npb25Jbml0UmV0cnlIYW5kbGVyKGVycm9yLCByZXRyeU9uNDI5KSxcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHJlY29ubmVjdElkLCBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpbml0Q29udGV4dCwgZ2V0Q29udGV4dCB9ID0gc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCBkYXRhOiBJbml0Q29udGV4dCA9IGluaXRDb250ZXh0IHx8IHt9O1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuXG4gICAgY29uc3QgYmFzZVBhdGggPSBhdXRoZW50aWNhdGVkVXNlclRva2VuXG4gICAgICA/IE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFNlc3Npb25Jbml0UGF0aFxuICAgICAgOiBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlc3Npb25Jbml0UGF0aDtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtiYXNlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7ICAgICBcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdEhlYWRlcnMsIHtcbiAgICAgICAgW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl06IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sXG4gICAgICAgIFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdOiB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgdGhpcy5zZXRSZXF1ZXN0SWRIZWFkZXIocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cblxuICAgIC8vIElmIHNob3VsZCBvbmx5IGJlIGFwcGxpY2FibGUgb24gdW5hdXRoIGNoYXQgJiB0aGUgZmxhZyBlbmFibGVkXG4gICAgY29uc3Qgc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSA9ICFhdXRoZW50aWNhdGVkVXNlclRva2VuICYmIHRoaXMuY29uZmlndXJhdGlvbi51c2VVbmF1dGhSZWNvbm5lY3RJZFNpZ1F1ZXJ5UGFyYW0gPT09IHRydWU7XG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoIXNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcmVxdWVzdFBhdGggKz0gYC8ke3JlY29ubmVjdElkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zOiBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyID0ge1xuICAgICAgY2hhbm5lbElkOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWRcbiAgICB9XG5cbiAgICBpZiAocmVjb25uZWN0SWQgJiYgc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgcGFyYW1zLnNpZyA9IHJlY29ubmVjdElkO1xuICAgIH1cblxuICAgIGlmIChnZXRDb250ZXh0ICYmICF3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYGdldENvbnRleHQgaXMgb25seSBzdXBwb3J0ZWQgb24gd2ViIGJyb3dzZXJzYCkpO1xuICAgIH1cblxuICAgIGlmIChnZXRDb250ZXh0KSB7XG4gICAgICBkYXRhLmJyb3dzZXIgPSBCcm93c2VySW5mby5nZXRCcm93c2VyTmFtZSgpO1xuICAgICAgZGF0YS5kZXZpY2UgPSBEZXZpY2VJbmZvLmdldERldmljZVR5cGUoKTtcbiAgICAgIGRhdGEub3JpZ2ludXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICBkYXRhLm9zID0gT1NJbmZvLmdldE9zVHlwZSgpO1xuICAgIH1cblxuICAgIC8vIFNldCBkZWZhdWx0IGxvY2FsZSBpZiBsb2NhbGUgaXMgZW1wdHlcbiAgICBpZiAoIWRhdGEubG9jYWxlKSB7XG4gICAgICBkYXRhLmxvY2FsZSA9IENvbnN0YW50cy5kZWZhdWx0TG9jYWxlO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGxvY2FsZVxuICAgIGlmIChkYXRhLmxvY2FsZSAmJiAhTG9jYWxlcy5zdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKGRhdGEubG9jYWxlKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbG9jYWxlOiAnJHtkYXRhLmxvY2FsZX0nYCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc2Vzc2lvbkluaXRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OSU5JVFNVQ0NFRURFRCwgXCJTZXNzaW9uIEluaXQgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgZGF0YSwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklURkFJTEVELCBcIlNlc3Npb24gSW5pdCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCBkYXRhLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlQ29udmVyc2F0aW9uKHJlcXVlc3RJZDogc3RyaW5nLCBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zOiBJU2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxGZXRjaENoYXRUb2tlblJlc3BvbnNlPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkNSRUFURVNFU1NJT05TVEFSVEVELCBcIkNyZWF0ZSBjb252ZXJzYXRpb24gY2FsbCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGNvbnN0IHJldHJ5T240MjkgPSB0cnVlO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5zZXNzaW9uSW5pdCxcbiAgICAgIHNob3VsZFJldHJ5OiAoZXJyb3IpID0+IHNlc3Npb25Jbml0UmV0cnlIYW5kbGVyKGVycm9yLCByZXRyeU9uNDI5KSxcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHJlY29ubmVjdElkLCBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpbml0Q29udGV4dCwgZ2V0Q29udGV4dCB9ID0gc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCBkYXRhOiBJbml0Q29udGV4dCA9IGluaXRDb250ZXh0IHx8IHt9O1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuXG4gICAgY29uc3QgYmFzZVBhdGggPSBhdXRoZW50aWNhdGVkVXNlclRva2VuXG4gICAgICA/IE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0Q29ubmVjdG9yQXV0aFBhdGhcbiAgICAgIDogT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25uZWN0b3JQYXRoO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7YmFzZVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9L3dpZGdldEFwcC8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS9jb252ZXJzYXRpb25gO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHsgICAgIFxuICAgICAgT2JqZWN0LmFzc2lnbihyZXF1ZXN0SGVhZGVycywge1xuICAgICAgICBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXTogYXV0aGVudGljYXRlZFVzZXJUb2tlbixcbiAgICAgICAgW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV06IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICB0aGlzLnNldFJlcXVlc3RJZEhlYWRlcihyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgZGF0YS5yZWNvbm5lY3RJZCA9IHJlY29ubmVjdElkO1xuICAgIH1cblxuICAgIGRhdGEuY2hhbm5lbElkID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkO1xuXG4gICAgaWYgKGdldENvbnRleHQgJiYgIXdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgZ2V0Q29udGV4dCBpcyBvbmx5IHN1cHBvcnRlZCBvbiB3ZWIgYnJvd3NlcnNgKSk7XG4gICAgfVxuXG4gICAgaWYgKGdldENvbnRleHQpIHtcbiAgICAgIGRhdGEuYnJvd3NlciA9IEJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICBkYXRhLmRldmljZSA9IERldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgZGF0YS5vcmlnaW51cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIGRhdGEub3MgPSBPU0luZm8uZ2V0T3NUeXBlKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGRlZmF1bHQgbG9jYWxlIGlmIGxvY2FsZSBpcyBlbXB0eVxuICAgIGlmICghZGF0YS5sb2NhbGUpIHtcbiAgICAgIGRhdGEubG9jYWxlID0gQ29uc3RhbnRzLmRlZmF1bHRMb2NhbGU7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbG9jYWxlXG4gICAgaWYgKGRhdGEubG9jYWxlICYmICFMb2NhbGVzLnN1cHBvcnRlZExvY2FsZXMuaW5jbHVkZXMoZGF0YS5sb2NhbGUpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBVbnN1cHBvcnRlZCBsb2NhbGU6ICcke2RhdGEubG9jYWxlfSdgKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zZXNzaW9uSW5pdFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICBpZiAoaGVhZGVycykge1xuICAgICAgICBpZiAoaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gY2hlY2sgaWYgZGF0YSBpcyBlbXB0eSwgaWYgc28sIHRoZW4gdGhyb3cgYW4gZXJyb3JcbiAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1wdHkgZGF0YSByZWNlaXZlZCBmcm9tIGdldENoYXRUb2tlblwiKTtcbiAgICAgIH1cblxuICAgICAgZGF0YS5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5DUkVBVEVTRVNTSU9OU1VDQ0VFREVELCBcIkNyZWF0ZSBjb3ZlcnNhdGlvbiBjYWxsIFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkNSRUFURVNFU1NJT05GQUlMRUQsIFwiQ3JlYXRlIGNvbnZlcnNhdGlvbiBjYWxsIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIGRhdGEsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgIFxuICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZXNzaW9uIGNsb3NlIChzYW1lIHJlcXVlc3QgaWQgZm9yIHNlc3Npb24gaW5pdCkuXG4gICAqIEBwYXJhbSBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vzc2lvbiBjbG9zZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXNzaW9uQ2xvc2UocmVxdWVzdElkOiBzdHJpbmcsIHNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zOiBJU2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OQ0xPU0VTVEFSVEVELCBcIlNlc3Npb24gQ2xvc2UgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0U2Vzc2lvbkNsb3NlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5zZXNzaW9uQ2xvc2VcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaXNSZWNvbm5lY3RDaGF0LCBpc1BlcnNpc3RlbnRDaGF0LCBjaGF0SWQgfSA9IHNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICBjb25zdCBkYXRhOiBhbnkgPSB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZGF0YS5jaGF0SWQgPSBjaGF0SWQ7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vzc2lvbkNsb3NlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGlmIChpc1JlY29ubmVjdENoYXQpIHtcbiAgICAgIHJlcXVlc3RQYXRoICs9IGAmaXNSZWNvbm5lY3RDaGF0PXRydWVgO1xuICAgIH1cblxuICAgIGlmIChpc1BlcnNpc3RlbnRDaGF0KSB7XG4gICAgICByZXF1ZXN0UGF0aCArPSBgJmlzUGVyc2lzdGVudENoYXQ9dHJ1ZWA7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zZXNzaW9uQ2xvc2VcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OQ0xPU0VTVUNDRUVERUQsIFwiU2Vzc2lvbiBDbG9zZSBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTkNMT1NFRkFJTEVELCBcIlNlc3Npb24gY2xvc2UgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGF1dGggY2hhdCByZWNvcmQgZXhpc3RzIGluIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgZm9yIHZhbGlkYXRlQXV0aENoYXRSZWNvcmQgKHNhbWUgcmVxdWVzdCBpZCBmb3Igc2Vzc2lvbiBpbml0KS5cbiAgICogQHBhcmFtIHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkKHJlcXVlc3RJZDogc3RyaW5nLCB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM6IElWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JEU1RBUlRFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY2hhdElkIH0gPSB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRWYWxpZGF0ZUF1dGhDaGF0TWFwUmVjb3JkUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcudmFsaWRhdGVBdXRoQ2hhdFJlY29yZFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnZhbGlkYXRlQXV0aENoYXRSZWNvcmRUaW1lb3V0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGE/LmF1dGhDaGF0RXhpc3QgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JEU1VDQ0VFREVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRGQUlMRUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBGYWlsZWQuIFJlY29yZCBpcyBub3QgZm91bmQgb3IgcmVxdWVzdCBpcyBub3QgYXV0aG9yaXplZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgRmFpbGVkLiBSZWNvcmQgaXMgbm90IGZvdW5kIG9yIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWRcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRGQUlMRUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yLnRvU3RyaW5nKCkgPT09IFwiRXJyb3I6IFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgNDA0XCIpIHsgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgIHJlc29sdmUoe30pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXRzIHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSBwb3N0Q2hhdFJlc3BvbnNlIFBvc3QgY2hhdCByZXNwb25zZSB0byBzdWJtaXQuXG4gICAqIEBwYXJhbSBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHN1Ym1pdCBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3VibWl0UG9zdENoYXRSZXNwb25zZShyZXF1ZXN0SWQ6IHN0cmluZywgcG9zdENoYXRSZXNwb25zZTogb2JqZWN0LCBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM6IElTdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVFNUQVJURUQsIFwiU3VibWl0IFBvc3QgQ2hhdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTdWJtaXRQb3N0Q2hhdFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc3VibWl0UG9zdENoYXRSZXNwb25zZVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFN1Ym1pdFBvc3RDaGF0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShwb3N0Q2hhdFJlc3BvbnNlKSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc3VibWl0UG9zdENoYXRSZXNwb25zZVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNVQk1JVFBPU1RDSEFUU1VDQ0VFREVELCBcIlN1Ym1pdCBQb3N0IENoYXQgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNVQk1JVFBPU1RDSEFURkFJTEVELCBcIlN1Ym1pdCBQb3N0IENoYXQgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXRzIHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSBwb3N0Q2hhdFJlc3BvbnNlIFBvc3QgY2hhdCByZXNwb25zZSB0byBzdWJtaXQuXG4gICAqIEBwYXJhbSBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHN1Ym1pdCBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U3VydmV5SW52aXRlTGluayhzdXJ2ZXlPd25lcklkOiBzdHJpbmcsIHN1cnZleUludml0ZUFQSVJlcXVlc3RCb2R5OiBvYmplY3QsIGdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtczogSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWwuSU5GTyxcbiAgICAgICAgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LU1RBUlRFRCxcbiAgICAgICAgeyBTdXJ2ZXlPd25lcklkOiBzdXJ2ZXlPd25lcklkIH0sXG4gICAgICAgIFwiR2V0IFN1cnZleSBJbnZpdGUgTGluayBTdGFydGVkXCIpO1xuICAgIH1cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHtzdXJ2ZXlPd25lcklkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldFN1cnZleUludml0ZUxpbmtcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgcmVxdWVzdElkIH0gPSBnZXRzdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aEdldFN1cnZleUludml0ZUxpbmtQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3N1cnZleU93bmVySWR9YDtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy53aWRnZXRBcHBJZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKHJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5yZXF1ZXN0SWRdID0gcmVxdWVzdElkO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoc3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHkpLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRTdXJ2ZXlJbnZpdGVMaW5rXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUU1VSVkVZSU5WSVRFTElOS1NVQ0NFRURFRCwgXCJHZXQgU3VydmV5IEludml0ZSBMaW5rIFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LRkFJTEVELCBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2hhdCB0cmFuc2NyaXB0cyBmb3IgY3VzdG9tZXIuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gY2hhdElkIENoYXQgdGhyZWFkIElkLlxuICAgKiBAcGFyYW0gdG9rZW4gU2t5cGUgdG9rZW4uXG4gICAqIEBwYXJhbSBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgY2hhdCB0cmFuc2NyaXB0cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDaGF0VHJhbnNjcmlwdHMocmVxdWVzdElkOiBzdHJpbmcsIGNoYXRJZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtczogSUdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVFNUQVJURUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRUcmFuc2NyaXB0c1xuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIH0gPSBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy53aWRnZXRBcHBJZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhvcml6YXRpb25dID0gdG9rZW47XG5cbiAgICBpZiAodGhpcy5saXZlQ2hhdFZlcnNpb24gPT09IExpdmVDaGF0VmVyc2lvbi5WMiB8fCAoY3VycmVudExpdmVDaGF0VmVyc2lvbiAmJiBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uID09PSBMaXZlQ2hhdFZlcnNpb24uVjIpKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdHYyR2V0Q2hhdFRyYW5zY3JpcHRQYXRofS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXR2MkF1dGhHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRofS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0VHJhbnNjcmlwdHNcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRTVUNDRUVERUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUUkFOU0NSSVBURkFJTEVELCBcIkdldCBDaGF0IFRyYW5zY3JpcHQgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRW1haWwgdHJhbnNjcmlwdCB0byBjdXN0b21lci5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSB0b2tlbiBTa3lwZSB0b2tlbi5cbiAgICogQHBhcmFtIGVtYWlsUmVxdWVzdEJvZHkgRW1haWwgcmVxdWVzdCBib2R5LlxuICAgKiBAcGFyYW0gZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZW1haWwgdHJhbnNjcmlwdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbWFpbFRyYW5zY3JpcHQocmVxdWVzdElkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGVtYWlsUmVxdWVzdEJvZHk6IG9iamVjdCwgZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXM6IElFbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVFNUQVJURUQsIFwiRW1haWwgVHJhbnNjcmlwdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5lbWFpbFRyYW5zY3JpcHRcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRob3JpemF0aW9uXSA9IHRva2VuO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoVHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGh9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShlbWFpbFJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZW1haWxUcmFuc2NyaXB0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRU1BSUxUUkFOU0NSSVBUU1VDQ0VFREVELCBcIkVtYWlsIFRyYW5zY3JpcHQgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRU1BSUxUUkFOU0NSSVBURkFJTEVELCBcIkVtYWlsIFRyYW5zY3JpcHQgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBkYXRhIG1hc2tpbmcgaW5mbyBvZiB0aGUgb3JnLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbiAoT3B0aW9uYWwpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZldGNoRGF0YU1hc2tpbmdJbmZvKHJlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTxJRGF0YU1hc2tpbmdJbmZvPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdTVEFSVEVELCBcIkZldGNoIERhdGEgTWFza2luZyBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5mZXRjaERhdGFNYXNraW5nSW5mb1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMucmVxdWVzdElkXSA9IHJlcXVlc3RJZDtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5mZXRjaERhdGFNYXNraW5nSW5mb1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRkVUQ0hEQVRBTUFTS0lOR1NVQ0NFRURFRCwgXCJGZXRjaCBEYXRhIE1hc2tpbmcgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdGQUlMRUQsIFwiRmV0Y2ggRGF0YSBNYXNraW5nIEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZXMgYSBzZWNvbmRhcnkgY2hhbm5lbCBldmVudCBuZXR3b3JrIGNhbGwgdG8gT21uaWNoYW5uZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vjb25kYXJ5IGNoYW5uZWwgZXZlbnRcbiAgICogQHBhcmFtIHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5IHNlY29uZGFyeUNoYW5uZWwgZXZlbnQgcmVxdWVzdCBib2R5XG4gICAqIEBwYXJhbSBzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZWNvbmRhcnkgY2hhbm5lbCBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3QocmVxdWVzdElkOiBzdHJpbmcsIHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5OiBvYmplY3QsIHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zOiBJU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1RBUlRFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLm1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0XG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIHJlcXVlc3RQYXRoICs9IFwiP2NoYW5uZWxJZD1cIiArIENvbnN0YW50cy5kZWZhdWx0Q2hhbm5lbElkO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShzZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Qm9keSksXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLm1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNVQ0NFRURFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RGQUlMRUQsIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFNlbmQgdHlwaW5nIGluZGljYXRvclxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZW5kVHlwaW5nSW5kaWNhdG9yKHJlcXVlc3RJZDogc3RyaW5nLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uOiBudW1iZXIsIHNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtczogSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gYXZvaWRpbmcgbG9nZ2luZyBJbmZvIGZvciB0eXBpbmdpbmRpY2F0b3IgdG8gcmVkdWNlIGxvZyB0cmFmZmljXG4gICAgaWYgKCFjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIHx8IGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gIT09IExpdmVDaGF0VmVyc2lvbi5WMikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyBjdXN0b21lckRpc3BsYXlOYW1lIH0gPSBzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXM7XG4gICAgaWYgKCFjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIHx8IGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gIT09IExpdmVDaGF0VmVyc2lvbi5WMikgeyB0aHJvdyBuZXcgRXJyb3IoJ1R5cGluZyBpbmRpY2F0b3IgaXMgb25seSBzdXBwb3J0ZWQgb24gdjInKSB9XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuU2VuZFR5cGluZ0luZGljYXRvclBhdGh9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIGlmIChjdXN0b21lckRpc3BsYXlOYW1lKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tDb25zdGFudHMuY3VzdG9tZXJEaXNwbGF5TmFtZV0gPSBjdXN0b21lckRpc3BsYXlOYW1lO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc2VuZFR5cGluZ0luZGljYXRvclxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFRZUElOR0lORElDQVRPUlNVQ0NFRURFRCwgXCJTZW5kIFR5cGluZyBJbmRpY2F0b3IgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFRZUElOR0lORElDQVRPUkZBSUxFRCwgXCJTZW5kIFR5cGluZyBJbmRpY2F0b3IgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgbG9nZ2luZy5cbiAgICpcbiAgICogQHBhcmFtIGxvZ0xldmVsIExvZyBsZXZlbCBmb3IgbG9nZ2luZy5cbiAgICogQHBhcmFtIHRlbGVtZXRyeUV2ZW50VHlwZSBUZWxlbWV0cnkgZXZlbnQgdHlwZSBpbiB3aGljaCBldmVudCB3aWxsIGJlIGxvZ2dlZC5cbiAgICogQHBhcmFtIGRlc2NyaXB0aW9uIERlc2NyaXB0aW9uIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0IElEXG4gICAqIEBwYXJhbSByZXNwb25zZSBSZXNwb25zZVxuICAgKiBAcGFyYW0gZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyBFbGFwc2VkIHRpbWUgaW4gbXNcbiAgICogQHBhcmFtIHJlcXVlc3RQYXRoIFJlcXVlc3QgcGF0aFxuICAgKiBAcGFyYW0gbWV0aG9kIE1ldGhvZFxuICAgKiBAcGFyYW0gZXJyb3IgRXJyb3JcbiAgICogQHBhcmFtIGRhdGEgRGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBsb2dXaXRoTG9nZ2VyKGxvZ0xldmVsOiBMb2dMZXZlbCwgdGVsZW1ldHJ5RXZlbnRUeXBlOiBPQ1NES1RlbGVtZXRyeUV2ZW50LCBkZXNjcmlwdGlvbjogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcsIHJlc3BvbnNlPzogQXhpb3NSZXNwb25zZTxhbnk+LCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzPzogbnVtYmVyLCByZXF1ZXN0UGF0aD86IHN0cmluZywgbWV0aG9kPzogc3RyaW5nLCBlcnJvcj86IHVua25vd24sIHJlcXVlc3RQYXlsb2FkPzogYW55LCByZXF1ZXN0SGVhZGVycz86IGFueSk6IHZvaWQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAoIXRoaXMubG9nZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlcnJvcikge1xuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcik7XG4gICAgfVxuXG4gICAgbGV0IHNhbml0aXplZFJlcXVlc3RQYXlsb2FkID0gdW5kZWZpbmVkO1xuICAgIGlmIChyZXF1ZXN0UGF5bG9hZCkge1xuICAgICAgc2FuaXRpemVkUmVxdWVzdFBheWxvYWQgPSB7IC4uLnJlcXVlc3RQYXlsb2FkIH07XG4gICAgICBpZiAoc2FuaXRpemVkUmVxdWVzdFBheWxvYWQuY3VzdG9tQ29udGV4dERhdGEpIHtcbiAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEN1c3RvbUNvbnRleHREYXRhVmFsdWVzKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLmN1c3RvbUNvbnRleHREYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5wcmVDaGF0UmVzcG9uc2UpIHtcbiAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcFByZUNoYXRSZXNwb25zZShzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5wcmVDaGF0UmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEdlb2xvY2F0aW9uKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkKTtcbiAgICB9XG5cbiAgICBsZXQgc2FuaXRpemVkUmVxdWVzdEhlYWRlcnMgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGF1dGhUb2tlbkRldGFpbHM6IGFueSA9IHVuZGVmaW5lZDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgaWYgKHJlcXVlc3RIZWFkZXJzKSB7XG4gICAgICBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyA9IHsgLi4ucmVxdWVzdEhlYWRlcnMgfTtcbiAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBSZXF1ZXN0SGVhZGVyc1NlbnNpdGl2ZVByb3BlcnRpZXMoc2FuaXRpemVkUmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICBpZiAocmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSkge1xuICAgICAgICBpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5hdG9iKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXTtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB0b2tlbi5zcGxpdChcIi5cIilbMV07XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gd2luZG93LmF0b2IocGF5bG9hZCk7XG4gICAgICAgICAgICBjb25zdCBqc29uRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICBjb25zdCBsd2lDb250ZXh0cyA9IGpzb25EYXRhW1wibHdpY29udGV4dHNcIl07XG4gICAgICAgICAgICBhdXRoVG9rZW5EZXRhaWxzID0ge1xuICAgICAgICAgICAgICBzdWI6IGpzb25EYXRhW1wic3ViXCJdLFxuICAgICAgICAgICAgICBleHA6IGpzb25EYXRhW1wiZXhwXCJdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAobHdpQ29udGV4dHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgbHdpQ29udGV4dHNEYXRhID0gSlNPTi5wYXJzZShsd2lDb250ZXh0cyk7XG4gICAgICAgICAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBDdXN0b21Db250ZXh0RGF0YVZhbHVlcyhsd2lDb250ZXh0c0RhdGEpO1xuICAgICAgICAgICAgICBhdXRoVG9rZW5EZXRhaWxzLmx3aUNvbnRleHRzID0gbHdpQ29udGV4dHNEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbURhdGEgPSB7XG4gICAgICBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcbiAgICAgIFJlZ2lvbjogcmVzcG9uc2U/LmRhdGEuUmVnaW9uLFxuICAgICAgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyxcbiAgICAgIFRyYW5zYWN0aW9uSWQ6IHJlc3BvbnNlPy5oZWFkZXJzW0NvbnN0YW50cy50cmFuc2FjdGlvbmlkXSxcbiAgICAgIFJlcXVlc3RQYXRoOiByZXF1ZXN0UGF0aCxcbiAgICAgIFJlcXVlc3RNZXRob2Q6IG1ldGhvZCxcbiAgICAgIFJlc3BvbnNlU3RhdHVzQ29kZTogcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5zdGF0dXMgOiB1bmRlZmluZWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgRXhjZXB0aW9uRGV0YWlsczogZXJyb3IgPyAoZXJyb3IgYXMgYW55KS5yZXNwb25zZT8uZGF0YSB8fCBlcnJvciA6IHVuZGVmaW5lZCwgXG4gICAgICBSZXF1ZXN0UGF5bG9hZDogc2FuaXRpemVkUmVxdWVzdFBheWxvYWQsXG4gICAgICBSZXF1ZXN0SGVhZGVyczogc2FuaXRpemVkUmVxdWVzdEhlYWRlcnMsXG4gICAgICBSZXNwb25zZUVycm9yY29kZTogZXJyb3IgPyAoZXJyb3IgYXMgYW55KS5yZXNwb25zZT8uaGVhZGVycz8uZXJyb3Jjb2RlIDogdW5kZWZpbmVkLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIEF1dGhUb2tlbkRldGFpbHM6IGF1dGhUb2tlbkRldGFpbHNcbiAgICB9O1xuICAgIHRoaXMubG9nZ2VyLmxvZyhsb2dMZXZlbCwgdGVsZW1ldHJ5RXZlbnRUeXBlLCBjdXN0b21EYXRhLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIHNldEF1dGhDb2RlTm9uY2UgPSAoaGVhZGVyczogYW55KSA9PiB7XG4gICAgaWYgKGhlYWRlcnM/LmF1dGhjb2Rlbm9uY2UpIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlID0gaGVhZGVycz8uYXV0aGNvZGVub25jZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTZXNzaW9uSWRIZWFkZXIodGhpcy5zZXNzaW9uSWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG4gICAgdGhpcy5zZXRDb3JyZWxhdGlvbklkSW5IZWFkZXIocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIHNldFNlc3Npb25JZEhlYWRlciA9IChzZXNzaW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaGVhZGVyczogYW55KSA9PiB7XG4gICAgaWYgKHNlc3Npb25JZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkXSA9IHNlc3Npb25JZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFJlcXVlc3RJZEhlYWRlciA9IChyZXF1ZXN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaGVhZGVyczogU3RyaW5nTWFwKSA9PiB7XG4gICAgaWYgKHJlcXVlc3RJZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLnJlcXVlc3RJZF0gPSByZXF1ZXN0SWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb3JyZWxhdGlvbklkSW5IZWFkZXIgPSAoY29ycmVsYXRpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBoZWFkZXJzOiBTdHJpbmdNYXApID0+IHtcbiAgICBpZiAoY29ycmVsYXRpb25JZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmNvcnJlbGF0aW9uSWRdID0gY29ycmVsYXRpb25JZDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
2714
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TREsudHMiXSwibmFtZXMiOlsiU0RLIiwib21uaWNoYW5uZWxDb25maWd1cmF0aW9uIiwiY29uZmlndXJhdGlvbiIsImRlZmF1bHRDb25maWd1cmF0aW9uIiwibG9nZ2VyIiwiU0RLRXJyb3IiLCJDbGllbnRIVFRQVGltZW91dEVycm9yTmFtZSIsIkNsaWVudEhUVFBUaW1lb3V0RXJyb3JNZXNzYWdlIiwiaGVhZGVycyIsImF1dGhjb2Rlbm9uY2UiLCJhdXRoQ29kZU5vbmNlIiwic2Vzc2lvbklkIiwiT21uaWNoYW5uZWxIVFRQSGVhZGVycyIsIm9jU2Vzc2lvbklkIiwicmVxdWVzdElkIiwiY29ycmVsYXRpb25JZCIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSIsImNoYW5uZWxJZCIsInZhbHVlcyIsIkNoYW5uZWxJZCIsImluY2x1ZGVzIiwiRXJyb3IiLCJjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyIsIkNvbnN0YW50cyIsInJlcXVpcmVkT21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyIsIm9jVXNlckFnZW50IiwibGl2ZUNoYXRWZXJzaW9uIiwiTGl2ZUNoYXRWZXJzaW9uIiwiVjIiLCJ0aW1lciIsIlRpbWVyIiwiVElNRVIiLCJsb2dXaXRoTG9nZ2VyIiwiTG9nTGV2ZWwiLCJJTkZPIiwiT0NTREtUZWxlbWV0cnlFdmVudCIsIkdFVExDV0ZDU0RFVEFJTFNTVEFSVEVEIiwicmVxdWVzdFBhdGgiLCJPbW5pY2hhbm5lbEVuZHBvaW50cyIsIkxjd0Zjc0RldGFpbHNQYXRoIiwib3JnSWQiLCJtZXRob2QiLCJ1cmwiLCJvcmdVcmwiLCJheGlvc0luc3RhbmNlIiwiYXhpb3MiLCJjcmVhdGUiLCJyZXRyaWVzIiwibWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUiLCJ3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllcyIsIndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWciLCJnZXRDaGF0Q29uZmlnIiwicmVxdWVzdEhlYWRlcnMiLCJnZXQiLCJ0aW1lb3V0IiwiZGVmYXVsdFJlcXVlc3RUaW1lb3V0IiwicmVxdWVzdFRpbWVvdXRDb25maWciLCJyZXNwb25zZSIsImVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMiLCJtaWxsaVNlY29uZHNFbGFwc2VkIiwiZGF0YSIsIkdFVExDV0ZDU0RFVEFJTFNTVUNDRUVERUQiLCJ1bmRlZmluZWQiLCJHRVRMQ1dGQ1NERVRBSUxTRkFJTEVEIiwiYnlwYXNzQ2FjaGUiLCJHRVRDSEFUQ09ORklHRlNUQVJURUQiLCJMaXZlQ2hhdENvbmZpZ1BhdGgiLCJ3aWRnZXRJZCIsImFkZERlZmF1bHRIZWFkZXJzIiwiYnlwYXNzQ2FjaGVIZWFkZXJzIiwiR0VUQ0hBVENPTkZJR1NVQ0NFRURFRCIsIkdFVENIQVRDT05GSUdGQUlMRUQiLCJQcm9taXNlIiwicmVqZWN0IiwiZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIiwiR0VUTFdJU1RBVFVTU1RBUlRFRCIsIkxpdmVDaGF0TGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGgiLCJoZWFkZXJPdmVyd3JpdGVzIiwiZ2V0TFdJRGV0YWlscyIsImF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4iLCJyZWNvbm5lY3RJZCIsImRlZmF1bHRIZWFkZXJzIiwiTGl2ZUNoYXRBdXRoTGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGgiLCJzaG91bGRVc2VTaWdRdWVyeVBhcmFtIiwidXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtIiwicGFyYW1zIiwic2lnIiwib3B0aW9ucyIsInJlc29sdmUiLCJzZXRBdXRoQ29kZU5vbmNlIiwiR0VUTFdJU1RBVFVTU1VDQ0VFREVEIiwiRVJST1IiLCJHRVRMV0lTVEFUVVNGQUlMRUQiLCJheGlvc1RpbWVvdXRFcnJvckNvZGUiLCJIVFRQVGltZU91dEVycm9yTWVzc2FnZSIsImdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zIiwiY3VycmVudFJldHJ5Q291bnQiLCJjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIiwicmVmcmVzaFRva2VuIiwiTXNPY0JvdEFwcGxpY2F0aW9uSWQiLCJtdWx0aUJvdCIsIkdFVENIQVRUT0tFTlNUQVJURUQiLCJlbmRwb2ludCIsImdldENoYXRUb2tlbiIsInJldHJ5T240MjkiLCJnZXRDaGF0VG9rZW5SZXRyeU9uNDI5IiwidG9Mb3dlckNhc2UiLCJHRVRDSEFUVE9LRU5TVUNDRUVERUQiLCJzdGF0dXMiLCJub0NvbnRlbnRTdGF0dXNDb2RlIiwiR0VUQ0hBVFRPS0VORkFJTEVEIiwicmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIiwiR0VUUkVDT05ORUNUQUJMRUNIQVRTU1RBUlRFRCIsIkxpdmVDaGF0R2V0UmVjb25uZWN0YWJsZUNoYXRzUGF0aCIsImdldFJlY29ubmVjdGFibGVDaGF0cyIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NVQ0NFRURFRCIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU0ZBSUxFRCIsIm9wdGlvbmFsUGFyYW1zIiwiR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1RBUlRFRCIsIkxpdmVDaGF0UmVjb25uZWN0QXZhaWxhYmlsaXR5UGF0aCIsImdldFJlY29ubmVjdEF2YWlsYWJpbGl0eSIsIkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNVQ0NFRURFRCIsIldBUk4iLCJHRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlGQUlMRUQiLCJxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIiwiR0VUQUdFTlRBVkFJTEFCSUxJVFlTVEFSVEVEIiwiR2V0QWdlbnRBdmFpbGFiaWxpdHlQYXRoIiwiZ2V0QWdlbnRBdmFpbGFiaWxpdHkiLCJpbml0Q29udGV4dCIsImdldENvbnRleHQiLCJjYWNoT2JqIiwiY3VzdG9tQ29udGV4dERhdGEiLCJ0ZW1wQXJyIiwiQ3VzdG9tQ29udGV4dERhdGEiLCJzb3J0IiwiYXNzaWduIiwicG9ydGFsY29udGFjdGlkIiwiY2FjaGVLZXkiLCJoYXNoIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkaWdlc3QiLCJ0b1N0cmluZyIsIndpbmRvdyIsImRvY3VtZW50IiwiYnJvd3NlciIsIkJyb3dzZXJJbmZvIiwiZ2V0QnJvd3Nlck5hbWUiLCJkZXZpY2UiLCJEZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVHlwZSIsIm9yaWdpbnVybCIsImxvY2F0aW9uIiwiaHJlZiIsIm9zIiwiT1NJbmZvIiwiZ2V0T3NUeXBlIiwibG9jYWxlIiwiZGVmYXVsdExvY2FsZSIsIkxvY2FsZXMiLCJzdXBwb3J0ZWRMb2NhbGVzIiwiR0VUQUdFTlRBVkFJTEFCSUxJVFlTVUNDRUVERUQiLCJHRVRBR0VOVEFWQUlMQUJJTElUWUZBSUxFRCIsInNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMiLCJTRVNTSU9OSU5JVFNUQVJURUQiLCJzZXNzaW9uSW5pdCIsInNob3VsZFJldHJ5IiwiZXJyb3IiLCJiYXNlUGF0aCIsIkxpdmVDaGF0QXV0aFNlc3Npb25Jbml0UGF0aCIsIkxpdmVDaGF0U2Vzc2lvbkluaXRQYXRoIiwic2V0UmVxdWVzdElkSGVhZGVyIiwiU0VTU0lPTklOSVRTVUNDRUVERUQiLCJTRVNTSU9OSU5JVEZBSUxFRCIsIkNSRUFURVNFU1NJT05TVEFSVEVEIiwiTGl2ZUNoYXRDb25uZWN0b3JBdXRoUGF0aCIsIkxpdmVDaGF0Q29ubmVjdG9yUGF0aCIsIkNSRUFURVNFU1NJT05TVUNDRUVERUQiLCJDUkVBVEVTRVNTSU9ORkFJTEVEIiwic2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXMiLCJTRVNTSU9OQ0xPU0VTVEFSVEVEIiwiTGl2ZUNoYXRTZXNzaW9uQ2xvc2VQYXRoIiwic2Vzc2lvbkNsb3NlIiwiaXNSZWNvbm5lY3RDaGF0IiwiaXNQZXJzaXN0ZW50Q2hhdCIsImNoYXRJZCIsIkxpdmVDaGF0QXV0aFNlc3Npb25DbG9zZVBhdGgiLCJTRVNTSU9OQ0xPU0VTVUNDRUVERUQiLCJTRVNTSU9OQ0xPU0VGQUlMRUQiLCJjb2RlIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zIiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNUQVJURUQiLCJMaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRoIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZCIsInZhbGlkYXRlQXV0aENoYXRSZWNvcmRUaW1lb3V0IiwiYXV0aENoYXRFeGlzdCIsIlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQiLCJWQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVEIiwicG9zdENoYXRSZXNwb25zZSIsInN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcyIsIlNVQk1JVFBPU1RDSEFUU1RBUlRFRCIsIkxpdmVDaGF0U3VibWl0UG9zdENoYXRQYXRoIiwic3VibWl0UG9zdENoYXRSZXNwb25zZSIsIkxpdmVDaGF0QXV0aFN1Ym1pdFBvc3RDaGF0UGF0aCIsIlNVQk1JVFBPU1RDSEFUU1VDQ0VFREVEIiwiU1VCTUlUUE9TVENIQVRGQUlMRUQiLCJzdXJ2ZXlPd25lcklkIiwic3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHkiLCJnZXRzdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXMiLCJsb2ciLCJHRVRTVVJWRVlJTlZJVEVMSU5LU1RBUlRFRCIsIlN1cnZleU93bmVySWQiLCJMaXZlQ2hhdEdldFN1cnZleUludml0ZUxpbmtQYXRoIiwiZ2V0U3VydmV5SW52aXRlTGluayIsIkxpdmVDaGF0QXV0aEdldFN1cnZleUludml0ZUxpbmtQYXRoIiwid2lkZ2V0QXBwSWQiLCJHRVRTVVJWRVlJTlZJVEVMSU5LU1VDQ0VFREVEIiwiR0VUU1VSVkVZSU5WSVRFTElOS0ZBSUxFRCIsInRva2VuIiwiZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMiLCJHRVRDSEFUVFJBTlNDUklQVFNUQVJURUQiLCJMaXZlQ2hhdEdldENoYXRUcmFuc2NyaXB0UGF0aCIsImdldENoYXRUcmFuc2NyaXB0cyIsIm9yZ2FuaXphdGlvbklkIiwiYXV0aG9yaXphdGlvbiIsIkxpdmVDaGF0djJHZXRDaGF0VHJhbnNjcmlwdFBhdGgiLCJMaXZlQ2hhdHYyQXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aCIsIkxpdmVDaGF0QXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aCIsIkdFVENIQVRUUkFOU0NSSVBUU1VDQ0VFREVEIiwiR0VUQ0hBVFRSQU5TQ1JJUFRGQUlMRUQiLCJlbWFpbFJlcXVlc3RCb2R5IiwiZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMiLCJFTUFJTFRSQU5TQ1JJUFRTVEFSVEVEIiwiTGl2ZUNoYXRUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aCIsImVtYWlsVHJhbnNjcmlwdCIsIkxpdmVDaGF0QXV0aFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoIiwiRU1BSUxUUkFOU0NSSVBUU1VDQ0VFREVEIiwiRU1BSUxUUkFOU0NSSVBURkFJTEVEIiwiRkVUQ0hEQVRBTUFTS0lOR1NUQVJURUQiLCJMaXZlQ2hhdEZldGNoRGF0YU1hc2tpbmdJbmZvUGF0aCIsImZldGNoRGF0YU1hc2tpbmdJbmZvIiwiRkVUQ0hEQVRBTUFTS0lOR1NVQ0NFRURFRCIsIkZFVENIREFUQU1BU0tJTkdGQUlMRUQiLCJzZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Qm9keSIsInNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQiLCJMaXZlQ2hhdFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdCIsIkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJkZWZhdWx0Q2hhbm5lbElkIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNVQ0NFRURFRCIsIlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RGQUlMRUQiLCJzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXMiLCJjdXN0b21lckRpc3BsYXlOYW1lIiwiU2VuZFR5cGluZ0luZGljYXRvclBhdGgiLCJzZW5kVHlwaW5nSW5kaWNhdG9yIiwiU0VORFRZUElOR0lORElDQVRPUlNVQ0NFRURFRCIsIlNFTkRUWVBJTkdJTkRJQ0FUT1JGQUlMRUQiLCJsb2dMZXZlbCIsInRlbGVtZXRyeUV2ZW50VHlwZSIsImRlc2NyaXB0aW9uIiwicmVxdWVzdFBheWxvYWQiLCJMb2dnaW5nU2FuaXRpemVyIiwic3RyaXBFcnJvclNlbnNpdGl2ZVByb3BlcnRpZXMiLCJzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCIsInN0cmlwQ3VzdG9tQ29udGV4dERhdGFWYWx1ZXMiLCJwcmVDaGF0UmVzcG9uc2UiLCJzdHJpcFByZUNoYXRSZXNwb25zZSIsInN0cmlwR2VvbG9jYXRpb24iLCJzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyIsImF1dGhUb2tlbkRldGFpbHMiLCJzdHJpcFJlcXVlc3RIZWFkZXJzU2Vuc2l0aXZlUHJvcGVydGllcyIsImF0b2IiLCJwYXlsb2FkIiwic3BsaXQiLCJqc29uRGF0YSIsInBhcnNlIiwibHdpQ29udGV4dHMiLCJzdWIiLCJleHAiLCJsd2lDb250ZXh0c0RhdGEiLCJjdXN0b21EYXRhIiwiUmVxdWVzdElkIiwiUmVnaW9uIiwiRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIlRyYW5zYWN0aW9uSWQiLCJ0cmFuc2FjdGlvbmlkIiwiUmVxdWVzdFBhdGgiLCJSZXF1ZXN0TWV0aG9kIiwiUmVzcG9uc2VTdGF0dXNDb2RlIiwiRXhjZXB0aW9uRGV0YWlscyIsIlJlcXVlc3RQYXlsb2FkIiwiUmVxdWVzdEhlYWRlcnMiLCJSZXNwb25zZUVycm9yY29kZSIsImVycm9yY29kZSIsIkF1dGhUb2tlbkRldGFpbHMiLCJzZXRTZXNzaW9uSWRIZWFkZXIiLCJzZXRDb3JyZWxhdGlvbklkSW5IZWFkZXIiLCJzdWJzdHJpbmciLCJnZXRDaGF0VG9rZW5SZXRyeUNvdW50IiwiZ2V0Q2hhdFRva2VuVGltZUJldHdlZW5SZXRyaWVzT25GYWlsdXJlIiwiZGVmYXVsdFJlcXVlc3RUaW1lb3V0Q29uZmlnIiwi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YitCO0FBY2pFMUgsRUFBQUEsb0JBQW9CLEVBQUUsS0FkMkM7QUFlakVrSSxFQUFBQSxtQkFBbUIsRUFBRSxJQWY0QztBQWdCakU3RCxFQUFBQSw2QkFBNkIsRUFBRTtBQWhCa0MsQztpQ0FEaER4TSxHLDBCQW9Cc0M7QUFDdkRVLEVBQUFBLGFBQWEsRUFBRSxvQkFBU3NTLFNBQVQsQ0FBbUIsQ0FBbkIsRUFBc0IsQ0FBdEIsQ0FEd0M7QUFFdkRDLEVBQUFBLHNCQUFzQixFQUFFLEVBRitCO0FBR3ZEQyxFQUFBQSx1Q0FBdUMsRUFBRSxLQUhjO0FBSXZEck0sRUFBQUEsc0JBQXNCLEVBQUUsSUFKK0I7QUFLdkR6RCxFQUFBQSwwQkFBMEIsRUFBRSxDQUwyQjtBQU12RE8sRUFBQUEscUJBQXFCLEVBQUVPLFNBTmdDO0FBT3ZETixFQUFBQSxvQkFBb0IsRUFBRTVELEdBQUcsQ0FBQ21ULDJCQVA2QjtBQVF2RDNOLEVBQUFBLGlDQUFpQyxFQUFFLEtBUm9CO0FBU3ZEbEMsRUFBQUEsNEJBQTRCLEVBQUU4UCw0REFUeUI7QUFVdkR2UixFQUFBQSxXQUFXLEVBQUU7QUFWMEMsQyIsInNvdXJjZVJvb3QiOiJvY3NkazovLy8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBoYXNoIGZyb20gXCJjcnlwdG9cIjtcblxuaW1wb3J0IHsgQ2hhbm5lbElkLCBMaXZlQ2hhdFZlcnNpb24sIE9DU0RLVGVsZW1ldHJ5RXZlbnQsIFNES0Vycm9yIH0gZnJvbSBcIi4vQ29tbW9uL0VudW1zXCI7XG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NSZXF1ZXN0Q29uZmlnLCBBeGlvc1Jlc3BvbnNlIH0gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgYXhpb3NSZXRyeUhhbmRsZXIsIHsgYXhpb3NSZXRyeUhhbmRsZXJXaXRoTm90Rm91bmQgfSBmcm9tIFwiLi9VdGlscy9heGlvc1JldHJ5SGFuZGxlclwiO1xuXG5pbXBvcnQgeyBCcm93c2VySW5mbyB9IGZyb20gXCIuL1V0aWxzL0Jyb3dzZXJJbmZvXCI7XG5pbXBvcnQgQ29uc3RhbnRzIGZyb20gXCIuL0NvbW1vbi9Db25zdGFudHNcIjtcbmltcG9ydCB7IEN1c3RvbUNvbnRleHREYXRhIH0gZnJvbSBcIi4vVXRpbHMvQ3VzdG9tQ29udGV4dERhdGFcIjtcbmltcG9ydCB7IERldmljZUluZm8gfSBmcm9tIFwiLi9VdGlscy9EZXZpY2VJbmZvXCI7XG5pbXBvcnQgRmV0Y2hDaGF0VG9rZW5SZXNwb25zZSBmcm9tIFwiLi9Nb2RlbC9GZXRjaENoYXRUb2tlblJlc3BvbnNlXCI7XG5pbXBvcnQgSURhdGFNYXNraW5nSW5mbyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lEYXRhTWFza2luZ0luZm9cIjtcbmltcG9ydCBJRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldExXSURldGFpbHNPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldFF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0U3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24gZnJvbSBcIi4vSW50ZXJmYWNlcy9JT21uaWNoYW5uZWxDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgSVJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lSZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXNcIjtcbmltcG9ydCBJU0RLIGZyb20gXCIuL0ludGVyZmFjZXMvSVNES1wiO1xuaW1wb3J0IElTREtDb25maWd1cmF0aW9uIGZyb20gXCIuL0ludGVyZmFjZXMvSVNES0NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCBJU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJU2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtc1wiXG5pbXBvcnQgSVNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElTdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJbml0Q29udGV4dCBmcm9tIFwiLi9Nb2RlbC9Jbml0Q29udGV4dFwiO1xuaW1wb3J0IExvY2FsZXMgZnJvbSBcIi4vQ29tbW9uL0xvY2FsZXNcIjtcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSBcIi4vTW9kZWwvTG9nTGV2ZWxcIjtcbmltcG9ydCB7IExvZ2dpbmdTYW5pdGl6ZXIgfSBmcm9tIFwiLi9VdGlscy9Mb2dnaW5nU2FuaXRpemVyXCI7XG5pbXBvcnQgT0NTREtMb2dnZXIgZnJvbSBcIi4vQ29tbW9uL09DU0RLTG9nZ2VyXCI7XG5pbXBvcnQgeyBPU0luZm8gfSBmcm9tIFwiLi9VdGlscy9PU0luZm9cIjtcbmltcG9ydCBPbW5pY2hhbm5lbEVuZHBvaW50cyBmcm9tIFwiLi9Db21tb24vT21uaWNoYW5uZWxFbmRwb2ludHNcIjtcbmltcG9ydCBPbW5pY2hhbm5lbEhUVFBIZWFkZXJzIGZyb20gXCIuL0NvbW1vbi9PbW5pY2hhbm5lbEhUVFBIZWFkZXJzXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciBmcm9tIFwiLi9JbnRlcmZhY2VzL09tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXJcIjtcbmltcG9ydCBRdWV1ZUF2YWlsYWJpbGl0eSBmcm9tIFwiLi9Nb2RlbC9RdWV1ZUF2YWlsYWJpbGl0eVwiO1xuaW1wb3J0IFJlY29ubmVjdEF2YWlsYWJpbGl0eSBmcm9tIFwiLi9Nb2RlbC9SZWNvbm5lY3RBdmFpbGFiaWxpdHlcIjtcbmltcG9ydCBSZWNvbm5lY3RNYXBwaW5nUmVjb3JkIGZyb20gXCIuL01vZGVsL1JlY29ubmVjdE1hcHBpbmdSZWNvcmRcIjtcbmltcG9ydCB7IFJlcXVlc3RUaW1lb3V0Q29uZmlnIH0gZnJvbSBcIi4vQ29tbW9uL1JlcXVlc3RUaW1lb3V0Q29uZmlnXCI7XG5pbXBvcnQgeyBTdHJpbmdNYXAgfSBmcm9tIFwiLi9Db21tb24vTWFwcGluZ3NcIjtcbmltcG9ydCB7IFRpbWVyIH0gZnJvbSBcIi4vVXRpbHMvVGltZXJcIjtcbmltcG9ydCB7IGFkZE9jVXNlckFnZW50SGVhZGVyIH0gZnJvbSBcIi4vVXRpbHMvaHR0cEhlYWRlcnNVdGlsc1wiO1xuaW1wb3J0IHsgY3JlYXRlR2V0Q2hhdFRva2VuRW5kcG9pbnQgfSBmcm9tIFwiLi9VdGlscy9lbmRwb2ludHNDcmVhdG9yc1wiO1xuaW1wb3J0IGlzRXhwZWN0ZWRBeGlvc0Vycm9yIGZyb20gXCIuL1V0aWxzL2lzRXhwZWN0ZWRBeGlvc0Vycm9yXCI7XG5pbXBvcnQgc2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIgZnJvbSBcIi4vVXRpbHMvU2Vzc2lvbkluaXRSZXRyeUhhbmRsZXJcIjtcbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gXCIuL1V0aWxzL3V1aWRcIjtcbmltcG9ydCB7IHdhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWdzIH0gZnJvbSBcIi4vVXRpbHMvd2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZ3NcIjtcbmltcG9ydCBJUmVjb25uZWN0QXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JUmVjb25uZWN0QXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIGltcGxlbWVudHMgSVNESyB7XG4gIHByaXZhdGUgc3RhdGljIGRlZmF1bHRSZXF1ZXN0VGltZW91dENvbmZpZzogUmVxdWVzdFRpbWVvdXRDb25maWcgPSB7XG4gICAgZ2V0Q2hhdENvbmZpZzogMTIwMDAwLFxuICAgIGdldExXSURldGFpbHM6IDE1MDAwLFxuICAgIGdldENoYXRUb2tlbjogMTUwMDAsXG4gICAgc2Vzc2lvbkluaXQ6IDE1MDAwLFxuICAgIHNlc3Npb25DbG9zZTogMTUwMDAsXG4gICAgZ2V0UmVjb25uZWN0YWJsZUNoYXRzOiAxNTAwMCxcbiAgICBnZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHk6IDE1MDAwLFxuICAgIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2U6IDE1MDAwLFxuICAgIGdldFN1cnZleUludml0ZUxpbms6IDE1MDAwLFxuICAgIGdldENoYXRUcmFuc2NyaXB0czogMzAwMDAsXG4gICAgZW1haWxUcmFuc2NyaXB0OiA1MDAwLFxuICAgIGZldGNoRGF0YU1hc2tpbmdJbmZvOiA1MDAwLFxuICAgIG1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0OiAxNTAwMCxcbiAgICBnZXRBZ2VudEF2YWlsYWJpbGl0eTogMTUwMDAsXG4gICAgc2VuZFR5cGluZ0luZGljYXRvcjogNTAwMCxcbiAgICB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkVGltZW91dDogMTUwMDBcbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0Q29uZmlndXJhdGlvbjogSVNES0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgYXV0aENvZGVOb25jZTogdXVpZHY0KCkuc3Vic3RyaW5nKDAsIDgpLFxuICAgIGdldENoYXRUb2tlblJldHJ5Q291bnQ6IDEwLFxuICAgIGdldENoYXRUb2tlblRpbWVCZXR3ZWVuUmV0cmllc09uRmFpbHVyZTogMTAwMDAsXG4gICAgZ2V0Q2hhdFRva2VuUmV0cnlPbjQyOTogdHJ1ZSxcbiAgICBtYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZTogNSxcbiAgICBkZWZhdWx0UmVxdWVzdFRpbWVvdXQ6IHVuZGVmaW5lZCxcbiAgICByZXF1ZXN0VGltZW91dENvbmZpZzogU0RLLmRlZmF1bHRSZXF1ZXN0VGltZW91dENvbmZpZyxcbiAgICB1c2VVbmF1dGhSZWNvbm5lY3RJZFNpZ1F1ZXJ5UGFyYW06IGZhbHNlLFxuICAgIHdhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWc6IHdhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWdzLFxuICAgIG9jVXNlckFnZW50OiBbXVxuICB9O1xuXG4gIGxpdmVDaGF0VmVyc2lvbjogbnVtYmVyO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIG9jVXNlckFnZW50OiBzdHJpbmdbXTtcbiAgSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UgPSBgJHtTREtFcnJvci5DbGllbnRIVFRQVGltZW91dEVycm9yTmFtZX06ICR7U0RLRXJyb3IuQ2xpZW50SFRUUFRpbWVvdXRFcnJvck1lc3NhZ2V9YDtcblxuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG9tbmljaGFubmVsQ29uZmlndXJhdGlvbjogSU9tbmljaGFubmVsQ29uZmlndXJhdGlvbiwgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBJU0RLQ29uZmlndXJhdGlvbiA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbiwgcHJpdmF0ZSBsb2dnZXI/OiBPQ1NES0xvZ2dlcikge1xuICAgIC8vIFNldHMgdG8gZGVmYXVsdCBjb25maWd1cmF0aW9uIGlmIHBhc3NlZCBjb25maWd1cmF0aW9uIGlzIGVtcHR5IG9yIGlzIG5vdCBhbiBvYmplY3RcbiAgICBpZiAoIU9iamVjdC5rZXlzKHRoaXMuY29uZmlndXJhdGlvbikubGVuZ3RoIHx8IHR5cGVvZiAoY29uZmlndXJhdGlvbikgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBTREsgY29uZmlnXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uKSkge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24uaGFzT3duUHJvcGVydHkoa2V5KSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25bYCR7a2V5fWBdID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW2Ake2tleX1gXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBpbmRpdmlkdWFsIGVuZHBvaW50VGltZW91dCBjb25maWdcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhTREsuZGVmYXVsdENvbmZpZ3VyYXRpb25bXCJyZXF1ZXN0VGltZW91dENvbmZpZ1wiXSkpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl0uaGFzT3duUHJvcGVydHkoa2V5KSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25bXCJyZXF1ZXN0VGltZW91dENvbmZpZ1wiXVtgJHtrZXl9YF0gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb25bXCJyZXF1ZXN0VGltZW91dENvbmZpZ1wiXVtgJHtrZXl9YF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgY2hhbm5lbElkXG4gICAgY29uc3QgeyBjaGFubmVsSWQgfSA9IG9tbmljaGFubmVsQ29uZmlndXJhdGlvbjtcbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoQ2hhbm5lbElkKS5pbmNsdWRlcyhjaGFubmVsSWQgYXMgQ2hhbm5lbElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoYW5uZWxJZGApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIE9DIGNvbmZpZ1xuICAgIGNvbnN0IGN1cnJlbnRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob21uaWNoYW5uZWxDb25maWd1cmF0aW9uKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBDb25zdGFudHMucmVxdWlyZWRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAoIWN1cnJlbnRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nICcke2tleX0nIGluIE9tbmljaGFubmVsQ29uZmlndXJhdGlvbmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub2NVc2VyQWdlbnQgPSB0aGlzLmNvbmZpZ3VyYXRpb24ub2NVc2VyQWdlbnQ7XG4gICAgdGhpcy5saXZlQ2hhdFZlcnNpb24gPSBMaXZlQ2hhdFZlcnNpb24uVjI7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBMQ1cgRkNTIERldGFpbHMgb2YgdGhlIE9yZy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRMY3dGY3NEZXRhaWxzKCk6IFByb21pc2U8b2JqZWN0IHwgdm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMQ1dGQ1NERVRBSUxTU1RBUlRFRCwgXCJHZXQgTENXIEZDUyBkZXRhaWxzIHN0YXJ0ZWRcIiwgXCJcIik7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MY3dGY3NEZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRDb25maWdcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0ge307XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZS5nZXQodXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVExDV0ZDU0RFVEFJTFNTVUNDRUVERUQsIFwiR2V0IExDVyBGQ1MgZGV0YWlscyBzdWNjZWVkZWRcIiwgXCJcIiwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMQ1dGQ1NERVRBSUxTRkFJTEVELCBcIkdldCBMQ1cgRkNTIGRldGFpbHMgZmFpbGVkXCIsIFwiXCIsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgY2hhdCBjb25maWcuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgdG8gZ2V0IGNoYXQgY29uZmlnIChPcHRpb25hbCkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2hhdENvbmZpZyhyZXF1ZXN0SWQ6IHN0cmluZywgYnlwYXNzQ2FjaGUgPSBmYWxzZSk6IFByb21pc2U8b2JqZWN0IHwgdm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHRlNUQVJURUQsIFwiR2V0IENoYXQgY29uZmlnIHN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25maWdQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfT9yZXF1ZXN0SWQ9JHtyZXF1ZXN0SWR9JmNoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRDb25maWdcbiAgICB9KTtcblxuICAgIGxldCByZXF1ZXN0SGVhZGVycyA9IHt9O1xuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBpZiAoYnlwYXNzQ2FjaGUpIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzID0geyAuLi5Db25zdGFudHMuYnlwYXNzQ2FjaGVIZWFkZXJzLCAuLi5yZXF1ZXN0SGVhZGVycyB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2UuZ2V0KHVybCwge1xuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdENvbmZpZ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG5cbiAgICAgIGlmIChkYXRhLkxpdmVDaGF0VmVyc2lvbikge1xuICAgICAgICB0aGlzLmxpdmVDaGF0VmVyc2lvbiA9IGRhdGEuTGl2ZUNoYXRWZXJzaW9uO1xuICAgICAgfVxuXG4gICAgICBkYXRhLmhlYWRlcnMgPSB7fTtcbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzICYmIHJlc3BvbnNlLmhlYWRlcnNbXCJkYXRlXCJdKSB7XG4gICAgICAgIGRhdGEuaGVhZGVyc1tcImRhdGVcIl0gPSByZXNwb25zZS5oZWFkZXJzW1wiZGF0ZVwiXTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRDT05GSUdTVUNDRUVERUQsIFwiR2V0IENoYXQgY29uZmlnIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHRkFJTEVELCBcIkdldCBDaGF0IGNvbmZpZyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgTFdJIGRldGFpbHMuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgdG8gZ2V0IGNoYXQgY29uZmlnIChPcHRpb25hbCkuXG4gICAqIEBwYXJhbSBnZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGdldCBMV0kgRGV0YWlscy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRMV0lEZXRhaWxzKHJlcXVlc3RJZDogc3RyaW5nLCBnZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXM6IElHZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVExXSVNUQVRVU1NUQVJURUQsIFwiR2V0IExXSSBEZXRhaWxzIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGlmICghcmVxdWVzdElkKSB7XG4gICAgICByZXF1ZXN0SWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICAvLyBjb25zdHJ1Y3QgYSBlbmRwb2ludCBmb3IgYW5vbnltb3VzIGNoYXRzIHRvIGdldCBMV0kgRGV0YWlsc1xuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdExpdmVXb3JrSXRlbURldGFpbHNQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcldpdGhOb3RGb3VuZChheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRMV0lEZXRhaWxzLFxuICAgIH0pO1xuXG4gICAgLy8gRXh0cmFjdCBhdXRoIHRva2VuIGFuZCByZWNvbm5lY3QgaWQgZnJvbSBvcHRpb25hbCBwYXJhbVxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgcmVjb25uZWN0SWQgfSA9IGdldExXSURldGFpbHNPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgLy8gdXBkYXRlZCBhdXRoIGVuZHBvaW50IGZvciBhdXRoZW50aWNhdGVkIGNoYXRzIGFuZCBhZGQgYXV0aCB0b2tlbiBpbiBoZWFkZXJcbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoTGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgLy8gSWYgc2hvdWxkIG9ubHkgYmUgYXBwbGljYWJsZSBvbiB1bmF1dGggY2hhdCAmIHRoZSBmbGFnIGVuYWJsZWRcbiAgICBjb25zdCBzaG91bGRVc2VTaWdRdWVyeVBhcmFtID0gIWF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gJiYgdGhpcy5jb25maWd1cmF0aW9uLnVzZVVuYXV0aFJlY29ubmVjdElkU2lnUXVlcnlQYXJhbSA9PT0gdHJ1ZTtcbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmICghc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICByZXF1ZXN0UGF0aCArPSBgLyR7cmVjb25uZWN0SWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgPSB7XG4gICAgICBjaGFubmVsSWQ6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZFxuICAgIH07XG5cbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmIChzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHBhcmFtcy5zaWcgPSByZWNvbm5lY3RJZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRMV0lEZXRhaWxzXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTU1VDQ0VFREVELCBcIkdldCBMV0kgRGV0YWlscyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNGQUlMRUQsIFwiR2V0IExXSSBEZXRhaWxzIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGNoYXQgdG9rZW4gZnJvbSBPbW5pY2hhbm5lbCB0byBqb2luIFQxIHRocmVhZC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3IgZ2V0Y2hhdHRva2VuIChPcHRpb25hbCkuXG4gICAqIEBwYXJhbSBnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IGNoYXQgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2hhdFRva2VuKHJlcXVlc3RJZDogc3RyaW5nLCBnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtczogSUdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zID0ge30sIGN1cnJlbnRSZXRyeUNvdW50OiBudW1iZXIgPSAwKTogUHJvbWlzZTxGZXRjaENoYXRUb2tlblJlc3BvbnNlPiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWluZmVycmFibGUtdHlwZXNcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyByZWNvbm5lY3RJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY3VycmVudExpdmVDaGF0VmVyc2lvbiwgcmVmcmVzaFRva2VuLCBNc09jQm90QXBwbGljYXRpb25JZCB9ID0gZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgbXVsdGlCb3QgPSAoTXNPY0JvdEFwcGxpY2F0aW9uSWQgJiYgTXNPY0JvdEFwcGxpY2F0aW9uSWQubGVuZ3RoID4gMCk/IHRydWU6IGZhbHNlO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUT0tFTlNUQVJURUQsIFwiR2V0IENoYXQgVG9rZW4gU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgaWYgKGN1cnJlbnRSZXRyeUNvdW50IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGN1cnJlbnRSZXRyeUNvdW50YCk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IGVuZHBvaW50ID0gY3JlYXRlR2V0Q2hhdFRva2VuRW5kcG9pbnQoY3VycmVudExpdmVDaGF0VmVyc2lvbiBhcyBMaXZlQ2hhdFZlcnNpb24gfHwgdGhpcy5saXZlQ2hhdFZlcnNpb24sIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPyB0cnVlIDogZmFsc2UsIG11bHRpQm90KTtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7ZW5kcG9pbnR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgXG4gICAgLy8gSWYgc2hvdWxkIG9ubHkgYmUgYXBwbGljYWJsZSBvbiB1bmF1dGggY2hhdCAmIHRoZSBmbGFnIGVuYWJsZWRcbiAgICBjb25zdCBzaG91bGRVc2VTaWdRdWVyeVBhcmFtID0gIWF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gJiYgdGhpcy5jb25maWd1cmF0aW9uLnVzZVVuYXV0aFJlY29ubmVjdElkU2lnUXVlcnlQYXJhbSA9PT0gdHJ1ZTtcbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmICghc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICByZXF1ZXN0UGF0aCArPSBgLyR7cmVjb25uZWN0SWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgPSB7XG4gICAgICBjaGFubmVsSWQ6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZFxuICAgIH1cbiAgICBpZiAoTXNPY0JvdEFwcGxpY2F0aW9uSWQgJiYgTXNPY0JvdEFwcGxpY2F0aW9uSWQubGVuZ3RoID4gMCkge1xuICAgICAgcGFyYW1zWydNcy1PYy1Cb3QtQXBwbGljYXRpb24tSWQnXSA9IE1zT2NCb3RBcHBsaWNhdGlvbklkO1xuICAgIH1cblxuICAgIGlmIChyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHBhcmFtcy5yZWZyZXNoVG9rZW4gPSAndHJ1ZSdcbiAgICB9XG5cbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmIChzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHBhcmFtcy5zaWcgPSByZWNvbm5lY3RJZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0VG9rZW5cbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogKGN1cnJlbnRSZXRyeUNvdW50ID4gdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlKSA/IGN1cnJlbnRSZXRyeUNvdW50IDogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgcmV0cnlPbjQyOTogdGhpcy5jb25maWd1cmF0aW9uLmdldENoYXRUb2tlblJldHJ5T240MjksXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0Q2hhdFRva2VuXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICAgICAgaWYgKGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZC50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzb2x2ZXMgb25seSBpZiBpdCBjb250YWlucyBjaGF0IHRva2VuIHJlc3BvbnNlIHdoaWNoIG9ubHkgaGFwcGVucyBvbiBzdGF0dXMgMjAwXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gY2hlY2sgaWYgZGF0YSBpcyBlbXB0eSwgaWYgc28sIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkVtcHR5IGRhdGEgcmVjZWl2ZWQgZnJvbSBnZXRDaGF0VG9rZW5cIikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGEucmVxdWVzdElkID0gcmVxdWVzdElkO1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUT0tFTlNVQ0NFRURFRCwgXCJHZXQgQ2hhdCBUb2tlbiBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vIGNvbnRlbnQgZm9yIHJlY29ubmVjdCBjaGF0IGNhc2Ugc2hvdWxkbid0IGJlIHJldHJpZWQuXG4gICAgICAgIGlmIChyZWNvbm5lY3RJZCAmJiByZXNwb25zZS5zdGF0dXMgPT09IENvbnN0YW50cy5ub0NvbnRlbnRTdGF0dXNDb2RlKSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5GQUlMRUQsIFwiR2V0IENoYXQgVG9rZW4gZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSByZWNvbm5lY3RhYmxlIGNoYXRzIGZyb20gb21uaWNoYW5uZWwgZnJvbSB0aGUgZ2l2ZW4gdXNlciBpbmZvcm1hdGlvbiBpbiBKV1QgdG9rZW4oY2xhaW0gbmFtZTogc3ViKS5cbiAgICogQHBhcmFtIHJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBNYW5kYXRlIHBhcmFtZXRlcnMgZm9yIGdldCByZWNvbm5lY3RhYmxlIGNoYXRzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFJlY29ubmVjdGFibGVDaGF0cyhyZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXM6IElSZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMpOiBQcm9taXNlPFJlY29ubmVjdE1hcHBpbmdSZWNvcmQgfCB2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NUQVJURUQsIFwiR2V0IFJlY29ubmVjdGFibGUgY2hhdCBTdGFydGVkXCIpO1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJlY29ubmVjdGFibGVDaGF0c1BhcmFtcz8ucmVxdWVzdElkO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRHZXRSZWNvbm5lY3RhYmxlQ2hhdHNQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UmVjb25uZWN0YWJsZUNoYXRzXG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgLy8gUmVzb2x2ZXMgb25seSBpZiBpdCBjb250YWlucyByZWNvbm5lY3RhYmxlIGNoYXRzIHJlc3BvbnNlIHdoaWNoIG9ubHkgaGFwcGVucyBvbiBzdGF0dXMgMjAwXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTU1VDQ0VFREVELCBcIkdldCBSZWNvbm5lY3RhYmxlIENoYXRzIFN1Y2NlZWRlZCBhbmQgb2xkIHNlc3Npb24gcmV0dXJuZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBObyBkYXRhIGZvdW5kIGluIHRoZSBvbGQgc2Vzc2lvbnMgc28gcmV0dXJuaW5nIG51bGxcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFCTEVDSEFUU0ZBSUxFRCwgXCJHZXQgUmVjb25uZWN0YWJsZSBDaGF0cyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAqIEZldGNoZXMgdGhlIHJlY29ubmVjdGFibGUgY2hhdHMgZnJvbSBvbW5pY2hhbm5lbCBmcm9tIHRoZSBnaXZlbiB1c2VyIGluZm9ybWF0aW9uIGluIEpXVCB0b2tlbihjbGFpbSBuYW1lOiBzdWIpLlxuICogQHBhcmFtIHJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBNYW5kYXRlIHBhcmFtZXRlcnMgZm9yIGdldCByZWNvbm5lY3RhYmxlIGNoYXRzLlxuICovXG4gIHB1YmxpYyBhc3luYyBnZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHkocmVjb25uZWN0SWQ6IHN0cmluZywgb3B0aW9uYWxQYXJhbXM6IElSZWNvbm5lY3RBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxSZWNvbm5lY3RBdmFpbGFiaWxpdHkgfCB2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNUQVJURUQsIFwiR2V0IFJlY29ubmVjdGFibGUgYXZhaWxhYmlsaXR5IFN0YXJ0ZWRcIik7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFJlY29ubmVjdEF2YWlsYWJpbGl0eVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVjb25uZWN0SWR9YDtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhvcHRpb25hbFBhcmFtcz8ucmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHlcbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNVQ0NFRURFRCwgXCJHZXQgUmVjb25uZWN0IGF2YWlsYWJpbGl0eSBzdWNjZWVkZWRcIiwgb3B0aW9uYWxQYXJhbXM/LnJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBObyBkYXRhIGZvdW5kIHNvIHJldHVybmluZyBudWxsXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5XQVJOLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNVQ0NFRURFRCwgXCJHZXQgUmVjb25uZWN0IGF2YWlsYWJpbGl0eSBkaWRuJ3Qgc2VuZCBhbnkgdmFsaWQgZGF0YVwiLCBvcHRpb25hbFBhcmFtcz8ucmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZRkFJTEVELCBcIkdldCBSZWNvbm5lY3QgQXZhaWxhYmlsaXR5IGZhaWxlZFwiLCBvcHRpb25hbFBhcmFtcz8ucmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKiBAcGFyYW0gcXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEFnZW50QXZhaWxhYmlsaXR5KHJlcXVlc3RJZDogc3RyaW5nLCBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zOiBJR2V0UXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxRdWV1ZUF2YWlsYWJpbGl0eT4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRBR0VOVEFWQUlMQUJJTElUWVNUQVJURUQsIFwiR2V0IGFnZW50IGF2YWlsYWJpbGl0eSBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5HZXRBZ2VudEF2YWlsYWJpbGl0eVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9bGN3YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0QWdlbnRBdmFpbGFiaWxpdHlcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaW5pdENvbnRleHQsIGdldENvbnRleHQgfSA9IHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCBkYXRhOiBJbml0Q29udGV4dCA9IGluaXRDb250ZXh0IHx8IHt9O1xuXG4gICAgY29uc3QgY2FjaE9iaiA9IHtcbiAgICAgIFwib3JnSWRcIjogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQsXG4gICAgICBcIndpZGdldElkXCI6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkXG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5jdXN0b21Db250ZXh0RGF0YSkge1xuICAgICAgY29uc3QgdGVtcEFyciA9IEN1c3RvbUNvbnRleHREYXRhLnNvcnQoZGF0YS5jdXN0b21Db250ZXh0RGF0YSk7XG4gICAgICBPYmplY3QuYXNzaWduKGNhY2hPYmosIHsgXCJjdXN0b21Db250ZXh0XCI6IHRlbXBBcnIgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEucG9ydGFsY29udGFjdGlkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNhY2hPYmosIHsgXCJwb3J0YWxjb250YWN0aWRcIjogZGF0YS5wb3J0YWxjb250YWN0aWQgfSk7XG4gICAgfVxuXG4gICAgZGF0YS5jYWNoZUtleSA9IGhhc2guY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKEpTT04uc3RyaW5naWZ5KGNhY2hPYmopKS5kaWdlc3QoJ2hleCcpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGEubG9jYWxlKSB7XG4gICAgICBkYXRhLmxvY2FsZSA9IENvbnN0YW50cy5kZWZhdWx0TG9jYWxlO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGxvY2FsZVxuICAgIGlmIChkYXRhLmxvY2FsZSAmJiAhTG9jYWxlcy5zdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKGRhdGEubG9jYWxlKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbG9jYWxlOiAnJHtkYXRhLmxvY2FsZX0nYCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG5cbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRBZ2VudEF2YWlsYWJpbGl0eVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQUdFTlRBVkFJTEFCSUxJVFlTVUNDRUVERUQsIFwiR2V0IGFnZW50IGF2YWlsYWJpbGl0eSBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQUdFTlRBVkFJTEFCSUxJVFlGQUlMRUQsIFwiR2V0IGFnZW50IGF2YWlsYWJpbGl0eSBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKionXG4gICAqIFN0YXJ0cyBhIHNlc3Npb24gdG8gb21uaWNoYW5uZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gaW5pdC5cbiAgICogQHBhcmFtIHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlc3Npb24gaW5pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXNzaW9uSW5pdChyZXF1ZXN0SWQ6IHN0cmluZywgc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtczogSVNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OSU5JVFNUQVJURUQsIFwiU2Vzc2lvbiBJbml0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgY29uc3QgcmV0cnlPbjQyOSA9IHRydWU7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlc3Npb25Jbml0LFxuICAgICAgc2hvdWxkUmV0cnk6IChlcnJvcikgPT4gc2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIoZXJyb3IsIHJldHJ5T240MjkpLFxuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV1cbiAgICB9KTtcblxuICAgIGNvbnN0IHsgcmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGluaXRDb250ZXh0LCBnZXRDb250ZXh0IH0gPSBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IGRhdGE6IEluaXRDb250ZXh0ID0gaW5pdENvbnRleHQgfHwge307XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG5cbiAgICBjb25zdCBiYXNlUGF0aCA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5cbiAgICAgID8gT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vzc2lvbkluaXRQYXRoXG4gICAgICA6IE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0U2Vzc2lvbkluaXRQYXRoO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke2Jhc2VQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHsgICAgIFxuICAgICAgT2JqZWN0LmFzc2lnbihyZXF1ZXN0SGVhZGVycywge1xuICAgICAgICBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXTogYXV0aGVudGljYXRlZFVzZXJUb2tlbixcbiAgICAgICAgW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV06IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICB0aGlzLnNldFJlcXVlc3RJZEhlYWRlcihyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuXG4gICAgLy8gSWYgc2hvdWxkIG9ubHkgYmUgYXBwbGljYWJsZSBvbiB1bmF1dGggY2hhdCAmIHRoZSBmbGFnIGVuYWJsZWRcbiAgICBjb25zdCBzaG91bGRVc2VTaWdRdWVyeVBhcmFtID0gIWF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gJiYgdGhpcy5jb25maWd1cmF0aW9uLnVzZVVuYXV0aFJlY29ubmVjdElkU2lnUXVlcnlQYXJhbSA9PT0gdHJ1ZTtcbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmICghc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICByZXF1ZXN0UGF0aCArPSBgLyR7cmVjb25uZWN0SWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgPSB7XG4gICAgICBjaGFubmVsSWQ6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZFxuICAgIH1cblxuICAgIGlmIChyZWNvbm5lY3RJZCAmJiBzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICBwYXJhbXMuc2lnID0gcmVjb25uZWN0SWQ7XG4gICAgfVxuXG4gICAgaWYgKGdldENvbnRleHQgJiYgIXdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgZ2V0Q29udGV4dCBpcyBvbmx5IHN1cHBvcnRlZCBvbiB3ZWIgYnJvd3NlcnNgKSk7XG4gICAgfVxuXG4gICAgaWYgKGdldENvbnRleHQpIHtcbiAgICAgIGRhdGEuYnJvd3NlciA9IEJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICBkYXRhLmRldmljZSA9IERldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgZGF0YS5vcmlnaW51cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIGRhdGEub3MgPSBPU0luZm8uZ2V0T3NUeXBlKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGRlZmF1bHQgbG9jYWxlIGlmIGxvY2FsZSBpcyBlbXB0eVxuICAgIGlmICghZGF0YS5sb2NhbGUpIHtcbiAgICAgIGRhdGEubG9jYWxlID0gQ29uc3RhbnRzLmRlZmF1bHRMb2NhbGU7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbG9jYWxlXG4gICAgaWYgKGRhdGEubG9jYWxlICYmICFMb2NhbGVzLnN1cHBvcnRlZExvY2FsZXMuaW5jbHVkZXMoZGF0YS5sb2NhbGUpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBVbnN1cHBvcnRlZCBsb2NhbGU6ICcke2RhdGEubG9jYWxlfSdgKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zZXNzaW9uSW5pdFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklUU1VDQ0VFREVELCBcIlNlc3Npb24gSW5pdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCBkYXRhLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTklOSVRGQUlMRUQsIFwiU2Vzc2lvbiBJbml0IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIGRhdGEsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDb252ZXJzYXRpb24ocmVxdWVzdElkOiBzdHJpbmcsIHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPEZldGNoQ2hhdFRva2VuUmVzcG9uc2U+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuQ1JFQVRFU0VTU0lPTlNUQVJURUQsIFwiQ3JlYXRlIGNvbnZlcnNhdGlvbiBjYWxsIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgY29uc3QgcmV0cnlPbjQyOSA9IHRydWU7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlc3Npb25Jbml0LFxuICAgICAgc2hvdWxkUmV0cnk6IChlcnJvcikgPT4gc2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIoZXJyb3IsIHJldHJ5T240MjkpLFxuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV1cbiAgICB9KTtcblxuICAgIGNvbnN0IHsgcmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGluaXRDb250ZXh0LCBnZXRDb250ZXh0IH0gPSBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IGRhdGE6IEluaXRDb250ZXh0ID0gaW5pdENvbnRleHQgfHwge307XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG5cbiAgICBjb25zdCBiYXNlUGF0aCA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5cbiAgICAgID8gT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25uZWN0b3JBdXRoUGF0aFxuICAgICAgOiBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdENvbm5lY3RvclBhdGg7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtiYXNlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vd2lkZ2V0QXBwLyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9L2NvbnZlcnNhdGlvbmA7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikgeyAgICAgXG4gICAgICBPYmplY3QuYXNzaWduKHJlcXVlc3RIZWFkZXJzLCB7XG4gICAgICAgIFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dOiBhdXRoZW50aWNhdGVkVXNlclRva2VuLFxuICAgICAgICBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXTogdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0UmVxdWVzdElkSGVhZGVyKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBkYXRhLnJlY29ubmVjdElkID0gcmVjb25uZWN0SWQ7XG4gICAgfVxuXG4gICAgZGF0YS5jaGFubmVsSWQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsb2NhbGUgaWYgbG9jYWxlIGlzIGVtcHR5XG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25Jbml0XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICAgIGlmIChoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBjaGVjayBpZiBkYXRhIGlzIGVtcHR5LCBpZiBzbywgdGhlbiB0aHJvdyBhbiBlcnJvclxuICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbXB0eSBkYXRhIHJlY2VpdmVkIGZyb20gZ2V0Q2hhdFRva2VuXCIpO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnJlcXVlc3RJZCA9IHJlcXVlc3RJZDtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkNSRUFURVNFU1NJT05TVUNDRUVERUQsIFwiQ3JlYXRlIGNvdmVyc2F0aW9uIGNhbGwgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuQ1JFQVRFU0VTU0lPTkZBSUxFRCwgXCJDcmVhdGUgY29udmVyc2F0aW9uIGNhbGwgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgZGF0YSwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgXG4gICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gY2xvc2UgKHNhbWUgcmVxdWVzdCBpZCBmb3Igc2Vzc2lvbiBpbml0KS5cbiAgICogQHBhcmFtIHNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGNsb3NlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlc3Npb25DbG9zZShyZXF1ZXN0SWQ6IHN0cmluZywgc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRVNUQVJURUQsIFwiU2Vzc2lvbiBDbG9zZSBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZXNzaW9uQ2xvc2VQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlc3Npb25DbG9zZVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpc1JlY29ubmVjdENoYXQsIGlzUGVyc2lzdGVudENoYXQsIGNoYXRJZCB9ID0gc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHt9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBkYXRhLmNoYXRJZCA9IGNoYXRJZDtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhTZXNzaW9uQ2xvc2VQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKGlzUmVjb25uZWN0Q2hhdCkge1xuICAgICAgcmVxdWVzdFBhdGggKz0gYCZpc1JlY29ubmVjdENoYXQ9dHJ1ZWA7XG4gICAgfVxuXG4gICAgaWYgKGlzUGVyc2lzdGVudENoYXQpIHtcbiAgICAgIHJlcXVlc3RQYXRoICs9IGAmaXNQZXJzaXN0ZW50Q2hhdD10cnVlYDtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25DbG9zZVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRVNVQ0NFRURFRCwgXCJTZXNzaW9uIENsb3NlIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OQ0xPU0VGQUlMRUQsIFwiU2Vzc2lvbiBjbG9zZSBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgYXV0aCBjaGF0IHJlY29yZCBleGlzdHMgaW4gZGF0YWJhc2UuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCBmb3IgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZCAoc2FtZSByZXF1ZXN0IGlkIGZvciBzZXNzaW9uIGluaXQpLlxuICAgKiBAcGFyYW0gdmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlQXV0aENoYXRSZWNvcmQocmVxdWVzdElkOiBzdHJpbmcsIHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtczogSVZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcyk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVEFSVEVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjaGF0SWQgfSA9IHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy52YWxpZGF0ZUF1dGhDaGF0UmVjb3JkXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcudmFsaWRhdGVBdXRoQ2hhdFJlY29yZFRpbWVvdXRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8uYXV0aENoYXRFeGlzdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuVkFMSURBVEVBVVRIQ0hBVFJFQ09SREZBSUxFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIEZhaWxlZC4gUmVjb3JkIGlzIG5vdCBmb3VuZCBvciByZXF1ZXN0IGlzIG5vdCBhdXRob3JpemVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBGYWlsZWQuIFJlY29yZCBpcyBub3QgZm91bmQgb3IgcmVxdWVzdCBpcyBub3QgYXV0aG9yaXplZFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcblxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuVkFMSURBVEVBVVRIQ0hBVFJFQ09SREZBSUxFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IudG9TdHJpbmcoKSA9PT0gXCJFcnJvcjogUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSA0MDRcIikgeyAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgcmVzb2x2ZSh7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdHMgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHBvc3RDaGF0UmVzcG9uc2UgUG9zdCBjaGF0IHJlc3BvbnNlIHRvIHN1Ym1pdC5cbiAgICogQHBhcmFtIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc3VibWl0IHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlKHJlcXVlc3RJZDogc3RyaW5nLCBwb3N0Q2hhdFJlc3BvbnNlOiBvYmplY3QsIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogSVN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNVQk1JVFBPU1RDSEFUU1RBUlRFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFN1Ym1pdFBvc3RDaGF0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU3VibWl0UG9zdENoYXRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHBvc3RDaGF0UmVzcG9uc2UpLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU1VCTUlUUE9TVENIQVRTVUNDRUVERUQsIFwiU3VibWl0IFBvc3QgQ2hhdCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU1VCTUlUUE9TVENIQVRGQUlMRUQsIFwiU3VibWl0IFBvc3QgQ2hhdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdHMgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHBvc3RDaGF0UmVzcG9uc2UgUG9zdCBjaGF0IHJlc3BvbnNlIHRvIHN1Ym1pdC5cbiAgICogQHBhcmFtIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc3VibWl0IHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTdXJ2ZXlJbnZpdGVMaW5rKHN1cnZleU93bmVySWQ6IHN0cmluZywgc3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHk6IG9iamVjdCwgZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zOiBJR2V0U3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbC5JTkZPLFxuICAgICAgICBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktTVEFSVEVELFxuICAgICAgICB7IFN1cnZleU93bmVySWQ6IHN1cnZleU93bmVySWQgfSxcbiAgICAgICAgXCJHZXQgU3VydmV5IEludml0ZSBMaW5rIFN0YXJ0ZWRcIik7XG4gICAgfVxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldFN1cnZleUludml0ZUxpbmtQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3N1cnZleU93bmVySWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0U3VydmV5SW52aXRlTGlua1xuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCByZXF1ZXN0SWQgfSA9IGdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoR2V0U3VydmV5SW52aXRlTGlua1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7c3VydmV5T3duZXJJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLndpZGdldEFwcElkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBpZiAocmVxdWVzdElkKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLnJlcXVlc3RJZF0gPSByZXF1ZXN0SWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShzdXJ2ZXlJbnZpdGVBUElSZXF1ZXN0Qm9keSksXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldFN1cnZleUludml0ZUxpbmtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LU1VDQ0VFREVELCBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktGQUlMRUQsIFwiR2V0IFN1cnZleSBJbnZpdGUgTGluayBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjaGF0IHRyYW5zY3JpcHRzIGZvciBjdXN0b21lci5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSBjaGF0SWQgQ2hhdCB0aHJlYWQgSWQuXG4gICAqIEBwYXJhbSB0b2tlbiBTa3lwZSB0b2tlbi5cbiAgICogQHBhcmFtIGdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGdldCBjaGF0IHRyYW5zY3JpcHRzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENoYXRUcmFuc2NyaXB0cyhyZXF1ZXN0SWQ6IHN0cmluZywgY2hhdElkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zOiBJR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUUkFOU0NSSVBUU1RBUlRFRCwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldENoYXRUcmFuc2NyaXB0UGF0aH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0Q2hhdFRyYW5zY3JpcHRzXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gfSA9IGdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLndpZGdldEFwcElkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aG9yaXphdGlvbl0gPSB0b2tlbjtcblxuICAgIGlmICh0aGlzLmxpdmVDaGF0VmVyc2lvbiA9PT0gTGl2ZUNoYXRWZXJzaW9uLlYyIHx8IChjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICYmIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gPT09IExpdmVDaGF0VmVyc2lvbi5WMikpIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdHYyQXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldENoYXRUcmFuc2NyaXB0c1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVFNVQ0NFRURFRCwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRGQUlMRUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWFpbCB0cmFuc2NyaXB0IHRvIGN1c3RvbWVyLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHRva2VuIFNreXBlIHRva2VuLlxuICAgKiBAcGFyYW0gZW1haWxSZXF1ZXN0Qm9keSBFbWFpbCByZXF1ZXN0IGJvZHkuXG4gICAqIEBwYXJhbSBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBlbWFpbCB0cmFuc2NyaXB0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVtYWlsVHJhbnNjcmlwdChyZXF1ZXN0SWQ6IHN0cmluZywgdG9rZW46IHN0cmluZywgZW1haWxSZXF1ZXN0Qm9keTogb2JqZWN0LCBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtczogSUVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRU1BSUxUUkFOU0NSSVBUU1RBUlRFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRofS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmVtYWlsVHJhbnNjcmlwdFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy53aWRnZXRBcHBJZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhvcml6YXRpb25dID0gdG9rZW47XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGVtYWlsUmVxdWVzdEJvZHkpLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5lbWFpbFRyYW5zY3JpcHRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5FTUFJTFRSQU5TQ1JJUFRTVUNDRUVERUQsIFwiRW1haWwgVHJhbnNjcmlwdCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5FTUFJTFRSQU5TQ1JJUFRGQUlMRUQsIFwiRW1haWwgVHJhbnNjcmlwdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGRhdGEgbWFza2luZyBpbmZvIG9mIHRoZSBvcmcuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uIChPcHRpb25hbCkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZmV0Y2hEYXRhTWFza2luZ0luZm8ocmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPElEYXRhTWFza2luZ0luZm8+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRkVUQ0hEQVRBTUFTS0lOR1NUQVJURUQsIFwiRmV0Y2ggRGF0YSBNYXNraW5nIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRGZXRjaERhdGFNYXNraW5nSW5mb1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmZldGNoRGF0YU1hc2tpbmdJbmZvXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5yZXF1ZXN0SWRdID0gcmVxdWVzdElkO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmZldGNoRGF0YU1hc2tpbmdJbmZvXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5GRVRDSERBVEFNQVNLSU5HU1VDQ0VFREVELCBcIkZldGNoIERhdGEgTWFza2luZyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRkVUQ0hEQVRBTUFTS0lOR0ZBSUxFRCwgXCJGZXRjaCBEYXRhIE1hc2tpbmcgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlcyBhIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50IG5ldHdvcmsgY2FsbCB0byBPbW5pY2hhbm5lbC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZWNvbmRhcnkgY2hhbm5lbCBldmVudFxuICAgKiBAcGFyYW0gc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHkgc2Vjb25kYXJ5Q2hhbm5lbCBldmVudCByZXF1ZXN0IGJvZHlcbiAgICogQHBhcmFtIHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdChyZXF1ZXN0SWQ6IHN0cmluZywgc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHk6IG9iamVjdCwgc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXM6IElTZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RTVEFSVEVELCBcIlNlY29uZGFyeSBDaGFubmVsIEV2ZW50IFJlcXVlc3QgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0U2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcubWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgcmVxdWVzdFBhdGggKz0gXCI/Y2hhbm5lbElkPVwiICsgQ29uc3RhbnRzLmRlZmF1bHRDaGFubmVsSWQ7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcubWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVELCBcIlNlY29uZGFyeSBDaGFubmVsIEV2ZW50IFJlcXVlc3QgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKiogU2VuZCB0eXBpbmcgaW5kaWNhdG9yXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlbmRUeXBpbmdJbmRpY2F0b3IocmVxdWVzdElkOiBzdHJpbmcsIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb246IG51bWJlciwgc2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zOiBJU2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBhdm9pZGluZyBsb2dnaW5nIEluZm8gZm9yIHR5cGluZ2luZGljYXRvciB0byByZWR1Y2UgbG9nIHRyYWZmaWNcbiAgICBpZiAoIWN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gfHwgY3VycmVudExpdmVDaGF0VmVyc2lvbiAhPT0gTGl2ZUNoYXRWZXJzaW9uLlYyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IGN1c3RvbWVyRGlzcGxheU5hbWUgfSA9IHNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcztcbiAgICBpZiAoIWN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gfHwgY3VycmVudExpdmVDaGF0VmVyc2lvbiAhPT0gTGl2ZUNoYXRWZXJzaW9uLlYyKSB7IHRocm93IG5ldyBFcnJvcignVHlwaW5nIGluZGljYXRvciBpcyBvbmx5IHN1cHBvcnRlZCBvbiB2MicpIH1cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5TZW5kVHlwaW5nSW5kaWNhdG9yUGF0aH0vJHtyZXF1ZXN0SWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG4gICAgaWYgKGN1c3RvbWVyRGlzcGxheU5hbWUpIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW0NvbnN0YW50cy5jdXN0b21lckRpc3BsYXlOYW1lXSA9IGN1c3RvbWVyRGlzcGxheU5hbWU7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zZW5kVHlwaW5nSW5kaWNhdG9yXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EVFlQSU5HSU5ESUNBVE9SU1VDQ0VFREVELCBcIlNlbmQgVHlwaW5nIEluZGljYXRvciBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EVFlQSU5HSU5ESUNBVE9SRkFJTEVELCBcIlNlbmQgVHlwaW5nIEluZGljYXRvciBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBsb2dnaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gbG9nTGV2ZWwgTG9nIGxldmVsIGZvciBsb2dnaW5nLlxuICAgKiBAcGFyYW0gdGVsZW1ldHJ5RXZlbnRUeXBlIFRlbGVtZXRyeSBldmVudCB0eXBlIGluIHdoaWNoIGV2ZW50IHdpbGwgYmUgbG9nZ2VkLlxuICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3QgSURcbiAgICogQHBhcmFtIHJlc3BvbnNlIFJlc3BvbnNlXG4gICAqIEBwYXJhbSBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIEVsYXBzZWQgdGltZSBpbiBtc1xuICAgKiBAcGFyYW0gcmVxdWVzdFBhdGggUmVxdWVzdCBwYXRoXG4gICAqIEBwYXJhbSBtZXRob2QgTWV0aG9kXG4gICAqIEBwYXJhbSBlcnJvciBFcnJvclxuICAgKiBAcGFyYW0gZGF0YSBEYXRhXG4gICAqL1xuICBwcml2YXRlIGxvZ1dpdGhMb2dnZXIobG9nTGV2ZWw6IExvZ0xldmVsLCB0ZWxlbWV0cnlFdmVudFR5cGU6IE9DU0RLVGVsZW1ldHJ5RXZlbnQsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZywgcmVzcG9uc2U/OiBBeGlvc1Jlc3BvbnNlPGFueT4sIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHJlcXVlc3RQYXRoPzogc3RyaW5nLCBtZXRob2Q/OiBzdHJpbmcsIGVycm9yPzogdW5rbm93biwgcmVxdWVzdFBheWxvYWQ/OiBhbnksIHJlcXVlc3RIZWFkZXJzPzogYW55KTogdm9pZCB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGlmICghdGhpcy5sb2dnZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzKGVycm9yKTtcbiAgICB9XG5cbiAgICBsZXQgc2FuaXRpemVkUmVxdWVzdFBheWxvYWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHJlcXVlc3RQYXlsb2FkKSB7XG4gICAgICBzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCA9IHsgLi4ucmVxdWVzdFBheWxvYWQgfTtcbiAgICAgIGlmIChzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5jdXN0b21Db250ZXh0RGF0YSkge1xuICAgICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwQ3VzdG9tQ29udGV4dERhdGFWYWx1ZXMoc2FuaXRpemVkUmVxdWVzdFBheWxvYWQuY3VzdG9tQ29udGV4dERhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLnByZUNoYXRSZXNwb25zZSkge1xuICAgICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwUHJlQ2hhdFJlc3BvbnNlKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLnByZUNoYXRSZXNwb25zZSk7XG4gICAgICB9XG4gICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwR2VvbG9jYXRpb24oc2FuaXRpemVkUmVxdWVzdFBheWxvYWQpO1xuICAgIH1cblxuICAgIGxldCBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyA9IHVuZGVmaW5lZDtcbiAgICBsZXQgYXV0aFRva2VuRGV0YWlsczogYW55ID0gdW5kZWZpbmVkOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAocmVxdWVzdEhlYWRlcnMpIHtcbiAgICAgIHNhbml0aXplZFJlcXVlc3RIZWFkZXJzID0geyAuLi5yZXF1ZXN0SGVhZGVycyB9O1xuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcFJlcXVlc3RIZWFkZXJzU2Vuc2l0aXZlUHJvcGVydGllcyhzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgIGlmIChyZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dKSB7XG4gICAgICAgIGlmICh3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmF0b2IpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dO1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRva2VuLnNwbGl0KFwiLlwiKVsxXTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB3aW5kb3cuYXRvYihwYXlsb2FkKTtcbiAgICAgICAgICAgIGNvbnN0IGpzb25EYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGx3aUNvbnRleHRzID0ganNvbkRhdGFbXCJsd2ljb250ZXh0c1wiXTtcbiAgICAgICAgICAgIGF1dGhUb2tlbkRldGFpbHMgPSB7XG4gICAgICAgICAgICAgIHN1YjoganNvbkRhdGFbXCJzdWJcIl0sXG4gICAgICAgICAgICAgIGV4cDoganNvbkRhdGFbXCJleHBcIl1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChsd2lDb250ZXh0cykge1xuICAgICAgICAgICAgICBjb25zdCBsd2lDb250ZXh0c0RhdGEgPSBKU09OLnBhcnNlKGx3aUNvbnRleHRzKTtcbiAgICAgICAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEN1c3RvbUNvbnRleHREYXRhVmFsdWVzKGx3aUNvbnRleHRzRGF0YSk7XG4gICAgICAgICAgICAgIGF1dGhUb2tlbkRldGFpbHMubHdpQ29udGV4dHMgPSBsd2lDb250ZXh0c0RhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY3VzdG9tRGF0YSA9IHtcbiAgICAgIFJlcXVlc3RJZDogcmVxdWVzdElkLFxuICAgICAgUmVnaW9uOiByZXNwb25zZT8uZGF0YS5SZWdpb24sXG4gICAgICBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLFxuICAgICAgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2U/LmhlYWRlcnNbQ29uc3RhbnRzLnRyYW5zYWN0aW9uaWRdLFxuICAgICAgUmVxdWVzdFBhdGg6IHJlcXVlc3RQYXRoLFxuICAgICAgUmVxdWVzdE1ldGhvZDogbWV0aG9kLFxuICAgICAgUmVzcG9uc2VTdGF0dXNDb2RlOiByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IGVycm9yID8gKGVycm9yIGFzIGFueSkucmVzcG9uc2U/LnN0YXR1cyA6IHVuZGVmaW5lZCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBFeGNlcHRpb25EZXRhaWxzOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5kYXRhIHx8IGVycm9yIDogdW5kZWZpbmVkLCBcbiAgICAgIFJlcXVlc3RQYXlsb2FkOiBzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCxcbiAgICAgIFJlcXVlc3RIZWFkZXJzOiBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyxcbiAgICAgIFJlc3BvbnNlRXJyb3Jjb2RlOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5oZWFkZXJzPy5lcnJvcmNvZGUgOiB1bmRlZmluZWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgQXV0aFRva2VuRGV0YWlsczogYXV0aFRva2VuRGV0YWlsc1xuICAgIH07XG4gICAgdGhpcy5sb2dnZXIubG9nKGxvZ0xldmVsLCB0ZWxlbWV0cnlFdmVudFR5cGUsIGN1c3RvbURhdGEsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgc2V0QXV0aENvZGVOb25jZSA9IChoZWFkZXJzOiBhbnkpID0+IHtcbiAgICBpZiAoaGVhZGVycz8uYXV0aGNvZGVub25jZSkge1xuICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2UgPSBoZWFkZXJzPy5hdXRoY29kZW5vbmNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkOiBzdHJpbmcgfCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXApOiB2b2lkIHtcbiAgICB0aGlzLnNldFNlc3Npb25JZEhlYWRlcih0aGlzLnNlc3Npb25JZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICB0aGlzLnNldENvcnJlbGF0aW9uSWRJbkhlYWRlcihyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgc2V0U2Vzc2lvbklkSGVhZGVyID0gKHNlc3Npb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBoZWFkZXJzOiBhbnkpID0+IHtcbiAgICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWRdID0gc2Vzc2lvbklkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UmVxdWVzdElkSGVhZGVyID0gKHJlcXVlc3RJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBoZWFkZXJzOiBTdHJpbmdNYXApID0+IHtcbiAgICBpZiAocmVxdWVzdElkKSB7XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMucmVxdWVzdElkXSA9IHJlcXVlc3RJZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldENvcnJlbGF0aW9uSWRJbkhlYWRlciA9IChjb3JyZWxhdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQsIGhlYWRlcnM6IFN0cmluZ01hcCkgPT4ge1xuICAgIGlmIChjb3JyZWxhdGlvbklkKSB7XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuY29ycmVsYXRpb25JZF0gPSBjb3JyZWxhdGlvbklkO1xuICAgIH1cbiAgfVxufVxuIl19