@phenixrts/sdk 2023.2.12-beta.84 → 2023.2.12-beta.85

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.
Files changed (40) hide show
  1. package/channels/debug/channels.js +90 -49
  2. package/channels/debug/package.json +1 -1
  3. package/channels/debug.private/channels.js +90 -49
  4. package/channels/debug.private/package.json +1 -1
  5. package/channels/es5.debug.private/channels.js +87 -49
  6. package/channels/es5.debug.private/package.json +1 -1
  7. package/channels/min/channels.js +1 -1
  8. package/channels/min/channels.js.map +1 -1
  9. package/channels/min/package.json +1 -1
  10. package/channels/min.private/channels.js +1 -1
  11. package/channels/min.private/channels.js.map +1 -1
  12. package/channels/min.private/package.json +1 -1
  13. package/channels/package.json +1 -1
  14. package/full/debug/full.js +90 -49
  15. package/full/debug/package.json +1 -1
  16. package/full/debug.private/full.js +90 -49
  17. package/full/debug.private/package.json +1 -1
  18. package/full/min/full.js +1 -1
  19. package/full/min/full.js.map +1 -1
  20. package/full/min/package.json +1 -1
  21. package/full/min.private/full.js +1 -1
  22. package/full/min.private/full.js.map +1 -1
  23. package/full/min.private/package.json +1 -1
  24. package/full/package.json +1 -1
  25. package/package.json +1 -1
  26. package/publish/debug/package.json +1 -1
  27. package/publish/debug/publish.js +1 -1
  28. package/publish/debug.private/package.json +1 -1
  29. package/publish/debug.private/publish.js +1 -1
  30. package/publish/min/package.json +1 -1
  31. package/publish/min/publish.js +1 -1
  32. package/publish/min.private/package.json +1 -1
  33. package/publish/min.private/publish.js +1 -1
  34. package/publish/package.json +1 -1
  35. package/types/sdk/channels/Channel.d.ts +1 -1
  36. package/types/sdk/channels/Channels.d.ts +1 -1
  37. package/types/sdk/context/StreamTransformContext.d.ts +1 -1
  38. package/types/sdk/transformation/EncodedStreamSink.d.ts +10 -0
  39. package/types/sdk/transformation/InsertableStreams.d.ts +1 -6
  40. package/types/sdk/transformation/IEncodedStreamSink.d.ts +0 -3
@@ -5044,15 +5044,16 @@ var BitrateMode = /*#__PURE__*/function (BitrateMode) {
5044
5044
  /* harmony import */ var _edgeAuth_EdgeAuthParser__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../edgeAuth/EdgeAuthParser */ "./src/edgeAuth/EdgeAuthParser.ts");
5045
5045
  /* harmony import */ var _context_TokenContext__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../context/TokenContext */ "./src/sdk/context/TokenContext.ts");
5046
5046
  /* harmony import */ var _context_ChannelContext__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../context/ChannelContext */ "./src/sdk/context/ChannelContext.ts");
5047
- /* harmony import */ var _context_StreamTransformContext__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../context/StreamTransformContext */ "./src/sdk/context/StreamTransformContext.ts");
5048
- /* harmony import */ var _context_PeerConnectionContext__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../context/PeerConnectionContext */ "./src/sdk/context/PeerConnectionContext.ts");
5049
- /* harmony import */ var _context_StateContext__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../context/StateContext */ "./src/sdk/context/StateContext.ts");
5050
- /* harmony import */ var _streaming_StreamFactory__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../streaming/StreamFactory */ "./src/sdk/streaming/StreamFactory.ts");
5051
- /* harmony import */ var _discovery_Discovery__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../discovery/Discovery */ "./src/sdk/discovery/Discovery.ts");
5052
- /* harmony import */ var _discovery_DiscoveryUri__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../discovery/DiscoveryUri */ "./src/sdk/discovery/DiscoveryUri.ts");
5053
- /* harmony import */ var _metrics_MetricsFactory__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../metrics/MetricsFactory */ "./src/metrics/MetricsFactory.ts");
5054
- /* harmony import */ var _environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../environment/FeatureEnablement */ "./src/environment/FeatureEnablement.ts");
5055
- /* harmony import */ var _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../transformation/InsertableStreams */ "./src/sdk/transformation/InsertableStreams.ts");
5047
+ /* harmony import */ var _transformation_EncodedStreamSink__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../transformation/EncodedStreamSink */ "./src/sdk/transformation/EncodedStreamSink.ts");
5048
+ /* harmony import */ var _context_StreamTransformContext__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../context/StreamTransformContext */ "./src/sdk/context/StreamTransformContext.ts");
5049
+ /* harmony import */ var _context_PeerConnectionContext__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../context/PeerConnectionContext */ "./src/sdk/context/PeerConnectionContext.ts");
5050
+ /* harmony import */ var _context_StateContext__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../context/StateContext */ "./src/sdk/context/StateContext.ts");
5051
+ /* harmony import */ var _streaming_StreamFactory__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../streaming/StreamFactory */ "./src/sdk/streaming/StreamFactory.ts");
5052
+ /* harmony import */ var _discovery_Discovery__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../discovery/Discovery */ "./src/sdk/discovery/Discovery.ts");
5053
+ /* harmony import */ var _discovery_DiscoveryUri__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../discovery/DiscoveryUri */ "./src/sdk/discovery/DiscoveryUri.ts");
5054
+ /* harmony import */ var _metrics_MetricsFactory__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../metrics/MetricsFactory */ "./src/metrics/MetricsFactory.ts");
5055
+ /* harmony import */ var _environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../environment/FeatureEnablement */ "./src/environment/FeatureEnablement.ts");
5056
+ /* harmony import */ var _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../transformation/InsertableStreams */ "./src/sdk/transformation/InsertableStreams.ts");
5056
5057
  /* provided dependency */ var Promise = __webpack_require__(/*! ./src/promise/Promise */ "./src/promise/Promise.ts")["default"];
5057
5058
 
5058
5059
 
@@ -5084,6 +5085,7 @@ var BitrateMode = /*#__PURE__*/function (BitrateMode) {
5084
5085
 
5085
5086
 
5086
5087
 
5088
+
5087
5089
 
5088
5090
 
5089
5091
  var defaultStreamTerminationReason = 'client:termination';
@@ -5138,9 +5140,9 @@ var Channel = /*#__PURE__*/function () {
5138
5140
  };
5139
5141
  this._tokenContext = new _context_TokenContext__WEBPACK_IMPORTED_MODULE_18__.default(token);
5140
5142
  this._channelContext = new _context_ChannelContext__WEBPACK_IMPORTED_MODULE_19__.default(channelContextOptions);
5141
- this._peerConnectionContext = new _context_PeerConnectionContext__WEBPACK_IMPORTED_MODULE_21__.default();
5142
- this._streamTransformContext = new _context_StreamTransformContext__WEBPACK_IMPORTED_MODULE_20__.default(streamTransformContextOptions);
5143
- this._stateContext = new _context_StateContext__WEBPACK_IMPORTED_MODULE_22__.default();
5143
+ this._peerConnectionContext = new _context_PeerConnectionContext__WEBPACK_IMPORTED_MODULE_22__.default();
5144
+ this._streamTransformContext = new _context_StreamTransformContext__WEBPACK_IMPORTED_MODULE_21__.default(streamTransformContextOptions);
5145
+ this._stateContext = new _context_StateContext__WEBPACK_IMPORTED_MODULE_23__.default();
5144
5146
  this._exponentialBackoff = new _time_ExponentialBackoff__WEBPACK_IMPORTED_MODULE_8__.default();
5145
5147
  this._channelStartTime = Date.now();
5146
5148
  this._readOnlyVideoElement = new _rx_ReadOnlySubject__WEBPACK_IMPORTED_MODULE_6__.default(this._channelContext.videoElement);
@@ -5167,8 +5169,8 @@ var Channel = /*#__PURE__*/function () {
5167
5169
  this._readOnlyMediaStream = new _rx_ReadOnlySubject__WEBPACK_IMPORTED_MODULE_6__.default(this._peerConnectionContext.mediaStream);
5168
5170
  var discoveryUri = (edgeToken.uri || _SDK__WEBPACK_IMPORTED_MODULE_9__.default.discoveryUri.value).toString();
5169
5171
  _SDK__WEBPACK_IMPORTED_MODULE_9__.default.tenancy.value = edgeToken.tenancy || _SDK__WEBPACK_IMPORTED_MODULE_9__.default.tenancy.value;
5170
- _discovery_DiscoveryUri__WEBPACK_IMPORTED_MODULE_25__.default.uri.value = discoveryUri;
5171
- this._metricsService = _metrics_MetricsFactory__WEBPACK_IMPORTED_MODULE_26__.default.getMetricsService(discoveryUri);
5172
+ _discovery_DiscoveryUri__WEBPACK_IMPORTED_MODULE_26__.default.uri.value = discoveryUri;
5173
+ this._metricsService = _metrics_MetricsFactory__WEBPACK_IMPORTED_MODULE_27__.default.getMetricsService(discoveryUri);
5172
5174
  this._sessionTelemetry = new _video_SessionTelemetry__WEBPACK_IMPORTED_MODULE_15__.default(_SDK__WEBPACK_IMPORTED_MODULE_9__.default.pageLoadTime, this._metricsService);
5173
5175
  this._channelContext.channelDisposables.add(this._sessionTelemetry);
5174
5176
  this._videoMetaDataChangedHandler = this.handleVideoMetaDataChanged.bind(this);
@@ -5293,8 +5295,8 @@ var Channel = /*#__PURE__*/function () {
5293
5295
  var edgeToken = _edgeAuth_EdgeAuthParser__WEBPACK_IMPORTED_MODULE_17__.default.parseToken(this._tokenContext.token.value);
5294
5296
  var discoveryUri = (edgeToken.uri || _SDK__WEBPACK_IMPORTED_MODULE_9__.default.discoveryUri.value).toString();
5295
5297
  _SDK__WEBPACK_IMPORTED_MODULE_9__.default.tenancy.value = edgeToken.tenancy || _SDK__WEBPACK_IMPORTED_MODULE_9__.default.tenancy.value;
5296
- _discovery_DiscoveryUri__WEBPACK_IMPORTED_MODULE_25__.default.uri.value = discoveryUri;
5297
- this._metricsService = _metrics_MetricsFactory__WEBPACK_IMPORTED_MODULE_26__.default.getMetricsService(discoveryUri);
5298
+ _discovery_DiscoveryUri__WEBPACK_IMPORTED_MODULE_26__.default.uri.value = discoveryUri;
5299
+ this._metricsService = _metrics_MetricsFactory__WEBPACK_IMPORTED_MODULE_27__.default.getMetricsService(discoveryUri);
5298
5300
  this._streamTransformContext.hasInsertableStreams = edgeToken.capabilities.includes('insertable-streams');
5299
5301
  this.start();
5300
5302
  }
@@ -5585,7 +5587,7 @@ var Channel = /*#__PURE__*/function () {
5585
5587
  value: function () {
5586
5588
  var _processStart = _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee5() {
5587
5589
  var _this5 = this;
5588
- var token, listenOnStreamSetup, _InsertableStreams$va, valid, validationResult, _InsertableStreams$va2, _valid, _validationResult, _InsertableStreams$va3, _valid2, _validationResult2, hasTransformStreamCallback, hasEncodedStreamSink, hasStreamTransformsOrSink, uri, handleStreamFailureCallback, streamPlayer;
5590
+ var token, listenOnStreamSetup, _InsertableStreams$va, valid, validationResult, _EncodedStreamSink$va, _valid, _validationResult, _EncodedStreamSink$va2, _valid2, _validationResult2, hasTransformStreamCallback, hasEncodedStreamSink, hasStreamTransformsOrSink, uri, handleStreamFailureCallback, streamPlayer;
5589
5591
  return _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_regenerator_index_js__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee5$(_context5) {
5590
5592
  while (1) switch (_context5.prev = _context5.next) {
5591
5593
  case 0:
@@ -5605,7 +5607,7 @@ var Channel = /*#__PURE__*/function () {
5605
5607
  _context5.next = 16;
5606
5608
  break;
5607
5609
  }
5608
- _InsertableStreams$va = _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_28__.default.validateMediaStreamTrackTransform(this._streamTransformContext.videoStreamTransformCallback), valid = _InsertableStreams$va.valid, validationResult = _InsertableStreams$va.validationResult;
5610
+ _InsertableStreams$va = _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_29__.default.validateMediaStreamTrackTransform(this._streamTransformContext.videoStreamTransformCallback), valid = _InsertableStreams$va.valid, validationResult = _InsertableStreams$va.validationResult;
5609
5611
  if (valid) {
5610
5612
  _context5.next = 16;
5611
5613
  break;
@@ -5620,7 +5622,7 @@ var Channel = /*#__PURE__*/function () {
5620
5622
  _context5.next = 24;
5621
5623
  break;
5622
5624
  }
5623
- _InsertableStreams$va2 = _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_28__.default.validateEncodedStreamSink('video', this._streamTransformContext.encodedVideoStreamSink), _valid = _InsertableStreams$va2.valid, _validationResult = _InsertableStreams$va2.validationResult;
5625
+ _EncodedStreamSink$va = _transformation_EncodedStreamSink__WEBPACK_IMPORTED_MODULE_20__.default.validateEncodedStreamSink('video', this._streamTransformContext.encodedVideoStreamSink), _valid = _EncodedStreamSink$va.valid, _validationResult = _EncodedStreamSink$va.validationResult;
5624
5626
  if (_valid) {
5625
5627
  _context5.next = 24;
5626
5628
  break;
@@ -5635,7 +5637,7 @@ var Channel = /*#__PURE__*/function () {
5635
5637
  _context5.next = 32;
5636
5638
  break;
5637
5639
  }
5638
- _InsertableStreams$va3 = _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_28__.default.validateEncodedStreamSink('audio', this._streamTransformContext.encodedAudioStreamSink), _valid2 = _InsertableStreams$va3.valid, _validationResult2 = _InsertableStreams$va3.validationResult;
5640
+ _EncodedStreamSink$va2 = _transformation_EncodedStreamSink__WEBPACK_IMPORTED_MODULE_20__.default.validateEncodedStreamSink('audio', this._streamTransformContext.encodedAudioStreamSink), _valid2 = _EncodedStreamSink$va2.valid, _validationResult2 = _EncodedStreamSink$va2.validationResult;
5639
5641
  if (_valid2) {
5640
5642
  _context5.next = 32;
5641
5643
  break;
@@ -5651,7 +5653,7 @@ var Channel = /*#__PURE__*/function () {
5651
5653
  break;
5652
5654
  }
5653
5655
  hasTransformStreamCallback = typeof this._streamTransformContext.videoStreamTransformCallback === 'function';
5654
- if (!(hasTransformStreamCallback && !_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_27__.default.isInsertableStreamsSupported)) {
5656
+ if (!(hasTransformStreamCallback && !_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_28__.default.isInsertableStreamsSupported)) {
5655
5657
  _context5.next = 40;
5656
5658
  break;
5657
5659
  }
@@ -5662,7 +5664,7 @@ var Channel = /*#__PURE__*/function () {
5662
5664
  return _context5.abrupt("return");
5663
5665
  case 40:
5664
5666
  hasEncodedStreamSink = typeof this._streamTransformContext.encodedVideoStreamSink === 'function' || typeof this._streamTransformContext.encodedAudioStreamSink === 'function';
5665
- if (!(hasEncodedStreamSink && !_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_27__.default.isEncodedInsertableStreamsSupported)) {
5667
+ if (!(hasEncodedStreamSink && !_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_28__.default.isEncodedInsertableStreamsSupported)) {
5666
5668
  _context5.next = 47;
5667
5669
  break;
5668
5670
  }
@@ -5712,7 +5714,7 @@ var Channel = /*#__PURE__*/function () {
5712
5714
  uri = this.getUri(token);
5713
5715
  this._channelContext.disposables.add(this._channelContext.state.subscribe(function (state) {
5714
5716
  if (state === _ChannelState__WEBPACK_IMPORTED_MODULE_11__.default.Error || state === _ChannelState__WEBPACK_IMPORTED_MODULE_11__.default.Recovering) {
5715
- _discovery_Discovery__WEBPACK_IMPORTED_MODULE_24__.default.clearCachedClosestEndpoint(uri);
5717
+ _discovery_Discovery__WEBPACK_IMPORTED_MODULE_25__.default.clearCachedClosestEndpoint(uri);
5716
5718
  }
5717
5719
  }));
5718
5720
  handleStreamFailureCallback = function handleStreamFailureCallback() {
@@ -5722,7 +5724,7 @@ var Channel = /*#__PURE__*/function () {
5722
5724
  return resolve(_this5.handleStreamFailure());
5723
5725
  });
5724
5726
  };
5725
- streamPlayer = _streaming_StreamFactory__WEBPACK_IMPORTED_MODULE_23__.default.create(token, this._channelContext, this._peerConnectionContext, this._streamTransformContext, handleStreamFailureCallback);
5727
+ streamPlayer = _streaming_StreamFactory__WEBPACK_IMPORTED_MODULE_24__.default.create(token, this._channelContext, this._peerConnectionContext, this._streamTransformContext, handleStreamFailureCallback);
5726
5728
  if (streamPlayer) {
5727
5729
  _context5.next = 78;
5728
5730
  break;
@@ -5916,7 +5918,7 @@ var Channel = /*#__PURE__*/function () {
5916
5918
  this._peerConnectionContext.peerConnection.value = null;
5917
5919
  peerConnection.close();
5918
5920
  peerConnection.dispose();
5919
- if (_SDK__WEBPACK_IMPORTED_MODULE_9__.default.forceGarbageCollectionOnRestart && !(_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_27__.default.isMobile && _SDK__WEBPACK_IMPORTED_MODULE_9__.default.skipGarbageCollectionOnMobileDevices)) {
5921
+ if (_SDK__WEBPACK_IMPORTED_MODULE_9__.default.forceGarbageCollectionOnRestart && !(_environment_FeatureEnablement__WEBPACK_IMPORTED_MODULE_28__.default.isMobile && _SDK__WEBPACK_IMPORTED_MODULE_9__.default.skipGarbageCollectionOnMobileDevices)) {
5920
5922
  _dom_GarbageCollectorManager__WEBPACK_IMPORTED_MODULE_10__.default.forceGarbageCollection();
5921
5923
  }
5922
5924
  }
@@ -8706,10 +8708,17 @@ var RealTimeStream = /*#__PURE__*/function () {
8706
8708
  }, defaultStreamSetupTimeout);
8707
8709
  peerConnection.ontrack = function (e) {
8708
8710
  var stream = e.streams[0];
8711
+ var track = e.track;
8709
8712
  if (e.track.kind === 'video' && _this._streamTransformContext.encodedVideoStreamSink) {
8710
- _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_17__.default.setupEncodedStreamSink(_this._streamTransformContext.encodedVideoStreamSink, e.track, e.receiver);
8713
+ var encodedStreamTransformCallback = function encodedStreamTransformCallback(chunk) {
8714
+ _this._streamTransformContext.encodedVideoStreamSink(track, chunk);
8715
+ };
8716
+ _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_17__.default.setupEncodedStreamTransformCallback(e.receiver, track, encodedStreamTransformCallback);
8711
8717
  } else if (e.track.kind === 'audio' && _this._streamTransformContext.encodedAudioStreamSink) {
8712
- _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_17__.default.setupEncodedStreamSink(_this._streamTransformContext.encodedAudioStreamSink, e.track, e.receiver);
8718
+ var _encodedStreamTransformCallback = function _encodedStreamTransformCallback(chunk) {
8719
+ _this._streamTransformContext.encodedAudioStreamSink(track, chunk);
8720
+ };
8721
+ _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_17__.default.setupEncodedStreamTransformCallback(e.receiver, track, _encodedStreamTransformCallback);
8713
8722
  } else if (_this._streamTransformContext.videoStreamTransformCallback) {
8714
8723
  stream = _transformation_InsertableStreams__WEBPACK_IMPORTED_MODULE_17__.default.setupMediaStreamTrackTransform(_this._streamTransformContext.videoStreamTransformCallback, stream);
8715
8724
  }
@@ -9310,15 +9319,15 @@ var WebPlayer = /*#__PURE__*/function () {
9310
9319
 
9311
9320
  /***/ }),
9312
9321
 
9313
- /***/ "./src/sdk/transformation/InsertableStreams.ts":
9322
+ /***/ "./src/sdk/transformation/EncodedStreamSink.ts":
9314
9323
  /*!*****************************************************!*
9315
- !*** ./src/sdk/transformation/InsertableStreams.ts ***!
9324
+ !*** ./src/sdk/transformation/EncodedStreamSink.ts ***!
9316
9325
  \*****************************************************/
9317
9326
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9318
9327
 
9319
9328
  "use strict";
9320
9329
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9321
- /* harmony export */ "default": () => /* binding */ InsertableStreams
9330
+ /* harmony export */ "default": () => /* binding */ EncodedStreamSink
9322
9331
  /* harmony export */ });
9323
9332
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/typeof.js */ "./node_modules/@babel/runtime/helpers/typeof.js");
9324
9333
  /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_typeof_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_typeof_js__WEBPACK_IMPORTED_MODULE_0__);
@@ -9332,25 +9341,12 @@ var WebPlayer = /*#__PURE__*/function () {
9332
9341
  /**
9333
9342
  * Copyright 2023 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved.
9334
9343
  */
9335
- var InsertableStreams = /*#__PURE__*/function () {
9336
- function InsertableStreams() {
9337
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default()(this, InsertableStreams);
9344
+ var EncodedStreamSink = /*#__PURE__*/function () {
9345
+ function EncodedStreamSink() {
9346
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default()(this, EncodedStreamSink);
9338
9347
  throw new Error('InsertableStreams is a static class that may not be instantiated');
9339
9348
  }
9340
- _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default()(InsertableStreams, null, [{
9341
- key: "setupEncodedStreamSink",
9342
- value: function setupEncodedStreamSink(streamSink, track, receiver) {
9343
- var transformer = new TransformStream({
9344
- transform: function transform(frame) {
9345
- return streamSink(frame);
9346
- }
9347
- });
9348
- var receiverStreams = receiver.createEncodedStreams();
9349
- var source = receiverStreams.readable;
9350
- var sink = receiverStreams.writable;
9351
- source.pipeThrough(transformer).pipeTo(sink);
9352
- }
9353
- }, {
9349
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default()(EncodedStreamSink, null, [{
9354
9350
  key: "validateEncodedStreamSink",
9355
9351
  value: function validateEncodedStreamSink(mode, item) {
9356
9352
  if (typeof item !== 'function') {
@@ -9370,6 +9366,51 @@ var InsertableStreams = /*#__PURE__*/function () {
9370
9366
  validationResult: 'ok'
9371
9367
  };
9372
9368
  }
9369
+ }]);
9370
+ return EncodedStreamSink;
9371
+ }();
9372
+
9373
+
9374
+ /***/ }),
9375
+
9376
+ /***/ "./src/sdk/transformation/InsertableStreams.ts":
9377
+ /*!*****************************************************!*
9378
+ !*** ./src/sdk/transformation/InsertableStreams.ts ***!
9379
+ \*****************************************************/
9380
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9381
+
9382
+ "use strict";
9383
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9384
+ /* harmony export */ "default": () => /* binding */ InsertableStreams
9385
+ /* harmony export */ });
9386
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/typeof.js */ "./node_modules/@babel/runtime/helpers/typeof.js");
9387
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_typeof_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_typeof_js__WEBPACK_IMPORTED_MODULE_0__);
9388
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/classCallCheck.js */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");
9389
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1__);
9390
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/createClass.js */ "./node_modules/@babel/runtime/helpers/createClass.js");
9391
+ /* harmony import */ var _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2__);
9392
+
9393
+
9394
+
9395
+ /**
9396
+ * Copyright 2023 Phenix Real Time Solutions, Inc. Confidential and Proprietary. All Rights Reserved.
9397
+ */
9398
+ var InsertableStreams = /*#__PURE__*/function () {
9399
+ function InsertableStreams() {
9400
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default()(this, InsertableStreams);
9401
+ throw new Error('InsertableStreams is a static class that may not be instantiated');
9402
+ }
9403
+ _home_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default()(InsertableStreams, null, [{
9404
+ key: "setupEncodedStreamTransformCallback",
9405
+ value: function setupEncodedStreamTransformCallback(receiver, track, encodedStreamTransformCallback) {
9406
+ var transformer = new TransformStream({
9407
+ transform: encodedStreamTransformCallback
9408
+ });
9409
+ var receiverStreams = receiver.createEncodedStreams();
9410
+ var source = receiverStreams.readable;
9411
+ var sink = receiverStreams.writable;
9412
+ source.pipeThrough(transformer).pipeTo(sink);
9413
+ }
9373
9414
  }, {
9374
9415
  key: "setupMediaStreamTrackTransform",
9375
9416
  value: function setupMediaStreamTrackTransform(transform, stream) {
@@ -9453,7 +9494,7 @@ var VersionManager = /*#__PURE__*/function () {
9453
9494
  key: "sdkVersion",
9454
9495
  get: function get() {
9455
9496
  try {
9456
- return "2023-07-17T20:32:14.999Z (2023.2.12-beta.84)";
9497
+ return "2023-07-18T13:54:17.668Z (2023.2.12-beta.85)";
9457
9498
  } catch (e) {
9458
9499
  return this._defaultVersion;
9459
9500
  }
@@ -10382,4 +10423,4 @@ var VideoTelemetry = /*#__PURE__*/function () {
10382
10423
  /******/ })()
10383
10424
  ;
10384
10425
  });
10385
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvUGFyYW1ldGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGVMaXN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1N0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9BcHBlbmRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Db25zb2xlQXBwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ1RocmVzaG9sZC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbWluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9IbHNQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTmV0d29ya1N0YXRlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TaGFrYVBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1dlYlBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL0luc2VydGFibGVTdHJlYW1zLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9EdXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9FeHBvbmVudGlhbEJhY2tvZmYudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL0RpbWVuc2lvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vU2Vzc2lvblRlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vVmlkZW9UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3N0YXJ0dXAiXSwibmFtZXMiOlsiZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQiLCJBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsIkRpc3Bvc2FibGVMaXN0IiwiRGF0ZSIsIm5vdyIsIl9pc0ZvcmVncm91bmQiLCJTdWJqZWN0IiwiX3JlYWRPbmx5SXNGb3JlZ3JvdW5kIiwiUmVhZE9ubHlTdWJqZWN0IiwiZGV0ZWN0VGFiRm9jdXNDaGFuZ2UiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJnZXQiLCJ2YWx1ZSIsImdldFRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlIiwiZGlzcG9zZSIsIl9kaXNwb3NhYmxlcyIsIl90aGlzIiwiaGlkZGVuIiwidmlzaWJpbGl0eUNoYW5nZSIsImRvY3VtZW50IiwiX3R5cGVvZiIsIm1zSGlkZGVuIiwid2Via2l0SGlkZGVuIiwiaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSIsImlzRm9yZWdyb3VuZCIsInNldEZvY3VzU3RhdGUiLCJhZGRFdmVudExpc3RlbmVyIiwiYWRkIiwiRGlzcG9zYWJsZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzIiwiY2FsbCIsIl90aGlzMiIsIl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwiLCJ3aW5kb3ciLCJzZXRJbnRlcnZhbCIsImhhc0ZvY3VzIiwiY2xlYXJJbnRlcnZhbCIsIkJyb3dzZXJEZXRlY3RvciIsIl9icm93c2VyTmFtZUFuZFZlcnNpb24iLCJfYnJvd3Nlck5hbWUiLCJfYnJvd3Nlck1ham9yVmVyc2lvbiIsIl9pc0Nocm9tZTY5IiwiX2lzQ2hyb21lNzAiLCJfaXNDaHJvbWU3MSIsIl9pc0Nocm9tZTcyIiwiX2lzQ2hyb21lNzQiLCJfaXNDaHJvbWU3NSIsIl9pc0Nocm9tZTc2IiwiX2lzQ2hyb21lNzciLCJpc01vYmlsZSIsIl9uYXZpZ2F0b3IiLCJ0ZXN0IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24iLCJicm93c2VyTmFtZUFuZFZlcnNpb24iLCJtYXRjaCIsIl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUiLCJwYXJzZUJyb3dzZXJOYW1lIiwiYnJvd3Nlck5hbWVMaXN0Iiwic3BsaXQiLCJwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24iLCJicm93c2VyVmVyc2lvbkxpc3QiLCJmdWxsVmVyc2lvbiIsIk51bWJlciIsIm1zaWUiLCJpbmRleE9mIiwiY29uY2F0IiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJ0cmlkZW50IiwidmVyc2lvbiIsImluY2x1ZGVzIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsImdldFN0cmluZ1ZhbHVlIiwibmFtZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlIiwiZGVmYXVsdFN0cmluZ1ZhbHVlIiwiZ2V0Qm9vbGVhblZhbHVlIiwidmFsdWVGcm9tVXJpIiwiZGVmYXVsdEJvb2xlYW5WYWx1ZSIsIlRlbGVtZXRyeUxldmVsTWFwcGluZyIsIlRlbGVtZXRyeURlZmF1bHQiLCJMb2dnaW5nTGV2ZWxNYXBwaW5nIiwiTG9nZ2VyRGVmYXVsdHMiLCJtZXRhVmFsdWUiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0QXR0cmlidXRlIiwidmFsdWVVUklQYXJhbWV0ZXJOYW1lIiwiVVJMU2VhcmNoUGFyYW1zIiwibG9jYXRpb24iLCJzZWFyY2giLCJ1bmRlZmluZWQiLCJHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciIsIkVycm9yIiwiZm9yY2VHYXJiYWdlQ29sbGVjdGlvbiIsIkZlYXR1cmVFbmFibGVtZW50IiwiZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbiIsInF1ZXVlTWljcm90YXNrIiwib3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uIiwic2V0VGltZW91dCIsImltZyIsImNyZWF0ZUVsZW1lbnQiLCJzcmMiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJCbG9iIiwiQXJyYXlCdWZmZXIiLCJvbmVycm9yIiwicmV2b2tlT2JqZWN0VVJMIiwiTmV0d29ya01vbml0b3IiLCJpc1N1cHBvcnRlZCIsInNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycyIsInVwZGF0ZVN0YXRpc3RpY3MiLCJfaXNTdXBwb3J0ZWQiLCJfcnR0IiwiX2VmZmVjdGl2ZVR5cGUiLCJfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImRvd25saW5rIiwiZG93bmxpbmtNYXgiLCJnZXRFZmZlY3RpdmVUeXBlIiwiZWZmZWN0aXZlVHlwZSIsInR5cGUiLCJnZXRSb3VuZFRyaXBUaW1lIiwicnR0IiwibGlzdGVuZXIiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiTG9nZ2VyRmFjdG9yeSIsIlNESyIsIl9zdGFydFRpbWUiLCJfcGFnZUxvYWRUaW1lIiwic3VjY2VzcyIsInN0cmVhbUlkIiwicmVjb3JkU3RyZWFtTWV0cmljIiwiTWV0cmljc1R5cGUiLCJmYWlsIiwibWV0cmljVHlwZSIsIl9tZXRyaWNTdWJtaXR0ZWQiLCJzZXR1cFRpbWUiLCJtZXRyaWNOYW1lIiwiTWV0cmljVHlwZSIsImdldE5hbWUiLCJtZXRyaWNzU2VydmljZSIsInB1c2giLCJydW50aW1lIiwidWludDY0IiwiX2xvZ2dlciIsImluZm8iLCJEdXJhdGlvbnMiLCJ0b0lzb1N0cmluZyIsImVkZ2VBdXRoVG9rZW5QcmVmaXgiLCJFZGdlQXV0aFBhcnNlciIsInBhcnNlVG9rZW4iLCJ0b2tlbiIsImlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkIiwiZXJyb3IiLCJFZGdlVG9rZW4iLCJkZWNvZGVkVG9rZW4iLCJhdG9iIiwic3Vic3RyIiwibGVuZ3RoIiwiZWRnZVRva2VuIiwiSlNPTiIsInBhcnNlIiwiZSIsInN0YXJ0c1dpdGgiLCJfZWRnZVRva2VuJHRva2VuIiwiX2VkZ2VUb2tlbiR0b2tlbjIiLCJfYXBwbGljYXRpb25JZCIsImFwcGxpY2F0aW9uSWQiLCJfdG9rZW4iLCJ1cmkiLCJjYXBhYmlsaXRpZXMiLCJCdWlsZEZlYXR1cmVzIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfc2VuZExvZ3MiLCJfc2VuZE1ldHJpY3MiLCJfbG9nVG9Db25zb2xlIiwiYXBwbHlGZWF0dXJlcyIsImZlYXR1cmVzIiwiX19GRUFUVVJFU19fIiwic2VuZExvY2FsQ2FuZGlkYXRlcyIsInNlbmRMb2dzIiwic2VuZE1ldHJpY3MiLCJsb2dUb0NvbnNvbGUiLCJfZG9jdW1lbnQiLCJNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yIiwiTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciIsIl9SVENSdHBSZWNlaXZlciIsIl9SVENSdHBSZWNlaXZlciRwcm90byIsIlJUQ1J0cFJlY2VpdmVyIiwicHJvdG90eXBlIiwiY3JlYXRlRW5jb2RlZFN0cmVhbXMiLCJQYXJhbWV0ZXJzIiwiX2Rpc2NvdmVyeVBhcmFtZXRlcnMiLCJhcHBseVBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzIiwiX19QQVJBTUVURVJTX18iLCJkaXNjb3ZlcnkiLCJpbnRlbnRpb25zIiwiZGlzcG9zYWJsZSIsIl9kaXNwb3NlZCIsIl9kaXNwb3NhYmxlIiwiX2xpc3QiLCJmb3JFYWNoIiwidG9TdHJpbmciLCJTdHJpbmdzIiwicmFuZG9tIiwicmFuZG9tMTNDaGFyYWN0ZXJzIiwiTWF0aCIsImxvb3BzIiwiY2VpbCIsIkFycmF5IiwiZmlsbCIsInJlZHVjZSIsInN0cmluZyIsImZ1bmMiLCJhc3NlcnRVbnJlYWNoYWJsZSIsIngiLCJBcHBlbmRlcnMiLCJfYXBwZW5kZXJzIiwiYXBwZW5kZXIiLCJyZW1vdmUiLCJpdGVtcyIsIml0ZW0iLCJDb25zb2xlQXBwZW5kZXIiLCJ0aHJlc2hvbGQiLCJfdGhyZXNob2xkIiwibG9nIiwibG9nTGV2ZWwiLCJtZXNzYWdlIiwiY2F0ZWdvcnkiLCJkYXRlIiwiZnVsbE1lc3NhZ2UiLCJ0b0lTT1N0cmluZyIsIkxvZ2dpbmdMZXZlbCIsImNvbnNvbGUiLCJMb2dnZXIiLCJhcHBlbmRlcnMiLCJfY2F0ZWdvcnkiLCJ0cmFjZSIsIlRyYWNlIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJfa2V5IiwiZGVidWciLCJEZWJ1ZyIsIl9sZW4yIiwiX2tleTIiLCJJbmZvIiwiX2xlbjMiLCJfa2V5MyIsIndhcm4iLCJXYXJuIiwiX2xlbjQiLCJfa2V5NCIsIl9sZW41IiwiX2tleTUiLCJmYXRhbCIsIkZhdGFsIiwiX2xlbjYiLCJfa2V5NiIsImxldmVsIiwicmVwbGFjZVBsYWNlaG9sZGVycyIsInJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmciLCJpbmRleCIsInJlcGxhY2VBcmd1bWVudCIsInNwbGljZSIsInN0cmluZ2lmeSIsImFjY3VtdWxhdG9yIiwiY3VycmVudFZhbHVlIiwiYXJyYXkiLCJzdGFjayIsImFyZyIsImNhY2hlIiwiT2JqZWN0IiwiYXJndW1lbnQiLCJkYXRhIiwidG9TdHJpbmdTdHIiLCJfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImdldExvZ2dlciIsImxvZ2dlciIsIl9sb2dnZXJzIiwiYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5TG9nZ2luZ0xldmVsIiwiYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCIsImFwcGx5Q29uc29sZUxvZ2dlciIsImJpbmQiLCJhcHBseVRlbGVtZXRyeUxvZ2dlciIsInBhcmFtZXRlclZhbHVlIiwiX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJzZXRUaHJlc2hvbGQiLCJhcHBseUFwcGVuZGVyIiwiVGVsZW1ldHJ5QXBwZW5kZXIiLCJMb2dnaW5nVGhyZXNob2xkIiwiVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUiLCJsb2dnaW5nTGV2ZWwiLCJjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsIiwibG9nZ2luZ0xldmVsVHlwZSIsIm1ldHJpY3MiLCJfbWV0cmljcyIsImdldFRlbGVtZXRyeUxldmVsIiwiVGVsZW1ldHJ5TGV2ZWwiLCJNZXRyaWNzQ29uZmlndXJhdGlvbiIsIl91cmwiLCJzZXQiLCJ1cmwiLCJtZXRyaWNzVXJsIiwicGF0aG5hbWUiLCJfZW52aXJvbm1lbnQiLCJlbnZpcm9ubWVudCIsIl90ZW5hbmN5IiwidGVuYW5jeSIsIl9zZXNzaW9uSWQiLCJzZXNzaW9uSWQiLCJNZXRyaWNzRmFjdG9yeSIsImdldE1ldHJpY3NTZXJ2aWNlIiwibWV0cmljc1NlcnZpY2VzIiwiX21ldHJpY3NTZXJ2aWNlcyIsIm1ldHJpY3NDb25maWd1cmF0aW9uIiwiVGVsZW1ldHJ5VXJsIiwiRW52aXJvbm1lbnQiLCJNZXRyaWNzU2VydmljZSIsInNldFRlbGVtZXRyeUxldmVsIiwidGVsZW1ldHJ5TGV2ZWwiLCJ2YWx1ZXMiLCJyZXF1ZXN0U2l6ZUxpbWl0IiwiaG9zdG5hbWUiLCJfbWV0cmljc0NvbmZpZ3VyYXRpb24iLCJtZXRyaWMiLCJwcmV2aW91c1ZhbHVlIiwicmVzb3VyY2UiLCJraW5kIiwibWV0cmljUmVjb3JkIiwidGltZXN0YW1wIiwiZnVsbFF1YWxpZmllZE5hbWUiLCJfZG9tYWluIiwiVmVyc2lvbk1hbmFnZXIiLCJpZ25vcmVkIiwic2VuZE1ldHJpY3NJZkFibGUiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJfY2FsbGVlIiwibWV0cmljc01lc3NhZ2VzIiwiZm9ybURhdGEiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJGb3JtRGF0YSIsImFwcGVuZCIsInJlY29yZHMiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJhYnJ1cHQiLCJzZW50Iiwic3RvcCIsIl94IiwiYXBwbHkiLCJfc2VuZE1ldHJpY3NJZkFibGUiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIl9pc1NlbmRpbmciLCJzbGljZSIsInRoZW4iLCJyZXNwb25zZSIsImNhdGNoIiwiY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsVHlwZSIsIlByb21pc2UiLCJjYWxsYmFjayIsIlR5cGVFcnJvciIsIl9zdGF0ZSIsIl9oYW5kbGVkIiwiX3ZhbHVlIiwiX2RlZmVycmVkcyIsImRvUmVzb2x2ZSIsImRvbmUiLCJwcm9taXNlUmVzb2x2ZSIsInJlYXNvbiIsInByb21pc2VSZWplY3QiLCJuZXdWYWx1ZSIsInByb21pc2UiLCJmaW5hbGUiLCJfaW1tZWRpYXRlIiwiX3VuaGFuZGxlZFJlamVjdGlvbiIsImkiLCJsZW4iLCJoYW5kbGUiLCJkZWZlcnJlZCIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJlc3VsdCIsImFsbCIsImFyciIsInJlc29sdmUiLCJyZWplY3QiLCJpc0FycmF5IiwicmVtYWluaW5nIiwibWFuYWdlUmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsIl8iLCJyYWNlIiwiUHJvbWlzZUhhbmRsZXIiLCJQZWVyQ29ubmVjdGlvblNlcnZpY2UiLCJfcGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZyIsInByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FjaGVkIiwiZGlyZWN0aW9uIiwicGVlckNvbm5lY3Rpb24iLCJjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FsbGVlMyIsImVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyIsImNvbmZpZ3VyYXRpb24iLCJfYXJnczMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbiIsIl9yZWYiLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwidXBkYXRlU3RhdGlzdGljVGltZW91dCIsIlJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwibWVkaWFTdHJlYW0iLCJlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3BlZXJDb25uZWN0aW9uIiwiX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfdHJhY2tzVG9Nb25pdG9yIiwiZ2V0VHJhY2tzIiwibWFwIiwidHJhY2siLCJwYXJzZWRTRFAiLCJTZHBQYXJzZXIiLCJjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24iLCJzZHAiLCJfZXN0aW1hdGVkQXVkaW9Db2RlYyIsImF1ZGlvQ29kZWMiLCJfZXN0aW1hdGVkVmlkZW9Db2RlYyIsInZpZGVvQ29kZWMiLCJ1cGRhdGVTdGF0aXN0aWMiLCJfcnRjU3RhdGlzdGljIiwiX2lzTW9uaXRvclJ1bm5pbmciLCJfdXBkYXRlVGltZW91dCIsImNsZWFyVGltZW91dCIsIl91cGRhdGVTdGF0aXN0aWMiLCJfaWdub3JlZCIsImdldEtpbmRGb3JTYWZhcmkxMSIsInVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRpc3RpY3MiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIiwicmVwb3J0IiwiY3VycmVudFJvdW5kVHJpcFRpbWUiLCJtZWRpYVR5cGUiLCJjb2RlYyIsImNvZGVjSWQiLCJtaW1lVHlwZSIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjIiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYzIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NCIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjUiLCJieXRlcyIsImJ5dGVzUmVjZWl2ZWQiLCJwcmV2aW91c0J5dGVzUmVjZWl2ZWQiLCJieXRlc0RlbHRhIiwidGltZURlbHRhIiwiYml0cmF0ZSIsImZsb29yIiwic3NyYyIsInBhY2tldHNMb3N0IiwicGFja2V0c1JlY2VpdmVkIiwiZ2V0Q29kZWNCeVR5cGUiLCJ2aWRlbyIsImZyYW1lc0RlY29kZWQiLCJmcHMiLCJyb3VuZCIsIl91cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJnZXRTdGF0c0xlZ2FjeSIsIm5hbWVzIiwic3RhdCIsIl9zZHAiLCJzZHBTcGxpdEJ5TGluZXMiLCJzZHBTcGxpdEJ5VHJhY2tzIiwiX2F1ZGlvQ29kZWMiLCJhcHBseUNvZGVjIiwiX3ZpZGVvQ29kZWMiLCJfaXNBdWRpb1RyYWNrRW5hYmxlZCIsImlzVHJhY2tCeVR5cGVFbmFibGVkIiwiX2lzVmlkZW9UcmFja0VuYWJsZWQiLCJzZHBTZWN0aW9uRm9yVHlwZSIsImZpbmQiLCJzZHBUcmFjayIsInVzZWRDb2RlY0xpbmUiLCJzZHBMaW5lIiwidXNlZENvZGVjIiwiY29kZWNOYW1lIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uIiwid2Via2l0UlRDUGVlckNvbm5lY3Rpb24iLCJSVENQZWVyQ29ubmVjdGlvbiIsImN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIiwiY29ubmVjdGlvblN0YXRlIiwiaWNlQ29ubmVjdGlvblN0YXRlIiwiZ2V0Q29uZmlndXJhdGlvbiIsInNldENvbmZpZ3VyYXRpb24iLCJfY3JlYXRlT2ZmZXIiLCJfY3JlYXRlQW5zd2VyIiwiY3JlYXRlQW5zd2VyIiwiX3gyIiwiX3NldExvY2FsRGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInNldExvY2FsRGVzY3JpcHRpb24iLCJSVENTZXNzaW9uRGVzY3JpcHRpb24iLCJfeDMiLCJfc2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfY2FsbGVlNCIsIl9kZXNjcmlwdGlvbiRzZHAiLCJoYXNDcnlwdG8iLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJzZXRSZW1vdGVEZXNjcmlwdGlvbiIsIl94NCIsImdldFNlbmRlcnMiLCJzZWxlY3RvciIsIl90aGlzMyIsImFkZFN0cmVhbSIsIl90aGlzNCIsImFkZFRyYWNrIiwib250cmFjayIsImhhbmRsZXIiLCJvbmljZWNhbmRpZGF0ZSIsIm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwib25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJjbG9zZSIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbiIsInN1YmplY3QiLCJfc3ViamVjdCIsInN1YnNjcmliZSIsIkRpc3Bvc2FibGVMaXN0ZW5lciIsIl9EaXNwb3NhYmxlIiwiX2luaGVyaXRzIiwiX3N1cGVyIiwiX2NyZWF0ZVN1cGVyIiwibGlzdGVuZXJzIiwiaWR4IiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiZ2V0RW52aXJvbm1lbnRGcm9tVXJsIiwiYmFzZVVSTCIsIm9yaWdpbiIsIl9jbGllbnRTZXNzaW9uSWQiLCJfbG9hZGVkVGltZXN0YW1wIiwiX3JlYWRPbmx5SW5pdGlhbGl6ZWQiLCJfcmVhZE9ubHlEaXNjb3ZlcnlVcmkiLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlIiwiX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwiX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQiLCJfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiX3dlYlBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsIl9obHNKc0xvYWRlciIsIl9tZXRyaWNzU2VydmljZSIsIl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl90ZWxlbWV0cnlVcmwiLCJfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsInJldHJpZXNBbW91bnQiLCJfdGVsZW1ldHJ5TGV2ZWwiLCJhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJ0ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY2xpZW50U2Vzc2lvbklkIiwiaWdub3JlZEVudmlyb25tZW50IiwiaWdub3JlZERpc2NvdmVyeVVyaSIsInRlbGVtZXRyeVVybCIsInRlbGVtZXRyeUFwcGVuZGVyIiwiaWdub3JlZFRlbmFuY3kiLCJhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uIiwiRGlzY292ZXJ5VXJpIiwiaWdub3JlZFRlbGVtZXRyeUxldmVsIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImRpc2NvdmVyeVVyaSIsImdldFRlbGVtZXRyeVVybCIsImNoYW5uZWxUb2tlbiIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiaW5pdCIsIl9pbml0aWFsaXplZCIsInBlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNvbnNvbGVMb2dnaW5nTGV2ZWwiLCJjb25zb2xlQXBwZW5kZXIiLCJhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJ3ZWJQbGF5ZXJMb2FkZXIiLCJzaGFrYVBsYXllckxvYWRlciIsImhsc0pzTG9hZGVyIiwic2VnbWVudHMiLCJwcm90b2NvbCIsInVuc2hpZnQiLCJlbmRzV2l0aCIsImpvaW4iLCJCaXRyYXRlU3RhdGUiLCJCaXRyYXRlTW9kZSIsImRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiIsImZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwic3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiQ2hhbm5lbCIsInZpZGVvRWxlbWVudCIsImNoYW5uZWxDb250ZXh0T3B0aW9ucyIsInRhcmdldExhZyIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiZW5jb2RlZFZpZGVvU3RyZWFtU2luayIsImVuY29kZWRBdWRpb1N0cmVhbVNpbmsiLCJfdG9rZW5Db250ZXh0IiwiVG9rZW5Db250ZXh0IiwiX2NoYW5uZWxDb250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJfcGVlckNvbm5lY3Rpb25Db250ZXh0IiwiUGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQiLCJTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiX3N0YXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJFeHBvbmVudGlhbEJhY2tvZmYiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0IiwiVmlkZW9UZWxlbWV0cnkiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiQ2hhbm5lbFN0YXRlIiwicmVzdGFydEFmdGVyU3RvcCIsImNsZWFyRmFpbHVyZUNvdW50VGltZW91dCIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJkZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic3RhcnQiLCJwYXVzZSIsInNyY09iamVjdCIsIndpZHRoIiwidmlkZW9XaWR0aCIsImhlaWdodCIsInZpZGVvSGVpZ2h0IiwiRGltZW5zaW9uIiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJzdGF0dXMiLCJ1cGRhdGVUYXJnZXRMYWciLCJfc3RvcCIsImlzU3RhcnRpbmciLCJwcm9jZXNzU3RvcCIsImNsZWFuVXBSZXNvdXJjZXMiLCJfcmVzdW1lIiwicGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJyZXN1bWUiLCJtdXRlIiwibXV0ZWQiLCJ1bm11dGUiLCJfZGlzcG9zZSIsImlzRGlzcG9zZWQiLCJnZXRVcmkiLCJfc3RhcnQiLCJwcm9jZXNzU3RhcnQiLCJfcHJvY2Vzc1N0YXJ0IiwiX2NhbGxlZTUiLCJfdGhpczUiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwiX0luc2VydGFibGVTdHJlYW1zJHZhIiwidmFsaWQiLCJ2YWxpZGF0aW9uUmVzdWx0IiwiX0luc2VydGFibGVTdHJlYW1zJHZhMiIsIl92YWxpZCIsIl92YWxpZGF0aW9uUmVzdWx0IiwiX0luc2VydGFibGVTdHJlYW1zJHZhMyIsIl92YWxpZDIiLCJfdmFsaWRhdGlvblJlc3VsdDIiLCJoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayIsImhhc0VuY29kZWRTdHJlYW1TaW5rIiwiaGFzU3RyZWFtVHJhbnNmb3Jtc09yU2luayIsImhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayIsInN0cmVhbVBsYXllciIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsIkluc2VydGFibGVTdHJlYW1zIiwiRGlzY292ZXJ5IiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsIlN0cmVhbUZhY3RvcnkiLCJmaW5hbGx5IiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJfcGxheSIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3IiwicGxheSIsImdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsIl9jYWxsZWU4IiwiX2NhbGxlZTgkIiwiX2NvbnRleHQ4IiwiX3RoaXM2IiwiZGVzdHJveVN0cmVhbSIsIl9yZWYyIiwicGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsIl9wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsIl9jYWxsZWU5IiwiX3RoaXM3IiwicGxheVByb21pc2UiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJDaGFubmVscyIsImNyZWF0ZUNoYW5uZWwiLCJjaGFubmVsT3B0aW9ucyIsImRlZmF1bHRUYXJnZXRMYWciLCJfb3B0aW9ucyR0YXJnZXRMYWciLCJhcHBseVN0YXR1cyIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZSIsImJpdHJhdGVNb2RlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUiLCJiaXRyYXRlU3RhdGUiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiX3ByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJkaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJfY2FjaGUiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJjbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCIsImRlZmF1bHRUaW1lb3V0IiwiX3VyaSIsIl9kaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsInRpbWVvdXQiLCJhc1N0cmluZyIsImVuZFBvaW50cyIsIm9rIiwidGV4dCIsIkVuZFBvaW50IiwiZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJmYWlsZWRSZXF1ZXN0cyIsInByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkIiwiX2FyZ3MyIiwicGluZyIsInRpbWUiLCJfZGlzY292ZXJ5VXJpIiwiYnVpbGREaXNjb3ZlcnlVcmwiLCJzZGtWZXJzaW9uIiwiYXBpVmVyc2lvbiIsIl90aW1lb3V0IiwiX3JvdW5kVHJpcFRpbWUiLCJfcGluZyIsImZpbmlzaGVkIiwiYnVpbGRQaW5nVXJsIiwiX3N1YnNjcmliZSIsImxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uIiwiY2xpZW50VmVyc2lvbiIsImJvZHlXaXRoT2ZmZXIiLCJib2R5V2l0aG91dE9mZmVyIiwiaHR0cFJlc3BvbnNlIiwic3Vic2NyaWJlUmVzcG9uc2UiLCJidWlsZFVybCIsImJlYXJlclRva2VuIiwiaHR0cFJvdW5kVHJpcFRpbWUiLCJzZXNzaW9uRGVzY3JpcHRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb24iLCJtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsIl9wdWJsaXNoIiwibWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsInB1Ymxpc2giLCJfeDUiLCJfeDYiLCJfeDciLCJzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwic2hhcmVkU2VjcmV0IiwibWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwiX3g4IiwiX3g5IiwiX2xpbWl0Qml0cmF0ZSIsIm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJfYWRkSWNlQ2FuZGlkYXRlcyIsImNhbmRpZGF0ZXMiLCJkaXNjb3ZlcnlDb21wbGV0ZWQiLCJhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfYXJnczYiLCJtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiYWRkSWNlQ2FuZGlkYXRlcyIsIl94MTUiLCJfeDE2IiwiX3gxNyIsIl9kZXN0cm95U3RyZWFtIiwiZGVzdHJveVN0cmVhbVJlc3BvbnNlIiwibWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl94MTgiLCJfeDE5IiwiX2Rlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJzZW5kQmVhY29uIiwiX3gyMCIsIl94MjEiLCJwYXRoIiwicGF0aEFzQXJyYXkiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJqc29uIiwicnRjQ29uZmlndXJhdGlvbiIsImNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJfeDIyIiwiX3gyMyIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJfY2FsbGVlMTAiLCJwdWJsaXNoUmVzcG9uc2UiLCJfY2FsbGVlMTAkIiwiX2NvbnRleHQxMCIsIl94MjQiLCJfeDI1IiwiYnVuZGxlUG9saWN5IiwiaWNlQ2FuZGlkYXRlUG9vbFNpemUiLCJpY2VUcmFuc3BvcnRQb2xpY3kiLCJydGNwTXV4UG9saWN5IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfY2FsbGVlMTEiLCJfY2FsbGVlMTEkIiwiX2NvbnRleHQxMSIsIl94MjYiLCJfY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2NhbGxlZTEyIiwiX2NhbGxlZTEyJCIsIl9jb250ZXh0MTIiLCJfeDI3IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl9jYWxsZWUxMyIsIl9jYWxsZWUxMyQiLCJfY29udGV4dDEzIiwiX3gyOCIsIkNodW5rZWRTdHJlYW0iLCJjaGFubmVsQ29udGV4dCIsIm9mZmVyU2RwIiwib3JpZ2luU3RhcnRUaW1lIiwiQ2h1bmtlZFN0cmVhbWluZyIsInBsYXllciIsIm1vbml0b3IiLCJfbW9uaXRvckRpc3Bvc2FibGVzIiwibmV3U3RyZWFtU3RhdGlzdGljcyIsIl9zdHJlYW1TdGF0aXN0aWNzIiwiY3VycmVudFRpbWUiLCJkYXRhQnVmZmVyZWQiLCJfbW9uaXRvckZhaWx1cmVDb3VudCIsInBhdXNlZCIsIl9obHNQbGF5ZXIiLCJfcGhlbml4V2ViUGxheWVyIiwiX3NoYWthIiwiX29wdGlvbnMiLCJsb2FkZWQiLCJfcGVuZGluZyIsIl9wbGF5ZXIiLCJQbGF5ZXIiLCJkYXNoTWFuaWZlc3RVcmxNYXRjaCIsImhsc01hbmlmZXN0VXJsTWF0Y2giLCJtYW5pZmVzdFVybCIsInBsYXlsaXN0VXJsIiwiSGxzUGxheWVyIiwiX29iamVjdFNwcmVhZCIsInByZWZlck5hdGl2ZSIsInNob3VsZFVzZU5hdGl2ZUhscyIsIldlYlBsYXllciIsIlNoYWthUGxheWVyIiwibWFuaWZlc3RVUkkiLCJfdmlkZW9FbGVtZW50IiwiX2tpbmQiLCJfc3RyZWFtSWQiLCJfbWFuaWZlc3RVUkkiLCJlbmNvZGVVUkkiLCJyZXBsYWNlIiwiZW5hYmxlV29ya2VyIiwibWF4QnVmZmVyTGVuZ3RoIiwibGl2ZUJhY2tCdWZmZXJMZW5ndGgiLCJsaXZlU3luY0R1cmF0aW9uIiwibGl2ZUR1cmF0aW9uSW5maW5pdHkiLCJsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uIiwiSW5maW5pdHkiLCJoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2QiLCJsb2FkU291cmNlIiwiYXR0YWNoTWVkaWEiLCJjYW5QbGF5VHlwZSIsIm5ldHdvcmtTdGF0ZSIsIk5ldHdvcmtTdGF0ZXMiLCJOZXR3b3JrTm9Tb3VyY2UiLCJzdGF0aXN0aWNzIiwibWVkaWEiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImJ1ZmZlcmVkIiwiZW5kIiwic3RyZWFtQ29udHJvbGxlciIsInRydWVDdXJyZW50VGltZSIsIm1heCIsImRlc3Ryb3kiLCJpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCIsImRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQiLCJSZWFsVGltZVN0cmVhbSIsInBlZXJDb25uZWN0aW9uQ29udGV4dCIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHQiLCJfcmVmMyIsIl9zbGljZWRUb0FycmF5IiwiX3JlZjMkIiwic3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIiwic3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIiwiX3JlZjQiLCJhcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJzdWJtaXRDYW5kaWRhdGVzVGltZW91dCIsImNhbmNlbERpc2NvdmVyeSIsImNhbmRpZGF0ZSIsIl9yZWY1IiwicmV0cnlDYWxsYmFjayIsIm9uTGluZSIsInJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwibWVkaWFTdHJlYW1Qcm9taXNlIiwic3RyZWFtcyIsInJlY2VpdmVyIiwidHJhY2tMaXN0ZW5lciIsImFuc3dlciIsIl9yZWY2IiwibWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJydGNDb25uZWN0aW9uTW9uaXRvciIsInJ0Y1N0YXRpc3RpYyIsInJ0Y1ZpZGVvU3RhdGlzdGljIiwicnRjQXVkaW9TdGF0aXN0aWMiLCJhdWRpbyIsImF1ZGlvVHJhY2tGYWlsZWQiLCJ2aWRlb1RyYWNrRmFpbGVkIiwiX2FwcGx5UnRjQ29uZmlndXJhdGlvbiIsIm9wdGlvbmFsUGVlckNvbm5lY3Rpb24iLCJuZXdSdGNDb25maWd1cmF0aW9uIiwiX3BlZXJDb25uZWN0aW9uJGN1cnJlIiwiaXNDbGllbnRPZmZlckZsb3ciLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJwbGF5ZXJPcHRpb25zIiwiYWJyIiwiZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlIiwibWFuaWZlc3QiLCJyZXRyeVBhcmFtZXRlcnMiLCJzdHJlYW1pbmciLCJyZWJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJpbmdHb2FsIiwiYnVmZmVyQmVoaW5kIiwibWF4QXR0ZW1wdHMiLCJiYWNrb2ZmRmFjdG9yIiwibG9hZFBsYXllciIsImVzdGltYXRlZEJhbmR3aWR0aCIsInBsYXlUaW1lIiwidW5sb2FkIiwicGxheWVyQ29uZmlnIiwiY29uZmlndXJlIiwibG9hZCIsImNvZGUiLCJjcmVhdGUiLCJ0b2tlbkNhcGFiaWxpdGllcyIsImJhbmR3aWR0aFRvU3RhcnRBdCIsIm1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIiwiZXJyb3JPYmplY3QiLCJjYW5SZWxvYWQiLCJzZXZlcml0eSIsInJlbG9hZElmQWJsZSIsImlzTmF0aXZlIiwiZGVsaXZlcnlUeXBlIiwiaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQiLCJfbGFzdFJlbG9hZFRpbWUiLCJyZWxvYWQiLCJzZXR1cEVuY29kZWRTdHJlYW1TaW5rIiwic3RyZWFtU2luayIsInRyYW5zZm9ybWVyIiwiVHJhbnNmb3JtU3RyZWFtIiwidHJhbnNmb3JtIiwiZnJhbWUiLCJyZWNlaXZlclN0cmVhbXMiLCJzb3VyY2UiLCJyZWFkYWJsZSIsInNpbmsiLCJ3cml0YWJsZSIsInBpcGVUaHJvdWdoIiwicGlwZVRvIiwidmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luayIsIm1vZGUiLCJzZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJ2aWRlb1RyYWNrIiwiZ2V0VmlkZW9UcmFja3MiLCJwcm9jZXNzb3IiLCJnZW5lcmF0b3IiLCJ0cmFuc2Zvcm1lZFN0cmVhbSIsIk1lZGlhU3RyZWFtIiwiZ2V0QXVkaW9UcmFja3MiLCJhdWRpb1RyYWNrIiwidmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtIiwiX19CVUlMRF9WRVJTSU9OX18iLCJfZGVmYXVsdFZlcnNpb24iLCJfdGVsZW1ldHJ5U2VydmljZSIsIlRlbGVtZXRyeVNlcnZpY2UiLCJsb2dSZWNvcmQiLCJfbG9ncyIsInNlbmRMb2dzSWZBYmxlIiwibG9nTWVzc2FnZXMiLCJfc2VuZExvZ3NJZkFibGUiLCJudW1iZXJPZkxvZ3NUb1NlbmQiLCJzaXplT2ZMb2dzVG9TZW5kIiwiZ2V0TG9nU2l6ZSIsInN1bSIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm9mZnNldCIsIm1pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJwYXJ0cyIsIlN0cmluZyIsInBhZFN0YXJ0IiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0IiwiZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5TZWNvbmRzIiwicmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZiIsInBvdyIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kIiwibWluIiwib3RoZXIiLCJfbmV0d29ya01vbml0b3IiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJldmVudCIsIm9uQ29udGludWF0aW9uIiwiX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciIsInB1c2hUaW1lVG9GaXJzdEZyYW1lIiwicHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdGltZVRvRmlyc3RGcmFtZSIsImR1cmF0aW9uU2luY2VQYWdlTG9hZCIsIl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3ZpZGVvU3RhbGxlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7OztBQ1ZBO0FBQ0E7QUFDQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBO0FBQ0Esb0NBQW9DLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0wvRjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSDdGLHVCQUF1QixtQkFBTyxDQUFDLHdGQUF1QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSmhHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7O0FDTnBHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsSUFBSSxPQUFPO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG9DQUFvQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUM5Qi9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDTDdG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UUFBUSxFQUFFLElBQUksQ0FBQ3MxQjtNQUNqQixDQUFDLENBQUM7TUFFRixJQUFJLENBQUMrTSxnQkFBZ0IsR0FBR0QsYUFBYTtJQUN2QztFQUFDO0VBQUEsT0FBQWhlLGNBQUE7QUFBQTs7Ozs7OztVQzFNSDtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0NyQkE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGdDQUFnQyxZQUFZO1dBQzVDO1dBQ0EsRTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHdDQUF3Qyx5Q0FBeUM7V0FDakY7V0FDQTtXQUNBLEU7Ozs7O1dDUEEsc0Y7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0Esc0RBQXNELGtCQUFrQjtXQUN4RTtXQUNBLCtDQUErQyxjQUFjO1dBQzdELEU7Ozs7VUNOQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJjaGFubmVscy5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCJmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuICByZXR1cm4gYXJyMjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5TGlrZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aG91dEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3IsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2ssIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCB0b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZShcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2YuanNcIik7XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ViQ2xhc3MsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9pID0gbnVsbCA9PSBhcnIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IF9pKSB7XG4gICAgdmFyIF9zLFxuICAgICAgX2UsXG4gICAgICBfeCxcbiAgICAgIF9yLFxuICAgICAgX2FyciA9IFtdLFxuICAgICAgX24gPSAhMCxcbiAgICAgIF9kID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChfeCA9IChfaSA9IF9pLmNhbGwoYXJyKSkubmV4dCwgMCA9PT0gaSkge1xuICAgICAgICBpZiAoT2JqZWN0KF9pKSAhPT0gX2kpIHJldHVybjtcbiAgICAgICAgX24gPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShfbiA9IChfcyA9IF94LmNhbGwoX2kpKS5kb25lKSAmJiAoX2Fyci5wdXNoKF9zLnZhbHVlKSwgX2Fyci5sZW5ndGggIT09IGkpOyBfbiA9ICEwKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9kID0gITAsIF9lID0gZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIV9uICYmIG51bGwgIT0gX2lbXCJyZXR1cm5cIl0gJiYgKF9yID0gX2lbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KF9yKSAhPT0gX3IpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX2FycjtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiKTtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICBcInVzZSBzdHJpY3RcIjsgLyohIHJlZ2VuZXJhdG9yLXJ1bnRpbWUgLS0gQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuIC0tIGxpY2Vuc2UgKE1JVCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vTElDRU5TRSAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUgPSBmdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICAgIHJldHVybiBleHBvcnRzO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHZhciBleHBvcnRzID0ge30sXG4gICAgT3AgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIGhhc093biA9IE9wLmhhc093blByb3BlcnR5LFxuICAgIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uIChvYmosIGtleSwgZGVzYykge1xuICAgICAgb2JqW2tleV0gPSBkZXNjLnZhbHVlO1xuICAgIH0sXG4gICAgJFN5bWJvbCA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sID8gU3ltYm9sIDoge30sXG4gICAgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiLFxuICAgIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIixcbiAgICB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG4gIGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgb2JqW2tleV07XG4gIH1cbiAgdHJ5IHtcbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcixcbiAgICAgIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKSxcbiAgICAgIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG4gICAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGdlbmVyYXRvciwgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpXG4gICAgfSksIGdlbmVyYXRvcjtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICAgICAgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiBlcnJcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgZGVmaW5lKEl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLFxuICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJiBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiYgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSAmJiAoSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSk7XG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9IEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgIGRlZmluZShwcm90b3R5cGUsIG1ldGhvZCwgZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yLCBQcm9taXNlSW1wbCkge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChcInRocm93XCIgIT09IHJlY29yZC50eXBlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnLFxuICAgICAgICAgIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICByZXR1cm4gdmFsdWUgJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKHZhbHVlKSAmJiBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpID8gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pIDogUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbiAodW53cmFwcGVkKSB7XG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkLCByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCBlcnJvciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgfVxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG4gICAgZGVmaW5lUHJvcGVydHkodGhpcywgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShtZXRob2QsIGFyZykge1xuICAgICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2VJbXBsKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID0gcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICAgIHJldHVybiBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChcImV4ZWN1dGluZ1wiID09PSBzdGF0ZSkgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIGlmIChcImNvbXBsZXRlZFwiID09PSBzdGF0ZSkge1xuICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBtZXRob2QpIHRocm93IGFyZztcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29udGV4dC5tZXRob2QgPSBtZXRob2QsIGNvbnRleHQuYXJnID0gYXJnOzspIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJuZXh0XCIgPT09IGNvbnRleHQubWV0aG9kKSBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7ZWxzZSBpZiAoXCJ0aHJvd1wiID09PSBjb250ZXh0Lm1ldGhvZCkge1xuICAgICAgICAgIGlmIChcInN1c3BlbmRlZFN0YXJ0XCIgPT09IHN0YXRlKSB0aHJvdyBzdGF0ZSA9IFwiY29tcGxldGVkXCIsIGNvbnRleHQuYXJnO1xuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuICAgICAgICB9IGVsc2UgXCJyZXR1cm5cIiA9PT0gY29udGV4dC5tZXRob2QgJiYgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICBzdGF0ZSA9IFwiZXhlY3V0aW5nXCI7XG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKFwibm9ybWFsXCIgPT09IHJlY29yZC50eXBlKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID0gY29udGV4dC5kb25lID8gXCJjb21wbGV0ZWRcIiA6IFwic3VzcGVuZGVkWWllbGRcIiwgcmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcInRocm93XCIgPT09IHJlY29yZC50eXBlICYmIChzdGF0ZSA9IFwiY29tcGxldGVkXCIsIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2ROYW1lID0gY29udGV4dC5tZXRob2QsXG4gICAgICBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvclttZXRob2ROYW1lXTtcbiAgICBpZiAodW5kZWZpbmVkID09PSBtZXRob2QpIHJldHVybiBjb250ZXh0LmRlbGVnYXRlID0gbnVsbCwgXCJ0aHJvd1wiID09PSBtZXRob2ROYW1lICYmIGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdICYmIChjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCIsIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkLCBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSwgXCJ0aHJvd1wiID09PSBjb250ZXh0Lm1ldGhvZCkgfHwgXCJyZXR1cm5cIiAhPT0gbWV0aG9kTmFtZSAmJiAoY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ1wiICsgbWV0aG9kTmFtZSArIFwiJyBtZXRob2RcIikpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG4gICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHJldHVybiBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnLCBjb250ZXh0LmRlbGVnYXRlID0gbnVsbCwgQ29udGludWVTZW50aW5lbDtcbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG4gICAgcmV0dXJuIGluZm8gPyBpbmZvLmRvbmUgPyAoY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWUsIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2MsIFwicmV0dXJuXCIgIT09IGNvbnRleHQubWV0aG9kICYmIChjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiLCBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCksIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsKSA6IGluZm8gOiAoY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLCBjb250ZXh0LmRlbGVnYXRlID0gbnVsbCwgQ29udGludWVTZW50aW5lbCk7XG4gIH1cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7XG4gICAgICB0cnlMb2M6IGxvY3NbMF1cbiAgICB9O1xuICAgIDEgaW4gbG9jcyAmJiAoZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdKSwgMiBpbiBsb2NzICYmIChlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXSwgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdKSwgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCIsIGRlbGV0ZSByZWNvcmQuYXJnLCBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgdHJ5TG9jOiBcInJvb3RcIlxuICAgIH1dLCB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyksIHRoaXMucmVzZXQoITApO1xuICB9XG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBpdGVyYWJsZS5uZXh0KSByZXR1cm4gaXRlcmFibGU7XG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSxcbiAgICAgICAgICBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIGZvciAoOyArK2kgPCBpdGVyYWJsZS5sZW5ndGg7KSBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSByZXR1cm4gbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdW5kZWZpbmVkLCBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGRvbmVSZXN1bHRcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBkb25lOiAhMFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBkZWZpbmVQcm9wZXJ0eShHcCwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIGRlZmluZVByb3BlcnR5KEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpLCBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGdlbkZ1biAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuICEhY3RvciAmJiAoY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHwgXCJHZW5lcmF0b3JGdW5jdGlvblwiID09PSAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpKTtcbiAgfSwgZXhwb3J0cy5tYXJrID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAoZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBkZWZpbmUoZ2VuRnVuLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKSwgZ2VuRnVuO1xuICB9LCBleHBvcnRzLmF3cmFwID0gZnVuY3Rpb24gKGFyZykge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiBhcmdcbiAgICB9O1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpLCBkZWZpbmUoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUsIGFzeW5jSXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGV4cG9ydHMuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3IsIGV4cG9ydHMuYXN5bmMgPSBmdW5jdGlvbiAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QsIFByb21pc2VJbXBsKSB7XG4gICAgdm9pZCAwID09PSBQcm9taXNlSW1wbCAmJiAoUHJvbWlzZUltcGwgPSBQcm9taXNlKTtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpLCBQcm9taXNlSW1wbCk7XG4gICAgcmV0dXJuIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKSA/IGl0ZXIgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgIH0pO1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApLCBkZWZpbmUoR3AsIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvclwiKSwgZGVmaW5lKEdwLCBpdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZGVmaW5lKEdwLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSksIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YXIgb2JqZWN0ID0gT2JqZWN0KHZhbCksXG4gICAgICBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkga2V5cy5wdXNoKGtleSk7XG4gICAgcmV0dXJuIGtleXMucmV2ZXJzZSgpLCBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgZm9yICg7IGtleXMubGVuZ3RoOykge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHJldHVybiBuZXh0LnZhbHVlID0ga2V5LCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICB9O1xuICB9LCBleHBvcnRzLnZhbHVlcyA9IHZhbHVlcywgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIGlmICh0aGlzLnByZXYgPSAwLCB0aGlzLm5leHQgPSAwLCB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkLCB0aGlzLmRvbmUgPSAhMSwgdGhpcy5kZWxlZ2F0ZSA9IG51bGwsIHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMuYXJnID0gdW5kZWZpbmVkLCB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KSwgIXNraXBUZW1wUmVzZXQpIGZvciAodmFyIG5hbWUgaW4gdGhpcykgXCJ0XCIgPT09IG5hbWUuY2hhckF0KDApICYmIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmICFpc05hTigrbmFtZS5zbGljZSgxKSkgJiYgKHRoaXNbbmFtZV0gPSB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHRoaXMuZG9uZSA9ICEwO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHJvb3RSZWNvcmQudHlwZSkgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJldHVybiByZWNvcmQudHlwZSA9IFwidGhyb3dcIiwgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbiwgY29udGV4dC5uZXh0ID0gbG9jLCBjYXVnaHQgJiYgKGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCIsIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkKSwgISFjYXVnaHQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXSxcbiAgICAgICAgICByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICBpZiAoXCJyb290XCIgPT09IGVudHJ5LnRyeUxvYykgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKSxcbiAgICAgICAgICAgIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgITApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc0ZpbmFsbHkpIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uIGFicnVwdCh0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJiBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZpbmFsbHlFbnRyeSAmJiAoXCJicmVha1wiID09PSB0eXBlIHx8IFwiY29udGludWVcIiA9PT0gdHlwZSkgJiYgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiYgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jICYmIChmaW5hbGx5RW50cnkgPSBudWxsKTtcbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIHJlY29yZC50eXBlID0gdHlwZSwgcmVjb3JkLmFyZyA9IGFyZywgZmluYWxseUVudHJ5ID8gKHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jLCBDb250aW51ZVNlbnRpbmVsKSA6IHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZShyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIHJldHVybiBcImJyZWFrXCIgPT09IHJlY29yZC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gcmVjb3JkLnR5cGUgPyB0aGlzLm5leHQgPSByZWNvcmQuYXJnIDogXCJyZXR1cm5cIiA9PT0gcmVjb3JkLnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnLCB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCIsIHRoaXMubmV4dCA9IFwiZW5kXCIpIDogXCJub3JtYWxcIiA9PT0gcmVjb3JkLnR5cGUgJiYgYWZ0ZXJMb2MgJiYgKHRoaXMubmV4dCA9IGFmdGVyTG9jKSwgQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykgcmV0dXJuIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpLCByZXNldFRyeUVudHJ5KGVudHJ5KSwgQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24gX2NhdGNoKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH0sIFwibmV4dFwiID09PSB0aGlzLm1ldGhvZCAmJiAodGhpcy5hcmcgPSB1bmRlZmluZWQpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfSwgZXhwb3J0cztcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheVdpdGhIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIik7XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfc2xpY2VkVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheVdpdGhvdXRIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIik7XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvUHJpbWl0aXZlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZShcIi4vdG9QcmltaXRpdmUuanNcIik7XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7XG4gIHJldHVybiBfdHlwZW9mKGtleSkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBTdHJpbmcoa2V5KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvUHJvcGVydHlLZXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzKSwgX3R5cGVvZihvYmopO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiLy8gVE9ETyhCYWJlbCA4KTogUmVtb3ZlIHRoaXMgZmlsZS5cblxudmFyIHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWVcIikoKTtcbm1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcblxuLy8gQ29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9wYWNrYWdlcy9ydW50aW1lL3J1bnRpbWUuanMjTDczNj1cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBnbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG4gIH0gZWxzZSB7XG4gICAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmNvbnN0IGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0ID0gMzAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlJc0ZvcmVncm91bmQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNGb3JlZ3JvdW5kOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIF90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U6IG51bWJlciA9IERhdGUubm93KCk7XG4gIHByaXZhdGUgX2RvY3VtZW50Rm9jdXNJbnRlcnZhbDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2lzRm9yZWdyb3VuZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kID0gbmV3IFJlYWRPbmx5U3ViamVjdCh0aGlzLl9pc0ZvcmVncm91bmQpO1xuICAgIHRoaXMuZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTtcbiAgfVxuXG4gIGdldCBpc0ZvcmVncm91bmQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQ7XG4gIH1cblxuICBnZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgbGV0IGhpZGRlbjtcbiAgICBsZXQgdmlzaWJpbGl0eUNoYW5nZTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBhIGRlZmluaXRpb24gZm9yICdtc0hpZGRlbicgb3IgJ3dlYmtpdEhpZGRlbicgdHlwZXNcbiAgICAvLyBSZXF1aXJlZCB0byBAdHMtaWdub3JlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5tc0hpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICdtc0hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ21zdmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQud2Via2l0SGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ3dlYmtpdEhpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3dlYmtpdHZpc2liaWxpdHljaGFuZ2UnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LmhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gT3BlcmEgMTIuMTAgYW5kIEZpcmVmb3ggMTggYW5kIGxhdGVyIHN1cHBvcnRcbiAgICAgIGhpZGRlbiA9ICdoaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cblxuICAgIGNvbnN0IGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSAhZG9jdW1lbnRbaGlkZGVuXTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50W2hpZGRlbl0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcblxuICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGlzdGVuRm9yRG9jdW1lbnRGb2N1cy5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9yRG9jdW1lbnRGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gZG9jdW1lbnQuaGFzRm9jdXMoKTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSwgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSBudWxsO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNGb3JlZ3JvdW5kID09PSBpc0ZvcmVncm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0ZvcmVncm91bmQudmFsdWUgPSBpc0ZvcmVncm91bmQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJEZXRlY3RvciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCA9IC8oTVNJRXwoPyFHZWNrby4rKUZpcmVmb3h8KD8hQXBwbGVXZWJLaXQuK0Nocm9tZS4rKVNhZmFyaXwoPyFBcHBsZVdlYktpdC4rKUNocm9tZXxBcHBsZVdlYktpdCg/IS4rQ2hyb21lfC4rU2FmYXJpKXxHZWNrbyg/IS4rRmlyZWZveCkpKD86IHxcXC8pKFtcXGQuYXByZV0rKS9nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZSA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTWFqb3JWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTY5ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS82OS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzAgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcwLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzEuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcyID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Mi4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzQgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc0LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzUuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc2ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ni4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzcgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc3LicpO1xuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyTWFqb3JWZXJzaW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTY5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNjk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcxO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc1O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc2KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKC9BbmRyb2lkfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxPcGVyYSBNaW5pL2kpLnRlc3QobmF2aWdhdG9yPy51c2VyQWdlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciB7XG4gIGdldFN0cmluZ1ZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKSB8fFxuICAgICAgdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApIHx8XG4gICAgICB0aGlzLmRlZmF1bHRTdHJpbmdWYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIGdldEJvb2xlYW5WYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUZyb21VcmkgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCk7XG5cbiAgICBpZiAodmFsdWVGcm9tVXJpKSB7XG4gICAgICByZXR1cm4gdmFsdWVGcm9tVXJpID09PSAndHJ1ZScgfHwgdmFsdWVGcm9tVXJpID09PSAnMScgfHwgdmFsdWVGcm9tVXJpID09PSAnT24nO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRCb29sZWFuVmFsdWVbbmFtZV0gPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCb29sZWFuVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nOiB0cnVlLFxuICAgICAgJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCc6IHRydWUsXG4gICAgICAncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJzogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhVmFsdWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBtZXRhW25hbWU9JyR7bmFtZX0nXWApO1xuXG4gICAgaWYgKCFtZXRhVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG1ldGFWYWx1ZS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWVVUklQYXJhbWV0ZXJOYW1lID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKCF2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKS5nZXQodmFsdWVVUklQYXJhbWV0ZXJOYW1lKSB8fCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciB7XG4gIHN0YXRpYyBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc0ZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb25TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5vdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5vdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG5cbiAgICBpbWcuc3JjID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW25ldyBBcnJheUJ1ZmZlcigxMGUrNyldKSk7IC8vIDEwME1iIG9yIGxlc3Mgb3IgbW9yZSBkZXBlbmRpbmcgb24gYXMgeW91IHdpc2ggdG8gZm9yY2UvaW52b2tlIEdDIGN5Y2xlIHJ1blxuICAgIGltZy5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLnNyYyk7XG5cbiAgICAgIGltZyA9IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvclsnY29ubmVjdGlvbiddO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VmZmVjdGl2ZVR5cGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rTWF4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5lZmZlY3RpdmVUeXBlIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnR5cGU7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucnR0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgICB9O1xuXG4gICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRpc3RpY3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcnR0LnZhbHVlID0gdGhpcy5nZXRSb3VuZFRyaXBUaW1lKCk7XG4gICAgdGhpcy5fZWZmZWN0aXZlVHlwZS52YWx1ZSA9IHRoaXMuZ2V0RWZmZWN0aXZlVHlwZSgpO1xuICAgIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnZhbHVlID0gdGhpcy5nZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuXG5leHBvcnQgY2xhc3MgU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1TZXR1cExpc3RlbmVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0cmljc1NlcnZpY2UgPSBTREsubWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWV0cmljU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN1Y2Nlc3Moc3RyZWFtSWQpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZCwgc3RyZWFtSWQpO1xuICB9XG5cbiAgZmFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZFN0cmVhbU1ldHJpYyhtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZSwgc3RyZWFtSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWV0cmljU3VibWl0dGVkKSB7XG4gICAgICByZXR1cm4gO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY1N1Ym1pdHRlZCA9IHRydWU7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldHVwVGltZSA9IG5vdyAtIHRoaXMuX3N0YXJ0VGltZTtcbiAgICBjb25zdCBtZXRyaWNOYW1lID0gbmV3IE1ldHJpY1R5cGUobWV0cmljVHlwZSkuZ2V0TmFtZSgpO1xuXG4gICAgdGhpcy5tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogc2V0dXBUaW1lfSxcbiAgICAgIHN0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gU3RyZWFtIG1ldHJpYyBbJXNdIGluIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBuZXcgRHVyYXRpb25zKHNldHVwVGltZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRWRnZVRva2VuIGZyb20gJy4vRWRnZVRva2VuJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi9FbmNvZGVkRWRnZVRva2VuJztcblxuY29uc3QgZWRnZUF1dGhUb2tlblByZWZpeCA9ICdESUdFU1Q6JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZUF1dGhQYXJzZXIge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VkZ2VBdXRoUGFyc2VyJyk7XG5cbiAgc3RhdGljIHBhcnNlVG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBFZGdlVG9rZW4ge1xuICAgIGlmICghdGhpcy5pc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbikpIHtcbiAgICAgIEVkZ2VBdXRoUGFyc2VyLl9sb2dnZXIuZXJyb3IoJ1Rva2VuIGlzIG5vdCB2YWxpZCBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihudWxsKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb2RlZFRva2VuID0gYXRvYih0b2tlbi5zdWJzdHIoZWRnZUF1dGhUb2tlblByZWZpeC5sZW5ndGgpKTtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEpTT04ucGFyc2UoZGVjb2RlZFRva2VuKTtcblxuICAgICAgZWRnZVRva2VuLnRva2VuID0gSlNPTi5wYXJzZShlZGdlVG9rZW4udG9rZW4pO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihlZGdlVG9rZW4pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIEVkZ2VBdXRoUGFyc2VyLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBwYXJzZSB0b2tlbiB2YWx1ZScsIGUpO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihudWxsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0b2tlbiAmJiB0b2tlbi5zdGFydHNXaXRoKGVkZ2VBdXRoVG9rZW5QcmVmaXgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbnRlcmZhY2UgSVRva2VuIHtcbiAgdXJpOiBVUkwgfCBudWxsO1xuICBjYXBhYmlsaXRpZXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSUVkZ2VUb2tlbiB7XG4gIGFwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgdG9rZW46IElUb2tlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZVRva2VuIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbjogSVRva2VuO1xuXG4gIGNvbnN0cnVjdG9yKGVkZ2VUb2tlbjogSUVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uSWQgPSBlZGdlVG9rZW4/LmFwcGxpY2F0aW9uSWQgfHwgJyc7XG4gICAgdGhpcy5fdG9rZW4gPSB7XG4gICAgICB1cmk6IGVkZ2VUb2tlbj8udG9rZW4/LnVyaSA/IG5ldyBVUkwoZWRnZVRva2VuLnRva2VuLnVyaSkgOiBudWxsLFxuICAgICAgY2FwYWJpbGl0aWVzOiBlZGdlVG9rZW4/LnRva2VuPy5jYXBhYmlsaXRpZXMgfHwgW11cbiAgICB9O1xuICB9XG5cbiAgZ2V0IHVyaSgpOiBVUkwgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4udXJpO1xuICB9XG5cbiAgZ2V0IGNhcGFiaWxpdGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLmNhcGFiaWxpdGllcztcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uSWQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmRlY2xhcmUgY29uc3QgX19GRUFUVVJFU19fOiB7XG4gIHNlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHNlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBzZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZEZlYXR1cmVzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9ncygpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvZ3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRNZXRyaWNzKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRNZXRyaWNzO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dUb0NvbnNvbGUoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ1RvQ29uc29sZTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZlYXR1cmVzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IF9fRkVBVFVSRVNfXztcblxuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9ICdzZW5kTG9jYWxDYW5kaWRhdGVzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMgOiB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnc2VuZExvZ3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvZ3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ3NlbmRNZXRyaWNzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRNZXRyaWNzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnbG9nVG9Db25zb2xlJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLmxvZ1RvQ29uc29sZSA6ICdBbGwnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnQWxsJztcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRGZWF0dXJlcy5hcHBseUZlYXR1cmVzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiB0eXBlb2YgZG9jdW1lbnQ/LmNyZWF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uID49IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzTW9iaWxlKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICB0eXBlb2YgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciA9PT0gJ3VuZGVmaW5lZCcpO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIFJUQ1J0cFJlY2VpdmVyPy5wcm90b3R5cGU/LmNyZWF0ZUVuY29kZWRTdHJlYW1zICE9PSAndW5kZWZpbmVkJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1BBUkFNRVRFUlNfXzoge1xuICBkaXNjb3Zlcnk6IElEaXNjb3ZlcnlQYXJhbWV0ZXI7XG59O1xuXG5pbnRlcmZhY2UgSURpc2NvdmVyeVBhcmFtZXRlcntcbiAgaW50ZW50aW9uczogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJhbWV0ZXJzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Rpc2NvdmVyeVBhcmFtZXRlcnM6IElEaXNjb3ZlcnlQYXJhbWV0ZXIgO1xuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5UGFyYW1ldGVycygpOiBJRGlzY292ZXJ5UGFyYW1ldGVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycztcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVBhcmFtZXRlcnMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBfX1BBUkFNRVRFUlNfXztcblxuICAgICAgdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycyA9ICdkaXNjb3ZlcnknIGluIHBhcmFtZXRlcnMgPyBwYXJhbWV0ZXJzLmRpc2NvdmVyeSA6IHtpbnRlbnRpb25zOiAnJ307XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycyA9IHtpbnRlbnRpb25zOiAnJ307XG4gICAgfVxuICB9XG59XG5cblBhcmFtZXRlcnMuYXBwbHlQYXJhbWV0ZXJzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXNwb3NhYmxlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGRpc3Bvc2FibGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGUgPSBkaXNwb3NhYmxlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcG9zYWJsZS5jYWxsKHRoaXMpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogSURpc3Bvc2FibGVbXSA9IFtdO1xuXG4gIGFkZChkaXNwb3NhYmxlOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QucHVzaChkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIHRoaXMuX2xpc3QubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEaXNwb3NhYmxlTGlzdFtkaXNwb3NhYmxlcz0ke3RoaXMuX2xpc3QubGVuZ3RofV1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxUeXBlID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMuc2VuZExvZ3NdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5sb2dUb0NvbnNvbGVdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbFR5cGUpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTWV0cmljc107XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlSGFuZGxlciBmcm9tICcuL1Byb21pc2VIYW5kbGVyJztcblxuY2xhc3MgUHJvbWlzZSB7XG4gIF9zdGF0ZTogbnVtYmVyO1xuICBfaGFuZGxlZDogYm9vbGVhbjtcbiAgX3ZhbHVlOiBQcm9taXNlO1xuICBfZGVmZXJyZWRzOiBBcnJheTxQcm9taXNlSGFuZGxlcj47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICB0aGVuKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZDtcblxuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9IDA7XG4gICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdO1xuXG4gICAgdGhpcy5kb1Jlc29sdmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZG9SZXNvbHZlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soXG4gICAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICByZWFzb24gPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLnByb21pc2VSZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZXNvbHZlKG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRwczovL2dpdGh1Yi5jb20vUHJvbWlzZXMtYXBsdXMvUHJvbWlzZXMtc3BlYyN0aGUtUHJvbWlzZS1yZXNvbHV0aW9uLXByb2NlZHVyZVxuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgUHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdCBzZWxmLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBjb25zdCB0aGVuID0gbmV3VmFsdWUudGhlbjtcblxuICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSAzO1xuICAgICAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgcHJvbWlzZS5maW5hbGUoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHByb21pc2UuZG9SZXNvbHZlKGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgdGhlbi5hcHBseShuZXdWYWx1ZSwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IDE7XG4gICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgcHJvbWlzZS5maW5hbGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlamVjdChuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlID0gMjtcbiAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuZmluYWxlKCk7XG4gIH1cblxuICBmaW5hbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAyICYmIHRoaXMuX2RlZmVycmVkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faGFuZGxlZCkge1xuICAgICAgICAgIFByb21pc2UuX3VuaGFuZGxlZFJlamVjdGlvbih0aGlzLl92YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuaGFuZGxlKHRoaXMuX2RlZmVycmVkc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVmZXJyZWRzID0gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZShkZWZlcnJlZDogUHJvbWlzZUhhbmRsZXIpOiB2b2lkIHtcbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHdoaWxlIChwcm9taXNlLl9zdGF0ZSA9PT0gMykge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMCkge1xuICAgICAgcHJvbWlzZS5fZGVmZXJyZWRzLnB1c2goZGVmZXJyZWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvbWlzZS5faGFuZGxlZCA9IHRydWU7XG4gICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvbWlzZS5fc3RhdGUgPT09IDEgPyBkZWZlcnJlZC5vbkZ1bGZpbGxlZCA6IGRlZmVycmVkLm9uUmVqZWN0ZWQ7XG5cbiAgICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDEpIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhwcm9taXNlLl92YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhbGwoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoW10pO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVtYWluaW5nID0gYXJncy5sZW5ndGg7XG4gICAgICBjb25zdCBtYW5hZ2VSZXNwb25zZSA9IChpLCB2YWx1ZSk6IHZvaWQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCB0aGVuID0gdmFsdWUudGhlbjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiBtYW5hZ2VSZXNwb25zZShpLCB2YWx1ZSksXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFyZ3NbaV0gPSB2YWx1ZTtcblxuICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hbmFnZVJlc3BvbnNlKGksIGFyZ3NbaV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmUodmFsdWUpOiBQcm9taXNlIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJlc29sdmUodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByZWplY3QodmFsdWUpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gcmVqZWN0KHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmFjZShhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5yYWNlIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGFycltpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIF9pbW1lZGlhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICB9XG5cbiAgc3RhdGljIF91bmhhbmRsZWRSZWplY3Rpb24oZXJyb3IpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOicsIGVycm9yKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59XG5cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24ob25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsndGhlbiddID0gZnVuY3Rpb24ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCgpID0+IG51bGwpO1xuXG4gIHRoaXMuaGFuZGxlKG5ldyBQcm9taXNlSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkpO1xuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSA9IGZ1bmN0aW9uKGNhbGxiYWNrOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgdmFsdWUgPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IHZhbHVlKSxcbiAgICByZWFzb24gPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IGNvbnN0cnVjdG9yLnJlamVjdChyZWFzb24pKVxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlIGZyb20gJy4vUHJvbWlzZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb21pc2VIYW5kbGVyIHtcbiAgb25GdWxmaWxsZWQ6IEZ1bmN0aW9uO1xuICBvblJlamVjdGVkOiBGdW5jdGlvbjtcbiAgcHJvbWlzZTogUHJvbWlzZTtcblxuICBjb25zdHJ1Y3RvcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IG51bGw7XG4gICAgdGhpcy5vblJlamVjdGVkID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicgPyBvblJlamVjdGVkIDogbnVsbDtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcblxuZXhwb3J0IGludGVyZmFjZSBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQge1xuICBhdWRpb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHZpZGVvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgbG9jYWxPZmZlcjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiB7XG4gICAgZGlyZWN0aW9uPzogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb247XG4gICAgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcbiAgfTtcblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPHsgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHwgdm9pZD47IGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gfT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ3JlY3Zvbmx5JyxcbiAgICAgIHBlZXJDb25uZWN0aW9uOiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9KVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcihkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uID0gJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gZmFsc2UpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIGlmIChQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCAmJiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbiAmJiAhZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLnBlZXJDb25uZWN0aW9uO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0ge2VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc307XG5cbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbilcbiAgICAgIC50aGVuKGFzeW5jIHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNBZGRUcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLnN1cHBvcnRzQWRkVHJhbnNjZWl2ZXI7XG4gICAgICAgIGxldCB2aWRlb1RyYW5zY2VpdmVyLCBhdWRpb1RyYW5zY2VpdmVyO1xuXG4gICAgICAgIGlmIChzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKSB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCdhdWRpbycsIHtkaXJlY3Rpb259KTtcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ3ZpZGVvJywge2RpcmVjdGlvbn0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIodW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25zID0gZGlyZWN0aW9uID09PSAncmVjdm9ubHknID8ge1xuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IHRydWUsXG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICB9IDoge307XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlZXJDb25uZWN0aW9uU2VydmljZSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIHtcbiAgc3RhdGljIHRydW5jYXRlSWNlU2VydmVycyhjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1cmxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB1cmwgPSBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHVybHMucHVzaChjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgIHVybHM6IHVybHMsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1N0YXRpc3RpYyB7XG4gIHNzcmM/OiBzdHJpbmc7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGJ5dGVzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGZyYW1lc0RlY29kZWQ/OiBudW1iZXI7XG4gIHBhY2tldHNMb3N0PzogbnVtYmVyO1xuICBwYWNrZXRzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGNvZGVjPzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU/OiBudW1iZXI7XG4gIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcD86IG51bWJlcjtcbn1cblxuY29uc3QgdXBkYXRlU3RhdGlzdGljVGltZW91dCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkQXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydGNTdGF0aXN0aWM6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+ID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHt9KTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgcHJpdmF0ZSBfaXNNb25pdG9yUnVubmluZyA9IHRydWU7XG4gIHByaXZhdGUgX3VwZGF0ZVRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdHJhY2tzVG9Nb25pdG9yOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgdGhpcy5fdHJhY2tzVG9Nb25pdG9yID0gbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkubWFwKHRyYWNrID0+IHRyYWNrLmtpbmQpIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmdldEN1cnJlbnRPZmZlckRpc2FibGVkKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFNEUCA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYyA9IHBhcnNlZFNEUC5hdWRpb0NvZGVjO1xuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjID0gcGFyc2VkU0RQLnZpZGVvQ29kZWM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpYygpOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZW91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMudXBkYXRlU3RhdGlzdGljTGVnYWN5KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYWZhcmkgMTEgZG9lc250IGhhdmUga2luZCBvciBtZWRpYVR5cGUgc28gd2UgbmVlZCB0byB0YWtlIGl0IGZyb20gdGhlIGluYm91bmQtcnRwIG9iamVjdCBpZFxuICAgIGNvbnN0IGdldEtpbmRGb3JTYWZhcmkxMSA9IChpdGVtKTogc3RyaW5nID0+IGl0ZW0uaWQuaW5jbHVkZXMoJ0F1ZGlvJykgPyAnYXVkaW8nIDogaXRlbS5pZC5pbmNsdWRlcygnVmlkZW8nKSA/ICd2aWRlbycgOiAnJztcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMobnVsbClcbiAgICAgIC50aGVuKHN0YXRzID0+IHtcbiAgICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcblxuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgbGV0IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgIHN0YXRzLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUpIHtcbiAgICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSAqIDEwMDA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnaW5ib3VuZC1ydHAnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSByZXBvcnQua2luZCB8fCByZXBvcnQubWVkaWFUeXBlIHx8IGdldEtpbmRGb3JTYWZhcmkxMShyZXBvcnQpO1xuICAgICAgICAgICAgICBsZXQgY29kZWMgPSAnJztcblxuICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSByZXBvcnQuY29kZWNJZCkge1xuICAgICAgICAgICAgICAgICAgY29kZWMgPSBpdGVtLm1pbWVUeXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKGtpbmQgJiYgdGhpcy5fdHJhY2tzVG9Nb25pdG9yLmluY2x1ZGVzKGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSByZXBvcnQuYnl0ZXNSZWNlaXZlZCB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQnl0ZXNSZWNlaXZlZCA9IHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy5ieXRlc1JlY2VpdmVkID8/IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNEZWx0YSA9IGJ5dGVzIC0gcHJldmlvdXNCeXRlc1JlY2VpdmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlcG9ydC50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8udGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpdHJhdGUgPSBieXRlc0RlbHRhICYmIHRpbWVEZWx0YSA/IE1hdGguZmxvb3IoOCAqIGJ5dGVzRGVsdGEgL1xuICAgICAgICAgICAgICAgICAgdGltZURlbHRhICogMTAwMCkgOiAwO1xuXG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXSA9IHtcbiAgICAgICAgICAgICAgICAgIHNzcmM6IHJlcG9ydC5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiByZXBvcnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IHJlcG9ydC5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgcGFja2V0c0xvc3Q6IHJlcG9ydC5wYWNrZXRzTG9zdCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNSZWNlaXZlZDogcmVwb3J0LnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LmZyYW1lc0RlY29kZWQ7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZwcyA9IChyZXBvcnQuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMDtcblxuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnBzJ10gPSBmcHMgPyBNYXRoLnJvdW5kKGZwcyAqIDEwMCkgLyAxMDAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHNMZWdhY3koKS50aGVuKHN0YXRzID0+IHtcbiAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG4gICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICAgIHN0YXRzLnJlc3VsdCgpLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgcmVwb3J0Lm5hbWVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2dvb2dSVFQnKSB7XG4gICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LnN0YXQobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdzc3JjJykge1xuICAgICAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IHJlcG9ydC5zdGF0KCdtZWRpYVR5cGUnKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdID0ge3RpbWVzdGFtcDogRGF0ZS5ub3coKX07XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydzc3JjJ10gPSByZXBvcnQuc3RhdCgnc3NyYycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydtZWRpYVR5cGUnXSA9IG1lZGlhVHlwZTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2J5dGVzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdieXRlc1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzTG9zdCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNMb3N0Jyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2NvZGVjJ10gPSByZXBvcnQuc3RhdCgnZ29vZ0NvZGVjTmFtZScpLnRvU3RyaW5nKCkgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShtZWRpYVR5cGUpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncm91bmRUcmlwVGltZSddID0gcm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIGlmIChtZWRpYVR5cGUgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuc3RhdCgnZnJhbWVzRGVjb2RlZCcpO1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcHMnXSA9IChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0uZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgMTAwMCB8fCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2RlY0J5VHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYztcbiAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZHBQYXJzZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZHA6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzQXVkaW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzVmlkZW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2RwOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZHAgPSBzZHA7XG5cbiAgICBjb25zdCBzZHBTcGxpdEJ5TGluZXMgPSB0aGlzLl9zZHAuc3BsaXQoLyhcXHJcXG58XFxyfFxcbikvKTtcbiAgICBjb25zdCBzZHBTcGxpdEJ5VHJhY2tzID0gdGhpcy5fc2RwLnNwbGl0KCdtPScpO1xuXG4gICAgdGhpcy5fYXVkaW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygnYXVkaW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX3ZpZGVvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ3ZpZGVvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgnYXVkaW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgICB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgndmlkZW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgfVxuXG4gIGdldCBhdWRpb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29kZWM7XG4gIH1cblxuICBnZXQgdmlkZW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92aWRlb0NvZGVjO1xuICB9XG5cbiAgZ2V0IGlzQXVkaW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBnZXQgaXNWaWRlb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNUcmFja0J5VHlwZUVuYWJsZWQodHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5VHJhY2tzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNkcFNlY3Rpb25Gb3JUeXBlID0gc2RwU3BsaXRCeVRyYWNrcy5maW5kKHNkcFRyYWNrID0+IHNkcFRyYWNrLnN0YXJ0c1dpdGgodHlwZSkpO1xuXG4gICAgaWYgKCFzZHBTZWN0aW9uRm9yVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhc2RwU2VjdGlvbkZvclR5cGUuaW5jbHVkZXMoYGE9aW5hY3RpdmVgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb2RlYyh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlMaW5lczogc3RyaW5nIFtdKTogc3RyaW5nIHtcbiAgICBjb25zdCB1c2VkQ29kZWNMaW5lID0gc2RwU3BsaXRCeUxpbmVzLmZpbmQoc2RwTGluZSA9PiBzZHBMaW5lLmluY2x1ZGVzKGBhPXJ0cG1hcDoke3NkcFNwbGl0QnlMaW5lcy5maW5kKGkgPT4gaS5pbmNsdWRlcyhgbT0ke3R5cGV9YCkpLnNwbGl0KCcgJylbM119YCkpO1xuICAgIGNvbnN0IHVzZWRDb2RlYyA9IHVzZWRDb2RlY0xpbmUuc3BsaXQoJyAnKVsxXTtcbiAgICBjb25zdCBjb2RlY05hbWUgPSB1c2VkQ29kZWMuc3BsaXQoJy8nKVswXTtcblxuICAgIHJldHVybiBjb2RlY05hbWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24sIHtQZWVyQ29ubmVjdGlvbkV2ZW50c30gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge0lMZWdhY3lSVENTdGF0c1JlcG9ydH0gZnJvbSAnLi9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdWYW5pbGxhUGVlckNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IFJUQ1BlZXJDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24gY2xhc3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgZ2V0IG5hdGl2ZSgpOiBSVENQZWVyQ29ubmVjdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblN0YXRlKCk6IFJUQ1BlZXJDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgaWNlQ29ubmVjdGlvblN0YXRlKCk6IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNBZGRUcmFuc2NlaXZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZlcihvcHRpb25zPzogUlRDT2ZmZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVPZmZlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVBbnN3ZXIob3B0aW9ucz86IFJUQ0Fuc3dlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZUFuc3dlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHNldExvY2FsRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGFzQ3J5cHRvID0gZGVzY3JpcHRpb24uc2RwPy5tYXRjaCgvYT1jcnlwdG86L2kpO1xuXG4gICAgaWYgKGhhc0NyeXB0bykge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1NEUCBhPWNyeXB0byBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgZ2V0U2VuZGVycygpOiBSVENSdHBTZW5kZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFNlbmRlcnMoKTtcbiAgfVxuXG4gIGdldFN0YXRzKHNlbGVjdG9yPzogTWVkaWFTdHJlYW1UcmFjayB8IG51bGwpOiBQcm9taXNlPFJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHNlbGVjdG9yKTtcbiAgfVxuXG4gIGdldFN0YXRzTGVnYWN5KCk6IFByb21pc2U8SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgLy8gSWdub3JlZCBkdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGxlZ2FjeSAnZ2V0U3RhdHMnIG1ldGhvZCB0eXBlIGRlZmluaXRpb25cbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnZ2V0U3RhdHMnIG1ldGhvZCBmb3JcbiAgICAgIC8vIENocm9tZUA8PSA2NiBkZXRhaWxlZCBoZXJlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02Mjc4MTZcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFRyYW5zY2VpdmVyKG5hbWU6IHN0cmluZywgb3B0aW9uczogUlRDUnRwVHJhbnNjZWl2ZXJJbml0KTogUlRDUnRwVHJhbnNjZWl2ZXIge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiB2b2lkIHtcbiAgICBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYWNrKHRyYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb24oKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIHNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzZXQgb250cmFjayhoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjayA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb250cmFjaygpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjaztcbiAgfVxuXG4gIHNldCBvbmljZWNhbmRpZGF0ZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY2FuZGlkYXRlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZTtcbiAgfVxuXG4gIHNldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIHNldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IEFycmF5PFQ+LCBsaXN0ZW5lcjogVCkge1xuICAgIHN1cGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBBcnJheTwoVCkgPT4gdm9pZD47XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwoVCkgPT4gdm9pZD4odGhpcy5fbGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW52aXJvbm1lbnQge1xuICBzdGF0aWMgZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgcmV0dXJuIGJhc2VVUkwub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuLi9sb2dnZXIvQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4vVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL0Vudmlyb25tZW50JztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL3N0cmVhbWluZy9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5jb25zdCBwYWdlTG9hZFRpbWUgPSB3aW5kb3dbJ19fcGhlbml4UGFnZUxvYWRUaW1lJ10gfHwgd2luZG93WydfX3BhZ2VMb2FkVGltZSddIHx8IERhdGUubm93KCk7XG5cbmludGVyZmFjZSBJSW5pdE9wdGlvbnMge1xuICBkaXNjb3ZlcnlVcmk/OiBzdHJpbmc7XG4gIHBlZXJDb25uZWN0aW9uRmFjdG9yeT86IElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIHRlbGVtZXRyeUxldmVsPzogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBjb25zb2xlTG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbT86IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlPzogYm9vbGVhbjtcbiAgd2ViUGxheWVyTG9hZGVyPzogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZDtcbiAgc2hha2FQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBTaGFrYVR5cGUpID0+IHZvaWQ7XG4gIGhsc0pzTG9hZGVyPzogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF93ZWJQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHN0YXRpYyBfZW52aXJvbm1lbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5VXJsOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeScpO1xuICBwcml2YXRlIHN0YXRpYyBfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDg7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlMZXZlbDogU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4gPSBuZXcgU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4oVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KEJ1aWxkRmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90ZW5hbmN5OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2NsaWVudFNlc3Npb25JZDogc3RyaW5nID0gU3RyaW5ncy5yYW5kb20oMzIpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9hZGVkVGltZXN0YW1wOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTREsnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2luaXRpYWxpemVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbml0aWFsaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPihTREsuX2luaXRpYWxpemVkKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5RGlzY292ZXJ5VXJpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPihEaXNjb3ZlcnlVcmkudXJpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5OiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpO1xuXG4gIHN0YXRpYyBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVuYW5jeSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc3RhdGljIGdldCBjbGllbnRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU0RLLl9jbGllbnRTZXNzaW9uSWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvYWRlZFRpbWVzdGFtcCgpOiBEYXRlIHtcbiAgICByZXR1cm4gU0RLLl9sb2FkZWRUaW1lc3RhbXA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGluaXRpYWxpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlJbml0aWFsaXplZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5VXJpKCk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seURpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCcpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnU2tpcCBnYXJiYWdlIGNvbGxlY3Rpb24gb24gbW9iaWxlIGRldmljZXMgb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5kaXNjb3ZlcnlVcmkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy50ZWxlbWV0cnlVcmwudmFsdWUgPSBTREsuZ2V0VGVsZW1ldHJ5VXJsKHZhbHVlKTtcbiAgICAgIFNESy5fZW52aXJvbm1lbnQudmFsdWUgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2hhbm5lbFRva2VuID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWNoYW5uZWwtdG9rZW4nKTtcblxuICAgIGlmIChjaGFubmVsVG9rZW4pIHtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4oY2hhbm5lbFRva2VuKTtcblxuICAgICAgU0RLLl90ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3k7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJpVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtdXJpJyk7XG5cbiAgICBpZiAodXJpVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmlWYWx1ZTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVVJJVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtYmFzZS11cmknKTtcblxuICAgIGlmIChiYXNlVVJJVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBgJHtiYXNlVVJJVmFsdWV9L3BjYXN0L2VuZFBvaW50c2A7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC1iYXNlLXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaW5pdChvcHRpb25zPzogSUluaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBuZXcgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuZGlzY292ZXJ5VXJpKSB7XG4gICAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBvcHRpb25zLmRpc2NvdmVyeVVyaTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5KSB7XG4gICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUgPSBvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwgJiYgVGVsZW1ldHJ5TGV2ZWxbb3B0aW9ucy50ZWxlbWV0cnlMZXZlbF0pIHtcbiAgICAgICAgU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChvcHRpb25zLnRlbGVtZXRyeUxldmVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubG9nZ2luZ0xldmVsICYmIExvZ2dpbmdMZXZlbFtvcHRpb25zLmxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLnRocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMubG9nZ2luZ0xldmVsKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgJiZcbiAgICAgICAgTG9nZ2luZ0xldmVsW29wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgY29uc3QgY29uc29sZUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgQ29uc29sZUFwcGVuZGVyKTtcblxuICAgICAgICBpZiAoY29uc29sZUFwcGVuZGVyKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUoY29uc29sZUFwcGVuZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgIT09ICdPZmYnKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fd2ViUGxheWVyTG9hZGVyID0gb3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyID0gb3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuaGxzSnNMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5faGxzSnNMb2FkZXIgPSBvcHRpb25zLmhsc0pzTG9hZGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsICgpID0+IHtcbiAgU0RLLmRpc3Bvc2UoKTtcbn0pO1xuXG5TREsuYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5pbml0KCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVVybCB7XG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBiYXNlVVJMLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG5cbiAgICAgIHN3aXRjaCAoYmFzZVVSTC5wcm90b2NvbCkge1xuICAgICAgICBjYXNlICd3czonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cDonO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dzczonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cHM6JztcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDIgfHxcbiAgICAgICAgICAoc2VnbWVudHMubGVuZ3RoID09PSAzICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDJdLmxlbmd0aCA8PSAyICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmxlbmd0aCA8PSAzKVxuICAgICAgKSB7XG4gICAgICAgIHNlZ21lbnRzLnVuc2hpZnQoJ3RlbGVtZXRyeScpO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdzdGctJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1zdGcnKSB8fCBzZWdtZW50c1swXS5pbmNsdWRlcygnLXN0Zy0nKSB8fCBzZWdtZW50c1swXSA9PT0gJ3N0ZycpIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5LXN0Zyc7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ2xvY2FsJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1sb2NhbCcpKSB7XG4gICAgICAgIC8vIExlYXZlIFVSTCB1bmNoYW5nZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeSc7XG4gICAgICB9XG5cbiAgICAgIGJhc2VVUkwuaG9zdG5hbWUgPSBzZWdtZW50cy5qb2luKCcuJyk7XG5cbiAgICAgIHJldHVybiBgJHtiYXNlVVJMLm9yaWdpbn0vdGVsZW1ldHJ5YDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgdHlwZSBCaXRyYXRlU3RhdGVUeXBlID0gJ0tlZXAnIHwgJ1Jlc2V0JztcbmV4cG9ydCB0eXBlIEJpdHJhdGVNb2RlVHlwZSA9ICdOb3JtYWwnIHwgJ0ZvcmNlJyB8ICdSZXNldCc7XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVTdGF0ZSB7XG4gIEtlZXAsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVNb2RlIHtcbiAgTm9ybWFsLFxuICBGb3JjZSxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUge1xuICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgYml0cmF0ZUluQml0c1BlclNlY29uZDogbnVtYmVyO1xuICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZVR5cGU7XG4gIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZVR5cGU7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uLy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IFRva2VuQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1Rva2VuQ29udGV4dCc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQsIHtDaGFubmVsQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0lFbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vSVN0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCB7U3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IEluc2VydGFibGVTdHJlYW1zIGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0luc2VydGFibGVTdHJlYW1zJztcblxuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAxNTAwMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2hhbm5lbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbkNvbnRleHQ6IFRva2VuQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGVDb250ZXh0OiBTdGF0ZUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cG9uZW50aWFsQmFja29mZjogRXhwb25lbnRpYWxCYWNrb2ZmO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VmlkZW9FbGVtZW50OiBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW46IFJlYWRPbmx5U3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhdGU6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9NdXRlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9QYXVzZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbkV4cGlyaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0aG9yaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU9ubGluZTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxvYWRpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQbGF5aW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhbmRieTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0b3BwZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUYXJnZXRMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUJpdHJhdGVMaW1pdDogUmVhZE9ubHlTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJlc29sdXRpb246IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUZhaWx1cmVDb3VudDogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RW5kUG9pbnQ6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RyZWFtOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UnRjU3RhdGlzdGljczogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlNZWRpYVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPjtcblxuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25UZWxlbWV0cnk6IFNlc3Npb25UZWxlbWV0cnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcjogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBvcHRpb25zPzogQ2hhbm5lbE9wdGlvbnMpIHtcbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCBjaGFubmVsQ29udGV4dE9wdGlvbnM6IENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHt0YXJnZXRMYWc6IG9wdGlvbnM/LnRhcmdldExhZ307XG4gICAgY29uc3Qgc3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnM6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zID0ge1xuICAgICAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2luc2VydGFibGUtc3RyZWFtcycpLFxuICAgICAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucz8udmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zPy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rXG4gICAgfTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dCA9IG5ldyBUb2tlbkNvbnRleHQodG9rZW4pO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gbmV3IENoYW5uZWxDb250ZXh0KGNoYW5uZWxDb250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gbmV3IFBlZXJDb25uZWN0aW9uQ29udGV4dCgpO1xuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQgPSBuZXcgU3RyZWFtVHJhbnNmb3JtQ29udGV4dChzdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVZpZGVvRWxlbWVudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50KTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbSk7XG4gICAgdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4odGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodGhpcy52aWRlb0VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24uc3Vic2NyaWJlKHJlc29sdXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMocmVzb2x1dGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQuc3Vic2NyaWJlKGJpdHJhdGVMaW1pdCA9PiB7XG4gICAgICAgIGlmIChiaXRyYXRlTGltaXQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGJpdHJhdGVMaW1pdCxcbiAgICAgICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICAgICAgQml0cmF0ZU1vZGUuTm9ybWFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1PblVubW91bnQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtT25Vbm1vdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgJ2NsaWVudDp0ZXJtaW5hdGlvbi1vbi13aW5kb3ctdW5sb2FkJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB2aWRlb0VsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBEaW1lbnNpb24uZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVuY29kZWRFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcyA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2luc2VydGFibGUtc3RyZWFtcycpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHBlZXJDb25uZWN0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhdGU7XG4gIH1cblxuICBnZXQgYXV0b011dGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkO1xuICB9XG5cbiAgZ2V0IGF1dG9QYXVzZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwbGF5aW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGxheWluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRMYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnO1xuICB9XG5cbiAgZ2V0IGxhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMYWc7XG4gIH1cblxuICBnZXQgYml0cmF0ZUxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlc29sdXRpb247XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RyZWFtO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkO1xuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpY3MoKTogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcztcbiAgfVxuXG4gIGdldCBtZWRpYVN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHNldEJpdHJhdGVMaW1pdChiaXRyYXRlTGltaXQ6IEJpdHNQZXJTZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSBiaXRyYXRlTGltaXQ7XG4gIH1cblxuICBjbGVhckJpdHJhdGVMaW1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kID0gMDtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgQml0cmF0ZU1vZGUuUmVzZXRcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYXJnZXRMYWcobGFnOiBNaWxsaXNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIGFzeW5jIHN0b3AocmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy5zdWJzY3JpYmUoaXNTdGFydGluZyA9PiB7XG4gICAgICAgIGlmICghaXNTdGFydGluZykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKHJlYXNvbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogVVJMIHtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS51cmk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBJbnNlcnRhYmxlU3RyZWFtcy52YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gSW5zZXJ0YWJsZVN0cmVhbXMudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygndmlkZW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmspO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBJbnNlcnRhYmxlU3RyZWFtcy52YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKCdhdWRpbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMpIHtcbiAgICAgIGNvbnN0IGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgICAgaWYgKGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrICYmICFGZWF0dXJlRW5hYmxlbWVudC5pc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWVkaWEgU3RyZWFtIFRyYWNrIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc0VuY29kZWRTdHJlYW1TaW5rID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgICBpZiAoaGFzRW5jb2RlZFN0cmVhbVNpbmsgJiYgIUZlYXR1cmVFbmFibGVtZW50LmlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrICYmIGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBmb3VuZCBtdWx0aXBsZSB0eXBlcyAoTWVkaWEgU3RyZWFtIFRyYWNrIGFuZCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpIG9mIENyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbnMnKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIShoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayB8fCBoYXNFbmNvZGVkU3RyZWFtU2luaykpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdpbnNlcnRhYmxlLXN0cmVhbXMgZW5hYmxlZCwgYnV0IG1pc3NpbmcgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIGNhbGxiYWNrIGZ1bmN0aW9uJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGFzU3RyZWFtVHJhbnNmb3Jtc09yU2luayA9IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgICBpZiAoaGFzU3RyZWFtVHJhbnNmb3Jtc09yU2luaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoYENyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbiBmb3VuZCwgYnV0IGZlYXR1cmUgaXMgbm90IGVuYWJsZWQgdmlhIGluc2VydGFibGUtc3RyZWFtcyBjYXBhYmlsaXR5YCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBDaGFubmVsU3RhdGUuRXJyb3IgfHwgc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nKSB7XG4gICAgICAgICAgRGlzY292ZXJ5LmNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgY2hhbm5lbCcsIGUpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nIHx8ICFTREsuYXV0b21hdGljUmV0cnlPbkZhaWx1cmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLmdldFJldHJ5SW50ZXJ2YWwoKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVkaWFTdHJlYW0gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIW1lZGlhU3RyZWFtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgICByZXR1cm4gc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlLCBDaGFubmVsU3RhdGVbdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWVdKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgdW5hdXRob3JpemVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIHJlc3RyaWN0ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gYmxvY2tlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBsYXlpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwYXVzZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgaW52b2tlIHBsYXkoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gdW5zdXBwb3J0ZWQgZmVhdHVyZSwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byBjb25maWd1cmF0aW9uIGVycm9yLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcyhyZWFzb246IHN0cmluZyA9IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbik6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgaWYgKFNESy5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ICYmICEoRmVhdHVyZUVuYWJsZW1lbnQuaXNNb2JpbGUgJiYgU0RLLnNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcykpIHtcbiAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW0odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0VuY29kZWRTdHJlYW1TaW5rID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKCFoYXNFbmNvZGVkU3RyZWFtU2luaykge1xuICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgIH1cblxuICAgIGNvbnN0IHBsYXlQcm9taXNlID0gdmlkZW9FbGVtZW50LnBsYXkoKTtcblxuICAgIGlmIChwbGF5UHJvbWlzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGF1c2VkIHZpZGVvIGFmdGVyIHBsYXkgZmFpbGVkLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQXVkaW9UcmFjaykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSBtdXRlZCB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZpZGVvRWxlbWVudC5wbGF5KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBsYXllZCB2aWRlbyBhZnRlciBhdXRvIG11dGluZy4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkIHRvIHVubXV0ZS4nLCB0aGlzLnN0cmVhbUlkKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nLFxuICBQYXVzZWQsXG4gIFBsYXlpbmcsXG4gIFJlY292ZXJpbmcsXG4gIFJlY29ubmVjdGluZyxcbiAgU3RhbmRCeSxcbiAgU3RvcHBlZCxcbiAgVW5hdXRob3JpemVkLFxuICBHZW9SZXN0cmljdGVkLFxuICBHZW9CbG9ja2VkLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUsXG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IENoYW5uZWwsIHtDaGFubmVsT3B0aW9uc30gZnJvbSAnLi9DaGFubmVsJztcbmltcG9ydCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9JRW5jb2RlZFN0cmVhbVNpbmsnO1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0lTdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxPcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBjaGFubmVsT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENoYW5uZWxDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxDaGFubmVsU3RhdGU+KENoYW5uZWxTdGF0ZS5TdGFydGluZyk7XG4gICAgdGhpcy5hdXRvTXV0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRvUGF1c2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KG9wdGlvbnM/LnRhcmdldExhZyA/PyBkZWZhdWx0VGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPigwKTtcbiAgICB0aGlzLmJpdHJhdGVMaW1pdCA9IG5ldyBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+KDApO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG5ldyBTdWJqZWN0PERpbWVuc2lvbj4oRGltZW5zaW9uLmVtcHR5KTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25Db250ZXh0IHtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBwZWVyQ29ubmVjdGlvbjogU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVDb250ZXh0IHtcbiAgaXNTdGFydGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgaXNEaXNwb3NlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gZmFsc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9JU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0lFbmNvZGVkU3RyZWFtU2luayc7XG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zID0ge1xuICBoYXNJbnNlcnRhYmxlU3RyZWFtczogYm9vbGVhbjtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCB7XG4gIGhhc0luc2VydGFibGVTdHJlYW1zOiBib29sZWFuO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU3RyZWFtVHJhbnNmb3JtQ29udGV4dCkge1xuICAgIHRoaXMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMgPSBvcHRpb25zLmhhc0luc2VydGFibGVTdHJlYW1zO1xuICAgIHRoaXMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaztcbiAgICB0aGlzLmVuY29kZWRWaWRlb1N0cmVhbVNpbmsgPSBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbms7XG4gICAgdGhpcy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID0gb3B0aW9ucy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuQ29udGV4dCB7XG4gIHRva2VuOiBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICB0b2tlbkV4cGlyaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy50b2tlbiA9IG5ldyBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+KHRva2VuKTtcbiAgICB0aGlzLnRva2VuRXhwaXJpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdERpc2NvdmVyeVVyaSA9ICdodHRwczovL3BjYXN0LnBoZW5peHJ0cy5jb20vcGNhc3QvZW5kUG9pbnRzJztcblxuZXhwb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVNb2RlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZU1vZGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSk6IEJpdHJhdGVNb2RlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlTW9kZSkge1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Ob3JtYWw6XG4gICAgICAgIHJldHVybiAnTm9ybWFsJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuRm9yY2U6XG4gICAgICAgIHJldHVybiAnRm9yY2UnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlTW9kZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVTdGF0ZSwgQml0cmF0ZVN0YXRlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZVN0YXRlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlKTogQml0cmF0ZVN0YXRlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlU3RhdGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLktlZXA6XG4gICAgICAgIHJldHVybiAnS2VlcCc7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgcmV0dXJuIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlTZXJ2aWNlID0gbmV3IERpc2NvdmVyeVNlcnZpY2UodXJpKTtcbiAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9IGRpc2NvdmVyeVNlcnZpY2UuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQoKTtcbiAgICBjb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID09PSBjYWNoZWRWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgICAgIH1cbiAgICAgIH0sIGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gIH1cblxuICBzdGF0aWMgY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQodXJpOiBVUkwpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgd2l0aCBubyBkYXRhIFske3VybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXNTdHJpbmcuc3BsaXQoJywnKTtcblxuICAgIHJldHVybiBlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IG5ldyBFbmRQb2ludChlbmRQb2ludCwgdGltZW91dCkpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQodGltZW91dDogbnVtYmVyID0gZGVmYXVsdFRpbWVvdXQpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gRGlzY292ZXJ5VXJpLmJ1aWxkRGlzY292ZXJ5VXJsKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXdhaXQgdGhpcy5kaXNjb3Zlck5lYXJieUVuZFBvaW50cyhuZXcgVVJMKHVybCksIHRpbWVvdXQpO1xuICAgIGxldCBmYWlsZWRSZXF1ZXN0cyA9IDA7XG4gICAgY29uc3QgcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoZmFpbGVkUmVxdWVzdHMgPj0gZW5kUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICByZWplY3QoYERpc2NvdmVyeSBvZiBbJHtlbmRQb2ludHMubGVuZ3RofV0gZW5kcG9pbnRzIGZyb20gWyR7dXJsfV0gZmFpbGVkLCBwcmV2ZW50aW5nIGl0IGZyb20gY29tcGxldGluZ2ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gYXdhaXQgUHJvbWlzZS5yYWNlKGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gZW5kUG9pbnRcbiAgICAgIC5waW5nKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBwaW5nIGVuZCBwb2ludCBbJXNdJywgZW5kUG9pbnQsIGUpO1xuXG4gICAgICAgIGZhaWxlZFJlcXVlc3RzKys7XG5cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4odGltZSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyZWQgZW5kIHBvaW50IFslc10gd2l0aCB0aW1lIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpLCB0aW1lKTtcbiAgICAgICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgICAgICBydW50aW1lOiAobm93IC0gU0RLLnBhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lIHx8IDB9LFxuICAgICAgICAgIHJlc291cmNlOiBlbmRQb2ludC50b1N0cmluZygpLFxuICAgICAgICAgIGtpbmQ6ICdwaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQ7XG4gICAgICB9KSkpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5VXJpIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Rpc2NvdmVyeVVyaTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPihkZWZhdWx0RGlzY292ZXJ5VXJpKTtcblxuICBzdGF0aWMgZ2V0IHVyaSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnlVcmkuX2Rpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZERpc2NvdmVyeVVybCh1cmk6IFVSTCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmkudG9TdHJpbmcoKSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJsLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydpbnRlbnRpb25zJywgaW50ZW50aW9uc10sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5pbXBvcnQge1xuICBJU3Vic2NyaWJlUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lEZXN0cm95U3RyZWFtUmVxdWVzdCwgSURlc3Ryb3lTdHJlYW1SZXNwb25zZX0gZnJvbSAnLi4vYXBpL0Rlc3Ryb3lTdHJlYW0nO1xuaW1wb3J0IHtJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QsIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9BZGRJY2VDYW5kaWRhdGVzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gJy4uLy4uL2Vudmlyb25tZW50L1BhcmFtZXRlcnMnO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlLCBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgQml0cmF0ZU1vZGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZU1vZGVNYXBwaW5nJztcbmltcG9ydCBCaXRyYXRlU3RhdGVNYXBwaW5nIGZyb20gJy4vQml0cmF0ZVN0YXRlTWFwcGluZyc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQge1xuICBJUHVibGlzaFJlc3BvbnNlLFxuICBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QsXG4gIElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCxcbiAgUHVibGlzaFN0YXR1c1xufSBmcm9tICcuLi9hcGkvUHVibGlzaCc7XG5cbmNvbnN0IGFwaVZlcnNpb24gPSA3O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVTdGF0dXMgPSAnb2snIHwgJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFJlbW92ZVRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgRGVzdHJveVN0cmVhbVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0ge1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6IFB1Ymxpc2hTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufTtcblxuaW50ZXJmYWNlIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXM7XG4gIHNlc3Npb25EZXNjcmlwdGlvbj86IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmludGVyZmFjZSBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cztcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRQb2ludCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFbmRQb2ludCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3VuZFRyaXBUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdzdWJzY3JpYmUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHB1Ymxpc2gobmFtZTogc3RyaW5nLCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAncHVibGlzaCddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIG5ldyBFcnJvcihgUHVibGlzaCB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogUHVibGlzaFN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBwdWJsaXNoIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbTogSVN0cmVhbSwgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc2NyaXB0aW9uJywgJ3JlbW90ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBuZXcgRXJyb3IoYFNldCByZW1vdGUgZGVzY3JpcHRpb24gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsaW1pdEJpdHJhdGUoXG4gICAgc3RyZWFtOiBJU3RyZWFtLFxuICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyLFxuICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IEJpdHNQZXJTZWNvbmQsXG4gICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUsXG4gICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlLFxuICApOiBQcm9taXNlPElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnYml0cmF0ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZU1hcHBpbmcuY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGUpLFxuICAgICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZSlcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIG5ldyBFcnJvcihgU2V0IGxpbWl0IGJpdHJhdGUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IHNldCBsaW1pdCBiaXRyYXRlIHJlc3BvbnNlIFslc10gaW4gWyVzXSBtcycsIHN0YXR1cywgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4ge3N0YXR1c307XG4gIH1cblxuICBhc3luYyBhZGRJY2VDYW5kaWRhdGVzKHN0cmVhbTogSVN0cmVhbSwgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10sIGRpc2NvdmVyeUNvbXBsZXRlZDogYm9vbGVhbiwgb3B0aW9uczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2ljZScsICdjYW5kaWRhdGVzJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgY2FuZGlkYXRlcyxcbiAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBuZXcgRXJyb3IoYEFkZCBpY2UgY2FuZGlkYXRlcyB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGFkZCBJQ0UgY2FuZGlkYXRlcyByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW0oc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgRGVsZXRlIHN0cmVhbSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHN0cmVhbScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBkZXN0cm95IHN0cmVhbSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBkZXN0cm95U3RyZWFtUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW1PblVubW91bnQoc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbmF2aWdhdG9yPy5zZW5kQmVhY29uKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgbmF2aWdhdG9yLnNlbmRCZWFjb24odXJsLCBmb3JtRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVXJsKHBhdGg6IHN0cmluZ1tdKTogVVJMIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgcGF0aEFzQXJyYXkgPSB1cmkucGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIHBhdGhBc0FycmF5Lmxlbmd0aCA9IHBhdGhBc0FycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICB1cmkucGF0aG5hbWUgPSBwYXRoQXNBcnJheS5jb25jYXQoLi4ucGF0aCkuam9pbignLycpO1xuXG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQaW5nVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVyaS5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd0eXBlJywgJ2h0dHAnXSwgWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnaW50ZW50aW9ucycsIGludGVudGlvbnNdLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFB1Ymxpc2hTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTdWJzY3JpYmVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IERlc3Ryb3lTdHJlYW1TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU3Vic2NyaWJlUmVzcG9uc2U7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2U6IElTdWJzY3JpYmVSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLmxhZyA9IGRhdGEubGFnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElQdWJsaXNoUmVzcG9uc2U7XG4gICAgY29uc3QgcHVibGlzaFJlc3BvbnNlOiBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHB1Ymxpc2hSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHtpY2VTZXJ2ZXJzOiBbXX07XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9IGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICB1cmxzOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSBjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSBjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y0NvbmZpZ3VyYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2hhbm5lbFN0YXRlfSBmcm9tICcuLi9jaGFubmVscyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENodW5rZWRTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NodW5rZWRTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfc3RyZWFtU3RhdGlzdGljczogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIHByaXZhdGUgX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IElEaXNwb3NhYmxlPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSlcbiAgICAgIC50aGVuKGVuZFBvaW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZmVyU2RwID0gY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgb3JpZ2luU3RhcnRUaW1lOiBEYXRlLm5vdygpIC0gbGFnICsgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDIsXG4gICAgICAgICAgbGFnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcuc3RhcnQodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgb2ZmZXJTZHAsIG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4ocGxheWVyID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGxheWVyO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDaHVua2VkU3RyZWFtaW5nIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb25pdG9yKHBsYXllcjogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0cmVhbVN0YXRpc3RpY3MgPSBDaHVua2VkU3RyZWFtaW5nLmdldFN0YXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQrKztcblxuICAgICAgICBpZiAodGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA+IDYpIHtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcyA9IG5ld1N0cmVhbVN0YXRpc3RpY3M7XG4gICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcbiAgICB9LCAxMDAwKTtcblxuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBXZWJQbGF5ZXIgZnJvbSAnLi9XZWJQbGF5ZXInO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IFNoYWthUGxheWVyIGZyb20gJy4vU2hha2FQbGF5ZXInO1xuaW1wb3J0IEhsc1BsYXllciBmcm9tICcuL0hsc1BsYXllcic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIENodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcywgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcblxuZXhwb3J0IGNsYXNzIENodW5rZWRTdHJlYW1pbmcge1xuICBwcml2YXRlIHN0YXRpYyBfcGVuZGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzUGxheWVyOiBIbHNQbGF5ZXJUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfcGhlbml4V2ViUGxheWVyOiBXZWJQbGF5ZXJUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2E6IFNoYWthVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIHN0YXRpYyBfcGxheWVyOiBTaGFrYVBsYXllciB8IFdlYlBsYXllciB8IEhsc1BsYXllcjtcblxuICBzdGF0aWMgZ2V0IGhsc1BsYXllcigpOiBIbHNQbGF5ZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5faGxzUGxheWVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBwaGVuaXhXZWJQbGF5ZXIoKTogV2ViUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BoZW5peFdlYlBsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2EoKTogU2hha2FUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2hha2E7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgc3RhcnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucyk6IFByb21pc2U8SURpc3Bvc2FibGU+IHtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGlmICh0aGlzLl9obHNQbGF5ZXIgfHwgdGhpcy5fc2hha2EgfHwgdGhpcy5fcGhlbml4V2ViUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApO1xuICAgIH1cblxuICAgIGlmICghU0RLLndlYlBsYXllckxvYWRlciAmJiAhU0RLLnNoYWthUGxheWVyTG9hZGVyICYmICFTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcGxheWVyIGlzIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFTREsud2ViUGxheWVyTG9hZGVyICYmICFTREsuc2hha2FQbGF5ZXJMb2FkZXIgJiYgIVNESy5obHNKc0xvYWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZC1mZWF0dXJlLCBhZGQgc3RyZWFtIHBsYXllcicpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGlmIChTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5obHNKc0xvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX2hsc1BsYXllciA9IHBsYXllcjtcblxuICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoU0RLLndlYlBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLndlYlBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3BoZW5peFdlYlBsYXllciA9IHBsYXllcjtcblxuICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoU0RLLnNoYWthUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsuc2hha2FQbGF5ZXJMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9zaGFrYSA9IHBsYXllcjtcblxuICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwbGF5KFBsYXllcjogdHlwZW9mIFdlYlBsYXllciB8IHR5cGVvZiBTaGFrYVBsYXllciB8IHR5cGVvZiBIbHNQbGF5ZXIsIHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpOiBJRGlzcG9zYWJsZSB7XG4gICAgY29uc3QgZGFzaE1hbmlmZXN0VXJsTWF0Y2ggPSBvZmZlclNkcC5tYXRjaCgvYT14LXBsYXlsaXN0OihbXlxcbl0qWy5dbXBkXFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IGhsc01hbmlmZXN0VXJsTWF0Y2ggPSBvZmZlclNkcC5tYXRjaCgvYT14LXBsYXlsaXN0OihbXlxcbl0qWy5dbTN1OFxcPz9bXlxcc10qKS9tKTtcbiAgICBjb25zdCBtYW5pZmVzdFVybCA9IGRhc2hNYW5pZmVzdFVybE1hdGNoICYmIGRhc2hNYW5pZmVzdFVybE1hdGNoWzFdID8gZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gOiAnJztcbiAgICBjb25zdCBwbGF5bGlzdFVybCA9IGhsc01hbmlmZXN0VXJsTWF0Y2ggJiYgaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA/IGhsc01hbmlmZXN0VXJsTWF0Y2hbMV0gOiAnJztcblxuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHMgfHwgKHRoaXMuX2hsc1BsYXllciAmJiB0aGlzLl9obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKSkpIHtcbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnaGxzJywgc3RyZWFtSWQsIHBsYXlsaXN0VXJsLCBvcHRpb25zKTtcblxuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdkYXNoJywgc3RyZWFtSWQsIG1hbmlmZXN0VXJsLCBvcHRpb25zKTtcblxuICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGxvYWRlZCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcpOiBJRGlzcG9zYWJsZSB7XG4gICAgaWYgKCF0aGlzLl9zaGFrYSAmJiAhdGhpcy5fcGhlbml4V2ViUGxheWVyICYmICF0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KEhsc1BsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoV2ViUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NoYWthKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFNoYWthUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge0lIbHNQbGF5ZXJUeXBlfSBmcm9tICcuL0lIbHNQbGF5ZXInO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIbHNQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSUhsc1BsYXllclR5cGU7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIpIHtcbiAgICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllcih7XG4gICAgICAgICAgZW5hYmxlV29ya2VyOiB0cnVlLFxuICAgICAgICAgIG1heEJ1ZmZlckxlbmd0aDogMSxcbiAgICAgICAgICBsaXZlQmFja0J1ZmZlckxlbmd0aDogMCxcbiAgICAgICAgICBsaXZlU3luY0R1cmF0aW9uOiA3LFxuICAgICAgICAgIGxpdmVEdXJhdGlvbkluZmluaXR5OiB0cnVlLFxuICAgICAgICAgIGxpdmVNYXhMYXRlbmN5RHVyYXRpb246IEluZmluaXR5LFxuICAgICAgICAgIGhpZ2hCdWZmZXJXYXRjaGRvZ1BlcmlvZDogMVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmxvYWRTb3VyY2UodGhpcy5fbWFuaWZlc3RVUkkpO1xuICAgICAgICB0aGlzLl9wbGF5ZXIuYXR0YWNoTWVkaWEodGhpcy5fdmlkZW9FbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmNhblBsYXlUeXBlKCdhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCcpKSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5zcmMgPSB0aGlzLl9tYW5pZmVzdFVSSTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIgJiYgQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKTtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0V2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRIZWlnaHQsXG4gICAgICBjdXJyZW50VGltZTogdGhpcy5fcGxheWVyLm1lZGlhLmN1cnJlbnRUaW1lLFxuICAgICAgbGFnOiAwLjAsXG4gICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGUsXG4gICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdJRExFJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdFUlJPUicgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUgPT09ICdFTkRFRCcpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnTE9BRElORycpIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdXQUlUSU5HJykpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIHN0YXRpc3RpY3MubGFnID0gTWF0aC5tYXgoMC4wLCAoY3VycmVudFRpbWUgKyAodGhpcy5fb3B0aW9ucy5sYWcgLyAxMDAwKSkgLSB0cnVlQ3VycmVudFRpbWUpO1xuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIgJiYgdGhpcy5fcGxheWVyLmRlc3Ryb3kpIHtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBlbnVtIE5ldHdvcmtTdGF0ZXMge1xuICBOZXR3b3JrRW1wdHksXG4gIE5ldHdvcmtJZGxlLFxuICBOZXR3b3JrTG9hZGluZyxcbiAgTmV0d29ya05vU291cmNlXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQnO1xuaW1wb3J0IEluc2VydGFibGVTdHJlYW1zIGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0luc2VydGFibGVTdHJlYW1zJztcblxuY29uc3QgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwgPSAxMDA7XG5jb25zdCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0ID0gMzAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWxUaW1lU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdSZWFsVGltZVN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IHBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0ID0gc3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXAsIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigncmVjdm9ubHknLCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpXG4gICAgICAgIC50aGVuKCh7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259KSA9PiB7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9jYWxPZmZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICBdKVxuICAgICAgLnRoZW4oKFtlbmRQb2ludCwge2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufV0pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbVByb21pc2UgPSBuZXcgUHJvbWlzZTxNZWRpYVN0cmVhbT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50Lm9uVHJhY2tEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBzdHJlYW0gPSBlLnN0cmVhbXNbMF07XG5cbiAgICAgICAgICAgICAgICAgIGlmIChlLnRyYWNrLmtpbmQgPT09ICd2aWRlbycgJiYgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIEluc2VydGFibGVTdHJlYW1zLnNldHVwRW5jb2RlZFN0cmVhbVNpbmsodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rLCBlLnRyYWNrLCBlLnJlY2VpdmVyKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS50cmFjay5raW5kID09PSAnYXVkaW8nICYmIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luaykge1xuICAgICAgICAgICAgICAgICAgICBJbnNlcnRhYmxlU3RyZWFtcy5zZXR1cEVuY29kZWRTdHJlYW1TaW5rKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luaywgZS50cmFjaywgZS5yZWNlaXZlcik7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBJbnNlcnRhYmxlU3RyZWFtcy5zZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLCBzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgdHJhY2tMaXN0ZW5lciA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgICBpZiAoZS5zdHJlYW1zKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSk7XG4gICAgICAgICAgICAgIH0sIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJWpdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGFuc3dlcik7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuc3VjY2Vzcyh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG1lZGlhU3RyZWFtUHJvbWlzZTtcbiAgICAgICAgICAgIH0pLnRoZW4obWVkaWFTdHJlYW0gPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvciA9IG5ldyBSdGNDb25uZWN0aW9uTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW0sIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyA0KTtcblxuICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSBydGNDb25uZWN0aW9uTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiAhdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmF1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb1RyYWNrRmFpbGVkICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEF1ZGlvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBWaWRlbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgcnRjQ29ubmVjdGlvbk1vbml0b3IuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciB0cmFjayBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5UnRjQ29uZmlndXJhdGlvbihcbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsLFxuICAgIHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIGlmICghb3B0aW9uYWxQZWVyQ29ubmVjdGlvbikge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbiA9IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRydW5jYXRlSWNlU2VydmVycyhydGNDb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuIFNESy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UnRjQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLm9wdGlvbmFsUGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpLFxuICAgICAgLi4ucnRjQ29uZmlndXJhdGlvblxuICAgIH07XG5cbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24obmV3UnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICByZXR1cm4gb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGlmIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIDwgU0RLLm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgfHwgIVNESy5hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAgIGNvbnN0IGlzQ2xpZW50T2ZmZXJGbG93ID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb24/LnR5cGUgPT09ICdvZmZlcic7XG5cbiAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhaXNDbGllbnRPZmZlckZsb3dcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZWNvbm5lY3RpbmcgcGVlciBjb25uZWN0aW9uIGJ5IHJlc3RhcnRpbmcgSUNFJyk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gICAgICBjb25zdCBpZ25vcmVkID0gcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIoe2ljZVJlc3RhcnQ6IHRydWV9KS50aGVuKG9mZmVyID0+IHtcbiAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24ob2ZmZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbicsIGUpO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGFmdGVyIFslc10gYXR0ZW1wdHMsIHBlcmZvcm1pbmcgZnVsbCByZWNvdmVyeScsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgcmV0cnlDYWxsYmFjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbnR5cGUgU2hha2FPcHRpb25zID0ge1xuICBhYnI6IHtcbiAgICBkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGU6IG51bWJlcjtcbiAgfTtcbiAgbWFuaWZlc3Q6IHtcbiAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgIHRpbWVvdXQ6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICBzdHJlYW1pbmc6IHtcbiAgICByZWJ1ZmZlcmluZ0dvYWw6IG51bWJlcjtcbiAgICBidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyQmVoaW5kOiBudW1iZXI7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgICBtYXhBdHRlbXB0czogbnVtYmVyO1xuICAgICAgYmFja29mZkZhY3RvcjogbnVtYmVyO1xuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElTaGFrYSB7XG4gIGNvbmZpZ3VyZTogKG86IFNoYWthT3B0aW9ucykgPT4gdm9pZDtcbiAgbG9hZDogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0czogKCkgPT4gQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gIHVubG9hZDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hha2FQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2hha2FQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElTaGFrYTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLnNoYWthKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zOiBTaGFrYU9wdGlvbnMgPSB7XG4gICAgICAgIGFicjoge2RlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogMjAwMDAwMH0sXG4gICAgICAgIG1hbmlmZXN0OiB7cmV0cnlQYXJhbWV0ZXJzOiB7dGltZW91dDogMTAwMDB9fSxcbiAgICAgICAgc3RyZWFtaW5nOiB7XG4gICAgICAgICAgcmVidWZmZXJpbmdHb2FsOiAyLFxuICAgICAgICAgIGJ1ZmZlcmluZ0dvYWw6IDEwLFxuICAgICAgICAgIGJ1ZmZlckJlaGluZDogMzAsXG4gICAgICAgICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAxMCxcbiAgICAgICAgICAgIGJhY2tvZmZGYWN0b3I6IDEuMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IENodW5rZWRTdHJlYW1pbmcuc2hha2EuUGxheWVyKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB0aGlzLmxvYWRQbGF5ZXIocGxheWVyT3B0aW9ucyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgICBsYWc6IDAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIC4uLnRoaXMuX3BsYXllci5nZXRTdGF0cygpLFxuICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICBsYWc6IDBcbiAgICB9O1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudCkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBsYWc7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci51bmxvYWQoKTtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBsYXllcihwbGF5ZXJDb25maWc6IFNoYWthT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5jb25maWd1cmUocGxheWVyQ29uZmlnKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wbGF5ZXIubG9hZCh0aGlzLl9tYW5pZmVzdFVSSSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEQVNIIGxpdmUgc3RyZWFtIGhhcyBiZWVuIGxvYWRlZCcsIHRoaXMuX3N0cmVhbUlkKTtcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KCk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRXJyb3Igd2hpbGUgbG9hZGluZyBEQVNIIGxpdmUgc3RyZWFtIFslc10nLCB0aGlzLl9zdHJlYW1JZCwgZS5jb2RlLCBlKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCBDaHVua2VkU3RyZWFtIGZyb20gJy4vQ2h1bmtlZFN0cmVhbSc7XG5pbXBvcnQgUmVhbFRpbWVTdHJlYW0gZnJvbSAnLi9SZWFsVGltZVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1GYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1pbmcnKTtcblxuICBzdGF0aWMgY3JlYXRlKHRva2VuOiBzdHJpbmcsIGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHtcbiAgICBjb25zdCB0b2tlbkNhcGFiaWxpdGllcyA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLmNhcGFiaWxpdGllcztcblxuICAgIGlmICh0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygncnRtcCcpKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1NESyBkb2VzIG5vdCBzdXBwb3J0IFJUTVAgcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpIHx8IHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdvbi1kZW1hbmQnKSkge1xuICAgICAgcmV0dXJuIG5ldyBDaHVua2VkU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlYWxUaW1lU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJlYW1GYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ30gZnJvbSAnLi9DaHVua2VkU3RyZWFtaW5nJztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ09wdGlvbnMsIENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuY29uc3QgYmFuZHdpZHRoVG9TdGFydEF0ID0gMzAwMDAwMDsgLy8gQ29ycmVzcG9uZHMgdG8gNzIwcCBpbiBtb3N0IHNldHVwc1xuY29uc3QgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgPSAxNTAwMDtcblxudHlwZSBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyID0gKGV2dDogV2ViUGxheWVyRXZlbnQpID0+IHZvaWQ7XG50eXBlIFdlYlBsYXllckV2ZW50ID0ge1xuICBjb2RlOiBudW1iZXI7XG4gIHNldmVyaXR5OiBudW1iZXI7XG4gIGVycm9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElXZWJQbGF5ZXIge1xuICBzdGFydDogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIpOiB2b2lkO1xuICBkaXNwb3NlKCk6IHZvaWQ7XG4gIGVycm9yczoge1xuICAgIHNldmVyaXR5OiB7XG4gICAgICBSRUNPVkVSQUJMRTogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignV2ViUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJV2ViUGxheWVyO1xuICBwcml2YXRlIF9sYXN0UmVsb2FkVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zID0ge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBiYW5kd2lkdGhUb1N0YXJ0QXRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5XZWJQbGF5ZXIodGhpcy5fbG9nZ2VyLCB0aGlzLl92aWRlb0VsZW1lbnQsIHBsYXllck9wdGlvbnMpO1xuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KHRoaXMuX21hbmlmZXN0VVJJKTtcblxuICAgICAgdGhpcy5fcGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JPYmplY3QgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5SZWxvYWQoKSAmJiBlcnJvck9iamVjdCAmJiAoZXJyb3JPYmplY3QuY29kZSA9PT0gMyB8fCBlcnJvck9iamVjdC5zZXZlcml0eSA9PT0gQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuZXJyb3JzLnNldmVyaXR5LlJFQ09WRVJBQkxFKSkge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSBhZnRlciBlcnJvciBldmVudCBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgICAgIHRoaXMucmVsb2FkSWZBYmxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZWxvYWQgd2l0aCBlcnJvciBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIgJiYgQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuaXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlLFxuICAgICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lIHx8IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXTtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5pc05hdGl2ZSAmJiBzdGF0aXN0aWNzLmRlbGl2ZXJ5VHlwZSA9PT0gJ0hscycpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSAtIHN0YXRpc3RpY3MubGFnO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5jdXJyZW50VGltZSkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5pc05hdGl2ZSkge1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5SZWxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQgPSAhdGhpcy5fbGFzdFJlbG9hZFRpbWUgfHwgRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RSZWxvYWRUaW1lID4gbWluVGltZUJlZm9yZU5leHRSZWxvYWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fdmlkZW9FbGVtZW50ICYmIHRoaXMuX3BsYXllciAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoICE9PSAwICYmIGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRJZkFibGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbG9hZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gdGhhdCB3YXMgYWN0aXZlIGZvciBhdCBsZWFzdCBbJXNdIHNlY29uZHMnLCB0aGlzLl9zdHJlYW1JZCwgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgLyAxMDAwKTtcblxuICAgIHRoaXMuX2xhc3RSZWxvYWRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4vSUVuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuL0lTdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluc2VydGFibGVTdHJlYW1zIHtcbiAgc3RhdGljIHNldHVwRW5jb2RlZFN0cmVhbVNpbmsoc3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rLCB0cmFjazogTWVkaWFTdHJlYW1UcmFjaywgcmVjZWl2ZXI6IFJUQ1J0cFJlY2VpdmVyKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGZyYW1lID0+IHN0cmVhbVNpbmsoZnJhbWUpfSk7XG4gICAgY29uc3QgcmVjZWl2ZXJTdHJlYW1zID0gcmVjZWl2ZXIuY3JlYXRlRW5jb2RlZFN0cmVhbXMoKTtcbiAgICBjb25zdCBzb3VyY2UgPSByZWNlaXZlclN0cmVhbXMucmVhZGFibGU7XG4gICAgY29uc3Qgc2luayA9IHJlY2VpdmVyU3RyZWFtcy53cml0YWJsZTtcblxuICAgIHNvdXJjZVxuICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgLnBpcGVUbyhzaW5rKTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKG1vZGU6ICdhdWRpbycgfCAndmlkZW8nLCBpdGVtOiBJRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBFbmNvZGVkIFN0cmVhbSBTaW5rIGZ1bmN0aW9uIHR5cGUuIEZvdW5kIFske3R5cGVvZiBpdGVtfV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IEVuY29kZWQgU3RyZWFtIFNpbmsgZnVuY3Rpb24gcGFyYW1ldGVyIGxlbmd0aC4gRXhwZWN0ZWQgMS4gRm91bmQgWyR7aXRlbS5sZW5ndGh9XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDogJ29rJ1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgc2V0dXBNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKHRyYW5zZm9ybTogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+LCBzdHJlYW06IE1lZGlhU3RyZWFtKSB7XG4gICAgY29uc3QgdmlkZW9UcmFjayA9IHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdO1xuXG4gICAgaWYgKHZpZGVvVHJhY2spIHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtfSk7XG4gICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2s6IHZpZGVvVHJhY2t9KTtcbiAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiAndmlkZW8nfSk7XG4gICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICBzb3VyY2VcbiAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZFN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuXG4gICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgc3RyZWFtLmdldEF1ZGlvVHJhY2tzKCkuZm9yRWFjaChhdWRpb1RyYWNrID0+IHtcbiAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soYXVkaW9UcmFjayk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkU3RyZWFtO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKGl0ZW06IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPikge1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCB2aWRlbyBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHR5cGUuIEZvdW5kIFske3R5cGVvZiBpdGVtfV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gMikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCB2aWRlbyBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDEuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnNlcnRhYmxlU3RyZWFtcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19CVUlMRF9WRVJTSU9OX186IHN0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVyc2lvbk1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBfZGVmYXVsdFZlcnNpb24gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgc3RhdGljIGdldCBzZGtWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBfX0JVSUxEX1ZFUlNJT05fXztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZlcnNpb247XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5U2VydmljZSBmcm9tICcuL1RlbGVtZXRyeVNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuLi9sb2dnZXIvSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5QXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlTZXJ2aWNlOiBUZWxlbWV0cnlTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeTtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZDtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZDtcbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlID0gbmV3IFRlbGVtZXRyeVNlcnZpY2UodGVsZW1ldHJ5Q29uZmlndXJhdGlvbik7XG4gIH1cblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZS5wdXNoKGxvZ0xldmVsLCBtZXNzYWdlLCBjYXRlZ29yeSwgZGF0ZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L2xvZ3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHRlbGVtZXRyeVVybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIHRlbGVtZXRyeVVybC5wYXRobmFtZSA9IHRlbGVtZXRyeVVybC5wYXRobmFtZSArICcvbG9ncyc7XG5cbiAgICB0aGlzLl91cmwgPSB0ZWxlbWV0cnlVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSA4MTkyO1xuXG5pbnRlcmZhY2UgSUxvZ0l0ZW0ge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBsZXZlbDogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gIHByaXZhdGUgX2xvZ3M6IEFycmF5PElMb2dJdGVtPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgX2RvbWFpbiA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBsb2dSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcC50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgbGV2ZWw6IExvZ2dpbmdMZXZlbFtsb2dMZXZlbF0sXG4gICAgICBjYXRlZ29yeSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpblxuICAgIH07XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHRoaXMuX2xvZ3MucHVzaChsb2dSZWNvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2dzLnVuc2hpZnQobG9nUmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9ncyhsb2dNZXNzYWdlczogQXJyYXk8SUxvZ0l0ZW0+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBsb2dNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9nc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9sb2dzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBudW1iZXJPZkxvZ3NUb1NlbmQgPSAwO1xuICAgIGxldCBzaXplT2ZMb2dzVG9TZW5kID0gMDtcblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBnZXRMb2dTaXplID0gKGxvZzogSUxvZ0l0ZW0pOiBudW1iZXIgPT4gT2JqZWN0LnZhbHVlcyhsb2cpXG4gICAgICAucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIChpdGVtID8gaXRlbS5sZW5ndGggOiAwKSwgMCk7XG5cbiAgICB3aGlsZSAodGhpcy5fbG9ncy5sZW5ndGggPiBudW1iZXJPZkxvZ3NUb1NlbmQgJiYgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgc2l6ZU9mTG9nc1RvU2VuZCA8IHJlcXVlc3RTaXplTGltaXQpIHtcbiAgICAgIHNpemVPZkxvZ3NUb1NlbmQgKz0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kKys7XG4gICAgfVxuXG4gICAgaWYgKCFudW1iZXJPZkxvZ3NUb1NlbmQpIHtcbiAgICAgIHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlID0gdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsXG4gICAgICAgIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIChyZXF1ZXN0U2l6ZUxpbWl0IC0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pKSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQgPSAxO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ01lc3NhZ2VzID0gdGhpcy5fbG9ncy5zbGljZSgwLCBudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgdGhpcy5fbG9ncyA9IHRoaXMuX2xvZ3Muc2xpY2UobnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRMb2dzKGxvZ01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVyYXRpb25zIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkdXJhdGlvbiA9IDApIHtcbiAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICB9XG5cbiAgdG9Jc29TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fZHVyYXRpb24gPT09IDApIHtcbiAgICAgIHJldHVybiAnUDBTJztcbiAgICB9XG5cbiAgICBjb25zdCBpc05lZ2F0aXZlID0gdGhpcy5fZHVyYXRpb24gPCAwO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gaXNOZWdhdGl2ZSA/IE1hdGguYWJzKHRoaXMuX2R1cmF0aW9uKSA6IHRoaXMuX2R1cmF0aW9uO1xuICAgIGxldCBvZmZzZXQgPSBNYXRoLmZsb29yKGR1cmF0aW9uKTtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBvZmZzZXQgJSAxMDAwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyAxMDAwKTtcblxuICAgIGNvbnN0IHNlY29uZHMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgbWludXRlcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBob3VycyA9IG9mZnNldCAlIDI0O1xuICAgIGNvbnN0IHBhcnRzID0gWydQVCddO1xuXG4gICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy0nKTtcbiAgICB9XG5cbiAgICBpZiAoaG91cnMpIHtcbiAgICAgIHBhcnRzLnB1c2goaG91cnMgKyAnSCcpO1xuICAgIH1cblxuICAgIGlmIChtaW51dGVzKSB7XG4gICAgICBwYXJ0cy5wdXNoKG1pbnV0ZXMgKyAnTScpO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmRzIHx8IG1pbGxpc2Vjb25kcykge1xuICAgICAgcGFydHMucHVzaChTdHJpbmcoc2Vjb25kcykpO1xuXG4gICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIHBhcnRzLnB1c2goJy4nICsgdGhpcy5wYWRTdGFydChtaWxsaXNlY29uZHMudG9TdHJpbmcoKSwgMywgJzAnKSk7XG4gICAgICB9XG5cbiAgICAgIHBhcnRzLnB1c2goJ1MnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMuam9pbignJyk7XG4gIH1cblxuICBwYWRTdGFydChpdGVtOiBzdHJpbmcsIHRhcmdldExlbmd0aDogbnVtYmVyLCBwYWRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoID4+IDA7XG4gICAgcGFkU3RyaW5nID0gU3RyaW5nKCh0eXBlb2YgcGFkU3RyaW5nICE9PSAndW5kZWZpbmVkJyA/IHBhZFN0cmluZyA6ICcgJykpO1xuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggLSBpdGVtLmxlbmd0aDtcblxuICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFkU3RyaW5nLnNsaWNlKDAsIHRhcmdldExlbmd0aCkgKyBpdGVtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMjAwMDtcbmNvbnN0IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMTtcbmNvbnN0IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMzAwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvbmVudGlhbEJhY2tvZmYge1xuICBwcml2YXRlIHJlYWRvbmx5IF9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kXG4gICkge1xuICAgIHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICB9XG5cbiAgZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudChmYWlsdXJlQ291bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYmFja29mZkludGVydmFsSW5TZWNvbmRzID0gdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCAvIDEwMDA7XG4gICAgY29uc3QgcmFuZG9taXphdGlvbiA9IDAuNSArICgwLjUgKiBNYXRoLnJhbmRvbSgpKTsgLy8gWzAuNSwgMSlcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmYgPSBNYXRoLnBvdyhiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMsIGZhaWx1cmVDb3VudCAtIDIpOyAvLyAgWzEvNCAxLzIgMSAyIDQgOCAuLi4uXVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uID0gTWF0aC5mbG9vcihleHBvbmVudGlhbEJhY2tvZmYpICogcmFuZG9taXphdGlvbjtcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQgPSBNYXRoLmNlaWwoTWF0aC5tYXgoZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gKiAxMDAwLCB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKSk7XG5cbiAgICByZXR1cm4gTWF0aC5taW4oZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kLCB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fbmV0d29ya01vbml0b3IuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuaXNGb3JlZ3JvdW5kLnN1YnNjcmliZShpc0ZvcmVncm91bmQgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5ydHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdGVuT25TdHJlYW1TZXR1cCgpOiBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbVNldHVwTGlzdGVuZXIodGhpcy5fcGFnZUxvYWRUaW1lKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdENoYW5nZSA9IHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlkZW9UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfbGlzdGVuVG9GaXJzdFRpbWU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JDb250aW51YXRpb246IChldmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbGFzdFByb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcjogRGlzcG9zYWJsZTtcbiAgcHJpdmF0ZSBfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyOiBEaXNwb3NhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQpOiB2b2lkID0+IHRoaXMub25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG5cbiAgICB0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcik7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2luY2VQYWdlTG9hZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxUaW1lVG9GaXJzdEZyYW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG4gICAgdGhpcy5wdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX2NoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBDaGFubmVsIGNyZWF0aW9uIHRvIGZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU3RhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZpZGVvU3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuU3RhbGxlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyBzdGFsbGVkJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHRpZihfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdKSB7XG5cdFx0cmV0dXJuIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0uZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IG1vZHVsZVsnZGVmYXVsdCddIDpcblx0XHQoKSA9PiBtb2R1bGU7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIG1vZHVsZSBleHBvcnRzIG11c3QgYmUgcmV0dXJuZWQgZnJvbSBydW50aW1lIHNvIGVudHJ5IGlubGluaW5nIGlzIGRpc2FibGVkXG4vLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbnJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
10426
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvUGFyYW1ldGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGVMaXN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1N0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9BcHBlbmRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Db25zb2xlQXBwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ1RocmVzaG9sZC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbWluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9IbHNQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTmV0d29ya1N0YXRlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TaGFrYVBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1dlYlBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0R1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0V4cG9uZW50aWFsQmFja29mZi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vRGltZW5zaW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9TZXNzaW9uVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9WaWRlb1RlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6WyJkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCIsIkFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiRGlzcG9zYWJsZUxpc3QiLCJEYXRlIiwibm93IiwiX2lzRm9yZWdyb3VuZCIsIlN1YmplY3QiLCJfcmVhZE9ubHlJc0ZvcmVncm91bmQiLCJSZWFkT25seVN1YmplY3QiLCJkZXRlY3RUYWJGb2N1c0NoYW5nZSIsIl9jcmVhdGVDbGFzcyIsImtleSIsImdldCIsInZhbHVlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2UiLCJkaXNwb3NlIiwiX2Rpc3Bvc2FibGVzIiwiX3RoaXMiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnQiLCJfdHlwZW9mIiwibXNIaWRkZW4iLCJ3ZWJraXRIaWRkZW4iLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwiaXNGb3JlZ3JvdW5kIiwic2V0Rm9jdXNTdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhZGQiLCJEaXNwb3NhYmxlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImxpc3RlbkZvckRvY3VtZW50Rm9jdXMiLCJjYWxsIiwiX3RoaXMyIiwiX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCIsIndpbmRvdyIsInNldEludGVydmFsIiwiaGFzRm9jdXMiLCJjbGVhckludGVydmFsIiwiQnJvd3NlckRldGVjdG9yIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIl9icm93c2VyTmFtZSIsIl9icm93c2VyTWFqb3JWZXJzaW9uIiwiX2lzQ2hyb21lNjkiLCJfaXNDaHJvbWU3MCIsIl9pc0Nocm9tZTcxIiwiX2lzQ2hyb21lNzIiLCJfaXNDaHJvbWU3NCIsIl9pc0Nocm9tZTc1IiwiX2lzQ2hyb21lNzYiLCJfaXNDaHJvbWU3NyIsImlzTW9iaWxlIiwiX25hdmlnYXRvciIsInRlc3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsImJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm1hdGNoIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSIsInBhcnNlQnJvd3Nlck5hbWUiLCJicm93c2VyTmFtZUxpc3QiLCJzcGxpdCIsInBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbiIsImJyb3dzZXJWZXJzaW9uTGlzdCIsImZ1bGxWZXJzaW9uIiwiTnVtYmVyIiwibXNpZSIsImluZGV4T2YiLCJjb25jYXQiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInRyaWRlbnQiLCJ2ZXJzaW9uIiwiaW5jbHVkZXMiLCJDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwiZ2V0U3RyaW5nVmFsdWUiLCJuYW1lIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUiLCJkZWZhdWx0U3RyaW5nVmFsdWUiLCJnZXRCb29sZWFuVmFsdWUiLCJ2YWx1ZUZyb21VcmkiLCJkZWZhdWx0Qm9vbGVhblZhbHVlIiwiVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIiwiVGVsZW1ldHJ5RGVmYXVsdCIsIkxvZ2dpbmdMZXZlbE1hcHBpbmciLCJMb2dnZXJEZWZhdWx0cyIsIm1ldGFWYWx1ZSIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRBdHRyaWJ1dGUiLCJ2YWx1ZVVSSVBhcmFtZXRlck5hbWUiLCJVUkxTZWFyY2hQYXJhbXMiLCJsb2NhdGlvbiIsInNlYXJjaCIsInVuZGVmaW5lZCIsIkdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIiwiRXJyb3IiLCJmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uIiwiRmVhdHVyZUVuYWJsZW1lbnQiLCJmb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uIiwicXVldWVNaWNyb3Rhc2siLCJvdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24iLCJzZXRUaW1lb3V0IiwiaW1nIiwiY3JlYXRlRWxlbWVudCIsInNyYyIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIkJsb2IiLCJBcnJheUJ1ZmZlciIsIm9uZXJyb3IiLCJyZXZva2VPYmplY3RVUkwiLCJOZXR3b3JrTW9uaXRvciIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsIl9pc1N1cHBvcnRlZCIsIl9ydHQiLCJfZWZmZWN0aXZlVHlwZSIsIl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZG93bmxpbmsiLCJkb3dubGlua01heCIsImdldEVmZmVjdGl2ZVR5cGUiLCJlZmZlY3RpdmVUeXBlIiwidHlwZSIsImdldFJvdW5kVHJpcFRpbWUiLCJydHQiLCJsaXN0ZW5lciIsIlN0cmVhbVNldHVwTGlzdGVuZXIiLCJwYWdlTG9hZFRpbWUiLCJMb2dnZXJGYWN0b3J5IiwiU0RLIiwiX3N0YXJ0VGltZSIsIl9wYWdlTG9hZFRpbWUiLCJzdWNjZXNzIiwic3RyZWFtSWQiLCJyZWNvcmRTdHJlYW1NZXRyaWMiLCJNZXRyaWNzVHlwZSIsImZhaWwiLCJtZXRyaWNUeXBlIiwiX21ldHJpY1N1Ym1pdHRlZCIsInNldHVwVGltZSIsIm1ldHJpY05hbWUiLCJNZXRyaWNUeXBlIiwiZ2V0TmFtZSIsIm1ldHJpY3NTZXJ2aWNlIiwicHVzaCIsInJ1bnRpbWUiLCJ1aW50NjQiLCJfbG9nZ2VyIiwiaW5mbyIsIkR1cmF0aW9ucyIsInRvSXNvU3RyaW5nIiwiZWRnZUF1dGhUb2tlblByZWZpeCIsIkVkZ2VBdXRoUGFyc2VyIiwicGFyc2VUb2tlbiIsInRva2VuIiwiaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQiLCJlcnJvciIsIkVkZ2VUb2tlbiIsImRlY29kZWRUb2tlbiIsImF0b2IiLCJzdWJzdHIiLCJsZW5ndGgiLCJlZGdlVG9rZW4iLCJKU09OIiwicGFyc2UiLCJlIiwic3RhcnRzV2l0aCIsIl9lZGdlVG9rZW4kdG9rZW4iLCJfZWRnZVRva2VuJHRva2VuMiIsIl9hcHBsaWNhdGlvbklkIiwiYXBwbGljYXRpb25JZCIsIl90b2tlbiIsInVyaSIsImNhcGFiaWxpdGllcyIsIkJ1aWxkRmVhdHVyZXMiLCJfc2VuZExvY2FsQ2FuZGlkYXRlcyIsIl9zZW5kTG9ncyIsIl9zZW5kTWV0cmljcyIsIl9sb2dUb0NvbnNvbGUiLCJhcHBseUZlYXR1cmVzIiwiZmVhdHVyZXMiLCJfX0ZFQVRVUkVTX18iLCJzZW5kTG9jYWxDYW5kaWRhdGVzIiwic2VuZExvZ3MiLCJzZW5kTWV0cmljcyIsImxvZ1RvQ29uc29sZSIsIl9kb2N1bWVudCIsIk1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IiLCJNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yIiwiX1JUQ1J0cFJlY2VpdmVyIiwiX1JUQ1J0cFJlY2VpdmVyJHByb3RvIiwiUlRDUnRwUmVjZWl2ZXIiLCJwcm90b3R5cGUiLCJjcmVhdGVFbmNvZGVkU3RyZWFtcyIsIlBhcmFtZXRlcnMiLCJfZGlzY292ZXJ5UGFyYW1ldGVycyIsImFwcGx5UGFyYW1ldGVycyIsInBhcmFtZXRlcnMiLCJfX1BBUkFNRVRFUlNfXyIsImRpc2NvdmVyeSIsImludGVudGlvbnMiLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJfbGlzdCIsImZvckVhY2giLCJ0b1N0cmluZyIsIlN0cmluZ3MiLCJyYW5kb20iLCJyYW5kb20xM0NoYXJhY3RlcnMiLCJNYXRoIiwibG9vcHMiLCJjZWlsIiwiQXJyYXkiLCJmaWxsIiwicmVkdWNlIiwic3RyaW5nIiwiZnVuYyIsImFzc2VydFVucmVhY2hhYmxlIiwieCIsIkFwcGVuZGVycyIsIl9hcHBlbmRlcnMiLCJhcHBlbmRlciIsInJlbW92ZSIsIml0ZW1zIiwiaXRlbSIsIkNvbnNvbGVBcHBlbmRlciIsInRocmVzaG9sZCIsIl90aHJlc2hvbGQiLCJsb2ciLCJsb2dMZXZlbCIsIm1lc3NhZ2UiLCJjYXRlZ29yeSIsImRhdGUiLCJmdWxsTWVzc2FnZSIsInRvSVNPU3RyaW5nIiwiTG9nZ2luZ0xldmVsIiwiY29uc29sZSIsIkxvZ2dlciIsImFwcGVuZGVycyIsIl9jYXRlZ29yeSIsInRyYWNlIiwiVHJhY2UiLCJfbGVuIiwiYXJndW1lbnRzIiwiYXJncyIsIl9rZXkiLCJkZWJ1ZyIsIkRlYnVnIiwiX2xlbjIiLCJfa2V5MiIsIkluZm8iLCJfbGVuMyIsIl9rZXkzIiwid2FybiIsIldhcm4iLCJfbGVuNCIsIl9rZXk0IiwiX2xlbjUiLCJfa2V5NSIsImZhdGFsIiwiRmF0YWwiLCJfbGVuNiIsIl9rZXk2IiwibGV2ZWwiLCJyZXBsYWNlUGxhY2Vob2xkZXJzIiwicmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyIsImluZGV4IiwicmVwbGFjZUFyZ3VtZW50Iiwic3BsaWNlIiwic3RyaW5naWZ5IiwiYWNjdW11bGF0b3IiLCJjdXJyZW50VmFsdWUiLCJhcnJheSIsInN0YWNrIiwiYXJnIiwiY2FjaGUiLCJPYmplY3QiLCJhcmd1bWVudCIsImRhdGEiLCJ0b1N0cmluZ1N0ciIsIl90ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiZ2V0TG9nZ2VyIiwibG9nZ2VyIiwiX2xvZ2dlcnMiLCJhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlMb2dnaW5nTGV2ZWwiLCJhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsIiwiYXBwbHlDb25zb2xlTG9nZ2VyIiwiYmluZCIsImFwcGx5VGVsZW1ldHJ5TG9nZ2VyIiwicGFyYW1ldGVyVmFsdWUiLCJfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsInNldFRocmVzaG9sZCIsImFwcGx5QXBwZW5kZXIiLCJUZWxlbWV0cnlBcHBlbmRlciIsIkxvZ2dpbmdUaHJlc2hvbGQiLCJUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSIsImxvZ2dpbmdMZXZlbCIsImNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwiLCJsb2dnaW5nTGV2ZWxUeXBlIiwibWV0cmljcyIsIl9tZXRyaWNzIiwiZ2V0VGVsZW1ldHJ5TGV2ZWwiLCJUZWxlbWV0cnlMZXZlbCIsIk1ldHJpY3NDb25maWd1cmF0aW9uIiwiX3VybCIsInNldCIsInVybCIsIm1ldHJpY3NVcmwiLCJwYXRobmFtZSIsIl9lbnZpcm9ubWVudCIsImVudmlyb25tZW50IiwiX3RlbmFuY3kiLCJ0ZW5hbmN5IiwiX3Nlc3Npb25JZCIsInNlc3Npb25JZCIsIk1ldHJpY3NGYWN0b3J5IiwiZ2V0TWV0cmljc1NlcnZpY2UiLCJtZXRyaWNzU2VydmljZXMiLCJfbWV0cmljc1NlcnZpY2VzIiwibWV0cmljc0NvbmZpZ3VyYXRpb24iLCJUZWxlbWV0cnlVcmwiLCJFbnZpcm9ubWVudCIsIk1ldHJpY3NTZXJ2aWNlIiwic2V0VGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbCIsInZhbHVlcyIsInJlcXVlc3RTaXplTGltaXQiLCJob3N0bmFtZSIsIl9tZXRyaWNzQ29uZmlndXJhdGlvbiIsIm1ldHJpYyIsInByZXZpb3VzVmFsdWUiLCJyZXNvdXJjZSIsImtpbmQiLCJtZXRyaWNSZWNvcmQiLCJ0aW1lc3RhbXAiLCJmdWxsUXVhbGlmaWVkTmFtZSIsIl9kb21haW4iLCJWZXJzaW9uTWFuYWdlciIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIl9jYWxsZWUiLCJtZXRyaWNzTWVzc2FnZXMiLCJmb3JtRGF0YSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIkZvcm1EYXRhIiwiYXBwZW5kIiwicmVjb3JkcyIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsImFicnVwdCIsInNlbnQiLCJzdG9wIiwiX3giLCJhcHBseSIsIl9zZW5kTWV0cmljc0lmQWJsZSIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX2lzU2VuZGluZyIsInNsaWNlIiwidGhlbiIsInJlc3BvbnNlIiwiY2F0Y2giLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsIiwidGVsZW1ldHJ5TGV2ZWxUeXBlIiwiUHJvbWlzZSIsImNhbGxiYWNrIiwiVHlwZUVycm9yIiwiX3N0YXRlIiwiX2hhbmRsZWQiLCJfdmFsdWUiLCJfZGVmZXJyZWRzIiwiZG9SZXNvbHZlIiwiZG9uZSIsInByb21pc2VSZXNvbHZlIiwicmVhc29uIiwicHJvbWlzZVJlamVjdCIsIm5ld1ZhbHVlIiwicHJvbWlzZSIsImZpbmFsZSIsIl9pbW1lZGlhdGUiLCJfdW5oYW5kbGVkUmVqZWN0aW9uIiwiaSIsImxlbiIsImhhbmRsZSIsImRlZmVycmVkIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwicmVzdWx0IiwiYWxsIiwiYXJyIiwicmVzb2x2ZSIsInJlamVjdCIsImlzQXJyYXkiLCJyZW1haW5pbmciLCJtYW5hZ2VSZXNwb25zZSIsImNvbnN0cnVjdG9yIiwiXyIsInJhY2UiLCJQcm9taXNlSGFuZGxlciIsIlBlZXJDb25uZWN0aW9uU2VydmljZSIsIl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nIiwicHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX3ByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWNoZWQiLCJkaXJlY3Rpb24iLCJwZWVyQ29ubmVjdGlvbiIsImNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWxsZWUzIiwiZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIiwiY29uZmlndXJhdGlvbiIsIl9hcmdzMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImNyZWF0ZVBlZXJDb25uZWN0aW9uIiwiX3JlZiIsInN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIiLCJ2aWRlb1RyYW5zY2VpdmVyIiwiYXVkaW9UcmFuc2NlaXZlciIsIm9wdGlvbnMiLCJhZGRUcmFuc2NlaXZlciIsInQwIiwidDEiLCJ0MiIsImNyZWF0ZU9mZmVyIiwidDMiLCJsb2NhbE9mZmVyIiwib2ZmZXJUb1JlY2VpdmVBdWRpbyIsIm9mZmVyVG9SZWNlaXZlVmlkZW8iLCJ0NCIsInQ1IiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIlJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIiwidHJ1bmNhdGVJY2VTZXJ2ZXJzIiwiaWNlU2VydmVycyIsInVybHMiLCJ1c2VybmFtZSIsImNyZWRlbnRpYWwiLCJ1cGRhdGVTdGF0aXN0aWNUaW1lb3V0IiwiUnRjQ29ubmVjdGlvbk1vbml0b3IiLCJtZWRpYVN0cmVhbSIsImVzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfcGVlckNvbm5lY3Rpb24iLCJfZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl90cmFja3NUb01vbml0b3IiLCJnZXRUcmFja3MiLCJtYXAiLCJ0cmFjayIsInBhcnNlZFNEUCIsIlNkcFBhcnNlciIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsInNkcCIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsInVwZGF0ZVN0YXRpc3RpYyIsIl9ydGNTdGF0aXN0aWMiLCJfaXNNb25pdG9yUnVubmluZyIsIl91cGRhdGVUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiX3VwZGF0ZVN0YXRpc3RpYyIsIl9pZ25vcmVkIiwiZ2V0S2luZEZvclNhZmFyaTExIiwidXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiaWQiLCJnZXRTdGF0cyIsInN0YXRzIiwicnRjU3RhdGlzdGljcyIsInJvdW5kVHJpcFRpbWUiLCJsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAiLCJyZXBvcnQiLCJjdXJyZW50Um91bmRUcmlwVGltZSIsIm1lZGlhVHlwZSIsImNvZGVjIiwiY29kZWNJZCIsIm1pbWVUeXBlIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjMiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY0IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NSIsImJ5dGVzIiwiYnl0ZXNSZWNlaXZlZCIsInByZXZpb3VzQnl0ZXNSZWNlaXZlZCIsImJ5dGVzRGVsdGEiLCJ0aW1lRGVsdGEiLCJiaXRyYXRlIiwiZmxvb3IiLCJzc3JjIiwicGFja2V0c0xvc3QiLCJwYWNrZXRzUmVjZWl2ZWQiLCJnZXRDb2RlY0J5VHlwZSIsInZpZGVvIiwiZnJhbWVzRGVjb2RlZCIsImZwcyIsInJvdW5kIiwiX3VwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImdldFN0YXRzTGVnYWN5IiwibmFtZXMiLCJzdGF0IiwiX3NkcCIsInNkcFNwbGl0QnlMaW5lcyIsInNkcFNwbGl0QnlUcmFja3MiLCJfYXVkaW9Db2RlYyIsImFwcGx5Q29kZWMiLCJfdmlkZW9Db2RlYyIsIl9pc0F1ZGlvVHJhY2tFbmFibGVkIiwiaXNUcmFja0J5VHlwZUVuYWJsZWQiLCJfaXNWaWRlb1RyYWNrRW5hYmxlZCIsInNkcFNlY3Rpb25Gb3JUeXBlIiwiZmluZCIsInNkcFRyYWNrIiwidXNlZENvZGVjTGluZSIsInNkcExpbmUiLCJ1c2VkQ29kZWMiLCJjb2RlY05hbWUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1BlZXJDb25uZWN0aW9uIiwiY3VycmVudExvY2FsRGVzY3JpcHRpb24iLCJjb25uZWN0aW9uU3RhdGUiLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsIl9jcmVhdGVPZmZlciIsIl9jcmVhdGVBbnN3ZXIiLCJjcmVhdGVBbnN3ZXIiLCJfeDIiLCJfc2V0TG9jYWxEZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0TG9jYWxEZXNjcmlwdGlvbiIsIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsIl94MyIsIl9zZXRSZW1vdGVEZXNjcmlwdGlvbiIsIl9jYWxsZWU0IiwiX2Rlc2NyaXB0aW9uJHNkcCIsImhhc0NyeXB0byIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsInNldFJlbW90ZURlc2NyaXB0aW9uIiwiX3g0IiwiZ2V0U2VuZGVycyIsInNlbGVjdG9yIiwiX3RoaXMzIiwiYWRkU3RyZWFtIiwiX3RoaXM0IiwiYWRkVHJhY2siLCJvbnRyYWNrIiwiaGFuZGxlciIsIm9uaWNlY2FuZGlkYXRlIiwib25jb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsImNsb3NlIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3ViamVjdCIsIl9zdWJqZWN0Iiwic3Vic2NyaWJlIiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwiX0Rpc3Bvc2FibGUiLCJfaW5oZXJpdHMiLCJfc3VwZXIiLCJfY3JlYXRlU3VwZXIiLCJsaXN0ZW5lcnMiLCJpZHgiLCJfbGlzdGVuZXJzIiwiY2hhbmdlZCIsImNvbXBhcmFibGUiLCJlcXVhbHMiLCJnZXRFbnZpcm9ubWVudEZyb21VcmwiLCJiYXNlVVJMIiwib3JpZ2luIiwiX2NsaWVudFNlc3Npb25JZCIsIl9sb2FkZWRUaW1lc3RhbXAiLCJfcmVhZE9ubHlJbml0aWFsaXplZCIsIl9yZWFkT25seURpc2NvdmVyeVVyaSIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUiLCJfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJfZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCIsIl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMiLCJfd2ViUGxheWVyTG9hZGVyIiwiX3NoYWthUGxheWVyTG9hZGVyIiwiX2hsc0pzTG9hZGVyIiwiX21ldHJpY3NTZXJ2aWNlIiwiX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX3RlbGVtZXRyeVVybCIsIl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwicmV0cmllc0Ftb3VudCIsIl90ZWxlbWV0cnlMZXZlbCIsImFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsInRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjbGllbnRTZXNzaW9uSWQiLCJpZ25vcmVkRW52aXJvbm1lbnQiLCJpZ25vcmVkRGlzY292ZXJ5VXJpIiwidGVsZW1ldHJ5VXJsIiwidGVsZW1ldHJ5QXBwZW5kZXIiLCJpZ25vcmVkVGVuYW5jeSIsImFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24iLCJEaXNjb3ZlcnlVcmkiLCJpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwiLCJhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5Rm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiZGlzY292ZXJ5VXJpIiwiZ2V0VGVsZW1ldHJ5VXJsIiwiY2hhbm5lbFRva2VuIiwidXJpVmFsdWUiLCJiYXNlVVJJVmFsdWUiLCJpbml0IiwiX2luaXRpYWxpemVkIiwicGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiY29uc29sZUxvZ2dpbmdMZXZlbCIsImNvbnNvbGVBcHBlbmRlciIsImF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIndlYlBsYXllckxvYWRlciIsInNoYWthUGxheWVyTG9hZGVyIiwiaGxzSnNMb2FkZXIiLCJzZWdtZW50cyIsInByb3RvY29sIiwidW5zaGlmdCIsImVuZHNXaXRoIiwiam9pbiIsIkJpdHJhdGVTdGF0ZSIsIkJpdHJhdGVNb2RlIiwiZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uIiwiZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMiLCJzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMiLCJDaGFubmVsIiwidmlkZW9FbGVtZW50IiwiY2hhbm5lbENvbnRleHRPcHRpb25zIiwidGFyZ2V0TGFnIiwic3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMiLCJoYXNJbnNlcnRhYmxlU3RyZWFtcyIsInZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJlbmNvZGVkVmlkZW9TdHJlYW1TaW5rIiwiZW5jb2RlZEF1ZGlvU3RyZWFtU2luayIsIl90b2tlbkNvbnRleHQiLCJUb2tlbkNvbnRleHQiLCJfY2hhbm5lbENvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIl9wZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJQZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIlN0cmVhbVRyYW5zZm9ybUNvbnRleHQiLCJfc3RhdGVDb250ZXh0IiwiU3RhdGVDb250ZXh0IiwiX2V4cG9uZW50aWFsQmFja29mZiIsIkV4cG9uZW50aWFsQmFja29mZiIsIl9jaGFubmVsU3RhcnRUaW1lIiwiX3JlYWRPbmx5VmlkZW9FbGVtZW50IiwiX3JlYWRPbmx5VG9rZW4iLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiIsIl9yZWFkT25seVN0YXRlIiwic3RhdGUiLCJfcmVhZE9ubHlBdXRvTXV0ZWQiLCJhdXRvTXV0ZWQiLCJfcmVhZE9ubHlBdXRvUGF1c2VkIiwiYXV0b1BhdXNlZCIsIl9yZWFkT25seVRva2VuRXhwaXJpbmciLCJ0b2tlbkV4cGlyaW5nIiwiX3JlYWRPbmx5QXV0aG9yaXplZCIsImF1dGhvcml6ZWQiLCJfcmVhZE9ubHlPbmxpbmUiLCJvbmxpbmUiLCJfcmVhZE9ubHlMb2FkaW5nIiwibG9hZGluZyIsIl9yZWFkT25seVBsYXlpbmciLCJwbGF5aW5nIiwiX3JlYWRPbmx5U3RhbmRieSIsInN0YW5kYnkiLCJfcmVhZE9ubHlTdG9wcGVkIiwic3RvcHBlZCIsIl9yZWFkT25seVRhcmdldExhZyIsIl9yZWFkT25seUxhZyIsImxhZyIsIl9yZWFkT25seUJpdHJhdGVMaW1pdCIsImJpdHJhdGVMaW1pdCIsIl9yZWFkT25seVJlc29sdXRpb24iLCJyZXNvbHV0aW9uIiwiX3JlYWRPbmx5RmFpbHVyZUNvdW50IiwiZmFpbHVyZUNvdW50IiwiX3JlYWRPbmx5RW5kUG9pbnQiLCJlbmRQb2ludCIsIl9yZWFkT25seVN0cmVhbSIsInN0cmVhbSIsIl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MiLCJfcmVhZE9ubHlNZWRpYVN0cmVhbSIsIl9zZXNzaW9uVGVsZW1ldHJ5IiwiU2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJWaWRlb1RlbGVtZXRyeSIsInNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUiLCJzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmciLCJDaGFubmVsU3RhdGUiLCJyZXN0YXJ0QWZ0ZXJTdG9wIiwiY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0Iiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsImRlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJzdGFydCIsInBhdXNlIiwic3JjT2JqZWN0Iiwid2lkdGgiLCJ2aWRlb1dpZHRoIiwiaGVpZ2h0IiwidmlkZW9IZWlnaHQiLCJEaW1lbnNpb24iLCJkaXNwb3NhYmxlcyIsInNldEJpdHJhdGVMaW1pdCIsImNsZWFyQml0cmF0ZUxpbWl0IiwiYml0cmF0ZUluQml0c1BlclNlY29uZCIsInN0YXR1cyIsInVwZGF0ZVRhcmdldExhZyIsIl9zdG9wIiwiaXNTdGFydGluZyIsInByb2Nlc3NTdG9wIiwiY2xlYW5VcFJlc291cmNlcyIsIl9yZXN1bWUiLCJwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsInJlc3VtZSIsIm11dGUiLCJtdXRlZCIsInVubXV0ZSIsIl9kaXNwb3NlIiwiaXNEaXNwb3NlZCIsImdldFVyaSIsIl9zdGFydCIsInByb2Nlc3NTdGFydCIsIl9wcm9jZXNzU3RhcnQiLCJfY2FsbGVlNSIsIl90aGlzNSIsImxpc3Rlbk9uU3RyZWFtU2V0dXAiLCJfSW5zZXJ0YWJsZVN0cmVhbXMkdmEiLCJ2YWxpZCIsInZhbGlkYXRpb25SZXN1bHQiLCJfRW5jb2RlZFN0cmVhbVNpbmskdmEiLCJfdmFsaWQiLCJfdmFsaWRhdGlvblJlc3VsdCIsIl9FbmNvZGVkU3RyZWFtU2luayR2YTIiLCJfdmFsaWQyIiwiX3ZhbGlkYXRpb25SZXN1bHQyIiwiaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2siLCJoYXNFbmNvZGVkU3RyZWFtU2luayIsImhhc1N0cmVhbVRyYW5zZm9ybXNPclNpbmsiLCJoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2siLCJzdHJlYW1QbGF5ZXIiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJJbnNlcnRhYmxlU3RyZWFtcyIsIkVuY29kZWRTdHJlYW1TaW5rIiwiRGlzY292ZXJ5IiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsIlN0cmVhbUZhY3RvcnkiLCJmaW5hbGx5IiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJfcGxheSIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3IiwicGxheSIsImdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsIl9jYWxsZWU4IiwiX2NhbGxlZTgkIiwiX2NvbnRleHQ4IiwiX3RoaXM2IiwiZGVzdHJveVN0cmVhbSIsIl9yZWYyIiwicGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsIl9wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsIl9jYWxsZWU5IiwiX3RoaXM3IiwicGxheVByb21pc2UiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJDaGFubmVscyIsImNyZWF0ZUNoYW5uZWwiLCJjaGFubmVsT3B0aW9ucyIsImRlZmF1bHRUYXJnZXRMYWciLCJfb3B0aW9ucyR0YXJnZXRMYWciLCJhcHBseVN0YXR1cyIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZSIsImJpdHJhdGVNb2RlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUiLCJiaXRyYXRlU3RhdGUiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiX3ByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJkaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJfY2FjaGUiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJjbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCIsImRlZmF1bHRUaW1lb3V0IiwiX3VyaSIsIl9kaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsInRpbWVvdXQiLCJhc1N0cmluZyIsImVuZFBvaW50cyIsIm9rIiwidGV4dCIsIkVuZFBvaW50IiwiZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJmYWlsZWRSZXF1ZXN0cyIsInByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkIiwiX2FyZ3MyIiwicGluZyIsInRpbWUiLCJfZGlzY292ZXJ5VXJpIiwiYnVpbGREaXNjb3ZlcnlVcmwiLCJzZGtWZXJzaW9uIiwiYXBpVmVyc2lvbiIsIl90aW1lb3V0IiwiX3JvdW5kVHJpcFRpbWUiLCJfcGluZyIsImZpbmlzaGVkIiwiYnVpbGRQaW5nVXJsIiwiX3N1YnNjcmliZSIsImxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uIiwiY2xpZW50VmVyc2lvbiIsImJvZHlXaXRoT2ZmZXIiLCJib2R5V2l0aG91dE9mZmVyIiwiaHR0cFJlc3BvbnNlIiwic3Vic2NyaWJlUmVzcG9uc2UiLCJidWlsZFVybCIsImJlYXJlclRva2VuIiwiaHR0cFJvdW5kVHJpcFRpbWUiLCJzZXNzaW9uRGVzY3JpcHRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb24iLCJtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsIl9wdWJsaXNoIiwibWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsInB1Ymxpc2giLCJfeDUiLCJfeDYiLCJfeDciLCJzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwic2hhcmVkU2VjcmV0IiwibWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwiX3g4IiwiX3g5IiwiX2xpbWl0Qml0cmF0ZSIsIm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJfYWRkSWNlQ2FuZGlkYXRlcyIsImNhbmRpZGF0ZXMiLCJkaXNjb3ZlcnlDb21wbGV0ZWQiLCJhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfYXJnczYiLCJtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiYWRkSWNlQ2FuZGlkYXRlcyIsIl94MTUiLCJfeDE2IiwiX3gxNyIsIl9kZXN0cm95U3RyZWFtIiwiZGVzdHJveVN0cmVhbVJlc3BvbnNlIiwibWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl94MTgiLCJfeDE5IiwiX2Rlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJzZW5kQmVhY29uIiwiX3gyMCIsIl94MjEiLCJwYXRoIiwicGF0aEFzQXJyYXkiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJqc29uIiwicnRjQ29uZmlndXJhdGlvbiIsImNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UiLCJfeDIyIiwiX3gyMyIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJfY2FsbGVlMTAiLCJwdWJsaXNoUmVzcG9uc2UiLCJfY2FsbGVlMTAkIiwiX2NvbnRleHQxMCIsIl94MjQiLCJfeDI1IiwiYnVuZGxlUG9saWN5IiwiaWNlQ2FuZGlkYXRlUG9vbFNpemUiLCJpY2VUcmFuc3BvcnRQb2xpY3kiLCJydGNwTXV4UG9saWN5IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfY2FsbGVlMTEiLCJfY2FsbGVlMTEkIiwiX2NvbnRleHQxMSIsIl94MjYiLCJfY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2NhbGxlZTEyIiwiX2NhbGxlZTEyJCIsIl9jb250ZXh0MTIiLCJfeDI3IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl9jYWxsZWUxMyIsIl9jYWxsZWUxMyQiLCJfY29udGV4dDEzIiwiX3gyOCIsIkNodW5rZWRTdHJlYW0iLCJjaGFubmVsQ29udGV4dCIsIm9mZmVyU2RwIiwib3JpZ2luU3RhcnRUaW1lIiwiQ2h1bmtlZFN0cmVhbWluZyIsInBsYXllciIsIm1vbml0b3IiLCJfbW9uaXRvckRpc3Bvc2FibGVzIiwibmV3U3RyZWFtU3RhdGlzdGljcyIsIl9zdHJlYW1TdGF0aXN0aWNzIiwiY3VycmVudFRpbWUiLCJkYXRhQnVmZmVyZWQiLCJfbW9uaXRvckZhaWx1cmVDb3VudCIsInBhdXNlZCIsIl9obHNQbGF5ZXIiLCJfcGhlbml4V2ViUGxheWVyIiwiX3NoYWthIiwiX29wdGlvbnMiLCJsb2FkZWQiLCJfcGVuZGluZyIsIl9wbGF5ZXIiLCJQbGF5ZXIiLCJkYXNoTWFuaWZlc3RVcmxNYXRjaCIsImhsc01hbmlmZXN0VXJsTWF0Y2giLCJtYW5pZmVzdFVybCIsInBsYXlsaXN0VXJsIiwiSGxzUGxheWVyIiwiX29iamVjdFNwcmVhZCIsInByZWZlck5hdGl2ZSIsInNob3VsZFVzZU5hdGl2ZUhscyIsIldlYlBsYXllciIsIlNoYWthUGxheWVyIiwibWFuaWZlc3RVUkkiLCJfdmlkZW9FbGVtZW50IiwiX2tpbmQiLCJfc3RyZWFtSWQiLCJfbWFuaWZlc3RVUkkiLCJlbmNvZGVVUkkiLCJyZXBsYWNlIiwiZW5hYmxlV29ya2VyIiwibWF4QnVmZmVyTGVuZ3RoIiwibGl2ZUJhY2tCdWZmZXJMZW5ndGgiLCJsaXZlU3luY0R1cmF0aW9uIiwibGl2ZUR1cmF0aW9uSW5maW5pdHkiLCJsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uIiwiSW5maW5pdHkiLCJoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2QiLCJsb2FkU291cmNlIiwiYXR0YWNoTWVkaWEiLCJjYW5QbGF5VHlwZSIsIm5ldHdvcmtTdGF0ZSIsIk5ldHdvcmtTdGF0ZXMiLCJOZXR3b3JrTm9Tb3VyY2UiLCJzdGF0aXN0aWNzIiwibWVkaWEiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImJ1ZmZlcmVkIiwiZW5kIiwic3RyZWFtQ29udHJvbGxlciIsInRydWVDdXJyZW50VGltZSIsIm1heCIsImRlc3Ryb3kiLCJpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCIsImRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQiLCJSZWFsVGltZVN0cmVhbSIsInBlZXJDb25uZWN0aW9uQ29udGV4dCIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHQiLCJfcmVmMyIsIl9zbGljZWRUb0FycmF5IiwiX3JlZjMkIiwic3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIiwic3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIiwiX3JlZjQiLCJhcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJzdWJtaXRDYW5kaWRhdGVzVGltZW91dCIsImNhbmNlbERpc2NvdmVyeSIsImNhbmRpZGF0ZSIsIl9yZWY1IiwicmV0cnlDYWxsYmFjayIsIm9uTGluZSIsInJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwibWVkaWFTdHJlYW1Qcm9taXNlIiwic3RyZWFtcyIsImVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImNodW5rIiwicmVjZWl2ZXIiLCJ0cmFja0xpc3RlbmVyIiwiYW5zd2VyIiwiX3JlZjYiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjU3RhdGlzdGljIiwicnRjVmlkZW9TdGF0aXN0aWMiLCJydGNBdWRpb1N0YXRpc3RpYyIsImF1ZGlvIiwiYXVkaW9UcmFja0ZhaWxlZCIsInZpZGVvVHJhY2tGYWlsZWQiLCJfYXBwbHlSdGNDb25maWd1cmF0aW9uIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJfcGVlckNvbm5lY3Rpb24kY3VycmUiLCJpc0NsaWVudE9mZmVyRmxvdyIsImljZVJlc3RhcnQiLCJvZmZlciIsInBsYXllck9wdGlvbnMiLCJhYnIiLCJkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGUiLCJtYW5pZmVzdCIsInJldHJ5UGFyYW1ldGVycyIsInN0cmVhbWluZyIsInJlYnVmZmVyaW5nR29hbCIsImJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJCZWhpbmQiLCJtYXhBdHRlbXB0cyIsImJhY2tvZmZGYWN0b3IiLCJsb2FkUGxheWVyIiwiZXN0aW1hdGVkQmFuZHdpZHRoIiwicGxheVRpbWUiLCJ1bmxvYWQiLCJwbGF5ZXJDb25maWciLCJjb25maWd1cmUiLCJsb2FkIiwiY29kZSIsImNyZWF0ZSIsInRva2VuQ2FwYWJpbGl0aWVzIiwiYmFuZHdpZHRoVG9TdGFydEF0IiwibWluVGltZUJlZm9yZU5leHRSZWxvYWQiLCJlcnJvck9iamVjdCIsImNhblJlbG9hZCIsInNldmVyaXR5IiwicmVsb2FkSWZBYmxlIiwiaXNOYXRpdmUiLCJkZWxpdmVyeVR5cGUiLCJoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZCIsIl9sYXN0UmVsb2FkVGltZSIsInJlbG9hZCIsInZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsiLCJtb2RlIiwic2V0dXBFbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJ0cmFuc2Zvcm1lciIsIlRyYW5zZm9ybVN0cmVhbSIsInRyYW5zZm9ybSIsInJlY2VpdmVyU3RyZWFtcyIsInNvdXJjZSIsInJlYWRhYmxlIiwic2luayIsIndyaXRhYmxlIiwicGlwZVRocm91Z2giLCJwaXBlVG8iLCJzZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJ2aWRlb1RyYWNrIiwiZ2V0VmlkZW9UcmFja3MiLCJwcm9jZXNzb3IiLCJnZW5lcmF0b3IiLCJ0cmFuc2Zvcm1lZFN0cmVhbSIsIk1lZGlhU3RyZWFtIiwiZ2V0QXVkaW9UcmFja3MiLCJhdWRpb1RyYWNrIiwidmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtIiwiX19CVUlMRF9WRVJTSU9OX18iLCJfZGVmYXVsdFZlcnNpb24iLCJfdGVsZW1ldHJ5U2VydmljZSIsIlRlbGVtZXRyeVNlcnZpY2UiLCJsb2dSZWNvcmQiLCJfbG9ncyIsInNlbmRMb2dzSWZBYmxlIiwibG9nTWVzc2FnZXMiLCJfc2VuZExvZ3NJZkFibGUiLCJudW1iZXJPZkxvZ3NUb1NlbmQiLCJzaXplT2ZMb2dzVG9TZW5kIiwiZ2V0TG9nU2l6ZSIsInN1bSIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm9mZnNldCIsIm1pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJwYXJ0cyIsIlN0cmluZyIsInBhZFN0YXJ0IiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0IiwiZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5TZWNvbmRzIiwicmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZiIsInBvdyIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kIiwibWluIiwib3RoZXIiLCJfbmV0d29ya01vbml0b3IiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJldmVudCIsIm9uQ29udGludWF0aW9uIiwiX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciIsInB1c2hUaW1lVG9GaXJzdEZyYW1lIiwicHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdGltZVRvRmlyc3RGcmFtZSIsImR1cmF0aW9uU2luY2VQYWdlTG9hZCIsIl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3ZpZGVvU3RhbGxlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7OztBQ1ZBO0FBQ0E7QUFDQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBO0FBQ0Esb0NBQW9DLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0wvRjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSDdGLHVCQUF1QixtQkFBTyxDQUFDLHdGQUF1QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSmhHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7O0FDTnBHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsSUFBSSxPQUFPO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtB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QUNBO1dBQ0Esc0RBQXNELGtCQUFrQjtXQUN4RTtXQUNBLCtDQUErQyxjQUFjO1dBQzdELEU7Ozs7VUNOQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJjaGFubmVscy5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCJmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuICByZXR1cm4gYXJyMjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5TGlrZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aG91dEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3IsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2ssIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCB0b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZShcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2YuanNcIik7XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ViQ2xhc3MsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9pID0gbnVsbCA9PSBhcnIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IF9pKSB7XG4gICAgdmFyIF9zLFxuICAgICAgX2UsXG4gICAgICBfeCxcbiAgICAgIF9yLFxuICAgICAgX2FyciA9IFtdLFxuICAgICAgX24gPSAhMCxcbiAgICAgIF9kID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChfeCA9IChfaSA9IF9pLmNhbGwoYXJyKSkubmV4dCwgMCA9PT0gaSkge1xuICAgICAgICBpZiAoT2JqZWN0KF9pKSAhPT0gX2kpIHJldHVybjtcbiAgICAgICAgX24gPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShfbiA9IChfcyA9IF94LmNhbGwoX2kpKS5kb25lKSAmJiAoX2Fyci5wdXNoKF9zLnZhbHVlKSwgX2Fyci5sZW5ndGggIT09IGkpOyBfbiA9ICEwKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9kID0gITAsIF9lID0gZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIV9uICYmIG51bGwgIT0gX2lbXCJyZXR1cm5cIl0gJiYgKF9yID0gX2lbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KF9yKSAhPT0gX3IpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX2FycjtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiKTtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICBcInVzZSBzdHJpY3RcIjsgLyohIHJlZ2VuZXJhdG9yLXJ1bnRpbWUgLS0gQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuIC0tIGxpY2Vuc2UgKE1JVCk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vTElDRU5TRSAqL1xuICBtb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUgPSBmdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkge1xuICAgIHJldHVybiBleHBvcnRzO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHZhciBleHBvcnRzID0ge30sXG4gICAgT3AgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIGhhc093biA9IE9wLmhhc093blByb3BlcnR5LFxuICAgIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uIChvYmosIGtleSwgZGVzYykge1xuICAgICAgb2JqW2tleV0gPSBkZXNjLnZhbHVlO1xuICAgIH0sXG4gICAgJFN5bWJvbCA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sID8gU3ltYm9sIDoge30sXG4gICAgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiLFxuICAgIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIixcbiAgICB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG4gIGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgb2JqW2tleV07XG4gIH1cbiAgdHJ5IHtcbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcixcbiAgICAgIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKSxcbiAgICAgIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG4gICAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGdlbmVyYXRvciwgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpXG4gICAgfSksIGdlbmVyYXRvcjtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICAgICAgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiBlcnJcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgZGVmaW5lKEl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLFxuICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJiBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiYgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSAmJiAoSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSk7XG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9IEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgIGRlZmluZShwcm90b3R5cGUsIG1ldGhvZCwgZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yLCBQcm9taXNlSW1wbCkge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChcInRocm93XCIgIT09IHJlY29yZC50eXBlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnLFxuICAgICAgICAgIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICByZXR1cm4gdmFsdWUgJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKHZhbHVlKSAmJiBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpID8gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pIDogUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbiAodW53cmFwcGVkKSB7XG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkLCByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCBlcnJvciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgfVxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG4gICAgZGVmaW5lUHJvcGVydHkodGhpcywgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShtZXRob2QsIGFyZykge1xuICAgICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2VJbXBsKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID0gcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICAgIHJldHVybiBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChcImV4ZWN1dGluZ1wiID09PSBzdGF0ZSkgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIGlmIChcImNvbXBsZXRlZFwiID09PSBzdGF0ZSkge1xuICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBtZXRob2QpIHRocm93IGFyZztcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29udGV4dC5tZXRob2QgPSBtZXRob2QsIGNvbnRleHQuYXJnID0gYXJnOzspIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJuZXh0XCIgPT09IGNvbnRleHQubWV0aG9kKSBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7ZWxzZSBpZiAoXCJ0aHJvd1wiID09PSBjb250ZXh0Lm1ldGhvZCkge1xuICAgICAgICAgIGlmIChcInN1c3BlbmRlZFN0YXJ0XCIgPT09IHN0YXRlKSB0aHJvdyBzdGF0ZSA9IFwiY29tcGxldGVkXCIsIGNvbnRleHQuYXJnO1xuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuICAgICAgICB9IGVsc2UgXCJyZXR1cm5cIiA9PT0gY29udGV4dC5tZXRob2QgJiYgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICBzdGF0ZSA9IFwiZXhlY3V0aW5nXCI7XG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKFwibm9ybWFsXCIgPT09IHJlY29yZC50eXBlKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID0gY29udGV4dC5kb25lID8gXCJjb21wbGV0ZWRcIiA6IFwic3VzcGVuZGVkWWllbGRcIiwgcmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcInRocm93XCIgPT09IHJlY29yZC50eXBlICYmIChzdGF0ZSA9IFwiY29tcGxldGVkXCIsIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2ROYW1lID0gY29udGV4dC5tZXRob2QsXG4gICAgICBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvclttZXRob2ROYW1lXTtcbiAgICBpZiAodW5kZWZpbmVkID09PSBtZXRob2QpIHJldHVybiBjb250ZXh0LmRlbGVnYXRlID0gbnVsbCwgXCJ0aHJvd1wiID09PSBtZXRob2ROYW1lICYmIGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdICYmIChjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCIsIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkLCBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSwgXCJ0aHJvd1wiID09PSBjb250ZXh0Lm1ldGhvZCkgfHwgXCJyZXR1cm5cIiAhPT0gbWV0aG9kTmFtZSAmJiAoY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ1wiICsgbWV0aG9kTmFtZSArIFwiJyBtZXRob2RcIikpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG4gICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHJldHVybiBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnLCBjb250ZXh0LmRlbGVnYXRlID0gbnVsbCwgQ29udGludWVTZW50aW5lbDtcbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG4gICAgcmV0dXJuIGluZm8gPyBpbmZvLmRvbmUgPyAoY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWUsIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2MsIFwicmV0dXJuXCIgIT09IGNvbnRleHQubWV0aG9kICYmIChjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiLCBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZCksIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsKSA6IGluZm8gOiAoY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLCBjb250ZXh0LmRlbGVnYXRlID0gbnVsbCwgQ29udGludWVTZW50aW5lbCk7XG4gIH1cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7XG4gICAgICB0cnlMb2M6IGxvY3NbMF1cbiAgICB9O1xuICAgIDEgaW4gbG9jcyAmJiAoZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdKSwgMiBpbiBsb2NzICYmIChlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXSwgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdKSwgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCIsIGRlbGV0ZSByZWNvcmQuYXJnLCBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgdHJ5TG9jOiBcInJvb3RcIlxuICAgIH1dLCB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyksIHRoaXMucmVzZXQoITApO1xuICB9XG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBpdGVyYWJsZS5uZXh0KSByZXR1cm4gaXRlcmFibGU7XG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSxcbiAgICAgICAgICBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIGZvciAoOyArK2kgPCBpdGVyYWJsZS5sZW5ndGg7KSBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSByZXR1cm4gbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdW5kZWZpbmVkLCBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGRvbmVSZXN1bHRcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBkb25lOiAhMFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBkZWZpbmVQcm9wZXJ0eShHcCwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIGRlZmluZVByb3BlcnR5KEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpLCBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGdlbkZ1biAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuICEhY3RvciAmJiAoY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHwgXCJHZW5lcmF0b3JGdW5jdGlvblwiID09PSAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpKTtcbiAgfSwgZXhwb3J0cy5tYXJrID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAoZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBkZWZpbmUoZ2VuRnVuLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKSwgZ2VuRnVuO1xuICB9LCBleHBvcnRzLmF3cmFwID0gZnVuY3Rpb24gKGFyZykge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiBhcmdcbiAgICB9O1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpLCBkZWZpbmUoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUsIGFzeW5jSXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGV4cG9ydHMuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3IsIGV4cG9ydHMuYXN5bmMgPSBmdW5jdGlvbiAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QsIFByb21pc2VJbXBsKSB7XG4gICAgdm9pZCAwID09PSBQcm9taXNlSW1wbCAmJiAoUHJvbWlzZUltcGwgPSBQcm9taXNlKTtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpLCBQcm9taXNlSW1wbCk7XG4gICAgcmV0dXJuIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKSA/IGl0ZXIgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgIH0pO1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApLCBkZWZpbmUoR3AsIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvclwiKSwgZGVmaW5lKEdwLCBpdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZGVmaW5lKEdwLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSksIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YXIgb2JqZWN0ID0gT2JqZWN0KHZhbCksXG4gICAgICBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkga2V5cy5wdXNoKGtleSk7XG4gICAgcmV0dXJuIGtleXMucmV2ZXJzZSgpLCBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgZm9yICg7IGtleXMubGVuZ3RoOykge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHJldHVybiBuZXh0LnZhbHVlID0ga2V5LCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICB9O1xuICB9LCBleHBvcnRzLnZhbHVlcyA9IHZhbHVlcywgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIGlmICh0aGlzLnByZXYgPSAwLCB0aGlzLm5leHQgPSAwLCB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkLCB0aGlzLmRvbmUgPSAhMSwgdGhpcy5kZWxlZ2F0ZSA9IG51bGwsIHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMuYXJnID0gdW5kZWZpbmVkLCB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KSwgIXNraXBUZW1wUmVzZXQpIGZvciAodmFyIG5hbWUgaW4gdGhpcykgXCJ0XCIgPT09IG5hbWUuY2hhckF0KDApICYmIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmICFpc05hTigrbmFtZS5zbGljZSgxKSkgJiYgKHRoaXNbbmFtZV0gPSB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHRoaXMuZG9uZSA9ICEwO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHJvb3RSZWNvcmQudHlwZSkgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJldHVybiByZWNvcmQudHlwZSA9IFwidGhyb3dcIiwgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbiwgY29udGV4dC5uZXh0ID0gbG9jLCBjYXVnaHQgJiYgKGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCIsIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkKSwgISFjYXVnaHQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXSxcbiAgICAgICAgICByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICBpZiAoXCJyb290XCIgPT09IGVudHJ5LnRyeUxvYykgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKSxcbiAgICAgICAgICAgIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgITApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc0ZpbmFsbHkpIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uIGFicnVwdCh0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJiBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZpbmFsbHlFbnRyeSAmJiAoXCJicmVha1wiID09PSB0eXBlIHx8IFwiY29udGludWVcIiA9PT0gdHlwZSkgJiYgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiYgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jICYmIChmaW5hbGx5RW50cnkgPSBudWxsKTtcbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIHJlY29yZC50eXBlID0gdHlwZSwgcmVjb3JkLmFyZyA9IGFyZywgZmluYWxseUVudHJ5ID8gKHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jLCBDb250aW51ZVNlbnRpbmVsKSA6IHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZShyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIHJldHVybiBcImJyZWFrXCIgPT09IHJlY29yZC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gcmVjb3JkLnR5cGUgPyB0aGlzLm5leHQgPSByZWNvcmQuYXJnIDogXCJyZXR1cm5cIiA9PT0gcmVjb3JkLnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnLCB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCIsIHRoaXMubmV4dCA9IFwiZW5kXCIpIDogXCJub3JtYWxcIiA9PT0gcmVjb3JkLnR5cGUgJiYgYWZ0ZXJMb2MgJiYgKHRoaXMubmV4dCA9IGFmdGVyTG9jKSwgQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykgcmV0dXJuIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpLCByZXNldFRyeUVudHJ5KGVudHJ5KSwgQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24gX2NhdGNoKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH0sIFwibmV4dFwiID09PSB0aGlzLm1ldGhvZCAmJiAodGhpcy5hcmcgPSB1bmRlZmluZWQpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfSwgZXhwb3J0cztcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheVdpdGhIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIik7XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfc2xpY2VkVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheVdpdGhvdXRIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIik7XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKGlucHV0LCBoaW50KSB7XG4gIGlmIChfdHlwZW9mKGlucHV0KSAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0O1xuICB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvUHJpbWl0aXZlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZShcIi4vdG9QcmltaXRpdmUuanNcIik7XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7XG4gIHJldHVybiBfdHlwZW9mKGtleSkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBTdHJpbmcoa2V5KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3RvUHJvcGVydHlLZXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzKSwgX3R5cGVvZihvYmopO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiLy8gVE9ETyhCYWJlbCA4KTogUmVtb3ZlIHRoaXMgZmlsZS5cblxudmFyIHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWVcIikoKTtcbm1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcblxuLy8gQ29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9wYWNrYWdlcy9ydW50aW1lL3J1bnRpbWUuanMjTDczNj1cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBnbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG4gIH0gZWxzZSB7XG4gICAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmNvbnN0IGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0ID0gMzAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlJc0ZvcmVncm91bmQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNGb3JlZ3JvdW5kOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIF90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U6IG51bWJlciA9IERhdGUubm93KCk7XG4gIHByaXZhdGUgX2RvY3VtZW50Rm9jdXNJbnRlcnZhbDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2lzRm9yZWdyb3VuZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kID0gbmV3IFJlYWRPbmx5U3ViamVjdCh0aGlzLl9pc0ZvcmVncm91bmQpO1xuICAgIHRoaXMuZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTtcbiAgfVxuXG4gIGdldCBpc0ZvcmVncm91bmQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQ7XG4gIH1cblxuICBnZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgbGV0IGhpZGRlbjtcbiAgICBsZXQgdmlzaWJpbGl0eUNoYW5nZTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBhIGRlZmluaXRpb24gZm9yICdtc0hpZGRlbicgb3IgJ3dlYmtpdEhpZGRlbicgdHlwZXNcbiAgICAvLyBSZXF1aXJlZCB0byBAdHMtaWdub3JlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5tc0hpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICdtc0hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ21zdmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQud2Via2l0SGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ3dlYmtpdEhpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3dlYmtpdHZpc2liaWxpdHljaGFuZ2UnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LmhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gT3BlcmEgMTIuMTAgYW5kIEZpcmVmb3ggMTggYW5kIGxhdGVyIHN1cHBvcnRcbiAgICAgIGhpZGRlbiA9ICdoaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cblxuICAgIGNvbnN0IGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSAhZG9jdW1lbnRbaGlkZGVuXTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50W2hpZGRlbl0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcblxuICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGlzdGVuRm9yRG9jdW1lbnRGb2N1cy5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9yRG9jdW1lbnRGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gZG9jdW1lbnQuaGFzRm9jdXMoKTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSwgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSBudWxsO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNGb3JlZ3JvdW5kID09PSBpc0ZvcmVncm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0ZvcmVncm91bmQudmFsdWUgPSBpc0ZvcmVncm91bmQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJEZXRlY3RvciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCA9IC8oTVNJRXwoPyFHZWNrby4rKUZpcmVmb3h8KD8hQXBwbGVXZWJLaXQuK0Nocm9tZS4rKVNhZmFyaXwoPyFBcHBsZVdlYktpdC4rKUNocm9tZXxBcHBsZVdlYktpdCg/IS4rQ2hyb21lfC4rU2FmYXJpKXxHZWNrbyg/IS4rRmlyZWZveCkpKD86IHxcXC8pKFtcXGQuYXByZV0rKS9nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZSA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTWFqb3JWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTY5ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS82OS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzAgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcwLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzEuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcyID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Mi4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzQgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc0LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzUuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc2ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ni4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzcgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc3LicpO1xuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyTWFqb3JWZXJzaW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTY5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNjk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcxO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc1O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc2KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKC9BbmRyb2lkfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxPcGVyYSBNaW5pL2kpLnRlc3QobmF2aWdhdG9yPy51c2VyQWdlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciB7XG4gIGdldFN0cmluZ1ZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKSB8fFxuICAgICAgdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApIHx8XG4gICAgICB0aGlzLmRlZmF1bHRTdHJpbmdWYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIGdldEJvb2xlYW5WYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUZyb21VcmkgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCk7XG5cbiAgICBpZiAodmFsdWVGcm9tVXJpKSB7XG4gICAgICByZXR1cm4gdmFsdWVGcm9tVXJpID09PSAndHJ1ZScgfHwgdmFsdWVGcm9tVXJpID09PSAnMScgfHwgdmFsdWVGcm9tVXJpID09PSAnT24nO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRCb29sZWFuVmFsdWVbbmFtZV0gPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCb29sZWFuVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nOiB0cnVlLFxuICAgICAgJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCc6IHRydWUsXG4gICAgICAncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJzogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhVmFsdWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBtZXRhW25hbWU9JyR7bmFtZX0nXWApO1xuXG4gICAgaWYgKCFtZXRhVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG1ldGFWYWx1ZS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsdWVVUklQYXJhbWV0ZXJOYW1lID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKCF2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKS5nZXQodmFsdWVVUklQYXJhbWV0ZXJOYW1lKSB8fCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciB7XG4gIHN0YXRpYyBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc0ZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb25TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5vdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5vdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBsZXQgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG5cbiAgICBpbWcuc3JjID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW25ldyBBcnJheUJ1ZmZlcigxMGUrNyldKSk7IC8vIDEwME1iIG9yIGxlc3Mgb3IgbW9yZSBkZXBlbmRpbmcgb24gYXMgeW91IHdpc2ggdG8gZm9yY2UvaW52b2tlIEdDIGN5Y2xlIHJ1blxuICAgIGltZy5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLnNyYyk7XG5cbiAgICAgIGltZyA9IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvclsnY29ubmVjdGlvbiddO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VmZmVjdGl2ZVR5cGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rTWF4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5lZmZlY3RpdmVUeXBlIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnR5cGU7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucnR0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgICB9O1xuXG4gICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRpc3RpY3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcnR0LnZhbHVlID0gdGhpcy5nZXRSb3VuZFRyaXBUaW1lKCk7XG4gICAgdGhpcy5fZWZmZWN0aXZlVHlwZS52YWx1ZSA9IHRoaXMuZ2V0RWZmZWN0aXZlVHlwZSgpO1xuICAgIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnZhbHVlID0gdGhpcy5nZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuXG5leHBvcnQgY2xhc3MgU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1TZXR1cExpc3RlbmVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0cmljc1NlcnZpY2UgPSBTREsubWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWV0cmljU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN1Y2Nlc3Moc3RyZWFtSWQpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZCwgc3RyZWFtSWQpO1xuICB9XG5cbiAgZmFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZFN0cmVhbU1ldHJpYyhtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZSwgc3RyZWFtSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWV0cmljU3VibWl0dGVkKSB7XG4gICAgICByZXR1cm4gO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY1N1Ym1pdHRlZCA9IHRydWU7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldHVwVGltZSA9IG5vdyAtIHRoaXMuX3N0YXJ0VGltZTtcbiAgICBjb25zdCBtZXRyaWNOYW1lID0gbmV3IE1ldHJpY1R5cGUobWV0cmljVHlwZSkuZ2V0TmFtZSgpO1xuXG4gICAgdGhpcy5tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogc2V0dXBUaW1lfSxcbiAgICAgIHN0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gU3RyZWFtIG1ldHJpYyBbJXNdIGluIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBuZXcgRHVyYXRpb25zKHNldHVwVGltZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRWRnZVRva2VuIGZyb20gJy4vRWRnZVRva2VuJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi9FbmNvZGVkRWRnZVRva2VuJztcblxuY29uc3QgZWRnZUF1dGhUb2tlblByZWZpeCA9ICdESUdFU1Q6JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZUF1dGhQYXJzZXIge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VkZ2VBdXRoUGFyc2VyJyk7XG5cbiAgc3RhdGljIHBhcnNlVG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBFZGdlVG9rZW4ge1xuICAgIGlmICghdGhpcy5pc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbikpIHtcbiAgICAgIEVkZ2VBdXRoUGFyc2VyLl9sb2dnZXIuZXJyb3IoJ1Rva2VuIGlzIG5vdCB2YWxpZCBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihudWxsKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb2RlZFRva2VuID0gYXRvYih0b2tlbi5zdWJzdHIoZWRnZUF1dGhUb2tlblByZWZpeC5sZW5ndGgpKTtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEpTT04ucGFyc2UoZGVjb2RlZFRva2VuKTtcblxuICAgICAgZWRnZVRva2VuLnRva2VuID0gSlNPTi5wYXJzZShlZGdlVG9rZW4udG9rZW4pO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihlZGdlVG9rZW4pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIEVkZ2VBdXRoUGFyc2VyLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBwYXJzZSB0b2tlbiB2YWx1ZScsIGUpO1xuXG4gICAgICByZXR1cm4gbmV3IEVkZ2VUb2tlbihudWxsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0b2tlbiAmJiB0b2tlbi5zdGFydHNXaXRoKGVkZ2VBdXRoVG9rZW5QcmVmaXgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbnRlcmZhY2UgSVRva2VuIHtcbiAgdXJpOiBVUkwgfCBudWxsO1xuICBjYXBhYmlsaXRpZXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSUVkZ2VUb2tlbiB7XG4gIGFwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgdG9rZW46IElUb2tlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZVRva2VuIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbjogSVRva2VuO1xuXG4gIGNvbnN0cnVjdG9yKGVkZ2VUb2tlbjogSUVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uSWQgPSBlZGdlVG9rZW4/LmFwcGxpY2F0aW9uSWQgfHwgJyc7XG4gICAgdGhpcy5fdG9rZW4gPSB7XG4gICAgICB1cmk6IGVkZ2VUb2tlbj8udG9rZW4/LnVyaSA/IG5ldyBVUkwoZWRnZVRva2VuLnRva2VuLnVyaSkgOiBudWxsLFxuICAgICAgY2FwYWJpbGl0aWVzOiBlZGdlVG9rZW4/LnRva2VuPy5jYXBhYmlsaXRpZXMgfHwgW11cbiAgICB9O1xuICB9XG5cbiAgZ2V0IHVyaSgpOiBVUkwgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4udXJpO1xuICB9XG5cbiAgZ2V0IGNhcGFiaWxpdGllcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLmNhcGFiaWxpdGllcztcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uSWQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmRlY2xhcmUgY29uc3QgX19GRUFUVVJFU19fOiB7XG4gIHNlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHNlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBzZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZEZlYXR1cmVzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9ncygpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvZ3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRNZXRyaWNzKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRNZXRyaWNzO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dUb0NvbnNvbGUoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ1RvQ29uc29sZTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZlYXR1cmVzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IF9fRkVBVFVSRVNfXztcblxuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9ICdzZW5kTG9jYWxDYW5kaWRhdGVzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMgOiB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnc2VuZExvZ3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvZ3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ3NlbmRNZXRyaWNzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRNZXRyaWNzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnbG9nVG9Db25zb2xlJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLmxvZ1RvQ29uc29sZSA6ICdBbGwnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnQWxsJztcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRGZWF0dXJlcy5hcHBseUZlYXR1cmVzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiB0eXBlb2YgZG9jdW1lbnQ/LmNyZWF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uID49IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzTW9iaWxlKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICB0eXBlb2YgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciA9PT0gJ3VuZGVmaW5lZCcpO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIFJUQ1J0cFJlY2VpdmVyPy5wcm90b3R5cGU/LmNyZWF0ZUVuY29kZWRTdHJlYW1zICE9PSAndW5kZWZpbmVkJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1BBUkFNRVRFUlNfXzoge1xuICBkaXNjb3Zlcnk6IElEaXNjb3ZlcnlQYXJhbWV0ZXI7XG59O1xuXG5pbnRlcmZhY2UgSURpc2NvdmVyeVBhcmFtZXRlcntcbiAgaW50ZW50aW9uczogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJhbWV0ZXJzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Rpc2NvdmVyeVBhcmFtZXRlcnM6IElEaXNjb3ZlcnlQYXJhbWV0ZXIgO1xuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5UGFyYW1ldGVycygpOiBJRGlzY292ZXJ5UGFyYW1ldGVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycztcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVBhcmFtZXRlcnMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBfX1BBUkFNRVRFUlNfXztcblxuICAgICAgdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycyA9ICdkaXNjb3ZlcnknIGluIHBhcmFtZXRlcnMgPyBwYXJhbWV0ZXJzLmRpc2NvdmVyeSA6IHtpbnRlbnRpb25zOiAnJ307XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycyA9IHtpbnRlbnRpb25zOiAnJ307XG4gICAgfVxuICB9XG59XG5cblBhcmFtZXRlcnMuYXBwbHlQYXJhbWV0ZXJzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXNwb3NhYmxlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGRpc3Bvc2FibGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGUgPSBkaXNwb3NhYmxlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcG9zYWJsZS5jYWxsKHRoaXMpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogSURpc3Bvc2FibGVbXSA9IFtdO1xuXG4gIGFkZChkaXNwb3NhYmxlOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QucHVzaChkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIHRoaXMuX2xpc3QubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEaXNwb3NhYmxlTGlzdFtkaXNwb3NhYmxlcz0ke3RoaXMuX2xpc3QubGVuZ3RofV1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxUeXBlID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMuc2VuZExvZ3NdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5sb2dUb0NvbnNvbGVdO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbFR5cGUpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTWV0cmljc107XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlSGFuZGxlciBmcm9tICcuL1Byb21pc2VIYW5kbGVyJztcblxuY2xhc3MgUHJvbWlzZSB7XG4gIF9zdGF0ZTogbnVtYmVyO1xuICBfaGFuZGxlZDogYm9vbGVhbjtcbiAgX3ZhbHVlOiBQcm9taXNlO1xuICBfZGVmZXJyZWRzOiBBcnJheTxQcm9taXNlSGFuZGxlcj47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICB0aGVuKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZDtcblxuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9IDA7XG4gICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdO1xuXG4gICAgdGhpcy5kb1Jlc29sdmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZG9SZXNvbHZlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soXG4gICAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICByZWFzb24gPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLnByb21pc2VSZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZXNvbHZlKG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRwczovL2dpdGh1Yi5jb20vUHJvbWlzZXMtYXBsdXMvUHJvbWlzZXMtc3BlYyN0aGUtUHJvbWlzZS1yZXNvbHV0aW9uLXByb2NlZHVyZVxuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgUHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdCBzZWxmLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBjb25zdCB0aGVuID0gbmV3VmFsdWUudGhlbjtcblxuICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSAzO1xuICAgICAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgcHJvbWlzZS5maW5hbGUoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHByb21pc2UuZG9SZXNvbHZlKGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgdGhlbi5hcHBseShuZXdWYWx1ZSwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IDE7XG4gICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgcHJvbWlzZS5maW5hbGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlamVjdChuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlID0gMjtcbiAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuZmluYWxlKCk7XG4gIH1cblxuICBmaW5hbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAyICYmIHRoaXMuX2RlZmVycmVkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faGFuZGxlZCkge1xuICAgICAgICAgIFByb21pc2UuX3VuaGFuZGxlZFJlamVjdGlvbih0aGlzLl92YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuaGFuZGxlKHRoaXMuX2RlZmVycmVkc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVmZXJyZWRzID0gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZShkZWZlcnJlZDogUHJvbWlzZUhhbmRsZXIpOiB2b2lkIHtcbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHdoaWxlIChwcm9taXNlLl9zdGF0ZSA9PT0gMykge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMCkge1xuICAgICAgcHJvbWlzZS5fZGVmZXJyZWRzLnB1c2goZGVmZXJyZWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvbWlzZS5faGFuZGxlZCA9IHRydWU7XG4gICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvbWlzZS5fc3RhdGUgPT09IDEgPyBkZWZlcnJlZC5vbkZ1bGZpbGxlZCA6IGRlZmVycmVkLm9uUmVqZWN0ZWQ7XG5cbiAgICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDEpIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhwcm9taXNlLl92YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhbGwoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoW10pO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVtYWluaW5nID0gYXJncy5sZW5ndGg7XG4gICAgICBjb25zdCBtYW5hZ2VSZXNwb25zZSA9IChpLCB2YWx1ZSk6IHZvaWQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCB0aGVuID0gdmFsdWUudGhlbjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiBtYW5hZ2VSZXNwb25zZShpLCB2YWx1ZSksXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFyZ3NbaV0gPSB2YWx1ZTtcblxuICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hbmFnZVJlc3BvbnNlKGksIGFyZ3NbaV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmUodmFsdWUpOiBQcm9taXNlIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJlc29sdmUodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByZWplY3QodmFsdWUpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gcmVqZWN0KHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmFjZShhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5yYWNlIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGFycltpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIF9pbW1lZGlhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICB9XG5cbiAgc3RhdGljIF91bmhhbmRsZWRSZWplY3Rpb24oZXJyb3IpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOicsIGVycm9yKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59XG5cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24ob25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsndGhlbiddID0gZnVuY3Rpb24ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCgpID0+IG51bGwpO1xuXG4gIHRoaXMuaGFuZGxlKG5ldyBQcm9taXNlSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkpO1xuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSA9IGZ1bmN0aW9uKGNhbGxiYWNrOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgdmFsdWUgPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IHZhbHVlKSxcbiAgICByZWFzb24gPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IGNvbnN0cnVjdG9yLnJlamVjdChyZWFzb24pKVxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlIGZyb20gJy4vUHJvbWlzZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb21pc2VIYW5kbGVyIHtcbiAgb25GdWxmaWxsZWQ6IEZ1bmN0aW9uO1xuICBvblJlamVjdGVkOiBGdW5jdGlvbjtcbiAgcHJvbWlzZTogUHJvbWlzZTtcblxuICBjb25zdHJ1Y3RvcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IG51bGw7XG4gICAgdGhpcy5vblJlamVjdGVkID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicgPyBvblJlamVjdGVkIDogbnVsbDtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcblxuZXhwb3J0IGludGVyZmFjZSBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQge1xuICBhdWRpb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHZpZGVvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgbG9jYWxPZmZlcjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiB7XG4gICAgZGlyZWN0aW9uPzogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb247XG4gICAgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcbiAgfTtcblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPHsgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHwgdm9pZD47IGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gfT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ3JlY3Zvbmx5JyxcbiAgICAgIHBlZXJDb25uZWN0aW9uOiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9KVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcihkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uID0gJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gZmFsc2UpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIGlmIChQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCAmJiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbiAmJiAhZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLnBlZXJDb25uZWN0aW9uO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0ge2VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc307XG5cbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbilcbiAgICAgIC50aGVuKGFzeW5jIHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNBZGRUcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLnN1cHBvcnRzQWRkVHJhbnNjZWl2ZXI7XG4gICAgICAgIGxldCB2aWRlb1RyYW5zY2VpdmVyLCBhdWRpb1RyYW5zY2VpdmVyO1xuXG4gICAgICAgIGlmIChzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKSB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCdhdWRpbycsIHtkaXJlY3Rpb259KTtcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ3ZpZGVvJywge2RpcmVjdGlvbn0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIodW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25zID0gZGlyZWN0aW9uID09PSAncmVjdm9ubHknID8ge1xuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IHRydWUsXG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICB9IDoge307XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlZXJDb25uZWN0aW9uU2VydmljZSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIHtcbiAgc3RhdGljIHRydW5jYXRlSWNlU2VydmVycyhjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1cmxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB1cmwgPSBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHVybHMucHVzaChjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgIHVybHM6IHVybHMsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1N0YXRpc3RpYyB7XG4gIHNzcmM/OiBzdHJpbmc7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGJ5dGVzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGZyYW1lc0RlY29kZWQ/OiBudW1iZXI7XG4gIHBhY2tldHNMb3N0PzogbnVtYmVyO1xuICBwYWNrZXRzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGNvZGVjPzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU/OiBudW1iZXI7XG4gIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcD86IG51bWJlcjtcbn1cblxuY29uc3QgdXBkYXRlU3RhdGlzdGljVGltZW91dCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkQXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydGNTdGF0aXN0aWM6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+ID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHt9KTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgcHJpdmF0ZSBfaXNNb25pdG9yUnVubmluZyA9IHRydWU7XG4gIHByaXZhdGUgX3VwZGF0ZVRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdHJhY2tzVG9Nb25pdG9yOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgdGhpcy5fdHJhY2tzVG9Nb25pdG9yID0gbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkubWFwKHRyYWNrID0+IHRyYWNrLmtpbmQpIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmdldEN1cnJlbnRPZmZlckRpc2FibGVkKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFNEUCA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYyA9IHBhcnNlZFNEUC5hdWRpb0NvZGVjO1xuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjID0gcGFyc2VkU0RQLnZpZGVvQ29kZWM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpYygpOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZW91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMudXBkYXRlU3RhdGlzdGljTGVnYWN5KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYWZhcmkgMTEgZG9lc250IGhhdmUga2luZCBvciBtZWRpYVR5cGUgc28gd2UgbmVlZCB0byB0YWtlIGl0IGZyb20gdGhlIGluYm91bmQtcnRwIG9iamVjdCBpZFxuICAgIGNvbnN0IGdldEtpbmRGb3JTYWZhcmkxMSA9IChpdGVtKTogc3RyaW5nID0+IGl0ZW0uaWQuaW5jbHVkZXMoJ0F1ZGlvJykgPyAnYXVkaW8nIDogaXRlbS5pZC5pbmNsdWRlcygnVmlkZW8nKSA/ICd2aWRlbycgOiAnJztcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMobnVsbClcbiAgICAgIC50aGVuKHN0YXRzID0+IHtcbiAgICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcblxuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgbGV0IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgIHN0YXRzLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUpIHtcbiAgICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSAqIDEwMDA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnaW5ib3VuZC1ydHAnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSByZXBvcnQua2luZCB8fCByZXBvcnQubWVkaWFUeXBlIHx8IGdldEtpbmRGb3JTYWZhcmkxMShyZXBvcnQpO1xuICAgICAgICAgICAgICBsZXQgY29kZWMgPSAnJztcblxuICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSByZXBvcnQuY29kZWNJZCkge1xuICAgICAgICAgICAgICAgICAgY29kZWMgPSBpdGVtLm1pbWVUeXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKGtpbmQgJiYgdGhpcy5fdHJhY2tzVG9Nb25pdG9yLmluY2x1ZGVzKGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSByZXBvcnQuYnl0ZXNSZWNlaXZlZCB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQnl0ZXNSZWNlaXZlZCA9IHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy5ieXRlc1JlY2VpdmVkID8/IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNEZWx0YSA9IGJ5dGVzIC0gcHJldmlvdXNCeXRlc1JlY2VpdmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlcG9ydC50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8udGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpdHJhdGUgPSBieXRlc0RlbHRhICYmIHRpbWVEZWx0YSA/IE1hdGguZmxvb3IoOCAqIGJ5dGVzRGVsdGEgL1xuICAgICAgICAgICAgICAgICAgdGltZURlbHRhICogMTAwMCkgOiAwO1xuXG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXSA9IHtcbiAgICAgICAgICAgICAgICAgIHNzcmM6IHJlcG9ydC5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiByZXBvcnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IHJlcG9ydC5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgcGFja2V0c0xvc3Q6IHJlcG9ydC5wYWNrZXRzTG9zdCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNSZWNlaXZlZDogcmVwb3J0LnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LmZyYW1lc0RlY29kZWQ7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZwcyA9IChyZXBvcnQuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMDtcblxuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnBzJ10gPSBmcHMgPyBNYXRoLnJvdW5kKGZwcyAqIDEwMCkgLyAxMDAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHNMZWdhY3koKS50aGVuKHN0YXRzID0+IHtcbiAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG4gICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICAgIHN0YXRzLnJlc3VsdCgpLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgcmVwb3J0Lm5hbWVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2dvb2dSVFQnKSB7XG4gICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LnN0YXQobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdzc3JjJykge1xuICAgICAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IHJlcG9ydC5zdGF0KCdtZWRpYVR5cGUnKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdID0ge3RpbWVzdGFtcDogRGF0ZS5ub3coKX07XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydzc3JjJ10gPSByZXBvcnQuc3RhdCgnc3NyYycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydtZWRpYVR5cGUnXSA9IG1lZGlhVHlwZTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2J5dGVzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdieXRlc1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzTG9zdCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNMb3N0Jyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2NvZGVjJ10gPSByZXBvcnQuc3RhdCgnZ29vZ0NvZGVjTmFtZScpLnRvU3RyaW5nKCkgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShtZWRpYVR5cGUpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncm91bmRUcmlwVGltZSddID0gcm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIGlmIChtZWRpYVR5cGUgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuc3RhdCgnZnJhbWVzRGVjb2RlZCcpO1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcHMnXSA9IChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0uZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgMTAwMCB8fCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2RlY0J5VHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYztcbiAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZHBQYXJzZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZHA6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzQXVkaW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzVmlkZW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2RwOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZHAgPSBzZHA7XG5cbiAgICBjb25zdCBzZHBTcGxpdEJ5TGluZXMgPSB0aGlzLl9zZHAuc3BsaXQoLyhcXHJcXG58XFxyfFxcbikvKTtcbiAgICBjb25zdCBzZHBTcGxpdEJ5VHJhY2tzID0gdGhpcy5fc2RwLnNwbGl0KCdtPScpO1xuXG4gICAgdGhpcy5fYXVkaW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygnYXVkaW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX3ZpZGVvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ3ZpZGVvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgnYXVkaW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgICB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgndmlkZW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgfVxuXG4gIGdldCBhdWRpb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29kZWM7XG4gIH1cblxuICBnZXQgdmlkZW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92aWRlb0NvZGVjO1xuICB9XG5cbiAgZ2V0IGlzQXVkaW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBnZXQgaXNWaWRlb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNUcmFja0J5VHlwZUVuYWJsZWQodHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5VHJhY2tzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNkcFNlY3Rpb25Gb3JUeXBlID0gc2RwU3BsaXRCeVRyYWNrcy5maW5kKHNkcFRyYWNrID0+IHNkcFRyYWNrLnN0YXJ0c1dpdGgodHlwZSkpO1xuXG4gICAgaWYgKCFzZHBTZWN0aW9uRm9yVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhc2RwU2VjdGlvbkZvclR5cGUuaW5jbHVkZXMoYGE9aW5hY3RpdmVgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb2RlYyh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlMaW5lczogc3RyaW5nIFtdKTogc3RyaW5nIHtcbiAgICBjb25zdCB1c2VkQ29kZWNMaW5lID0gc2RwU3BsaXRCeUxpbmVzLmZpbmQoc2RwTGluZSA9PiBzZHBMaW5lLmluY2x1ZGVzKGBhPXJ0cG1hcDoke3NkcFNwbGl0QnlMaW5lcy5maW5kKGkgPT4gaS5pbmNsdWRlcyhgbT0ke3R5cGV9YCkpLnNwbGl0KCcgJylbM119YCkpO1xuICAgIGNvbnN0IHVzZWRDb2RlYyA9IHVzZWRDb2RlY0xpbmUuc3BsaXQoJyAnKVsxXTtcbiAgICBjb25zdCBjb2RlY05hbWUgPSB1c2VkQ29kZWMuc3BsaXQoJy8nKVswXTtcblxuICAgIHJldHVybiBjb2RlY05hbWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24sIHtQZWVyQ29ubmVjdGlvbkV2ZW50c30gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge0lMZWdhY3lSVENTdGF0c1JlcG9ydH0gZnJvbSAnLi9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdWYW5pbGxhUGVlckNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IFJUQ1BlZXJDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24gY2xhc3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgZ2V0IG5hdGl2ZSgpOiBSVENQZWVyQ29ubmVjdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblN0YXRlKCk6IFJUQ1BlZXJDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgaWNlQ29ubmVjdGlvblN0YXRlKCk6IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNBZGRUcmFuc2NlaXZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZlcihvcHRpb25zPzogUlRDT2ZmZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVPZmZlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVBbnN3ZXIob3B0aW9ucz86IFJUQ0Fuc3dlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZUFuc3dlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHNldExvY2FsRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGFzQ3J5cHRvID0gZGVzY3JpcHRpb24uc2RwPy5tYXRjaCgvYT1jcnlwdG86L2kpO1xuXG4gICAgaWYgKGhhc0NyeXB0bykge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1NEUCBhPWNyeXB0byBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgZ2V0U2VuZGVycygpOiBSVENSdHBTZW5kZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFNlbmRlcnMoKTtcbiAgfVxuXG4gIGdldFN0YXRzKHNlbGVjdG9yPzogTWVkaWFTdHJlYW1UcmFjayB8IG51bGwpOiBQcm9taXNlPFJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHNlbGVjdG9yKTtcbiAgfVxuXG4gIGdldFN0YXRzTGVnYWN5KCk6IFByb21pc2U8SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgLy8gSWdub3JlZCBkdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGxlZ2FjeSAnZ2V0U3RhdHMnIG1ldGhvZCB0eXBlIGRlZmluaXRpb25cbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnZ2V0U3RhdHMnIG1ldGhvZCBmb3JcbiAgICAgIC8vIENocm9tZUA8PSA2NiBkZXRhaWxlZCBoZXJlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02Mjc4MTZcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFRyYW5zY2VpdmVyKG5hbWU6IHN0cmluZywgb3B0aW9uczogUlRDUnRwVHJhbnNjZWl2ZXJJbml0KTogUlRDUnRwVHJhbnNjZWl2ZXIge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiB2b2lkIHtcbiAgICBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYWNrKHRyYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb24oKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIHNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzZXQgb250cmFjayhoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjayA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb250cmFjaygpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjaztcbiAgfVxuXG4gIHNldCBvbmljZWNhbmRpZGF0ZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY2FuZGlkYXRlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZTtcbiAgfVxuXG4gIHNldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIHNldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IEFycmF5PFQ+LCBsaXN0ZW5lcjogVCkge1xuICAgIHN1cGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBBcnJheTwoVCkgPT4gdm9pZD47XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwoVCkgPT4gdm9pZD4odGhpcy5fbGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW52aXJvbm1lbnQge1xuICBzdGF0aWMgZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgcmV0dXJuIGJhc2VVUkwub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuLi9sb2dnZXIvQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4vVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL0Vudmlyb25tZW50JztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL3N0cmVhbWluZy9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5jb25zdCBwYWdlTG9hZFRpbWUgPSB3aW5kb3dbJ19fcGhlbml4UGFnZUxvYWRUaW1lJ10gfHwgd2luZG93WydfX3BhZ2VMb2FkVGltZSddIHx8IERhdGUubm93KCk7XG5cbmludGVyZmFjZSBJSW5pdE9wdGlvbnMge1xuICBkaXNjb3ZlcnlVcmk/OiBzdHJpbmc7XG4gIHBlZXJDb25uZWN0aW9uRmFjdG9yeT86IElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIHRlbGVtZXRyeUxldmVsPzogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBjb25zb2xlTG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbT86IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlPzogYm9vbGVhbjtcbiAgd2ViUGxheWVyTG9hZGVyPzogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZDtcbiAgc2hha2FQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBTaGFrYVR5cGUpID0+IHZvaWQ7XG4gIGhsc0pzTG9hZGVyPzogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF93ZWJQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHN0YXRpYyBfZW52aXJvbm1lbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5VXJsOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeScpO1xuICBwcml2YXRlIHN0YXRpYyBfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDg7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlMZXZlbDogU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4gPSBuZXcgU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4oVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KEJ1aWxkRmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90ZW5hbmN5OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2NsaWVudFNlc3Npb25JZDogc3RyaW5nID0gU3RyaW5ncy5yYW5kb20oMzIpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9hZGVkVGltZXN0YW1wOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTREsnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2luaXRpYWxpemVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbml0aWFsaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPihTREsuX2luaXRpYWxpemVkKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5RGlzY292ZXJ5VXJpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPihEaXNjb3ZlcnlVcmkudXJpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5OiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpO1xuXG4gIHN0YXRpYyBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVuYW5jeSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc3RhdGljIGdldCBjbGllbnRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU0RLLl9jbGllbnRTZXNzaW9uSWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvYWRlZFRpbWVzdGFtcCgpOiBEYXRlIHtcbiAgICByZXR1cm4gU0RLLl9sb2FkZWRUaW1lc3RhbXA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGluaXRpYWxpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlJbml0aWFsaXplZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5VXJpKCk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seURpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCcpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnU2tpcCBnYXJiYWdlIGNvbGxlY3Rpb24gb24gbW9iaWxlIGRldmljZXMgb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5kaXNjb3ZlcnlVcmkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy50ZWxlbWV0cnlVcmwudmFsdWUgPSBTREsuZ2V0VGVsZW1ldHJ5VXJsKHZhbHVlKTtcbiAgICAgIFNESy5fZW52aXJvbm1lbnQudmFsdWUgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2hhbm5lbFRva2VuID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWNoYW5uZWwtdG9rZW4nKTtcblxuICAgIGlmIChjaGFubmVsVG9rZW4pIHtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4oY2hhbm5lbFRva2VuKTtcblxuICAgICAgU0RLLl90ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3k7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJpVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtdXJpJyk7XG5cbiAgICBpZiAodXJpVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmlWYWx1ZTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVVJJVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtYmFzZS11cmknKTtcblxuICAgIGlmIChiYXNlVVJJVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBgJHtiYXNlVVJJVmFsdWV9L3BjYXN0L2VuZFBvaW50c2A7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC1iYXNlLXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaW5pdChvcHRpb25zPzogSUluaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBuZXcgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuZGlzY292ZXJ5VXJpKSB7XG4gICAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBvcHRpb25zLmRpc2NvdmVyeVVyaTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5KSB7XG4gICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUgPSBvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwgJiYgVGVsZW1ldHJ5TGV2ZWxbb3B0aW9ucy50ZWxlbWV0cnlMZXZlbF0pIHtcbiAgICAgICAgU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChvcHRpb25zLnRlbGVtZXRyeUxldmVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubG9nZ2luZ0xldmVsICYmIExvZ2dpbmdMZXZlbFtvcHRpb25zLmxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLnRocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMubG9nZ2luZ0xldmVsKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgJiZcbiAgICAgICAgTG9nZ2luZ0xldmVsW29wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgY29uc3QgY29uc29sZUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgQ29uc29sZUFwcGVuZGVyKTtcblxuICAgICAgICBpZiAoY29uc29sZUFwcGVuZGVyKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUoY29uc29sZUFwcGVuZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgIT09ICdPZmYnKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fd2ViUGxheWVyTG9hZGVyID0gb3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyID0gb3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuaGxzSnNMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5faGxzSnNMb2FkZXIgPSBvcHRpb25zLmhsc0pzTG9hZGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsICgpID0+IHtcbiAgU0RLLmRpc3Bvc2UoKTtcbn0pO1xuXG5TREsuYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5pbml0KCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVVybCB7XG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBiYXNlVVJMLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG5cbiAgICAgIHN3aXRjaCAoYmFzZVVSTC5wcm90b2NvbCkge1xuICAgICAgICBjYXNlICd3czonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cDonO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dzczonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cHM6JztcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDIgfHxcbiAgICAgICAgICAoc2VnbWVudHMubGVuZ3RoID09PSAzICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDJdLmxlbmd0aCA8PSAyICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmxlbmd0aCA8PSAzKVxuICAgICAgKSB7XG4gICAgICAgIHNlZ21lbnRzLnVuc2hpZnQoJ3RlbGVtZXRyeScpO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdzdGctJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1zdGcnKSB8fCBzZWdtZW50c1swXS5pbmNsdWRlcygnLXN0Zy0nKSB8fCBzZWdtZW50c1swXSA9PT0gJ3N0ZycpIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5LXN0Zyc7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ2xvY2FsJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1sb2NhbCcpKSB7XG4gICAgICAgIC8vIExlYXZlIFVSTCB1bmNoYW5nZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeSc7XG4gICAgICB9XG5cbiAgICAgIGJhc2VVUkwuaG9zdG5hbWUgPSBzZWdtZW50cy5qb2luKCcuJyk7XG5cbiAgICAgIHJldHVybiBgJHtiYXNlVVJMLm9yaWdpbn0vdGVsZW1ldHJ5YDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgdHlwZSBCaXRyYXRlU3RhdGVUeXBlID0gJ0tlZXAnIHwgJ1Jlc2V0JztcbmV4cG9ydCB0eXBlIEJpdHJhdGVNb2RlVHlwZSA9ICdOb3JtYWwnIHwgJ0ZvcmNlJyB8ICdSZXNldCc7XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVTdGF0ZSB7XG4gIEtlZXAsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVNb2RlIHtcbiAgTm9ybWFsLFxuICBGb3JjZSxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUge1xuICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgYml0cmF0ZUluQml0c1BlclNlY29uZDogbnVtYmVyO1xuICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZVR5cGU7XG4gIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZVR5cGU7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uLy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IFRva2VuQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1Rva2VuQ29udGV4dCc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQsIHtDaGFubmVsQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCBFbmNvZGVkU3RyZWFtU2luayBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vSVN0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCB7U3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IEluc2VydGFibGVTdHJlYW1zIGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0luc2VydGFibGVTdHJlYW1zJztcblxuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAxNTAwMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2hhbm5lbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbkNvbnRleHQ6IFRva2VuQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGVDb250ZXh0OiBTdGF0ZUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cG9uZW50aWFsQmFja29mZjogRXhwb25lbnRpYWxCYWNrb2ZmO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VmlkZW9FbGVtZW50OiBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW46IFJlYWRPbmx5U3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhdGU6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9NdXRlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9QYXVzZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbkV4cGlyaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0aG9yaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU9ubGluZTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxvYWRpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQbGF5aW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhbmRieTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0b3BwZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUYXJnZXRMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUJpdHJhdGVMaW1pdDogUmVhZE9ubHlTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJlc29sdXRpb246IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUZhaWx1cmVDb3VudDogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RW5kUG9pbnQ6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RyZWFtOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UnRjU3RhdGlzdGljczogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlNZWRpYVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPjtcblxuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25UZWxlbWV0cnk6IFNlc3Npb25UZWxlbWV0cnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcjogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBvcHRpb25zPzogQ2hhbm5lbE9wdGlvbnMpIHtcbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCBjaGFubmVsQ29udGV4dE9wdGlvbnM6IENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHt0YXJnZXRMYWc6IG9wdGlvbnM/LnRhcmdldExhZ307XG4gICAgY29uc3Qgc3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnM6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zID0ge1xuICAgICAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2luc2VydGFibGUtc3RyZWFtcycpLFxuICAgICAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucz8udmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zPy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rXG4gICAgfTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dCA9IG5ldyBUb2tlbkNvbnRleHQodG9rZW4pO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gbmV3IENoYW5uZWxDb250ZXh0KGNoYW5uZWxDb250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gbmV3IFBlZXJDb25uZWN0aW9uQ29udGV4dCgpO1xuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQgPSBuZXcgU3RyZWFtVHJhbnNmb3JtQ29udGV4dChzdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVZpZGVvRWxlbWVudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50KTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbSk7XG4gICAgdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4odGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodGhpcy52aWRlb0VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24uc3Vic2NyaWJlKHJlc29sdXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMocmVzb2x1dGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQuc3Vic2NyaWJlKGJpdHJhdGVMaW1pdCA9PiB7XG4gICAgICAgIGlmIChiaXRyYXRlTGltaXQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGJpdHJhdGVMaW1pdCxcbiAgICAgICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICAgICAgQml0cmF0ZU1vZGUuTm9ybWFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1PblVubW91bnQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtT25Vbm1vdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgJ2NsaWVudDp0ZXJtaW5hdGlvbi1vbi13aW5kb3ctdW5sb2FkJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB2aWRlb0VsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBEaW1lbnNpb24uZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVuY29kZWRFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcyA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2luc2VydGFibGUtc3RyZWFtcycpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHBlZXJDb25uZWN0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhdGU7XG4gIH1cblxuICBnZXQgYXV0b011dGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkO1xuICB9XG5cbiAgZ2V0IGF1dG9QYXVzZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwbGF5aW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGxheWluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRMYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnO1xuICB9XG5cbiAgZ2V0IGxhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMYWc7XG4gIH1cblxuICBnZXQgYml0cmF0ZUxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlc29sdXRpb247XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RyZWFtO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkO1xuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpY3MoKTogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcztcbiAgfVxuXG4gIGdldCBtZWRpYVN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHNldEJpdHJhdGVMaW1pdChiaXRyYXRlTGltaXQ6IEJpdHNQZXJTZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSBiaXRyYXRlTGltaXQ7XG4gIH1cblxuICBjbGVhckJpdHJhdGVMaW1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kID0gMDtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgQml0cmF0ZU1vZGUuUmVzZXRcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYXJnZXRMYWcobGFnOiBNaWxsaXNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIGFzeW5jIHN0b3AocmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy5zdWJzY3JpYmUoaXNTdGFydGluZyA9PiB7XG4gICAgICAgIGlmICghaXNTdGFydGluZykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKHJlYXNvbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogVVJMIHtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS51cmk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBJbnNlcnRhYmxlU3RyZWFtcy52YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gRW5jb2RlZFN0cmVhbVNpbmsudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygndmlkZW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmspO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBFbmNvZGVkU3RyZWFtU2luay52YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKCdhdWRpbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMpIHtcbiAgICAgIGNvbnN0IGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgICAgaWYgKGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrICYmICFGZWF0dXJlRW5hYmxlbWVudC5pc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWVkaWEgU3RyZWFtIFRyYWNrIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc0VuY29kZWRTdHJlYW1TaW5rID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgICBpZiAoaGFzRW5jb2RlZFN0cmVhbVNpbmsgJiYgIUZlYXR1cmVFbmFibGVtZW50LmlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrICYmIGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBmb3VuZCBtdWx0aXBsZSB0eXBlcyAoTWVkaWEgU3RyZWFtIFRyYWNrIGFuZCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpIG9mIENyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbnMnKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIShoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayB8fCBoYXNFbmNvZGVkU3RyZWFtU2luaykpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdpbnNlcnRhYmxlLXN0cmVhbXMgZW5hYmxlZCwgYnV0IG1pc3NpbmcgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIGNhbGxiYWNrIGZ1bmN0aW9uJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGFzU3RyZWFtVHJhbnNmb3Jtc09yU2luayA9IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgICBpZiAoaGFzU3RyZWFtVHJhbnNmb3Jtc09yU2luaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoYENyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbiBmb3VuZCwgYnV0IGZlYXR1cmUgaXMgbm90IGVuYWJsZWQgdmlhIGluc2VydGFibGUtc3RyZWFtcyBjYXBhYmlsaXR5YCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBDaGFubmVsU3RhdGUuRXJyb3IgfHwgc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nKSB7XG4gICAgICAgICAgRGlzY292ZXJ5LmNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgY2hhbm5lbCcsIGUpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nIHx8ICFTREsuYXV0b21hdGljUmV0cnlPbkZhaWx1cmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLmdldFJldHJ5SW50ZXJ2YWwoKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVkaWFTdHJlYW0gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIW1lZGlhU3RyZWFtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgICByZXR1cm4gc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlLCBDaGFubmVsU3RhdGVbdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWVdKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgdW5hdXRob3JpemVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIHJlc3RyaWN0ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gYmxvY2tlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBsYXlpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwYXVzZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgaW52b2tlIHBsYXkoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gdW5zdXBwb3J0ZWQgZmVhdHVyZSwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byBjb25maWd1cmF0aW9uIGVycm9yLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcyhyZWFzb246IHN0cmluZyA9IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbik6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgaWYgKFNESy5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ICYmICEoRmVhdHVyZUVuYWJsZW1lbnQuaXNNb2JpbGUgJiYgU0RLLnNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcykpIHtcbiAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW0odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0VuY29kZWRTdHJlYW1TaW5rID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKCFoYXNFbmNvZGVkU3RyZWFtU2luaykge1xuICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgIH1cblxuICAgIGNvbnN0IHBsYXlQcm9taXNlID0gdmlkZW9FbGVtZW50LnBsYXkoKTtcblxuICAgIGlmIChwbGF5UHJvbWlzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGF1c2VkIHZpZGVvIGFmdGVyIHBsYXkgZmFpbGVkLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQXVkaW9UcmFjaykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSBtdXRlZCB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZpZGVvRWxlbWVudC5wbGF5KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBsYXllZCB2aWRlbyBhZnRlciBhdXRvIG11dGluZy4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkIHRvIHVubXV0ZS4nLCB0aGlzLnN0cmVhbUlkKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nLFxuICBQYXVzZWQsXG4gIFBsYXlpbmcsXG4gIFJlY292ZXJpbmcsXG4gIFJlY29ubmVjdGluZyxcbiAgU3RhbmRCeSxcbiAgU3RvcHBlZCxcbiAgVW5hdXRob3JpemVkLFxuICBHZW9SZXN0cmljdGVkLFxuICBHZW9CbG9ja2VkLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUsXG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IENoYW5uZWwsIHtDaGFubmVsT3B0aW9uc30gZnJvbSAnLi9DaGFubmVsJztcbmltcG9ydCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vSVN0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQge01pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5cbnR5cGUgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgdG9rZW46IEVuY29kZWRFZGdlVG9rZW47XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVscyB7XG4gIHN0YXRpYyBjcmVhdGVDaGFubmVsKG9wdGlvbnM6IENyZWF0ZUNoYW5uZWxPcHRpb25zKTogQ2hhbm5lbCB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbm5lbE9wdGlvbnM6IENoYW5uZWxPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zLnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZEF1ZGlvU3RyZWFtU2lua1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IENoYW5uZWwob3B0aW9ucy52aWRlb0VsZW1lbnQsIG9wdGlvbnMudG9rZW4sIGNoYW5uZWxPcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVscyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IENoYW5uZWxzIGZyb20gJy4vQ2hhbm5lbHMnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5cbmV4cG9ydCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljLCBJUnRjU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG5jb25zdCBkZWZhdWx0VGFyZ2V0TGFnID0gMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsQ29udGV4dCB7XG4gIGNoYW5uZWxJbml0aWFsaXphdGlvbjogRGF0ZTtcbiAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBjaGFubmVsRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICByZW5kZXJlckRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgdmlkZW9FbGVtZW50OiBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBzdGF0ZTogU3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBhdXRvTXV0ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dG9QYXVzZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcGxheWluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdGFyZ2V0TGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgbGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgYml0cmF0ZUxpbWl0OiBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICByZXNvbHV0aW9uOiBTdWJqZWN0PERpbWVuc2lvbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHZpZGVvVGVsZW1ldHJ5OiBWaWRlb1RlbGVtZXRyeTtcbiAgcnRjQXVkaW9TdGF0aXN0aWM6IElSdGNTdGF0aXN0aWM7XG4gIHJ0Y1ZpZGVvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQ2hhbm5lbENvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbERpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5yZW5kZXJlckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsSW5pdGlhbGl6YXRpb24gPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gbmV3IFN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4obnVsbCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PENoYW5uZWxTdGF0ZT4oQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nKTtcbiAgICB0aGlzLmF1dG9NdXRlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dG9QYXVzZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wbGF5aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50YXJnZXRMYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4ob3B0aW9ucz8udGFyZ2V0TGFnID8/IGRlZmF1bHRUYXJnZXRMYWcpO1xuICAgIHRoaXMubGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KDApO1xuICAgIHRoaXMuYml0cmF0ZUxpbWl0ID0gbmV3IFN1YmplY3Q8Qml0c1BlclNlY29uZD4oMCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gbmV3IFN1YmplY3Q8RGltZW5zaW9uPihEaW1lbnNpb24uZW1wdHkpO1xuICAgIHRoaXMuZmFpbHVyZUNvdW50ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICB0aGlzLmVuZFBvaW50ID0gbmV3IFN1YmplY3Q8RW5kUG9pbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IFN1YmplY3Q8SVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5ydGNTdGF0aXN0aWNzID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KG51bGwpO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLnN0cmVhbUlkO1xuICB9XG5cbiAgYXBwbHlTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHRoaXMuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlKys7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LnZhbHVlICYmIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgIH1cbiAgfVxuXG4gIG1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YW5kQnk7XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDtcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvbkNvbnRleHQge1xuICBtZWRpYVN0cmVhbTogU3ViamVjdDxNZWRpYVN0cmVhbT47XG4gIHBlZXJDb25uZWN0aW9uOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1lZGlhU3RyZWFtID0gbmV3IFN1YmplY3Q8TWVkaWFTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb24gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0ZUNvbnRleHQge1xuICBpc1N0YXJ0aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBpc0Rpc3Bvc2VkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaXNTdGFydGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0lTdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuXG5leHBvcnQgdHlwZSBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyA9IHtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IGJvb2xlYW47XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbVRyYW5zZm9ybUNvbnRleHQge1xuICBoYXNJbnNlcnRhYmxlU3RyZWFtczogYm9vbGVhbjtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQpIHtcbiAgICB0aGlzLmhhc0luc2VydGFibGVTdHJlYW1zID0gb3B0aW9ucy5oYXNJbnNlcnRhYmxlU3RyZWFtcztcbiAgICB0aGlzLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s7XG4gICAgdGhpcy5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rID0gb3B0aW9ucy5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rO1xuICAgIHRoaXMuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9IG9wdGlvbnMuZW5jb2RlZEF1ZGlvU3RyZWFtU2luaztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbkNvbnRleHQge1xuICB0b2tlbjogU3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPjtcbiAgdG9rZW5FeHBpcmluZzogU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3Rvcih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMudG9rZW4gPSBuZXcgU3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPih0b2tlbik7XG4gICAgdGhpcy50b2tlbkV4cGlyaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHREaXNjb3ZlcnlVcmkgPSAnaHR0cHM6Ly9wY2FzdC5waGVuaXhydHMuY29tL3BjYXN0L2VuZFBvaW50cyc7XG5cbmV4cG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlTW9kZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVNb2RlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUpOiBCaXRyYXRlTW9kZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZU1vZGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuTm9ybWFsOlxuICAgICAgICByZXR1cm4gJ05vcm1hbCc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLkZvcmNlOlxuICAgICAgICByZXR1cm4gJ0ZvcmNlJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZU1vZGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlU3RhdGUsIEJpdHJhdGVTdGF0ZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVTdGF0ZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSk6IEJpdHJhdGVTdGF0ZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZVN0YXRlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5LZWVwOlxuICAgICAgICByZXR1cm4gJ0tlZXAnO1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZVN0YXRlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBEaXNjb3ZlcnlTZXJ2aWNlIGZyb20gJy4vRGlzY292ZXJ5U2VydmljZSc7XG5cbmNvbnN0IGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwgPSA2MDAwMDtcblxuaW50ZXJmYWNlIElQZXJVUklFbmRwb2ludCB7IFt4OiBzdHJpbmddOiBQcm9taXNlPEVuZFBvaW50PiB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZTogSVBlclVSSUVuZHBvaW50ID0ge307XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmk6IFVSTCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIHJldHVybiBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuXG4gICAgY29uc3QgZGlzY292ZXJ5U2VydmljZSA9IG5ldyBEaXNjb3ZlcnlTZXJ2aWNlKHVyaSk7XG4gICAgY29uc3QgY2FjaGVkVmFsdWUgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPSBkaXNjb3ZlcnlTZXJ2aWNlLmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KCk7XG4gICAgY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9PT0gY2FjaGVkVmFsdWUpIHtcbiAgICAgICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgICAgICB9XG4gICAgICB9LCBkaXNjb3ZlcnlDYWNoZUludGVydmFsKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaTogVVJMKTogdm9pZCB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdKSB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbmNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkucHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIHdpdGggbm8gZGF0YSBbJHt1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzU3RyaW5nID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGFzU3RyaW5nLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBuZXcgRW5kUG9pbnQoZW5kUG9pbnQsIHRpbWVvdXQpKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KHRpbWVvdXQ6IG51bWJlciA9IGRlZmF1bHRUaW1lb3V0KTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IERpc2NvdmVyeVVyaS5idWlsZERpc2NvdmVyeVVybCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGF3YWl0IHRoaXMuZGlzY292ZXJOZWFyYnlFbmRQb2ludHMobmV3IFVSTCh1cmwpLCB0aW1lb3V0KTtcbiAgICBsZXQgZmFpbGVkUmVxdWVzdHMgPSAwO1xuICAgIGNvbnN0IHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkID0gKCk6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGZhaWxlZFJlcXVlc3RzID49IGVuZFBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmVqZWN0KGBEaXNjb3Zlcnkgb2YgWyR7ZW5kUG9pbnRzLmxlbmd0aH1dIGVuZHBvaW50cyBmcm9tIFske3VybH1dIGZhaWxlZCwgcHJldmVudGluZyBpdCBmcm9tIGNvbXBsZXRpbmdgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlbmRQb2ludCA9IGF3YWl0IFByb21pc2UucmFjZShlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IGVuZFBvaW50XG4gICAgICAucGluZygpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGluZyBlbmQgcG9pbnQgWyVzXScsIGVuZFBvaW50LCBlKTtcblxuICAgICAgICBmYWlsZWRSZXF1ZXN0cysrO1xuXG4gICAgICAgIHJldHVybiBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHRpbWUgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcmVkIGVuZCBwb2ludCBbJXNdIHdpdGggdGltZSBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSwgdGltZSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICAgICAgcnVudGltZTogKG5vdyAtIFNESy5wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgICAgICB2YWx1ZToge3VpbnQ2NDogdGltZSB8fCAwfSxcbiAgICAgICAgICByZXNvdXJjZTogZW5kUG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBraW5kOiAncGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgICAgfSkpKTtcblxuICAgIHJldHVybiBlbmRQb2ludDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9IGZyb20gJy4uL2RlZmF1bHRzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvUGFyYW1ldGVycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVVyaSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kaXNjb3ZlcnlVcmk6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oZGVmYXVsdERpc2NvdmVyeVVyaSk7XG5cbiAgc3RhdGljIGdldCB1cmkoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5VXJpLl9kaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGREaXNjb3ZlcnlVcmwodXJpOiBVUkwpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodXJpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVybC5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnaW50ZW50aW9ucycsIGludGVudGlvbnNdLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgaWYgKHVybC5wYXRobmFtZSA9PT0gJy8nKSB7XG4gICAgICB1cmwucGF0aG5hbWUgPSAnL3BjYXN0L2VuZFBvaW50cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeVVyaSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVJlc3BvbnNlLFxuICBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3Rcbn0gZnJvbSAnLi4vYXBpL1N1YnNjcmliZSc7XG5pbXBvcnQge0lTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QsIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlfSBmcm9tICcuLi9hcGkvU2V0UmVtb3RlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJRGVzdHJveVN0cmVhbVJlcXVlc3QsIElEZXN0cm95U3RyZWFtUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9EZXN0cm95U3RyZWFtJztcbmltcG9ydCB7SUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0LCBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlfSBmcm9tICcuLi9hcGkvQWRkSWNlQ2FuZGlkYXRlcyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZSwgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEJpdHJhdGVNb2RlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVNb2RlTWFwcGluZyc7XG5pbXBvcnQgQml0cmF0ZVN0YXRlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVTdGF0ZU1hcHBpbmcnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IHtcbiAgSVB1Ymxpc2hSZXNwb25zZSxcbiAgSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QsXG4gIFB1Ymxpc2hTdGF0dXNcbn0gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNztcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBSZW1vdmVUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIERlc3Ryb3lTdHJlYW1TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtcbiAgc3RhdHVzOiBQdWJsaXNoU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn07XG5cbmludGVyZmFjZSBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzO1xuICBzZXNzaW9uRGVzY3JpcHRpb24/OiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5pbnRlcmZhY2UgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXM7XG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXM7XG59XG5cbmludGVyZmFjZSBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kUG9pbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRW5kUG9pbnQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXJpOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcm91bmRUcmlwVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIpIHtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gICAgdGhpcy5fdGltZW91dCA9IHRpbWVvdXQ7XG5cbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW5kIHBvaW50IHJlcXVpcmVzIGEgdGltZW91dGApO1xuICAgIH1cbiAgfVxuXG4gIGdldCByb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRW5kUG9pbnRbdXJpPSR7dGhpcy5fdXJpfV1gO1xuICB9XG5cbiAgYXN5bmMgcGluZygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRQaW5nVXJsKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBQaW5nIHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGhpcy5fdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7IC8qIEhhbmRsZSAqL1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQaW5nIGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIHRoaXMuX3JvdW5kVHJpcFRpbWUgPSBmaW5pc2hlZCAtIHN0YXJ0O1xuXG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICBhc3luYyBzdWJzY3JpYmUodG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAnc3Vic2NyaWJlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYFN1YnNjcmliZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHN1YnNjcmliZSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBwdWJsaXNoKG5hbWU6IHN0cmluZywgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3B1Ymxpc2gnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBuZXcgRXJyb3IoYFB1Ymxpc2ggdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFB1Ymxpc2hTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3QgcHVibGlzaCByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW06IElTdHJlYW0sIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXNjcmlwdGlvbicsICdyZW1vdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgIHR5cGU6IHNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICBzZHA6IHNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgbmV3IEVycm9yKGBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbGltaXRCaXRyYXRlKFxuICAgIHN0cmVhbTogSVN0cmVhbSxcbiAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcixcbiAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBCaXRzUGVyU2Vjb25kLFxuICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlLFxuICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSxcbiAgKTogUHJvbWlzZTxJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2JpdHJhdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlKSxcbiAgICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZU1hcHBpbmcuY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGUpXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBuZXcgRXJyb3IoYFNldCBsaW1pdCBiaXRyYXRlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBzZXQgbGltaXQgYml0cmF0ZSByZXNwb25zZSBbJXNdIGluIFslc10gbXMnLCBzdGF0dXMsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHtzdGF0dXN9O1xuICB9XG5cbiAgYXN5bmMgYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW06IElTdHJlYW0sIGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdLCBkaXNjb3ZlcnlDb21wbGV0ZWQ6IGJvb2xlYW4sIG9wdGlvbnM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdpY2UnLCAnY2FuZGlkYXRlcyddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQsXG4gICAgICBvcHRpb25zXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgbmV3IEVycm9yKGBBZGQgaWNlIGNhbmRpZGF0ZXMgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBhZGQgSUNFIGNhbmRpZGF0ZXMgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtKHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYERlbGV0ZSBzdHJlYW0gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdHJlYW0nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgZGVzdHJveSBzdHJlYW0gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgZGVzdHJveVN0cmVhbVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtT25Vbm1vdW50KHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5hdmlnYXRvcj8uc2VuZEJlYWNvbikge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIG5hdmlnYXRvci5zZW5kQmVhY29uKHVybCwgZm9ybURhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFVybChwYXRoOiBzdHJpbmdbXSk6IFVSTCB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHBhdGhBc0FycmF5ID0gdXJpLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBwYXRoQXNBcnJheS5sZW5ndGggPSBwYXRoQXNBcnJheS5sZW5ndGggLSAxO1xuXG4gICAgdXJpLnBhdGhuYW1lID0gcGF0aEFzQXJyYXkuY29uY2F0KC4uLnBhdGgpLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiB1cmk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGluZ1VybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcbiAgICBjb25zdCBpbnRlbnRpb25zID0gUGFyYW1ldGVycy5kaXNjb3ZlcnlQYXJhbWV0ZXJzLmludGVudGlvbnM7XG5cbiAgICB1cmkuc2VhcmNoID0gYD8ke25ldyBVUkxTZWFyY2hQYXJhbXMoW1sndHlwZScsICdodHRwJ10sIFsndmVyc2lvbicsIHNka1ZlcnNpb25dLCBbJ2ludGVudGlvbnMnLCBpbnRlbnRpb25zXSwgWydfJywgYCR7RGF0ZS5ub3coKX1gXV0pLnRvU3RyaW5nKCl9YDtcblxuICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBQdWJsaXNoU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU3Vic2NyaWJlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBEZXN0cm95U3RyZWFtU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVN1YnNjcmliZVJlc3BvbnNlO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlOiBJU3Vic2NyaWJlUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5sYWcgPSBkYXRhLmxhZztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJUHVibGlzaFJlc3BvbnNlO1xuICAgIGNvbnN0IHB1Ymxpc2hSZXNwb25zZTogSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBwdWJsaXNoUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHVibGlzaFJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7aWNlU2VydmVyczogW119O1xuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9IGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgdXJsczogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHMsXG4gICAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5O1xuICAgIH1cblxuICAgIHJldHVybiBydGNDb25maWd1cmF0aW9uO1xuICB9XG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uID0gZGF0YS5zZXNzaW9uRGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTogSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLm9wdGlvbnMpIHtcbiAgICAgICAgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElEZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbTogSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0NoYW5uZWxTdGF0ZX0gZnJvbSAnLi4vY2hhbm5lbHMnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaHVua2VkU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaHVua2VkU3RyZWFtJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfbW9uaXRvckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgX3N0cmVhbVN0YXRpc3RpY3M6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzO1xuICBwcml2YXRlIF9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHRoaXMpO1xuICB9XG5cbiAgc3RhcnQodXJpOiBVUkwsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQgfCBJRGlzcG9zYWJsZT4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpXG4gICAgICAudGhlbihlbmRQb2ludCA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBudWxsLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCh7c3RhdHVzLCBzdHJlYW0sIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgbGFnfSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBzdHJlYW07XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZy52YWx1ZSA9IGxhZztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAgICAgJ1slc10gU3Vic2NyaWJlIGNvbXBsZXRlZCBbJXNdIFslal0gWyVqXSBbJWpdIFslal0nLFxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvZmZlclNkcCA9IGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgIG9yaWdpblN0YXJ0VGltZTogRGF0ZS5ub3coKSAtIGxhZyArIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyAyLFxuICAgICAgICAgIGxhZ1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBDaHVua2VkU3RyZWFtaW5nLnN0YXJ0KHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSwgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIG9mZmVyU2RwLCBvcHRpb25zKVxuICAgICAgICAgIC50aGVuKHBsYXllciA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBsYXllcjtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2h1bmtlZFN0cmVhbWluZyBmYWlsZWQnLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW9uaXRvcihwbGF5ZXI6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdHJlYW1TdGF0aXN0aWNzID0gQ2h1bmtlZFN0cmVhbWluZy5nZXRTdGF0cygpO1xuXG4gICAgICBpZiAodGhpcy5fc3RyZWFtU3RhdGlzdGljcyAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmN1cnJlbnRUaW1lID49IG5ld1N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgJiZcbiAgICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWRcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50Kys7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPiA2KSB7XG4gICAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MgPSBuZXdTdHJlYW1TdGF0aXN0aWNzO1xuICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG4gICAgfSwgMTAwMCk7XG5cbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB9KSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgV2ViUGxheWVyIGZyb20gJy4vV2ViUGxheWVyJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBTaGFrYVBsYXllciBmcm9tICcuL1NoYWthUGxheWVyJztcbmltcG9ydCBIbHNQbGF5ZXIgZnJvbSAnLi9IbHNQbGF5ZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3MsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDaHVua2VkU3RyZWFtaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BlbmRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc1BsYXllcjogSGxzUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BoZW5peFdlYlBsYXllcjogV2ViUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthOiBTaGFrYVR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBzdGF0aWMgX3BsYXllcjogU2hha2FQbGF5ZXIgfCBXZWJQbGF5ZXIgfCBIbHNQbGF5ZXI7XG5cbiAgc3RhdGljIGdldCBobHNQbGF5ZXIoKTogSGxzUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc1BsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGhlbml4V2ViUGxheWVyKCk6IFdlYlBsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9waGVuaXhXZWJQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthKCk6IFNoYWthVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHN0YXJ0KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyIHx8IHRoaXMuX3NoYWthIHx8IHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBsYXllciBpcyBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICghU0RLLndlYlBsYXllckxvYWRlciAmJiAhU0RLLnNoYWthUGxheWVyTG9hZGVyICYmICFTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQtZmVhdHVyZSwgYWRkIHN0cmVhbSBwbGF5ZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsuaGxzSnNMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9obHNQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy53ZWJQbGF5ZXJMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9waGVuaXhXZWJQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLnNoYWthUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fc2hha2EgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGxheShQbGF5ZXI6IHR5cGVvZiBXZWJQbGF5ZXIgfCB0eXBlb2YgU2hha2FQbGF5ZXIgfCB0eXBlb2YgSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKTogSURpc3Bvc2FibGUge1xuICAgIGNvbnN0IGRhc2hNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW1wZFxcPz9bXlxcc10qKS9tKTtcbiAgICBjb25zdCBobHNNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW0zdThcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgbWFuaWZlc3RVcmwgPSBkYXNoTWFuaWZlc3RVcmxNYXRjaCAmJiBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA/IGRhc2hNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG4gICAgY29uc3QgcGxheWxpc3RVcmwgPSBobHNNYW5pZmVzdFVybE1hdGNoICYmIGhsc01hbmlmZXN0VXJsTWF0Y2hbMV0gPyBobHNNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG5cbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzIHx8ICh0aGlzLl9obHNQbGF5ZXIgJiYgdGhpcy5faGxzUGxheWVyLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2hscycsIHN0cmVhbUlkLCBwbGF5bGlzdFVybCwgb3B0aW9ucyk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnZGFzaCcsIHN0cmVhbUlkLCBtYW5pZmVzdFVybCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBsb2FkZWQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nKTogSURpc3Bvc2FibGUge1xuICAgIGlmICghdGhpcy5fc2hha2EgJiYgIXRoaXMuX3BoZW5peFdlYlBsYXllciAmJiAhdGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShIbHNQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGhlbml4V2ViUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFdlYlBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaGFrYSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShTaGFrYVBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtJSGxzUGxheWVyVHlwZX0gZnJvbSAnLi9JSGxzUGxheWVyJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGxzUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElIbHNQbGF5ZXJUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyKSB7XG4gICAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIoe1xuICAgICAgICAgIGVuYWJsZVdvcmtlcjogdHJ1ZSxcbiAgICAgICAgICBtYXhCdWZmZXJMZW5ndGg6IDEsXG4gICAgICAgICAgbGl2ZUJhY2tCdWZmZXJMZW5ndGg6IDAsXG4gICAgICAgICAgbGl2ZVN5bmNEdXJhdGlvbjogNyxcbiAgICAgICAgICBsaXZlRHVyYXRpb25JbmZpbml0eTogdHJ1ZSxcbiAgICAgICAgICBsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uOiBJbmZpbml0eSxcbiAgICAgICAgICBoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2Q6IDFcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5sb2FkU291cmNlKHRoaXMuX21hbmlmZXN0VVJJKTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmF0dGFjaE1lZGlhKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnKSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQuc3JjID0gdGhpcy5fbWFuaWZlc3RVUkk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyICYmIENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCk7XG4gIH1cblxuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICB3aWR0aDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldFdpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0SGVpZ2h0LFxuICAgICAgY3VycmVudFRpbWU6IHRoaXMuX3BsYXllci5tZWRpYS5jdXJyZW50VGltZSxcbiAgICAgIGxhZzogMC4wLFxuICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlLFxuICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnSURMRScpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRVJST1InIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRU5ERUQnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ0xPQURJTkcnKSB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnV0FJVElORycpKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgKGN1cnJlbnRUaW1lICsgKHRoaXMuX29wdGlvbnMubGFnIC8gMTAwMCkpIC0gdHJ1ZUN1cnJlbnRUaW1lKTtcblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyICYmIHRoaXMuX3BsYXllci5kZXN0cm95KSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZW51bSBOZXR3b3JrU3RhdGVzIHtcbiAgTmV0d29ya0VtcHR5LFxuICBOZXR3b3JrSWRsZSxcbiAgTmV0d29ya0xvYWRpbmcsXG4gIE5ldHdvcmtOb1NvdXJjZVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBmcm9tICcuLi8uLi9kb20vR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXInO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IHtTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBSdGNDb25uZWN0aW9uTW9uaXRvciBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi8uLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgZnJvbSAnLi4vLi4vcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyJztcbmltcG9ydCBQZWVyQ29ubmVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdHJlYW1UcmFuc2Zvcm1Db250ZXh0JztcbmltcG9ydCBJbnNlcnRhYmxlU3RyZWFtcyBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9JbnNlcnRhYmxlU3RyZWFtcyc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCA9IHN0cmVhbVRyYW5zZm9ybUNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwLCBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmsgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKVxuICAgICAgICAudGhlbigoe2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvY2FsT2ZmZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvblxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBpZiAoU0RLLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgJiYgIShGZWF0dXJlRW5hYmxlbWVudC5pc01vYmlsZSAmJiBTREsuc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKSkge1xuICAgICAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICBsb2NhbE9mZmVyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIGxvY2FsT2ZmZXIsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSwgcnRjQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAudGhlbihwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICBsZXQgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQ7XG4gICAgICAgICAgICBsZXQgY2FuY2VsRGlzY292ZXJ5ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZGlzY292ZXJ5Q29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIVNESy5zZW5kTG9jYWxDYW5kaWRhdGVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGUuY2FuZGlkYXRlICYmIGUuY2FuZGlkYXRlLmNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJ5Q29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRDYW5kaWRhdGVzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5hZGRJY2VDYW5kaWRhdGVzKHN0cmVhbSwgY2FuZGlkYXRlcywgZGlzY292ZXJ5Q29tcGxldGVkKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe3N0YXR1cywgb3B0aW9uc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3RvcCBub3JtYWxseSB0aGUgcGVlciBjb25uZWN0aW9uIGlzIHVucmVnaXN0ZXJlZCBmaXJzdC5cbiAgICAgICAgICAgICAgICAvLyBUaHVzIGFueXRpbWUgd2Ugc2VlIGEgY2xvc2VkIHBlZXIgY29ubmVjdGlvbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpdCBpcyBhbiBlcnJvci5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHBlZXIgY29ubmVjdGlvbiBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tpbmcnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICduZXcnOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZGlzY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCB0cnlpbmcgdG8gcmVjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnY2xvc2VkJzpcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgcmV0cnlpbmcgdG8gY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgc3RyZWFtID0gZS5zdHJlYW1zWzBdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2sgOiBNZWRpYVN0cmVhbVRyYWNrID0gZS50cmFjaztcblxuICAgICAgICAgICAgICAgICAgaWYgKGUudHJhY2sua2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIDogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxSVENFbmNvZGVkVmlkZW9GcmFtZSwgUlRDRW5jb2RlZFZpZGVvRnJhbWU+ID0gY2h1bmsgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayh0cmFjaywgY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIEluc2VydGFibGVTdHJlYW1zLnNldHVwRW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKGUucmVjZWl2ZXIsIHRyYWNrLCBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLnRyYWNrLmtpbmQgPT09ICdhdWRpbycgJiYgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA6IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8UlRDRW5jb2RlZEF1ZGlvRnJhbWUsIFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiA9IGNodW5rID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmsodHJhY2ssIGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBJbnNlcnRhYmxlU3RyZWFtcy5zZXR1cEVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayhlLnJlY2VpdmVyLCB0cmFjaywgZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IEluc2VydGFibGVTdHJlYW1zLnNldHVwTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssIHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdHJlYW0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB0cmFja0xpc3RlbmVyID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICAgIGlmIChlLnN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW1zWzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKTtcbiAgICAgICAgICAgICAgfSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgb2ZmZXIgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBhbnN3ZXIgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgb2ZmZXIgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcih7XG4gICAgICAgICAgICAgICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IHRydWVcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oYW5zd2VyID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgYW5zd2VyIFslal0nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgYW5zd2VyKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbSwgYW5zd2VyKTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKCh7c3RhdHVzLCBzZXNzaW9uRGVzY3JpcHRpb259KSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMubWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5zdWNjZXNzKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkKTtcblxuICAgICAgICAgICAgICByZXR1cm4gbWVkaWFTdHJlYW1Qcm9taXNlO1xuICAgICAgICAgICAgfSkudGhlbihtZWRpYVN0cmVhbSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG1lZGlhU3RyZWFtO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yID0gbmV3IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKHBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbSwgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDQpO1xuXG4gICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZChydGNDb25uZWN0aW9uTW9uaXRvcik7XG5cbiAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLnJ0Y1N0YXRpc3RpYy5zdWJzY3JpYmUoc3RhdGlzdGljcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcy52YWx1ZSA9IHN0YXRpc3RpY3M7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmICF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLmF1ZGlvO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGF1ZGlvVHJhY2tGYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgdmlkZW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MuYXVkaW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1ZGlvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gQXVkaW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLmF1ZGlvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICB2aWRlb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWRlb1RyYWNrRmFpbGVkICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIFZpZGVvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoKHZpZGVvVHJhY2tGYWlsZWQgfHwgYXVkaW9UcmFja0ZhaWxlZCkgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBydGNDb25uZWN0aW9uTW9uaXRvci5kaXNwb3NlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHRyYWNrIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoIVNESy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXBwbHlSdGNDb25maWd1cmF0aW9uKFxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiB8IG51bGwsXG4gICAgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgaWYgKCFvcHRpb25hbFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uID0gUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHJ1bmNhdGVJY2VTZXJ2ZXJzKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm4gU0RLLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdSdGNDb25maWd1cmF0aW9uID0ge1xuICAgICAgLi4ub3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCksXG4gICAgICAuLi5ydGNDb25maWd1cmF0aW9uXG4gICAgfTtcblxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihuZXdSdGNDb25maWd1cmF0aW9uKTtcblxuICAgIHJldHVybiBvcHRpb25hbFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc7XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPCBTREsubWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyB8fCAhU0RLLmF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMrKztcblxuICAgICAgY29uc3QgaXNDbGllbnRPZmZlckZsb3cgPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbj8udHlwZSA9PT0gJ29mZmVyJztcblxuICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFpc0NsaWVudE9mZmVyRmxvd1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JlY29ubmVjdGluZyBwZWVyIGNvbm5lY3Rpb24gYnkgcmVzdGFydGluZyBJQ0UnKTtcblxuICAgICAgY29uc3QgY3VycmVudExvY2FsRGVzY3JpcHRpb24gPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih7aWNlUmVzdGFydDogdHJ1ZX0pLnRoZW4ob2ZmZXIgPT4ge1xuICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oY3VycmVudExvY2FsRGVzY3JpcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uJywgZSk7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gYWZ0ZXIgWyVzXSBhdHRlbXB0cywgcGVyZm9ybWluZyBmdWxsIHJlY292ZXJ5JywgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMpO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICByZXRyeUNhbGxiYWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ30gZnJvbSAnLi9DaHVua2VkU3RyZWFtaW5nJztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ09wdGlvbnMsIENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxudHlwZSBTaGFrYU9wdGlvbnMgPSB7XG4gIGFicjoge1xuICAgIGRlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogbnVtYmVyO1xuICB9O1xuICBtYW5pZmVzdDoge1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIHN0cmVhbWluZzoge1xuICAgIHJlYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlcmluZ0dvYWw6IG51bWJlcjtcbiAgICBidWZmZXJCZWhpbmQ6IG51bWJlcjtcbiAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgIHRpbWVvdXQ6IG51bWJlcjtcbiAgICAgIG1heEF0dGVtcHRzOiBudW1iZXI7XG4gICAgICBiYWNrb2ZmRmFjdG9yOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNoYWthIHtcbiAgY29uZmlndXJlOiAobzogU2hha2FPcHRpb25zKSA9PiB2b2lkO1xuICBsb2FkOiAodXJpOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIGdldFN0YXRzOiAoKSA9PiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgZGVzdHJveTogKCkgPT4gdm9pZDtcbiAgdW5sb2FkOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFrYVBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTaGFrYVBsYXllcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSVNoYWthO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKENodW5rZWRTdHJlYW1pbmcuc2hha2EpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnM6IFNoYWthT3B0aW9ucyA9IHtcbiAgICAgICAgYWJyOiB7ZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiAyMDAwMDAwfSxcbiAgICAgICAgbWFuaWZlc3Q6IHtyZXRyeVBhcmFtZXRlcnM6IHt0aW1lb3V0OiAxMDAwMH19LFxuICAgICAgICBzdHJlYW1pbmc6IHtcbiAgICAgICAgICByZWJ1ZmZlcmluZ0dvYWw6IDIsXG4gICAgICAgICAgYnVmZmVyaW5nR29hbDogMTAsXG4gICAgICAgICAgYnVmZmVyQmVoaW5kOiAzMCxcbiAgICAgICAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICAgICAgbWF4QXR0ZW1wdHM6IDEwLFxuICAgICAgICAgICAgYmFja29mZkZhY3RvcjogMS4xXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbWluZy5zaGFrYS5QbGF5ZXIodGhpcy5fdmlkZW9FbGVtZW50KTtcbiAgICAgIHRoaXMubG9hZFBsYXllcihwbGF5ZXJPcHRpb25zKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICAgIGxhZzogMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgLi4udGhpcy5fcGxheWVyLmdldFN0YXRzKCksXG4gICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgIGxhZzogMFxuICAgIH07XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG4gICAgY29uc3QgbGFnID0gTWF0aC5tYXgoMC4wLCB0cnVlQ3VycmVudFRpbWUgLSBjdXJyZW50VGltZSk7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50KSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICBzdGF0aXN0aWNzLmxhZyA9IGxhZztcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLnVubG9hZCgpO1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGxheWVyKHBsYXllckNvbmZpZzogU2hha2FPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGxheWVyLmNvbmZpZ3VyZShwbGF5ZXJDb25maWcpO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BsYXllci5sb2FkKHRoaXMuX21hbmlmZXN0VVJJKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERBU0ggbGl2ZSBzdHJlYW0gaGFzIGJlZW4gbG9hZGVkJywgdGhpcy5fc3RyZWFtSWQpO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LnBsYXkpIHtcbiAgICAgICAgdGhpcy5fdmlkZW9FbGVtZW50LnBsYXkoKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBFcnJvciB3aGlsZSBsb2FkaW5nIERBU0ggbGl2ZSBzdHJlYW0gWyVzXScsIHRoaXMuX3N0cmVhbUlkLCBlLmNvZGUsIGUpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IENodW5rZWRTdHJlYW0gZnJvbSAnLi9DaHVua2VkU3RyZWFtJztcbmltcG9ydCBSZWFsVGltZVN0cmVhbSBmcm9tICcuL1JlYWxUaW1lU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbUZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbWluZycpO1xuXG4gIHN0YXRpYyBjcmVhdGUodG9rZW46IHN0cmluZywgY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPik6IElTdHJlYW0ge1xuICAgIGNvbnN0IHRva2VuQ2FwYWJpbGl0aWVzID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikuY2FwYWJpbGl0aWVzO1xuXG4gICAgaWYgKHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdydG1wJykpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignU0RLIGRvZXMgbm90IHN1cHBvcnQgUlRNUCBwbGF5YmFjay4nKTtcbiAgICAgIGNoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygnc3RyZWFtaW5nJykgfHwgdG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ29uLWRlbWFuZCcpKSB7XG4gICAgICByZXR1cm4gbmV3IENodW5rZWRTdHJlYW0oY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhbFRpbWVTdHJlYW0oY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmVhbUZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5jb25zdCBiYW5kd2lkdGhUb1N0YXJ0QXQgPSAzMDAwMDAwOyAvLyBDb3JyZXNwb25kcyB0byA3MjBwIGluIG1vc3Qgc2V0dXBzXG5jb25zdCBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCA9IDE1MDAwO1xuXG50eXBlIEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIgPSAoZXZ0OiBXZWJQbGF5ZXJFdmVudCkgPT4gdm9pZDtcbnR5cGUgV2ViUGxheWVyRXZlbnQgPSB7XG4gIGNvZGU6IG51bWJlcjtcbiAgc2V2ZXJpdHk6IG51bWJlcjtcbiAgZXJyb3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVdlYlBsYXllciB7XG4gIHN0YXJ0OiAodXJsOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGFkZEV2ZW50TGlzdGVuZXIobmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllcik6IHZvaWQ7XG4gIGRpc3Bvc2UoKTogdm9pZDtcbiAgZXJyb3JzOiB7XG4gICAgc2V2ZXJpdHk6IHtcbiAgICAgIFJFQ09WRVJBQkxFOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3M7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYlBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdXZWJQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElXZWJQbGF5ZXI7XG4gIHByaXZhdGUgX2xhc3RSZWxvYWRUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIGJhbmR3aWR0aFRvU3RhcnRBdFxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLldlYlBsYXllcih0aGlzLl9sb2dnZXIsIHRoaXMuX3ZpZGVvRWxlbWVudCwgcGxheWVyT3B0aW9ucyk7XG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQodGhpcy5fbWFuaWZlc3RVUkkpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvck9iamVjdCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhblJlbG9hZCgpICYmIGVycm9yT2JqZWN0ICYmIChlcnJvck9iamVjdC5jb2RlID09PSAzIHx8IGVycm9yT2JqZWN0LnNldmVyaXR5ID09PSBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5lcnJvcnMuc2V2ZXJpdHkuUkVDT1ZFUkFCTEUpKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1JlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIGFmdGVyIGVycm9yIGV2ZW50IFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWRJZkFibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2Fubm90IHJlbG9hZCB3aXRoIGVycm9yIFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllciAmJiBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2UsXG4gICAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHN0YXRpc3RpY3MuY3VycmVudFRpbWUgfHwgdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmlzTmF0aXZlICYmIHN0YXRpc3RpY3MuZGVsaXZlcnlUeXBlID09PSAnSGxzJykge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIC0gc3RhdGlzdGljcy5sYWc7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmN1cnJlbnRUaW1lKSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmlzTmF0aXZlKSB7XG4gICAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MucGxheVRpbWUgPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGNhblJlbG9hZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZCA9ICF0aGlzLl9sYXN0UmVsb2FkVGltZSB8fCBEYXRlLm5vdygpIC0gdGhpcy5fbGFzdFJlbG9hZFRpbWUgPiBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZDtcblxuICAgIHJldHVybiB0aGlzLl92aWRlb0VsZW1lbnQgJiYgdGhpcy5fcGxheWVyICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGggIT09IDAgJiYgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQ7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZElmQWJsZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuUmVsb2FkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSB0aGF0IHdhcyBhY3RpdmUgZm9yIGF0IGxlYXN0IFslc10gc2Vjb25kcycsIHRoaXMuX3N0cmVhbUlkLCBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCAvIDEwMDApO1xuXG4gICAgdGhpcy5fbGFzdFJlbG9hZFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFbmNvZGVkU3RyZWFtU2luazxUID0gUlRDRW5jb2RlZEF1ZGlvRnJhbWUgfCBSVENFbmNvZGVkVmlkZW9GcmFtZT4ge1xuICAgICh0cmFjazogTWVkaWFTdHJlYW1UcmFjaywgY2h1bms6IFQpOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuY29kZWRTdHJlYW1TaW5rIHtcbiAgc3RhdGljIHZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsobW9kZTogJ2F1ZGlvJyB8ICd2aWRlbycsIGl0ZW06IElFbmNvZGVkU3RyZWFtU2luaykge1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IEVuY29kZWQgU3RyZWFtIFNpbmsgZnVuY3Rpb24gdHlwZS4gRm91bmQgWyR7dHlwZW9mIGl0ZW19XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gRW5jb2RlZCBTdHJlYW0gU2luayBmdW5jdGlvbiBwYXJhbWV0ZXIgbGVuZ3RoLiBFeHBlY3RlZCAxLiBGb3VuZCBbJHtpdGVtLmxlbmd0aH1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICB2YWxpZGF0aW9uUmVzdWx0OiAnb2snXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5zZXJ0YWJsZVN0cmVhbXMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi9JU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnNlcnRhYmxlU3RyZWFtcyB7XG4gIHN0YXRpYyBzZXR1cEVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazxUID0gUlRDRW5jb2RlZEF1ZGlvRnJhbWUgfCBSVENFbmNvZGVkVmlkZW9GcmFtZT4ocmVjZWl2ZXI6IFJUQ1J0cFJlY2VpdmVyLCB0cmFjazogTWVkaWFTdHJlYW1UcmFjaywgZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFQsIFQ+KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgIGNvbnN0IHJlY2VpdmVyU3RyZWFtcyA9IHJlY2VpdmVyLmNyZWF0ZUVuY29kZWRTdHJlYW1zKCk7XG4gICAgY29uc3Qgc291cmNlID0gcmVjZWl2ZXJTdHJlYW1zLnJlYWRhYmxlO1xuICAgIGNvbnN0IHNpbmsgPSByZWNlaXZlclN0cmVhbXMud3JpdGFibGU7XG5cbiAgICBzb3VyY2VcbiAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgIC5waXBlVG8oc2luayk7XG4gIH1cblxuICBzdGF0aWMgc2V0dXBNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKHRyYW5zZm9ybTogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+LCBzdHJlYW06IE1lZGlhU3RyZWFtKSB7XG4gICAgY29uc3QgdmlkZW9UcmFjayA9IHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdO1xuXG4gICAgaWYgKHZpZGVvVHJhY2spIHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtfSk7XG4gICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2s6IHZpZGVvVHJhY2t9KTtcbiAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiAndmlkZW8nfSk7XG4gICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICBzb3VyY2VcbiAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZFN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuXG4gICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgc3RyZWFtLmdldEF1ZGlvVHJhY2tzKCkuZm9yRWFjaChhdWRpb1RyYWNrID0+IHtcbiAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soYXVkaW9UcmFjayk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkU3RyZWFtO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKGl0ZW06IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPikge1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCB2aWRlbyBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHR5cGUuIEZvdW5kIFske3R5cGVvZiBpdGVtfV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gMikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCB2aWRlbyBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDEuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnNlcnRhYmxlU3RyZWFtcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19CVUlMRF9WRVJTSU9OX186IHN0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVyc2lvbk1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBfZGVmYXVsdFZlcnNpb24gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgc3RhdGljIGdldCBzZGtWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBfX0JVSUxEX1ZFUlNJT05fXztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZlcnNpb247XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5U2VydmljZSBmcm9tICcuL1RlbGVtZXRyeVNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuLi9sb2dnZXIvSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5QXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlTZXJ2aWNlOiBUZWxlbWV0cnlTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeTtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZDtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZDtcbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlID0gbmV3IFRlbGVtZXRyeVNlcnZpY2UodGVsZW1ldHJ5Q29uZmlndXJhdGlvbik7XG4gIH1cblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZS5wdXNoKGxvZ0xldmVsLCBtZXNzYWdlLCBjYXRlZ29yeSwgZGF0ZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L2xvZ3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHRlbGVtZXRyeVVybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIHRlbGVtZXRyeVVybC5wYXRobmFtZSA9IHRlbGVtZXRyeVVybC5wYXRobmFtZSArICcvbG9ncyc7XG5cbiAgICB0aGlzLl91cmwgPSB0ZWxlbWV0cnlVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSA4MTkyO1xuXG5pbnRlcmZhY2UgSUxvZ0l0ZW0ge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBsZXZlbDogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gIHByaXZhdGUgX2xvZ3M6IEFycmF5PElMb2dJdGVtPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgX2RvbWFpbiA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBsb2dSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcC50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgbGV2ZWw6IExvZ2dpbmdMZXZlbFtsb2dMZXZlbF0sXG4gICAgICBjYXRlZ29yeSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpblxuICAgIH07XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHRoaXMuX2xvZ3MucHVzaChsb2dSZWNvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2dzLnVuc2hpZnQobG9nUmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9ncyhsb2dNZXNzYWdlczogQXJyYXk8SUxvZ0l0ZW0+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBsb2dNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9nc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9sb2dzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBudW1iZXJPZkxvZ3NUb1NlbmQgPSAwO1xuICAgIGxldCBzaXplT2ZMb2dzVG9TZW5kID0gMDtcblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBnZXRMb2dTaXplID0gKGxvZzogSUxvZ0l0ZW0pOiBudW1iZXIgPT4gT2JqZWN0LnZhbHVlcyhsb2cpXG4gICAgICAucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIChpdGVtID8gaXRlbS5sZW5ndGggOiAwKSwgMCk7XG5cbiAgICB3aGlsZSAodGhpcy5fbG9ncy5sZW5ndGggPiBudW1iZXJPZkxvZ3NUb1NlbmQgJiYgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgc2l6ZU9mTG9nc1RvU2VuZCA8IHJlcXVlc3RTaXplTGltaXQpIHtcbiAgICAgIHNpemVPZkxvZ3NUb1NlbmQgKz0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kKys7XG4gICAgfVxuXG4gICAgaWYgKCFudW1iZXJPZkxvZ3NUb1NlbmQpIHtcbiAgICAgIHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlID0gdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsXG4gICAgICAgIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIChyZXF1ZXN0U2l6ZUxpbWl0IC0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pKSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQgPSAxO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ01lc3NhZ2VzID0gdGhpcy5fbG9ncy5zbGljZSgwLCBudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgdGhpcy5fbG9ncyA9IHRoaXMuX2xvZ3Muc2xpY2UobnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRMb2dzKGxvZ01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVyYXRpb25zIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkdXJhdGlvbiA9IDApIHtcbiAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICB9XG5cbiAgdG9Jc29TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fZHVyYXRpb24gPT09IDApIHtcbiAgICAgIHJldHVybiAnUDBTJztcbiAgICB9XG5cbiAgICBjb25zdCBpc05lZ2F0aXZlID0gdGhpcy5fZHVyYXRpb24gPCAwO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gaXNOZWdhdGl2ZSA/IE1hdGguYWJzKHRoaXMuX2R1cmF0aW9uKSA6IHRoaXMuX2R1cmF0aW9uO1xuICAgIGxldCBvZmZzZXQgPSBNYXRoLmZsb29yKGR1cmF0aW9uKTtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBvZmZzZXQgJSAxMDAwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyAxMDAwKTtcblxuICAgIGNvbnN0IHNlY29uZHMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgbWludXRlcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBob3VycyA9IG9mZnNldCAlIDI0O1xuICAgIGNvbnN0IHBhcnRzID0gWydQVCddO1xuXG4gICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy0nKTtcbiAgICB9XG5cbiAgICBpZiAoaG91cnMpIHtcbiAgICAgIHBhcnRzLnB1c2goaG91cnMgKyAnSCcpO1xuICAgIH1cblxuICAgIGlmIChtaW51dGVzKSB7XG4gICAgICBwYXJ0cy5wdXNoKG1pbnV0ZXMgKyAnTScpO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmRzIHx8IG1pbGxpc2Vjb25kcykge1xuICAgICAgcGFydHMucHVzaChTdHJpbmcoc2Vjb25kcykpO1xuXG4gICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIHBhcnRzLnB1c2goJy4nICsgdGhpcy5wYWRTdGFydChtaWxsaXNlY29uZHMudG9TdHJpbmcoKSwgMywgJzAnKSk7XG4gICAgICB9XG5cbiAgICAgIHBhcnRzLnB1c2goJ1MnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMuam9pbignJyk7XG4gIH1cblxuICBwYWRTdGFydChpdGVtOiBzdHJpbmcsIHRhcmdldExlbmd0aDogbnVtYmVyLCBwYWRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoID4+IDA7XG4gICAgcGFkU3RyaW5nID0gU3RyaW5nKCh0eXBlb2YgcGFkU3RyaW5nICE9PSAndW5kZWZpbmVkJyA/IHBhZFN0cmluZyA6ICcgJykpO1xuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggLSBpdGVtLmxlbmd0aDtcblxuICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFkU3RyaW5nLnNsaWNlKDAsIHRhcmdldExlbmd0aCkgKyBpdGVtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMjAwMDtcbmNvbnN0IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMTtcbmNvbnN0IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMzAwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvbmVudGlhbEJhY2tvZmYge1xuICBwcml2YXRlIHJlYWRvbmx5IF9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kXG4gICkge1xuICAgIHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICB9XG5cbiAgZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudChmYWlsdXJlQ291bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYmFja29mZkludGVydmFsSW5TZWNvbmRzID0gdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCAvIDEwMDA7XG4gICAgY29uc3QgcmFuZG9taXphdGlvbiA9IDAuNSArICgwLjUgKiBNYXRoLnJhbmRvbSgpKTsgLy8gWzAuNSwgMSlcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmYgPSBNYXRoLnBvdyhiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMsIGZhaWx1cmVDb3VudCAtIDIpOyAvLyAgWzEvNCAxLzIgMSAyIDQgOCAuLi4uXVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uID0gTWF0aC5mbG9vcihleHBvbmVudGlhbEJhY2tvZmYpICogcmFuZG9taXphdGlvbjtcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQgPSBNYXRoLmNlaWwoTWF0aC5tYXgoZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gKiAxMDAwLCB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKSk7XG5cbiAgICByZXR1cm4gTWF0aC5taW4oZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kLCB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fbmV0d29ya01vbml0b3IuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuaXNGb3JlZ3JvdW5kLnN1YnNjcmliZShpc0ZvcmVncm91bmQgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5ydHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdGVuT25TdHJlYW1TZXR1cCgpOiBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbVNldHVwTGlzdGVuZXIodGhpcy5fcGFnZUxvYWRUaW1lKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdENoYW5nZSA9IHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlkZW9UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfbGlzdGVuVG9GaXJzdFRpbWU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JDb250aW51YXRpb246IChldmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbGFzdFByb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcjogRGlzcG9zYWJsZTtcbiAgcHJpdmF0ZSBfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyOiBEaXNwb3NhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQpOiB2b2lkID0+IHRoaXMub25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG5cbiAgICB0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcik7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2luY2VQYWdlTG9hZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxUaW1lVG9GaXJzdEZyYW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG4gICAgdGhpcy5wdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX2NoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBDaGFubmVsIGNyZWF0aW9uIHRvIGZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU3RhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZpZGVvU3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuU3RhbGxlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyBzdGFsbGVkJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHRpZihfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdKSB7XG5cdFx0cmV0dXJuIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0uZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IG1vZHVsZVsnZGVmYXVsdCddIDpcblx0XHQoKSA9PiBtb2R1bGU7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIG1vZHVsZSBleHBvcnRzIG11c3QgYmUgcmV0dXJuZWQgZnJvbSBydW50aW1lIHNvIGVudHJ5IGlubGluaW5nIGlzIGRpc2FibGVkXG4vLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbnJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==