oxygen-cli 1.27.5 → 1.28.0

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 (29) hide show
  1. package/build/core/OxygenCore.js +13 -2
  2. package/build/core/WebDriverModule.js +13 -10
  3. package/build/errors/helper.js +3 -3
  4. package/build/index.js +9 -1
  5. package/build/lib/cli-util.js +9 -1
  6. package/build/lib/cli.js +4 -2
  7. package/build/lib/parallel-launcher.js +255 -0
  8. package/build/lib/util.js +3 -3
  9. package/build/ox_modules/module-http.js +8 -3
  10. package/build/ox_modules/module-mob.js +9 -4
  11. package/build/ox_modules/module-web/commands/index.js +118 -1
  12. package/build/ox_modules/module-web/commands/verifyAlert.js +60 -0
  13. package/build/ox_modules/module-web/commands/verifyExist.js +33 -0
  14. package/build/ox_modules/module-web/commands/verifySelectedLabel.js +56 -0
  15. package/build/ox_modules/module-web/commands/verifySelectedValue.js +50 -0
  16. package/build/ox_modules/module-web/commands/verifyText.js +50 -0
  17. package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +61 -0
  18. package/build/ox_modules/module-web/commands/verifyTextPresent.js +57 -0
  19. package/build/ox_modules/module-web/commands/verifyTitle.js +47 -0
  20. package/build/ox_modules/module-web/commands/verifyValue.js +49 -0
  21. package/build/ox_modules/module-web.js +9 -3
  22. package/build/ox_modules/module-win.js +8 -3
  23. package/build/ox_reporters/html/tests-details.ejs +19 -2
  24. package/build/ox_reporters/html/tests-devices-browsers.ejs +1 -1
  25. package/build/ox_reporters/reporter-html.js +4 -4
  26. package/build/ox_reporters/reporter-xml.js +2 -2
  27. package/build/reporter/ReportAggregator.js +126 -2
  28. package/build/runners/oxygen/index.js +16 -1
  29. package/package.json +6 -5
@@ -404,14 +404,19 @@ class HttpModule extends _OxygenModule.default {
404
404
  }
405
405
  /**
406
406
  * @summary Opens new transaction.
407
- * @description The transaction will persist till a new one is opened. Transaction names must be
408
- * unique.
407
+ * @description The transaction will persist till a new one is opened. Transaction names must be unique.
409
408
  * @function transaction
410
409
  * @param {String} name - The transaction name.
411
410
  */
412
411
 
413
412
 
414
413
  async transaction(name) {
414
+ if (!name) {
415
+ return;
416
+ } // just in case user passed a complex object by mistake
417
+
418
+
419
+ name = name.toString();
415
420
  global._lastTransactionName = name;
416
421
  }
417
422
 
@@ -518,4 +523,4 @@ class HttpModule extends _OxygenModule.default {
518
523
  }
519
524
 
520
525
  exports.default = HttpModule;
521
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1odHRwLmpzIl0sIm5hbWVzIjpbIk1PRFVMRV9OQU1FIiwiUkVTUE9OU0VfVElNRU9VVCIsIkRBRkFVTFRfSFRUUDIiLCJERUZBVUxUX0hUVFBfT1BUSU9OUyIsImRlY29tcHJlc3MiLCJyZXNwb25zZVR5cGUiLCJ0aW1lb3V0IiwibG9va3VwIiwiY29ubmVjdCIsInNlY3VyZUNvbm5lY3QiLCJzb2NrZXQiLCJzZW5kIiwicmVzcG9uc2UiLCJodHRwMiIsImh0dHBzIiwicmVqZWN0VW5hdXRob3JpemVkIiwiZG5zTG9va3VwSXBWZXJzaW9uIiwiQ09OVEVOVF9UWVBFX0hFQURFUiIsIkh0dHBNb2R1bGUiLCJPeHlnZW5Nb2R1bGUiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjb250ZXh0IiwicnMiLCJsb2dnZXIiLCJtb2R1bGVzIiwic2VydmljZXMiLCJfYWx3YXlzSW5pdGlhbGl6ZWQiLCJfbGFzdFJlc3BvbnNlIiwiX2Jhc2VVcmwiLCJfdXNlckh0dHBPcHRpb25zIiwiX2lzSW5pdGlhbGl6ZWQiLCJuYW1lIiwic2V0T3B0aW9ucyIsIm9wdHMiLCJkZWZsYXRlUmF3Iiwic2V0UHJveHkiLCJ1cmwiLCJib290c3RyYXAiLCJyZXF1aXJlIiwicGFyc2UiLCJwYXJzZWRVcmwiLCJob3N0bmFtZSIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJlcnJvckNvZGUiLCJIVFRQX0VSUk9SIiwicG9ydCIsInByb3RvY29sIiwiZ2xvYmFsIiwiR0xPQkFMX0FHRU5UIiwiSFRUUF9QUk9YWSIsImdldCIsImhlYWRlcnMiLCJodHRwT3B0cyIsIm1ldGhvZCIsIl9odHRwUmVxdWVzdFN5bmMiLCJwb3N0IiwiZGF0YSIsInJlc29sdmVkRGF0YSIsIl9yZXNvbHZlRGF0YSIsInB1dCIsInBhdGNoIiwiZGVsZXRlIiwiZ2V0UmVzcG9uc2UiLCJnZXRSZXNwb25zZUJvZHkiLCJib2R5IiwiZ2V0UmVzcG9uc2VIZWFkZXJzIiwiZ2V0UmVzcG9uc2VVcmwiLCJhc3NlcnRUZXh0IiwicGF0dGVybiIsIkFTU0VSVF9FUlJPUiIsInJlc3BDb250ZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIm1vZFV0aWxzIiwibWF0Y2hQYXR0ZXJuIiwiYXNzZXJ0UmVzcG9uc2VUaW1lIiwibWF4VGltZSIsIkVycm9yIiwiYXNzZXJ0SGVhZGVyIiwiaGVhZGVyTmFtZSIsImhlYWRlclZhbHVlUGF0dGVybiIsImxlbmd0aCIsInRvTG93ZXJDYXNlIiwiYWN0dWFsSGVhZGVyVmFsdWUiLCJhc3NlcnRDb29raWUiLCJjb29raWVOYW1lIiwiY29va2llVmFsdWVQYXR0ZXJuIiwiYXNzZXJ0U3RhdHVzIiwiY29kZUxpc3QiLCJBcnJheSIsImlzQXJyYXkiLCJzdGF0dXNDb2RlIiwiaW5jbHVkZXMiLCJhc3NlcnRTdGF0dXNPayIsInRyYW5zYWN0aW9uIiwiX2xhc3RUcmFuc2FjdGlvbk5hbWUiLCJkYXRhUmVzb2x2ZXIiLCJPYmplY3QiLCJhc3NlcnRDaXJjdWxhciIsImpzb24iLCJyZXN1bHQiLCJ6bGliIiwiZGVjb21wIiwiY3JlYXRlSW5mbGF0ZVJhdyIsIndyaXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbiIsInRvU3RyaW5nIiwiZSIsImVycm9yTWVzc2FnZSIsIm1lc3NhZ2UiLCJzdGF0dXNNZXNzYWdlIiwicmF3Qm9keSIsImh0dHBWZXJzaW9uIiwidXBncmFkZSIsInRpbWluZ3MiLCJyZXF1ZXN0VXJsIiwicmVkaXJlY3RVcmxzIiwiaXNGcm9tQ2FjaGUiLCJpcCIsInJldHJ5Q291bnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFPQSxNQUFNQSxXQUFXLEdBQUcsTUFBcEI7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyxPQUFPLEVBQWhDLEMsQ0FBc0M7O0FBQ3RD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RSxRQUFBQSxPQUFPLEVBQUVoQixNQUFNLENBQUNnQixPQUhYO0FBSUxqRixRQUFBQSxHQUFHLEVBQUVpRSxNQUFNLENBQUNqRSxHQUpQO0FBS0xrQixRQUFBQSxNQUFNLEVBQUUrQyxNQUFNLENBQUMvQyxNQUxWO0FBTUxzQyxRQUFBQSxVQUFVLEVBQUVTLE1BQU0sQ0FBQ1QsVUFOZDtBQU9Mc0IsUUFBQUEsYUFBYSxFQUFFYixNQUFNLENBQUNhLGFBUGpCO0FBUUxJLFFBQUFBLE9BQU8sRUFBRWpCLE1BQU0sQ0FBQ2lCLE9BUlg7QUFTTEMsUUFBQUEsVUFBVSxFQUFFbEIsTUFBTSxDQUFDa0IsVUFUZDtBQVVMQyxRQUFBQSxZQUFZLEVBQUVuQixNQUFNLENBQUNtQixZQVZoQjtBQVdMQyxRQUFBQSxXQUFXLEVBQUVwQixNQUFNLENBQUNvQixXQVhmO0FBWUxDLFFBQUFBLEVBQUUsRUFBRXJCLE1BQU0sQ0FBQ3FCLEVBWk47QUFhTEMsUUFBQUEsVUFBVSxFQUFFdEIsTUFBTSxDQUFDc0IsVUFiZDtBQWNMMUQsUUFBQUEsSUFBSSxFQUFFb0MsTUFBTSxDQUFDcEM7QUFkUixPQUFUO0FBZ0JILEtBOUU0QixDQWdGN0I7OztBQUNBLFNBQUt0QyxhQUFMLEdBQXFCMEUsTUFBckI7QUFFQSxXQUFPQSxNQUFQO0FBQ0g7O0FBeGFnRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGh0dHBcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBIVFRQKFMpXHJcbiAqL1xyXG5pbXBvcnQgZ290IGZyb20gJ2dvdCc7XHJcbmltcG9ydCBPeHlnZW5Nb2R1bGUgZnJvbSAnLi4vY29yZS9PeHlnZW5Nb2R1bGUnO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgbW9kVXRpbHMgZnJvbSAnLi91dGlscyc7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICdodHRwJztcclxuY29uc3QgUkVTUE9OU0VfVElNRU9VVCA9IDEwMDAgKiA2MDsgICAvLyBpbiBtc1xyXG5jb25zdCBEQUZBVUxUX0hUVFAyID0gZmFsc2U7XHJcbmNvbnN0IERFRkFVTFRfSFRUUF9PUFRJT05TID0ge1xyXG4gICAgZGVjb21wcmVzczogdHJ1ZSxcclxuICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgdGltZW91dDoge1xyXG4gICAgICAgIGxvb2t1cDogMTAwMCxcclxuICAgICAgICBjb25uZWN0OiA1MDAsXHJcbiAgICAgICAgc2VjdXJlQ29ubmVjdDogNTAwLFxyXG4gICAgICAgIHNvY2tldDogMTAwMDAwLFxyXG4gICAgICAgIHNlbmQ6IDEwMDAwMCxcclxuICAgICAgICByZXNwb25zZTogUkVTUE9OU0VfVElNRU9VVFxyXG4gICAgfSxcclxuICAgIGh0dHAyOiBEQUZBVUxUX0hUVFAyLFxyXG4gICAgaHR0cHM6IHtcclxuICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAgZG5zTG9va3VwSXBWZXJzaW9uOiAnaXB2NCdcclxufTtcclxuY29uc3QgQ09OVEVOVF9UWVBFX0hFQURFUiA9ICdjb250ZW50LXR5cGUnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cE1vZHVsZSBleHRlbmRzIE94eWdlbk1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLl9hbHdheXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fbGFzdFJlc3BvbnNlID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9iYXNlVXJsID0gbnVsbDtcclxuICAgICAgICB0aGlzLl91c2VySHR0cE9wdGlvbnMgPSB7fTtcclxuICAgICAgICAvLyBwcmUtaW5pdGlhbGl6ZSB0aGUgbW9kdWxlXHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIEBzdW1tYXJ5IEdldHMgbW9kdWxlIG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IENvbnN0YW50IHZhbHVlIFwiaHR0cFwiLlxyXG4gICAgICovXHJcbiAgICBnZXQgbmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXRzIHVzZXIgZGVmaW5lZCBIVFRQIG9wdGlvbnMgKHN1Y2ggYXMgcHJveHksIGRlY29tcHJlc3MgYW5kIGV0Yy4pXHJcbiAgICAgKiBAZnVuY3Rpb24gc2V0T3B0aW9uc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBIVFRQIHJlcXVlc3Qgb3B0aW9ucyBvYmplY3QsIHNlZSBbUmVxdWVzdCBPcHRpb25zXShodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2dvdC9ibG9iL21haW4vZG9jdW1lbnRhdGlvbi8yLW9wdGlvbnMubWQpLiBcclxuICAgICAqIEluIGFkZGl0aW9uIHRvIHRoZSBvcHRpb25zIGxpc3RlZCBpbiB0aGUgbGlua2VkIGRvY3VtZW50LCAnZGVmbGF0ZVJhdycgb3B0aW9uIGNhbiBiZSB1c2VkIHdoZW4gc2VydmVyIHJldHVybnMgRGVmbGF0ZS1jb21wcmVzc2VkIHN0cmVhbSB3aXRob3V0IGhlYWRlcnMuXHJcbiAgICAgKi9cclxuICAgIHNldE9wdGlvbnMob3B0cykge1xyXG4gICAgICAgIHRoaXMuX3VzZXJIdHRwT3B0aW9ucyA9IG9wdHM7XHJcbiAgICAgICAgaWYgKG9wdHMuZGVmbGF0ZVJhdykge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VySHR0cE9wdGlvbnMuZGVjb21wcmVzcyA9IGZhbHNlOyAgICAgLy8gZGVjb21wcmVzcz10cnVlIGluIGRlZmF1bHQgb3B0aW9ucyBzbyB3ZSBvdmVycmlkZSBpdFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldHMgcHJveHkgdXJsIHRvIGJlIHVzZWQgZm9yIGNvbm5lY3Rpb25zIHdpdGggdGhlIHNlcnZpY2UuXHJcbiAgICAgKiBAZnVuY3Rpb24gc2V0UHJveHlcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgLSBQcm94eSBzZXJ2ZXIgVVJMLiBOb3QgcGFzc2luZyB0aGlzIGFyZ3VtZW50IHdpbGwgcmVzZXQgdGhlIHByb3h5IHNldHRpbmdzLlxyXG4gICAgICovXHJcbiAgICBzZXRQcm94eSh1cmwpIHtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgICAgICAgIGJvb3RzdHJhcFxyXG4gICAgICAgICAgICB9ID0gcmVxdWlyZSgnZ2xvYmFsLWFnZW50Jyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB7IHBhcnNlIH0gPSByZXF1aXJlKCd1cmwnKTtcclxuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gcGFyc2UodXJsKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghcGFyc2VkVXJsLmhvc3RuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkhUVFBfRVJST1IsICdIb3N0bmFtZSBpbiB1bmRlZmluZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXBhcnNlZFVybC5wb3J0KSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkhUVFBfRVJST1IsICdQb3J0IGluIHVuZGVmaW5lZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyc2VkVXJsLnByb3RvY29sKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkhUVFBfRVJST1IsICdQcm90b2NvbCBpbiB1bmRlZmluZWQnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYm9vdHN0cmFwKCk7XHJcbiAgICAgICAgICAgIGdsb2JhbC5HTE9CQUxfQUdFTlQuSFRUUF9QUk9YWSA9IHVybDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBnbG9iYWwuR0xPQkFMX0FHRU5ULkhUVFBfUFJPWFkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBIVFRQIEdFVFxyXG4gICAgICogQGZ1bmN0aW9uIGdldFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCAtIFVSTC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVycyAtIEhUVFAgaGVhZGVycy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUmVzcG9uc2Ugb2JqZWN0LlxyXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAgICAgKiAvLyBCYXNpYyB1c2FnZSBleGFtcGxlOlxyXG4gICAgICogdmFyIHJlc3BvbnNlID0gaHR0cC5nZXQoXHJcbiAgICAgKiAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9veHlnZW5ocS9veHlnZW4taWRlL3JlbGVhc2VzJywgXHJcbiAgICAgKiB7XHJcbiAgICAgKiAgICdBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCwgZGVmbGF0ZScsXHJcbiAgICAgKiAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQ7IHJ2Ojg2LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvODYuMCdcclxuICAgICAqIH0pO1xyXG4gICAgICogbG9nLmluZm8ocmVzcG9uc2UuYm9keSk7XHJcbiAgICAgKlxyXG4gICAgICogLy8gSWYgc2VydmVyIHJldHVybnMgRGVmbGF0ZS1jb21wcmVzc2VkIHN0cmVhbSB3aXRob3V0IGhlYWRlcnMsIGBkZWZsYXRlUmF3YCBjYW4gYmUgdXNlZCB0byBkZWNvbXByZXNzIHRoZSBjb250ZW50LlxyXG4gICAgICogaHR0cC5zZXRPcHRpb25zKHtcclxuICAgICAqICAgZGVmbGF0ZVJhdzogdHJ1ZVxyXG4gICAgICogfSk7XHJcbiAgICAgKiB2YXIgcmVzcG9uc2UgPSBodHRwLmdldCgnaHR0cHM6Ly9GT08uQkFSJyk7XHJcbiAgICAgKiBsb2cuaW5mbyhyZXNwb25zZS5ib2R5KTtcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0KHVybCwgaGVhZGVycykge1xyXG4gICAgICAgIGNvbnN0IGh0dHBPcHRzID0ge1xyXG4gICAgICAgICAgICAuLi5ERUZBVUxUX0hUVFBfT1BUSU9OUyxcclxuICAgICAgICAgICAgLi4udGhpcy5fdXNlckh0dHBPcHRpb25zIHx8IHt9LFxyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyB8fCB7fVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHBSZXF1ZXN0U3luYyhodHRwT3B0cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBIVFRQIFBPU1RcclxuICAgICAqIEBmdW5jdGlvbiBwb3N0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIC0gVVJMLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBEYXRhLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBoZWFkZXJzIC0gSFRUUCBoZWFkZXJzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBSZXNwb25zZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHBvc3QodXJsLCBkYXRhLCBoZWFkZXJzKSB7XHJcbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gdGhpcy5fcmVzb2x2ZURhdGEoZGF0YSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGh0dHBPcHRzID0ge1xyXG4gICAgICAgICAgICAuLi5ERUZBVUxUX0hUVFBfT1BUSU9OUyxcclxuICAgICAgICAgICAgLi4udGhpcy5fdXNlckh0dHBPcHRpb25zIHx8IHt9LFxyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMgfHwge30sXHJcbiAgICAgICAgICAgIC4uLnJlc29sdmVkRGF0YVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHBSZXF1ZXN0U3luYyhodHRwT3B0cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBIVFRQIFBVVFxyXG4gICAgICogQGZ1bmN0aW9uIHB1dFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCAtIFVSTC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gRGF0YS5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVycyAtIEhUVFAgaGVhZGVycy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUmVzcG9uc2Ugb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBwdXQodXJsLCBkYXRhLCBoZWFkZXJzKSB7XHJcbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gdGhpcy5fcmVzb2x2ZURhdGEoZGF0YSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGh0dHBPcHRzID0ge1xyXG4gICAgICAgICAgICAuLi5ERUZBVUxUX0hUVFBfT1BUSU9OUyxcclxuICAgICAgICAgICAgLi4udGhpcy5fdXNlckh0dHBPcHRpb25zIHx8IHt9LFxyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyB8fCB7fSxcclxuICAgICAgICAgICAgLi4ucmVzb2x2ZWREYXRhXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faHR0cFJlcXVlc3RTeW5jKGh0dHBPcHRzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFBlcmZvcm1zIEhUVFAgUEFUQ0hcclxuICAgICAqIEBmdW5jdGlvbiBwYXRjaFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCAtIFVSTC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gRGF0YS5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVycyAtIEhUVFAgaGVhZGVycy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUmVzcG9uc2Ugb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBwYXRjaCh1cmwsIGRhdGEsIGhlYWRlcnMpIHtcclxuICAgICAgICBjb25zdCByZXNvbHZlZERhdGEgPSB0aGlzLl9yZXNvbHZlRGF0YShkYXRhKTtcclxuXHJcbiAgICAgICAgY29uc3QgaHR0cE9wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLkRFRkFVTFRfSFRUUF9PUFRJT05TLFxyXG4gICAgICAgICAgICAuLi50aGlzLl91c2VySHR0cE9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBtZXRob2Q6ICdQQVRDSCcsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMgfHwge30sXHJcbiAgICAgICAgICAgIC4uLnJlc29sdmVkRGF0YVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHBSZXF1ZXN0U3luYyhodHRwT3B0cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBIVFRQIERFTEVURVxyXG4gICAgICogQGZ1bmN0aW9uIGRlbGV0ZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCAtIFVSTC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVycyAtIEhUVFAgaGVhZGVycy5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gRGF0YS5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUmVzcG9uc2Ugb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGUodXJsLCBoZWFkZXJzLCBkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gdGhpcy5fcmVzb2x2ZURhdGEoZGF0YSk7XHJcbiAgICAgICAgY29uc3QgaHR0cE9wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLkRFRkFVTFRfSFRUUF9PUFRJT05TLFxyXG4gICAgICAgICAgICAuLi50aGlzLl91c2VySHR0cE9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzIHx8IHt9LFxyXG4gICAgICAgICAgICAuLi5yZXNvbHZlZERhdGFcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9odHRwUmVxdWVzdFN5bmMoaHR0cE9wdHMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBsYXN0IHJlc3BvbnNlIG9iamVjdFxyXG4gICAgICogQGZ1bmN0aW9uIGdldFJlc3BvbnNlXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFJlc3BvbnNlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0UmVzcG9uc2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RSZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgbGFzdCByZXNwb25zZSBib2R5XHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0UmVzcG9uc2VCb2R5XHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFJlc3BvbnNlIGJvZHkuXHJcbiAgICAgKi9cclxuICAgIGdldFJlc3BvbnNlQm9keSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFJlc3BvbnNlICYmIHRoaXMuX2xhc3RSZXNwb25zZS5ib2R5ID8gdGhpcy5fbGFzdFJlc3BvbnNlLmJvZHkgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyByZXNwb25zZSBoZWFkZXJzXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0UmVzcG9uc2VIZWFkZXJzXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFJlc3BvbnNlIGhlYWRlcnMuXHJcbiAgICAgKi9cclxuICAgIGdldFJlc3BvbnNlSGVhZGVycygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2xhc3RSZXNwb25zZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RSZXNwb25zZS5oZWFkZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyByZXNwb25zZSBVUkxcclxuICAgICAqIEBmdW5jdGlvbiBnZXRSZXNwb25zZVVybFxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBSZXNwb25zZSBVUkwuXHJcbiAgICAgKi9cclxuICAgIGdldFJlc3BvbnNlVXJsKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fbGFzdFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFJlc3BvbnNlLnVybDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEFzc2VydCB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgcGF0dGVybiBpcyBwcmVzZW50IGluIHRoZSByZXNwb25zZSBib2R5LlxyXG4gICAgICogQGZ1bmN0aW9uIGFzc2VydFRleHRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXR0ZXJuIC0gUGF0dGVybiB0byBhc3NlcnQuXHJcbiAgICAgKi9cclxuICAgIGFzc2VydFRleHQocGF0dGVybikge1xyXG4gICAgICAgIGlmICghdGhpcy5fbGFzdFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLl9sYXN0UmVzcG9uc2UuYm9keSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgJ1Jlc3BvbnNlIGJvZHkgaXMgZW1wdHknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzcENvbnRlbnQgPSB0eXBlb2YgdGhpcy5fbGFzdFJlc3BvbnNlLmJvZHkgPT09ICdzdHJpbmcnID8gdGhpcy5fbGFzdFJlc3BvbnNlLmJvZHkgOiBKU09OLnN0cmluZ2lmeSh0aGlzLl9sYXN0UmVzcG9uc2UuYm9keSk7XHJcbiAgICAgICAgaWYgKCFtb2RVdGlscy5tYXRjaFBhdHRlcm4ocmVzcENvbnRlbnQsIHBhdHRlcm4pKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBgRXhwZWN0ZWQgSFRUUCByZXNwb25zZSBjb250ZW50IHRvIG1hdGNoOiBcIiR7cGF0dGVybn1cIiBidXQgZ290OiBcIiR7cmVzcENvbnRlbnR9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgcmVzcG9uc2UgdGltZVxyXG4gICAgICogQGZ1bmN0aW9uIGFzc2VydFJlc3BvbnNlVGltZVxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG1heFRpbWUgLSBNYXhpbXVtIHJlc3BvbnNlIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICBhc3NlcnRSZXNwb25zZVRpbWUobWF4VGltZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgaWYgSFRUUCBoZWFkZXIgaXMgcHJlc2VudGVkIGluIHRoZSByZXNwb25zZVxyXG4gICAgICogQGZ1bmN0aW9uIGFzc2VydEhlYWRlclxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlck5hbWUgLSBBIEhUVFAgaGVhZGVyIG5hbWUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGhlYWRlclZhbHVlUGF0dGVybiAtIEFuIG9wdGlvbmFsIEhUVFAgaGVhZGVyIHZhbHVlIHBhdHRlcm4uXHJcbiAgICAgKi9cclxuICAgIGFzc2VydEhlYWRlcihoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZVBhdHRlcm4gPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCFoZWFkZXJOYW1lIHx8IHR5cGVvZiBoZWFkZXJOYW1lICE9PSAnc3RyaW5nJyB8fCBoZWFkZXJOYW1lLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGVhZGVyTmFtZSA9IGhlYWRlck5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5fbGFzdFJlc3BvbnNlLmhlYWRlcnM7XHJcbiAgICAgICAgaWYgKCFoZWFkZXJzW2hlYWRlck5hbWVdKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCAnRXhwZWN0ZWQgSFRUUCBoZWFkZXIgXCIke2hlYWRlck5hbWV9XCIgdG8gYmUgcHJlc2VudCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChoZWFkZXJWYWx1ZVBhdHRlcm4gJiYgdHlwZW9mIGhlYWRlclZhbHVlUGF0dGVybiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgYWN0dWFsSGVhZGVyVmFsdWUgPSBoZWFkZXJzW2hlYWRlck5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIW1vZFV0aWxzLm1hdGNoUGF0dGVybihhY3R1YWxIZWFkZXJWYWx1ZSwgaGVhZGVyVmFsdWVQYXR0ZXJuKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGBFeHBlY3RlZCBIVFRQIGhlYWRlciBcIiR7aGVhZGVyTmFtZX1cIiB2YWx1ZSB0byBtYXRjaDogXCIke2hlYWRlclZhbHVlUGF0dGVybn1cIiBidXQgZ290OiBcIiR7YWN0dWFsSGVhZGVyVmFsdWV9XCJgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEFzc2VydCBpZiBIVFRQIGNvb2tpZSBpcyBwcmVzZW50ZWQgaW4gdGhlIHJlc3BvbnNlXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0Q29va2llXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29va2llTmFtZSAtIEEgSFRUUCBjb29raWUgbmFtZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gY29va2llVmFsdWVQYXR0ZXJuIC0gQW4gb3B0aW9uYWwgSFRUUCBjb29raWUgdmFsdWUgcGF0dGVybi5cclxuICAgICAqL1xyXG4gICAgYXNzZXJ0Q29va2llKGNvb2tpZU5hbWUsIGNvb2tpZVZhbHVlUGF0dGVybikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgdGhlIGxhc3QgSFRUUCByZXNwb25zZSdzIHN0YXR1cyBjb2RlXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0U3RhdHVzXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcnxBcnJheX0gY29kZUxpc3QgLSBBIHNpbmdsZSBzdGF0dXMgY29kZSBvciBhIGxpc3Qgb2YgY29kZXMuXHJcbiAgICAgKi9cclxuICAgIGFzc2VydFN0YXR1cyhjb2RlTGlzdCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fbGFzdFJlc3BvbnNlIHx8ICFjb2RlTGlzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmIHdlIGdvdCBhIHNpbmdsZSB2YWx1ZSwgdGhlbiBjb252ZXJ0IGl0IHRvIGFuIGFycmF5XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvZGVMaXN0KSkge1xyXG4gICAgICAgICAgICBjb2RlTGlzdCA9IFtjb2RlTGlzdF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSB0aGlzLl9sYXN0UmVzcG9uc2Uuc3RhdHVzQ29kZTtcclxuICAgICAgICBpZiAoIWNvZGVMaXN0LmluY2x1ZGVzKHN0YXR1c0NvZGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBgRXhwZWN0ZWQgSFRUUCBzdGF0dXMgdG8gYmU6IFwiJHtjb2RlTGlzdH1cIiBidXQgZ290OiBcIiR7c3RhdHVzQ29kZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEFzc2VydCBIVFRQIDIwMCBPSyBzdGF0dXNcclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRTdGF0dXNPa1xyXG4gICAgICovXHJcbiAgICBhc3NlcnRTdGF0dXNPaygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hc3NlcnRTdGF0dXMoMjAwKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdHJhbnNhY3Rpb24gd2lsbCBwZXJzaXN0IHRpbGwgYSBuZXcgb25lIGlzIG9wZW5lZC4gVHJhbnNhY3Rpb24gbmFtZXMgbXVzdCBiZVxyXG4gICAgICogICAgICAgICAgICAgIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdHJhbnNhY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jlc29sdmVEYXRhKGRhdGEpIHtcclxuICAgICAgICBjb25zdCBkYXRhUmVzb2x2ZXIgPSB7fTtcclxuXHJcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuICAgICAgICAgICAgbW9kVXRpbHMuYXNzZXJ0Q2lyY3VsYXIoZGF0YSk7XHJcbiAgICAgICAgICAgIGRhdGFSZXNvbHZlci5qc29uID0gZGF0YTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhUmVzb2x2ZXIuYm9keSA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZGF0YVJlc29sdmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9odHRwUmVxdWVzdFN5bmMoaHR0cE9wdHMpIHtcclxuICAgICAgICBsZXQgcmVzdWx0O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBnb3QoaHR0cE9wdHMpO1xyXG4gICAgICAgICAgICBpZiAoaHR0cE9wdHMuZGVmbGF0ZVJhdyAmJiByZXN1bHQuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddID09PSAnZGVmbGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHpsaWIgPSByZXF1aXJlKCd6bGliJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWNvbXAgPSB6bGliLmNyZWF0ZUluZmxhdGVSYXcoKTtcclxuICAgICAgICAgICAgICAgIGRlY29tcC53cml0ZShyZXN1bHQuYm9keSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY29tcC5vbignZGF0YScsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYm9keSA9IGRhdGEudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaGVhZGVyc1tDT05URU5UX1RZUEVfSEVBREVSXSAmJiByZXN1bHQuaGVhZGVyc1tDT05URU5UX1RZUEVfSEVBREVSXS5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmJvZHkgPSBKU09OLnBhcnNlKHJlc3VsdC5ib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHBhcnNpbmcgZmFpbHMganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5oZWFkZXJzW0NPTlRFTlRfVFlQRV9IRUFERVJdICYmIHJlc3VsdC5oZWFkZXJzW0NPTlRFTlRfVFlQRV9IRUFERVJdLmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYm9keSA9IEpTT04ucGFyc2UocmVzdWx0LmJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgcGFyc2luZyBmYWlscyBqdXN0IHJldHVybiB0aGUgb3JpZ2luYWwgc3RyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgIGxldCBib2R5ID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnJlc3BvbnNlICYmXHJcbiAgICAgICAgICAgICAgICByZXN1bHQucmVzcG9uc2UuYm9keVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGJvZHkgPSByZXN1bHQucmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSByZXN1bHQucmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZTogcmVzdWx0Lm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXN1bHQucmVzcG9uc2UgPyByZXN1bHQucmVzcG9uc2UuaGVhZGVycyA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiByZXN1bHQucmVzcG9uc2UgPyByZXN1bHQucmVzcG9uc2Uuc3RhdHVzQ29kZSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXNNZXNzYWdlOiByZXN1bHQucmVzcG9uc2UgPyByZXN1bHQucmVzcG9uc2Uuc3RhdHVzTWVzc2FnZSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICByYXdCb2R5OiByZXN1bHQucmVzcG9uc2UgPyByZXN1bHQucmVzcG9uc2UucmF3Qm9keSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBib2R5OiBib2R5XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgaHR0cFZlcnNpb246IHJlc3VsdC5odHRwVmVyc2lvbixcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlc3VsdC5oZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgdXBncmFkZTogcmVzdWx0LnVwZ3JhZGUsXHJcbiAgICAgICAgICAgICAgICB1cmw6IHJlc3VsdC51cmwsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IHJlc3VsdC5tZXRob2QsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiByZXN1bHQuc3RhdHVzQ29kZSxcclxuICAgICAgICAgICAgICAgIHN0YXR1c01lc3NhZ2U6IHJlc3VsdC5zdGF0dXNNZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgdGltaW5nczogcmVzdWx0LnRpbWluZ3MsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0VXJsOiByZXN1bHQucmVxdWVzdFVybCxcclxuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXJsczogcmVzdWx0LnJlZGlyZWN0VXJscyxcclxuICAgICAgICAgICAgICAgIGlzRnJvbUNhY2hlOiByZXN1bHQuaXNGcm9tQ2FjaGUsXHJcbiAgICAgICAgICAgICAgICBpcDogcmVzdWx0LmlwLFxyXG4gICAgICAgICAgICAgICAgcmV0cnlDb3VudDogcmVzdWx0LnJldHJ5Q291bnQsXHJcbiAgICAgICAgICAgICAgICBib2R5OiByZXN1bHQuYm9keVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc3RvcmUgbGFzdCByZXNwb25zZSB0byBhbGxvdyBmdXJ0aGVyIGFzc2VydGlvbnMgYW5kIHZhbGlkYXRpb25zXHJcbiAgICAgICAgdGhpcy5fbGFzdFJlc3BvbnNlID0gcmVzdWx0O1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG59Il19
526
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1odHRwLmpzIl0sIm5hbWVzIjpbIk1PRFVMRV9OQU1FIiwiUkVTUE9OU0VfVElNRU9VVCIsIkRBRkFVTFRfSFRUUDIiLCJERUZBVUxUX0hUVFBfT1BUSU9OUyIsImRlY29tcHJlc3MiLCJyZXNwb25zZVR5cGUiLCJ0aW1lb3V0IiwibG9va3VwIiwiY29ubmVjdCIsInNlY3VyZUNvbm5lY3QiLCJzb2NrZXQiLCJzZW5kIiwicmVzcG9uc2UiLCJodHRwMiIsImh0dHBzIiwicmVqZWN0VW5hdXRob3JpemVkIiwiZG5zTG9va3VwSXBWZXJzaW9uIiwiQ09OVEVOVF9UWVBFX0hFQURFUiIsIkh0dHBNb2R1bGUiLCJPeHlnZW5Nb2R1bGUiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjb250ZXh0IiwicnMiLCJsb2dnZXIiLCJtb2R1bGVzIiwic2VydmljZXMiLCJfYWx3YXlzSW5pdGlhbGl6ZWQiLCJfbGFzdFJlc3BvbnNlIiwiX2Jhc2VVcmwiLCJfdXNlckh0dHBPcHRpb25zIiwiX2lzSW5pdGlhbGl6ZWQiLCJuYW1lIiwic2V0T3B0aW9ucyIsIm9wdHMiLCJkZWZsYXRlUmF3Iiwic2V0UHJveHkiLCJ1cmwiLCJib290c3RyYXAiLCJyZXF1aXJlIiwicGFyc2UiLCJwYXJzZWRVcmwiLCJob3N0bmFtZSIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJlcnJvckNvZGUiLCJIVFRQX0VSUk9SIiwicG9ydCIsInByb3RvY29sIiwiZ2xvYmFsIiwiR0xPQkFMX0FHRU5UIiwiSFRUUF9QUk9YWSIsImdldCIsImhlYWRlcnMiLCJodHRwT3B0cyIsIm1ldGhvZCIsIl9odHRwUmVxdWVzdFN5bmMiLCJwb3N0IiwiZGF0YSIsInJlc29sdmVkRGF0YSIsIl9yZXNvbHZlRGF0YSIsInB1dCIsInBhdGNoIiwiZGVsZXRlIiwiZ2V0UmVzcG9uc2UiLCJnZXRSZXNwb25zZUJvZHkiLCJib2R5IiwiZ2V0UmVzcG9uc2VIZWFkZXJzIiwiZ2V0UmVzcG9uc2VVcmwiLCJhc3NlcnRUZXh0IiwicGF0dGVybiIsIkFTU0VSVF9FUlJPUiIsInJlc3BDb250ZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIm1vZFV0aWxzIiwibWF0Y2hQYXR0ZXJuIiwiYXNzZXJ0UmVzcG9uc2VUaW1lIiwibWF4VGltZSIsIkVycm9yIiwiYXNzZXJ0SGVhZGVyIiwiaGVhZGVyTmFtZSIsImhlYWRlclZhbHVlUGF0dGVybiIsImxlbmd0aCIsInRvTG93ZXJDYXNlIiwiYWN0dWFsSGVhZGVyVmFsdWUiLCJhc3NlcnRDb29raWUiLCJjb29raWVOYW1lIiwiY29va2llVmFsdWVQYXR0ZXJuIiwiYXNzZXJ0U3RhdHVzIiwiY29kZUxpc3QiLCJBcnJheSIsImlzQXJyYXkiLCJzdGF0dXNDb2RlIiwiaW5jbHVkZXMiLCJhc3NlcnRTdGF0dXNPayIsInRyYW5zYWN0aW9uIiwidG9TdHJpbmciLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsImRhdGFSZXNvbHZlciIsIk9iamVjdCIsImFzc2VydENpcmN1bGFyIiwianNvbiIsInJlc3VsdCIsInpsaWIiLCJkZWNvbXAiLCJjcmVhdGVJbmZsYXRlUmF3Iiwid3JpdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uIiwiZSIsImVycm9yTWVzc2FnZSIsIm1lc3NhZ2UiLCJzdGF0dXNNZXNzYWdlIiwicmF3Qm9keSIsImh0dHBWZXJzaW9uIiwidXBncmFkZSIsInRpbWluZ3MiLCJyZXF1ZXN0VXJsIiwicmVkaXJlY3RVcmxzIiwiaXNGcm9tQ2FjaGUiLCJpcCIsInJldHJ5Q291bnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFPQSxNQUFNQSxXQUFXLEdBQUcsTUFBcEI7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyxPQUFPLEVBQWhDLEMsQ0FBc0M7O0FBQ3RD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QUFHO0FBQ0xjLFFBQUFBLFdBQVcsRUFBRWQsTUFBTSxDQUFDYyxXQURmO0FBRUxoRSxRQUFBQSxPQUFPLEVBQUVrRCxNQUFNLENBQUNsRCxPQUZYO0FBR0xpRSxRQUFBQSxPQUFPLEVBQUVmLE1BQU0sQ0FBQ2UsT0FIWDtBQUlMakYsUUFBQUEsR0FBRyxFQUFFa0UsTUFBTSxDQUFDbEUsR0FKUDtBQUtMa0IsUUFBQUEsTUFBTSxFQUFFZ0QsTUFBTSxDQUFDaEQsTUFMVjtBQU1Mc0MsUUFBQUEsVUFBVSxFQUFFVSxNQUFNLENBQUNWLFVBTmQ7QUFPTHNCLFFBQUFBLGFBQWEsRUFBRVosTUFBTSxDQUFDWSxhQVBqQjtBQVFMSSxRQUFBQSxPQUFPLEVBQUVoQixNQUFNLENBQUNnQixPQVJYO0FBU0xDLFFBQUFBLFVBQVUsRUFBRWpCLE1BQU0sQ0FBQ2lCLFVBVGQ7QUFVTEMsUUFBQUEsWUFBWSxFQUFFbEIsTUFBTSxDQUFDa0IsWUFWaEI7QUFXTEMsUUFBQUEsV0FBVyxFQUFFbkIsTUFBTSxDQUFDbUIsV0FYZjtBQVlMQyxRQUFBQSxFQUFFLEVBQUVwQixNQUFNLENBQUNvQixFQVpOO0FBYUxDLFFBQUFBLFVBQVUsRUFBRXJCLE1BQU0sQ0FBQ3FCLFVBYmQ7QUFjTDFELFFBQUFBLElBQUksRUFBRXFDLE1BQU0sQ0FBQ3JDO0FBZFIsT0FBVDtBQWdCSCxLQTlFNEIsQ0FnRjdCOzs7QUFDQSxTQUFLdEMsYUFBTCxHQUFxQjJFLE1BQXJCO0FBRUEsV0FBT0EsTUFBUDtBQUNIOztBQTVhZ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBodHRwXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggSFRUUChTKVxyXG4gKi9cclxuaW1wb3J0IGdvdCBmcm9tICdnb3QnO1xyXG5pbXBvcnQgT3h5Z2VuTW9kdWxlIGZyb20gJy4uL2NvcmUvT3h5Z2VuTW9kdWxlJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVyckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAnaHR0cCc7XHJcbmNvbnN0IFJFU1BPTlNFX1RJTUVPVVQgPSAxMDAwICogNjA7ICAgLy8gaW4gbXNcclxuY29uc3QgREFGQVVMVF9IVFRQMiA9IGZhbHNlO1xyXG5jb25zdCBERUZBVUxUX0hUVFBfT1BUSU9OUyA9IHtcclxuICAgIGRlY29tcHJlc3M6IHRydWUsXHJcbiAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcclxuICAgIHRpbWVvdXQ6IHtcclxuICAgICAgICBsb29rdXA6IDEwMDAsXHJcbiAgICAgICAgY29ubmVjdDogNTAwLFxyXG4gICAgICAgIHNlY3VyZUNvbm5lY3Q6IDUwMCxcclxuICAgICAgICBzb2NrZXQ6IDEwMDAwMCxcclxuICAgICAgICBzZW5kOiAxMDAwMDAsXHJcbiAgICAgICAgcmVzcG9uc2U6IFJFU1BPTlNFX1RJTUVPVVRcclxuICAgIH0sXHJcbiAgICBodHRwMjogREFGQVVMVF9IVFRQMixcclxuICAgIGh0dHBzOiB7XHJcbiAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIGRuc0xvb2t1cElwVmVyc2lvbjogJ2lwdjQnXHJcbn07XHJcbmNvbnN0IENPTlRFTlRfVFlQRV9IRUFERVIgPSAnY29udGVudC10eXBlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEh0dHBNb2R1bGUgZXh0ZW5kcyBPeHlnZW5Nb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy5fYWx3YXlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2xhc3RSZXNwb25zZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fYmFzZVVybCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fdXNlckh0dHBPcHRpb25zID0ge307XHJcbiAgICAgICAgLy8gcHJlLWluaXRpYWxpemUgdGhlIG1vZHVsZVxyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBAc3VtbWFyeSBHZXRzIG1vZHVsZSBuYW1lXHJcbiAgICAgKiBAZnVuY3Rpb24gbmFtZVxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBDb25zdGFudCB2YWx1ZSBcImh0dHBcIi5cclxuICAgICAqL1xyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyB1c2VyIGRlZmluZWQgSFRUUCBvcHRpb25zIChzdWNoIGFzIHByb3h5LCBkZWNvbXByZXNzIGFuZCBldGMuKVxyXG4gICAgICogQGZ1bmN0aW9uIHNldE9wdGlvbnNcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gSFRUUCByZXF1ZXN0IG9wdGlvbnMgb2JqZWN0LCBzZWUgW1JlcXVlc3QgT3B0aW9uc10oaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9nb3QvYmxvYi9tYWluL2RvY3VtZW50YXRpb24vMi1vcHRpb25zLm1kKS4gXHJcbiAgICAgKiBJbiBhZGRpdGlvbiB0byB0aGUgb3B0aW9ucyBsaXN0ZWQgaW4gdGhlIGxpbmtlZCBkb2N1bWVudCwgJ2RlZmxhdGVSYXcnIG9wdGlvbiBjYW4gYmUgdXNlZCB3aGVuIHNlcnZlciByZXR1cm5zIERlZmxhdGUtY29tcHJlc3NlZCBzdHJlYW0gd2l0aG91dCBoZWFkZXJzLlxyXG4gICAgICovXHJcbiAgICBzZXRPcHRpb25zKG9wdHMpIHtcclxuICAgICAgICB0aGlzLl91c2VySHR0cE9wdGlvbnMgPSBvcHRzO1xyXG4gICAgICAgIGlmIChvcHRzLmRlZmxhdGVSYXcpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXNlckh0dHBPcHRpb25zLmRlY29tcHJlc3MgPSBmYWxzZTsgICAgIC8vIGRlY29tcHJlc3M9dHJ1ZSBpbiBkZWZhdWx0IG9wdGlvbnMgc28gd2Ugb3ZlcnJpZGUgaXRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXRzIHByb3h5IHVybCB0byBiZSB1c2VkIGZvciBjb25uZWN0aW9ucyB3aXRoIHRoZSBzZXJ2aWNlLlxyXG4gICAgICogQGZ1bmN0aW9uIHNldFByb3h5XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIC0gUHJveHkgc2VydmVyIFVSTC4gTm90IHBhc3NpbmcgdGhpcyBhcmd1bWVudCB3aWxsIHJlc2V0IHRoZSBwcm94eSBzZXR0aW5ncy5cclxuICAgICAqL1xyXG4gICAgc2V0UHJveHkodXJsKSB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICBjb25zdCB7XHJcbiAgICAgICAgICAgICAgICBib290c3RyYXBcclxuICAgICAgICAgICAgfSA9IHJlcXVpcmUoJ2dsb2JhbC1hZ2VudCcpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gcmVxdWlyZSgndXJsJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IHBhcnNlKHVybCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBhcnNlZFVybC5ob3N0bmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5IVFRQX0VSUk9SLCAnSG9zdG5hbWUgaW4gdW5kZWZpbmVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJzZWRVcmwucG9ydCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5IVFRQX0VSUk9SLCAnUG9ydCBpbiB1bmRlZmluZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXBhcnNlZFVybC5wcm90b2NvbCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5IVFRQX0VSUk9SLCAnUHJvdG9jb2wgaW4gdW5kZWZpbmVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGJvb3RzdHJhcCgpO1xyXG4gICAgICAgICAgICBnbG9iYWwuR0xPQkFMX0FHRU5ULkhUVFBfUFJPWFkgPSB1cmw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZ2xvYmFsLkdMT0JBTF9BR0VOVC5IVFRQX1BST1hZID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUGVyZm9ybXMgSFRUUCBHRVRcclxuICAgICAqIEBmdW5jdGlvbiBnZXRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgLSBVUkwuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IGhlYWRlcnMgLSBIVFRQIGhlYWRlcnMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFJlc3BvbnNlIG9iamVjdC5cclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogLy8gQmFzaWMgdXNhZ2UgZXhhbXBsZTpcclxuICAgICAqIHZhciByZXNwb25zZSA9IGh0dHAuZ2V0KFxyXG4gICAgICogJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvb3h5Z2VuaHEvb3h5Z2VuLWlkZS9yZWxlYXNlcycsIFxyXG4gICAgICoge1xyXG4gICAgICogICAnQWNjZXB0LUVuY29kaW5nJzogJ2d6aXAsIGRlZmxhdGUnLFxyXG4gICAgICogICAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0OyBydjo4Ni4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94Lzg2LjAnXHJcbiAgICAgKiB9KTtcclxuICAgICAqIGxvZy5pbmZvKHJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICpcclxuICAgICAqIC8vIElmIHNlcnZlciByZXR1cm5zIERlZmxhdGUtY29tcHJlc3NlZCBzdHJlYW0gd2l0aG91dCBoZWFkZXJzLCBgZGVmbGF0ZVJhd2AgY2FuIGJlIHVzZWQgdG8gZGVjb21wcmVzcyB0aGUgY29udGVudC5cclxuICAgICAqIGh0dHAuc2V0T3B0aW9ucyh7XHJcbiAgICAgKiAgIGRlZmxhdGVSYXc6IHRydWVcclxuICAgICAqIH0pO1xyXG4gICAgICogdmFyIHJlc3BvbnNlID0gaHR0cC5nZXQoJ2h0dHBzOi8vRk9PLkJBUicpO1xyXG4gICAgICogbG9nLmluZm8ocmVzcG9uc2UuYm9keSk7XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldCh1cmwsIGhlYWRlcnMpIHtcclxuICAgICAgICBjb25zdCBodHRwT3B0cyA9IHtcclxuICAgICAgICAgICAgLi4uREVGQVVMVF9IVFRQX09QVElPTlMsXHJcbiAgICAgICAgICAgIC4uLnRoaXMuX3VzZXJIdHRwT3B0aW9ucyB8fCB7fSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMgfHwge31cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9odHRwUmVxdWVzdFN5bmMoaHR0cE9wdHMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUGVyZm9ybXMgSFRUUCBQT1NUXHJcbiAgICAgKiBAZnVuY3Rpb24gcG9zdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCAtIFVSTC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gRGF0YS5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gaGVhZGVycyAtIEhUVFAgaGVhZGVycy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gUmVzcG9uc2Ugb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBwb3N0KHVybCwgZGF0YSwgaGVhZGVycykge1xyXG4gICAgICAgIGNvbnN0IHJlc29sdmVkRGF0YSA9IHRoaXMuX3Jlc29sdmVEYXRhKGRhdGEpO1xyXG5cclxuICAgICAgICBjb25zdCBodHRwT3B0cyA9IHtcclxuICAgICAgICAgICAgLi4uREVGQVVMVF9IVFRQX09QVElPTlMsXHJcbiAgICAgICAgICAgIC4uLnRoaXMuX3VzZXJIdHRwT3B0aW9ucyB8fCB7fSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzIHx8IHt9LFxyXG4gICAgICAgICAgICAuLi5yZXNvbHZlZERhdGFcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9odHRwUmVxdWVzdFN5bmMoaHR0cE9wdHMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUGVyZm9ybXMgSFRUUCBQVVRcclxuICAgICAqIEBmdW5jdGlvbiBwdXRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgLSBVUkwuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YSAtIERhdGEuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IGhlYWRlcnMgLSBIVFRQIGhlYWRlcnMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFJlc3BvbnNlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHV0KHVybCwgZGF0YSwgaGVhZGVycykge1xyXG4gICAgICAgIGNvbnN0IHJlc29sdmVkRGF0YSA9IHRoaXMuX3Jlc29sdmVEYXRhKGRhdGEpO1xyXG5cclxuICAgICAgICBjb25zdCBodHRwT3B0cyA9IHtcclxuICAgICAgICAgICAgLi4uREVGQVVMVF9IVFRQX09QVElPTlMsXHJcbiAgICAgICAgICAgIC4uLnRoaXMuX3VzZXJIdHRwT3B0aW9ucyB8fCB7fSxcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMgfHwge30sXHJcbiAgICAgICAgICAgIC4uLnJlc29sdmVkRGF0YVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHBSZXF1ZXN0U3luYyhodHRwT3B0cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQZXJmb3JtcyBIVFRQIFBBVENIXHJcbiAgICAgKiBAZnVuY3Rpb24gcGF0Y2hcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgLSBVUkwuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YSAtIERhdGEuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IGhlYWRlcnMgLSBIVFRQIGhlYWRlcnMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFJlc3BvbnNlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgcGF0Y2godXJsLCBkYXRhLCBoZWFkZXJzKSB7XHJcbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gdGhpcy5fcmVzb2x2ZURhdGEoZGF0YSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGh0dHBPcHRzID0ge1xyXG4gICAgICAgICAgICAuLi5ERUZBVUxUX0hUVFBfT1BUSU9OUyxcclxuICAgICAgICAgICAgLi4udGhpcy5fdXNlckh0dHBPcHRpb25zIHx8IHt9LFxyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzIHx8IHt9LFxyXG4gICAgICAgICAgICAuLi5yZXNvbHZlZERhdGFcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9odHRwUmVxdWVzdFN5bmMoaHR0cE9wdHMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUGVyZm9ybXMgSFRUUCBERUxFVEVcclxuICAgICAqIEBmdW5jdGlvbiBkZWxldGVcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgLSBVUkwuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IGhlYWRlcnMgLSBIVFRQIGhlYWRlcnMuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YSAtIERhdGEuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFJlc3BvbnNlIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGVsZXRlKHVybCwgaGVhZGVycywgZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHJlc29sdmVkRGF0YSA9IHRoaXMuX3Jlc29sdmVEYXRhKGRhdGEpO1xyXG4gICAgICAgIGNvbnN0IGh0dHBPcHRzID0ge1xyXG4gICAgICAgICAgICAuLi5ERUZBVUxUX0hUVFBfT1BUSU9OUyxcclxuICAgICAgICAgICAgLi4udGhpcy5fdXNlckh0dHBPcHRpb25zIHx8IHt9LFxyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyB8fCB7fSxcclxuICAgICAgICAgICAgLi4ucmVzb2x2ZWREYXRhXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faHR0cFJlcXVlc3RTeW5jKGh0dHBPcHRzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgbGFzdCByZXNwb25zZSBvYmplY3RcclxuICAgICAqIEBmdW5jdGlvbiBnZXRSZXNwb25zZVxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBSZXNwb25zZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldFJlc3BvbnNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sYXN0UmVzcG9uc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGxhc3QgcmVzcG9uc2UgYm9keVxyXG4gICAgICogQGZ1bmN0aW9uIGdldFJlc3BvbnNlQm9keVxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBSZXNwb25zZSBib2R5LlxyXG4gICAgICovXHJcbiAgICBnZXRSZXNwb25zZUJvZHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RSZXNwb25zZSAmJiB0aGlzLl9sYXN0UmVzcG9uc2UuYm9keSA/IHRoaXMuX2xhc3RSZXNwb25zZS5ib2R5IDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgcmVzcG9uc2UgaGVhZGVyc1xyXG4gICAgICogQGZ1bmN0aW9uIGdldFJlc3BvbnNlSGVhZGVyc1xyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBSZXNwb25zZSBoZWFkZXJzLlxyXG4gICAgICovXHJcbiAgICBnZXRSZXNwb25zZUhlYWRlcnMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9sYXN0UmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9sYXN0UmVzcG9uc2UuaGVhZGVycztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgcmVzcG9uc2UgVVJMXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0UmVzcG9uc2VVcmxcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gUmVzcG9uc2UgVVJMLlxyXG4gICAgICovXHJcbiAgICBnZXRSZXNwb25zZVVybCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2xhc3RSZXNwb25zZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RSZXNwb25zZS51cmw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgd2hldGhlciB0aGUgc3BlY2lmaWVkIHBhdHRlcm4gaXMgcHJlc2VudCBpbiB0aGUgcmVzcG9uc2UgYm9keS5cclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRUZXh0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0dGVybiAtIFBhdHRlcm4gdG8gYXNzZXJ0LlxyXG4gICAgICovXHJcbiAgICBhc3NlcnRUZXh0KHBhdHRlcm4pIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2xhc3RSZXNwb25zZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5fbGFzdFJlc3BvbnNlLmJvZHkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsICdSZXNwb25zZSBib2R5IGlzIGVtcHR5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3BDb250ZW50ID0gdHlwZW9mIHRoaXMuX2xhc3RSZXNwb25zZS5ib2R5ID09PSAnc3RyaW5nJyA/IHRoaXMuX2xhc3RSZXNwb25zZS5ib2R5IDogSlNPTi5zdHJpbmdpZnkodGhpcy5fbGFzdFJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICAgIGlmICghbW9kVXRpbHMubWF0Y2hQYXR0ZXJuKHJlc3BDb250ZW50LCBwYXR0ZXJuKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgYEV4cGVjdGVkIEhUVFAgcmVzcG9uc2UgY29udGVudCB0byBtYXRjaDogXCIke3BhdHRlcm59XCIgYnV0IGdvdDogXCIke3Jlc3BDb250ZW50fVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IHJlc3BvbnNlIHRpbWVcclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRSZXNwb25zZVRpbWVcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBtYXhUaW1lIC0gTWF4aW11bSByZXNwb25zZSB0aW1lIGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqL1xyXG4gICAgYXNzZXJ0UmVzcG9uc2VUaW1lKG1heFRpbWUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IGlmIEhUVFAgaGVhZGVyIGlzIHByZXNlbnRlZCBpbiB0aGUgcmVzcG9uc2VcclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRIZWFkZXJcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJOYW1lIC0gQSBIVFRQIGhlYWRlciBuYW1lLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBoZWFkZXJWYWx1ZVBhdHRlcm4gLSBBbiBvcHRpb25hbCBIVFRQIGhlYWRlciB2YWx1ZSBwYXR0ZXJuLlxyXG4gICAgICovXHJcbiAgICBhc3NlcnRIZWFkZXIoaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWVQYXR0ZXJuID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghaGVhZGVyTmFtZSB8fCB0eXBlb2YgaGVhZGVyTmFtZSAhPT0gJ3N0cmluZycgfHwgaGVhZGVyTmFtZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhlYWRlck5hbWUgPSBoZWFkZXJOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuX2xhc3RSZXNwb25zZS5oZWFkZXJzO1xyXG4gICAgICAgIGlmICghaGVhZGVyc1toZWFkZXJOYW1lXSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgJ0V4cGVjdGVkIEhUVFAgaGVhZGVyIFwiJHtoZWFkZXJOYW1lfVwiIHRvIGJlIHByZXNlbnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaGVhZGVyVmFsdWVQYXR0ZXJuICYmIHR5cGVvZiBoZWFkZXJWYWx1ZVBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbEhlYWRlclZhbHVlID0gaGVhZGVyc1toZWFkZXJOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFtb2RVdGlscy5tYXRjaFBhdHRlcm4oYWN0dWFsSGVhZGVyVmFsdWUsIGhlYWRlclZhbHVlUGF0dGVybikpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBgRXhwZWN0ZWQgSFRUUCBoZWFkZXIgXCIke2hlYWRlck5hbWV9XCIgdmFsdWUgdG8gbWF0Y2g6IFwiJHtoZWFkZXJWYWx1ZVBhdHRlcm59XCIgYnV0IGdvdDogXCIke2FjdHVhbEhlYWRlclZhbHVlfVwiYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgaWYgSFRUUCBjb29raWUgaXMgcHJlc2VudGVkIGluIHRoZSByZXNwb25zZVxyXG4gICAgICogQGZ1bmN0aW9uIGFzc2VydENvb2tpZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGNvb2tpZU5hbWUgLSBBIEhUVFAgY29va2llIG5hbWUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNvb2tpZVZhbHVlUGF0dGVybiAtIEFuIG9wdGlvbmFsIEhUVFAgY29va2llIHZhbHVlIHBhdHRlcm4uXHJcbiAgICAgKi9cclxuICAgIGFzc2VydENvb2tpZShjb29raWVOYW1lLCBjb29raWVWYWx1ZVBhdHRlcm4pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IHRoZSBsYXN0IEhUVFAgcmVzcG9uc2UncyBzdGF0dXMgY29kZVxyXG4gICAgICogQGZ1bmN0aW9uIGFzc2VydFN0YXR1c1xyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ8QXJyYXl9IGNvZGVMaXN0IC0gQSBzaW5nbGUgc3RhdHVzIGNvZGUgb3IgYSBsaXN0IG9mIGNvZGVzLlxyXG4gICAgICovXHJcbiAgICBhc3NlcnRTdGF0dXMoY29kZUxpc3QpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2xhc3RSZXNwb25zZSB8fCAhY29kZUxpc3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB3ZSBnb3QgYSBzaW5nbGUgdmFsdWUsIHRoZW4gY29udmVydCBpdCB0byBhbiBhcnJheVxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb2RlTGlzdCkpIHtcclxuICAgICAgICAgICAgY29kZUxpc3QgPSBbY29kZUxpc3RdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGF0dXNDb2RlID0gdGhpcy5fbGFzdFJlc3BvbnNlLnN0YXR1c0NvZGU7XHJcbiAgICAgICAgaWYgKCFjb2RlTGlzdC5pbmNsdWRlcyhzdGF0dXNDb2RlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgYEV4cGVjdGVkIEhUVFAgc3RhdHVzIHRvIGJlOiBcIiR7Y29kZUxpc3R9XCIgYnV0IGdvdDogXCIke3N0YXR1c0NvZGV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgSFRUUCAyMDAgT0sgc3RhdHVzXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0U3RhdHVzT2tcclxuICAgICAqL1xyXG4gICAgYXNzZXJ0U3RhdHVzT2soKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0U3RhdHVzKDIwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBPcGVucyBuZXcgdHJhbnNhY3Rpb24uXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uIHdpbGwgcGVyc2lzdCB0aWxsIGEgbmV3IG9uZSBpcyBvcGVuZWQuIFRyYW5zYWN0aW9uIG5hbWVzIG11c3QgYmUgdW5pcXVlLlxyXG4gICAgICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSB0cmFuc2FjdGlvbiBuYW1lLlxyXG4gICAgICovXHJcbiAgICBhc3luYyB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8ganVzdCBpbiBjYXNlIHVzZXIgcGFzc2VkIGEgY29tcGxleCBvYmplY3QgYnkgbWlzdGFrZVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBfcmVzb2x2ZURhdGEoZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFSZXNvbHZlciA9IHt9O1xyXG5cclxuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgICAgICAgICBtb2RVdGlscy5hc3NlcnRDaXJjdWxhcihkYXRhKTtcclxuICAgICAgICAgICAgZGF0YVJlc29sdmVyLmpzb24gPSBkYXRhO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGFSZXNvbHZlci5ib2R5ID0gZGF0YTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkYXRhUmVzb2x2ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2h0dHBSZXF1ZXN0U3luYyhodHRwT3B0cykge1xyXG4gICAgICAgIGxldCByZXN1bHQ7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGdvdChodHRwT3B0cyk7XHJcbiAgICAgICAgICAgIGlmIChodHRwT3B0cy5kZWZsYXRlUmF3ICYmIHJlc3VsdC5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gPT09ICdkZWZsYXRlJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgemxpYiA9IHJlcXVpcmUoJ3psaWInKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlY29tcCA9IHpsaWIuY3JlYXRlSW5mbGF0ZVJhdygpO1xyXG4gICAgICAgICAgICAgICAgZGVjb21wLndyaXRlKHJlc3VsdC5ib2R5KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb21wLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ib2R5ID0gZGF0YS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5oZWFkZXJzW0NPTlRFTlRfVFlQRV9IRUFERVJdICYmIHJlc3VsdC5oZWFkZXJzW0NPTlRFTlRfVFlQRV9IRUFERVJdLmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYm9keSA9IEpTT04ucGFyc2UocmVzdWx0LmJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgcGFyc2luZyBmYWlscyBqdXN0IHJldHVybiB0aGUgb3JpZ2luYWwgc3RyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmhlYWRlcnNbQ09OVEVOVF9UWVBFX0hFQURFUl0gJiYgcmVzdWx0LmhlYWRlcnNbQ09OVEVOVF9UWVBFX0hFQURFUl0uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ib2R5ID0gSlNPTi5wYXJzZShyZXN1bHQuYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBwYXJzaW5nIGZhaWxzIGp1c3QgcmV0dXJuIHRoZSBvcmlnaW5hbCBzdHJpbmdcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgbGV0IGJvZHkgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICByZXN1bHQucmVzcG9uc2UgJiZcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNwb25zZS5ib2R5XHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgYm9keSA9IHJlc3VsdC5yZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IHJlc3VsdC5yZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiByZXN1bHQubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlc3VsdC5yZXNwb25zZSA/IHJlc3VsdC5yZXNwb25zZS5oZWFkZXJzIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlc3VsdC5yZXNwb25zZSA/IHJlc3VsdC5yZXNwb25zZS5zdGF0dXNDb2RlIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHN0YXR1c01lc3NhZ2U6IHJlc3VsdC5yZXNwb25zZSA/IHJlc3VsdC5yZXNwb25zZS5zdGF0dXNNZXNzYWdlIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHJhd0JvZHk6IHJlc3VsdC5yZXNwb25zZSA/IHJlc3VsdC5yZXNwb25zZS5yYXdCb2R5IDogbnVsbCxcclxuICAgICAgICAgICAgICAgIGJvZHk6IGJvZHlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICBodHRwVmVyc2lvbjogcmVzdWx0Lmh0dHBWZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogcmVzdWx0LmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICB1cGdyYWRlOiByZXN1bHQudXBncmFkZSxcclxuICAgICAgICAgICAgICAgIHVybDogcmVzdWx0LnVybCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogcmVzdWx0Lm1ldGhvZCxcclxuICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlc3VsdC5zdGF0dXNDb2RlLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzTWVzc2FnZTogcmVzdWx0LnN0YXR1c01lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICB0aW1pbmdzOiByZXN1bHQudGltaW5ncyxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RVcmw6IHJlc3VsdC5yZXF1ZXN0VXJsLFxyXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVcmxzOiByZXN1bHQucmVkaXJlY3RVcmxzLFxyXG4gICAgICAgICAgICAgICAgaXNGcm9tQ2FjaGU6IHJlc3VsdC5pc0Zyb21DYWNoZSxcclxuICAgICAgICAgICAgICAgIGlwOiByZXN1bHQuaXAsXHJcbiAgICAgICAgICAgICAgICByZXRyeUNvdW50OiByZXN1bHQucmV0cnlDb3VudCxcclxuICAgICAgICAgICAgICAgIGJvZHk6IHJlc3VsdC5ib2R5XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzdG9yZSBsYXN0IHJlc3BvbnNlIHRvIGFsbG93IGZ1cnRoZXIgYXNzZXJ0aW9ucyBhbmQgdmFsaWRhdGlvbnNcclxuICAgICAgICB0aGlzLl9sYXN0UmVzcG9uc2UgPSByZXN1bHQ7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn0iXX0=
@@ -194,7 +194,7 @@ class MobileModule extends _WebDriverModule.default {
194
194
 
195
195
 
196
196
  if (this.options.collectDeviceLogs) {
197
- this.caps['appium:clearDeviceLogsOnStart'] = true;
197
+ this.caps['clearDeviceLogsOnStart'] = true;
198
198
  } // if both browserName and appPackage/app/bundleId were specified - assume we want to run the application and remove browserName
199
199
 
200
200
 
@@ -372,8 +372,7 @@ class MobileModule extends _WebDriverModule.default {
372
372
  }
373
373
  /**
374
374
  * @summary Opens new transaction.
375
- * @description The transaction will persist till a new one is opened. Transaction names must be
376
- * unique.
375
+ * @description The transaction will persist till a new one is opened. Transaction names must be unique.
377
376
  * @function transaction
378
377
  * @param {String} name - The transaction name.
379
378
  * @for android, ios, hybrid, web
@@ -381,6 +380,12 @@ class MobileModule extends _WebDriverModule.default {
381
380
 
382
381
 
383
382
  transaction(name) {
383
+ if (!name) {
384
+ return;
385
+ } // just in case user passed a complex object by mistake
386
+
387
+
388
+ name = name.toString();
384
389
  global._lastTransactionName = name;
385
390
  }
386
391
  /*
@@ -696,4 +701,4 @@ class MobileModule extends _WebDriverModule.default {
696
701
  }
697
702
 
698
703
  exports.default = MobileModule;
699
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1tb2IuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0JST1dTRVJfTkFNRSIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIk1vYmlsZU1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsImFwcENvbnRleHQiLCJfbG9hZEhlbHBlckZ1bmN0aW9ucyIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJ3YWl0Rm9yVGltZW91dCIsIm5hbWUiLCJnZXREcml2ZXIiLCJnZXRDYXBhYmlsaXRpZXMiLCJjYXBzIiwiaW5pdCIsImFwcGl1bVVybCIsImlzSW5pdGlhbGl6ZWQiLCJyZW9wZW5TZXNzaW9uIiwiZGVidWciLCJkcml2ZXIiLCJyZWxvYWRTZXNzaW9uIiwiX2lzSW5pdGlhbGl6ZWQiLCJjdHgiLCJwbGF0Zm9ybU5hbWUiLCJwbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VOYW1lIiwiYnJvd3Nlck5hbWUiLCJhdXRvbWF0aW9uTmFtZSIsInVkaWQiLCJhcHAiLCJlbmFibGVBcHBpdW1CZWhhdmlvciIsInVzZUFwcGl1bUZvcldlYiIsImNvbGxlY3REZXZpY2VMb2dzIiwiYXBwUGFja2FnZSIsImJ1bmRsZUlkIiwidG9Mb3dlckNhc2UiLCJyZWNvcmRIQVIiLCJicm93c2VyIiwicGVyZm9ybWFuY2UiLCJ1cmwiLCJVUkwiLCJwYXJzZSIsInByb3RvY29sIiwicmVwbGFjZSIsImhvc3QiLCJob3N0bmFtZSIsInBvcnQiLCJwYXJzZUludCIsInBhdGgiLCJwYXRobmFtZSIsImF1dGgiLCJzcGxpdCIsIndkaW9PcHRzIiwidXNlciIsImtleSIsImNhcGFiaWxpdGllcyIsImxvZ0xldmVsIiwicnVubmVyIiwid2FpdGZvclRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5Q291bnQiLCJwcm92aWRlciIsIm1vZFV0aWxzIiwiZGV0ZXJtaW5lUHJvdmlkZXIiLCJQRVJGRUNUTyIsIm1heEluc3RhbmNlcyIsIm9wZW5EZXZpY2VUaW1lb3V0IiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJ3ZGlvIiwicmVtb3RlIiwic2VsZW5pdW1Ccm93c2VyVGltZW91dCIsInNlbGVuaXVtVGltZW91dCIsInBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCIsInBlcmZlY3RvUmVwb3J0aW5nIiwiUGVyZmVjdG8iLCJQZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJ3ZWJkcml2ZXIiLCJleGVjdXRlU2NyaXB0IiwiY29tbWFuZCIsInBhcmFtcyIsImV4ZWN1dGUiLCJyZXBvcnRpbmdDbGllbnQiLCJQZXJmZWN0b1JlcG9ydGluZ0NsaWVudCIsInRlc3RTdGFydCIsImUiLCJnZXRBcHBpdW1Jbml0RXJyb3IiLCJnZXRDb250ZXh0Iiwic2V0V2ViVmlld0NvbnRleHQiLCJCUk9XU0VSU1RBQ0siLCJzZXRUaW1lb3V0IiwiZGlzcG9zZSIsInN0YXR1cyIsInN0ZXBzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiZmFpbGVkRmluZGVkIiwiZmluZCIsIml0ZW0iLCJ0b1VwcGVyQ2FzZSIsInRlc3RTdG9wIiwiQ29uc3RhbnRzIiwicmVzdWx0cyIsInBhc3NlZCIsImZhaWxlZCIsIl9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2siLCJkZWxldGVTZXNzaW9uIiwiaW5jbHVkZXMiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0Iiwid2FybiIsInRyYW5zYWN0aW9uIiwiZ2xvYmFsIiwiX2xhc3RUcmFuc2FjdGlvbk5hbWUiLCJfaXNBY3Rpb24iLCJfdGFrZVNjcmVlbnNob3RTaWxlbnQiLCJlcnJvciIsInRha2VTY3JlZW5zaG90IiwicmV0dmFsIiwiY2FsbCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwid2FpdFVudGlsUmV0VmFsIiwid2FpdFVudGlsIiwiaW1hZ2VzIiwicHVzaEltYWdlVG9JbWFnZXMiLCJmZXRjaFRpdGxlIiwiaW1hZ2UiLCJ0aXRsZSIsImdldFRpdGxlIiwidGV4dFRvSW1hZ2UiLCJyZXF1aXJlIiwidGl0bGVJbWFnZSIsImdlbmVyYXRlIiwicHVzaCIsImlzV2ViVmlld0NvbnRleHQiLCJoYW5kbGVzIiwiZ2V0V2luZG93SGFuZGxlcyIsImhhbmRsZSIsInN3aXRjaFRvV2luZG93IiwibWVyZ2VkSW1hZ2UiLCJkaXJlY3Rpb24iLCJ0aW1lb3V0IiwidGhlbiIsImNhdGNoIiwiZXJyIiwiX2FkanVzdEFwcGl1bUxvZyIsImxvZyIsInNyYyIsInRpbWUiLCJ0aW1lc3RhbXAiLCJtc2ciLCJtZXNzYWdlIiwibGV2ZWwiLCJfaXRlcmF0aW9uU3RhcnQiLCJfaXRlcmF0aW9uRW5kIiwidHlwZSIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQVBQSVVNX1NFU1NJT05fVElNRU9VVCIsImxvZ3MiLCJnZXREZXZpY2VMb2dzIiwiY29sbGVjdEJyb3dzZXJMb2dzIiwiZ2V0QnJvd3NlckxvZ3MiLCJjb2xsZWN0QXBwaXVtTG9ncyIsImdldEFwcGl1bUxvZ3MiLCJsb2dFbnRyeSIsIl9nZXRXZGlvTG9jYXRvciIsImxvY2F0b3IiLCJTQ1JJUFRfRVJST1IiLCJpbmRleE9mIiwicGxhdGZvcm0iLCJzdWJzdHIiLCJnZXRXZGlvTG9jYXRvciIsIm1hdGNoUGF0dGVybiIsImdldEVsZW1lbnQiLCJnZXRFbGVtZW50cyIsImdldENoaWxkRWxlbWVudCIsImdldENoaWxkRWxlbWVudHMiLCJzZXRUaW1lb3V0SW1wbGljaXQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiYXNzZXJ0QXJndW1lbnQiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiLCJhc3NlcnRDb250ZXh0IiwiY29udGV4dExpc3QiLCJnZXRMb2dUeXBlcyIsInJlcXVlc3RCb2R5Iiwic2Vzc2lvbklkIiwibWV0aG9kIiwianNvbiIsInJlamVjdFVuYXV0aG9yaXplZCIsImJvZHkiLCJyZXMiLCJ0b1N0cmluZyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFHQSxNQUFNQSxXQUFXLEdBQUcsS0FBcEI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyw4QkFBM0I7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxTQUE3QjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLENBQUMsTUFBRCxFQUFTLGFBQVQsQ0FBL0I7QUFDQSxNQUFNQyxlQUFlLEdBQUcsQ0FBQyxNQUFELEVBQVEsS0FBUixFQUFjLE9BQWQsRUFBc0IsT0FBdEIsRUFBOEIsUUFBOUIsRUFBdUMsVUFBdkMsQ0FBeEI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxLQUFLLElBQWxDLEMsQ0FBbUQ7O0FBRXBDLE1BQU1D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Q0FBMkIsbUJBQTNCLENBREo7QUFFSixvQkFBUSxLQUFLSCxRQUFMLENBQWNHLFlBQWQsQ0FBMkIsa0JBQTNCLENBRko7QUFHSiwrQkFBbUI7QUFIZjtBQU5GLFNBQVY7QUFZSDs7QUFFRCxVQUFJO0FBQ0EsOEJBQVE1RCxPQUFSLEVBQWlCLENBQUN1SixHQUFELEVBQU1vRCxHQUFOLEVBQVdELElBQVgsS0FBb0I7QUFDakM1RSxVQUFBQSxPQUFPO0FBQ1YsU0FGRDtBQUdILE9BSkQsQ0FJRSxPQUFPcEMsQ0FBUCxFQUFVO0FBQ1IsYUFBS3ZGLE1BQUwsQ0FBWXNILEtBQVosQ0FBa0IsbURBQW1EL0IsQ0FBQyxDQUFDa0gsUUFBRixFQUFyRTtBQUNBOUUsUUFBQUEsT0FBTztBQUNWO0FBQ0osS0EzQ00sQ0FBUDtBQTRDSDs7QUFybEJxRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgbW9iXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBtb2JpbGUgYXV0b21hdGlvbi5cclxuICogQHNhbXBsZSAqKkxvY2F0b3JzOioqICBcclxuICogXHJcbiAqIE5hdGl2ZSBhcHBsaWNhdGlvbiBsb2NhdG9ycyBmb3IhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2FuZHJvaWQucG5nKSAgXHJcbiAqICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICogYH5BQ0NFU1NJQklMSVRZX0lEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgQWNjZXNzaWJpbGl0eSBJZC5cclxuICogKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBpZC5cclxuICogKiBgY2xhc3M9Q0xBU1NgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBjbGFzcy5cclxuICogKiBgdGV4dD1URVhUYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgdmlzaWJsZSB0ZXh0LlxyXG4gKiAqIGB0ZXh0LWNvbnRhaW5zPVRFWFRgIC0gTG9jYXRlcyBlbGVtZW50IHdob3NlIHZpc2libGUgdGV4dCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHN0cmluZy5cclxuICogKiBgZGVzYz1ERVNDUklQVElPTmAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGRlc2NyaXB0aW9uLlxyXG4gKiAqIGBkZXNjLWNvbnRhaW5zPURFU0NSSVBUSU9OYCAtIExvY2F0ZXMgZWxlbWVudCB3aG9zZSBkZXNjcmlwdGlvbiBjb250YWlucyB0aGUgc3BlY2lmaWVkIHN0cmluZy5cclxuICogKiBgc2Nyb2xsYWJsZWAgLSBMb2NhdGVzIGVsZW1lbnRzIHRoYXQgYXJlIHNjcm9sbGFibGUuICBcclxuICogIFxyXG4gKiBOYXRpdmUgYXBwbGljYXRpb24gbG9jYXRvcnMgZm9yIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9hcHBsZS5wbmcpICBcclxuICogIFxyXG4gKiAqIGAvWFBBVEhgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGFuIFhQYXRoIDEuMCBleHByZXNzaW9uLlxyXG4gKiAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIElELlxyXG4gKiAqIGB+QUNDRVNTSUJJTElUWV9JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIEFjY2Vzc2liaWxpdHkgSWQuICBcclxuICogKiBgLWlvcyBwcmVkaWNhdGUgc3RyaW5nOlBSRURJQ0FURV9TVFJJTkdgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGEgW3ByZWRpY2F0ZSBxdWVyeV0oaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rYXJjaGl2ZS9XZWJEcml2ZXJBZ2VudC93aWtpL1ByZWRpY2F0ZS1RdWVyaWVzLUNvbnN0cnVjdGlvbi1SdWxlcykuICBcclxuICogKiBgLWlvcyBjbGFzcyBjaGFpbjpDTEFTU19DSEFJTmAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYSBbY2xhc3MgY2hhaW4gZXhwcmVzc2lvbl0oaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rYXJjaGl2ZS9XZWJEcml2ZXJBZ2VudC93aWtpL0NsYXNzLUNoYWluLVF1ZXJpZXMtQ29uc3RydWN0aW9uLVJ1bGVzKS4gIFxyXG4gKiAgXHJcbiAqIEh5YnJpZCFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvaHlicmlkLnBuZykgIGFuZCBXZWIhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL3dlYi5wbmcpICBhcHBsaWNhdGlvbiBsb2NhdG9ycyBmb3IhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2FuZHJvaWQucG5nKSAgIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9hcHBsZS5wbmcpICBcclxuICogIFxyXG4gKiAqIGAvWFBBVEhgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGFuIFhQYXRoIDEuMCBleHByZXNzaW9uLlxyXG4gKiAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGlkLlxyXG4gKiAqIGBuYW1lPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBuYW1lIGF0dHJpYnV0ZS5cclxuICogKiBgdGFnPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyB0YWcgbmFtZS5cclxuICogKiBgbGluaz1URVhUYCAtIExvY2F0ZXMgYW5jaG9yIGVsZW1lbnQgd2hvc2UgdGV4dCBtYXRjaGVzIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICogYGxpbmstY29udGFpbnM9VEVYVGAgLSBMb2NhdGVzIGFuY2hvciBlbGVtZW50IHdob3NlIHRleHQgY29udGFpbnMgdGhlIGdpdmVuIHN0cmluZy5cclxuICogKiBgY3NzPUNTU19TRUxFQ1RPUmAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYSBDU1Mgc2VsZWN0b3IuXHJcbiAqIFxyXG4gKiAqKlBhdHRlcm4gYXJndW1lbnRzOioqXHJcbiAqIFxyXG4gKiBDb21tYW5kcyB3aGljaCBleHBlY3QgYSBzdHJpbmcgbWF0Y2hpbmcgcGF0dGVybiBpbiB0aGVpciBhcmd1bWVudHMsIHN1cHBvcnQgZm9sbG93aW5nIHBhdHRlcm5zIHVubGVzcyBzcGVjaWZpZWQgb3RoZXJ3aXNlOlxyXG4gKiBcclxuICogKiBgcmVnZXg6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICogYFBBVFRFUk5gIC0gVmVyYmF0aW0gbWF0Y2hpbmcuXHJcbiAqIFxyXG4gKi9cclxuaW1wb3J0IFVSTCBmcm9tICd1cmwnO1xyXG5pbXBvcnQgKiBhcyB3ZGlvIGZyb20gJ3dlYmRyaXZlcmlvJztcclxuaW1wb3J0IFdlYkRyaXZlck1vZHVsZSBmcm9tICcuLi9jb3JlL1dlYkRyaXZlck1vZHVsZSc7XHJcbmltcG9ydCBtb2RVdGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IGVyckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IHBlcmZlY3RvUmVwb3J0aW5nIGZyb20gJ3BlcmZlY3RvLXJlcG9ydGluZyc7XHJcbmltcG9ydCByZXF1ZXN0IGZyb20gJ3JlcXVlc3QnO1xyXG5pbXBvcnQgbWVyZ2VJbWFnZXMgZnJvbSAnLi4vbGliL2ltZy1tZXJnZSc7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ21vYic7XHJcbmNvbnN0IERFRkFVTFRfQVBQSVVNX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViJztcclxuY29uc3QgREVGQVVMVF9CUk9XU0VSX05BTUUgPSAnZGVmYXVsdCc7XHJcbmNvbnN0IE5PX1NDUkVFTlNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnXTtcclxuY29uc3QgQUNUSU9OX0NPTU1BTkRTID0gWydvcGVuJywndGFwJywnY2xpY2snLCdzd2lwZScsJ3N1Ym1pdCcsJ3NldFZhbHVlJ107XHJcbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FT1VUID0gNjAgKiAxMDAwOyAgICAgICAgICAgIC8vIGRlZmF1bHQgNjBzIHdhaXQgdGltZW91dFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9iaWxlTW9kdWxlIGV4dGVuZHMgV2ViRHJpdmVyTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0ge307XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5uZXR3b3JrUmVxdWVzdHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycyA9IHt9O1xyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dCA9ICdOQVRJVkVfQVBQJztcclxuICAgICAgICB0aGlzLl9sb2FkSGVscGVyRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgLy8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IChzb21lIG1vZHVsZSBjb21tYW5kcyBtaWdodCByZWZlciB0byB0aGlzLk94RXJyb3IgYW5kIHRoaXMuZXJySGVscGVyKVxyXG4gICAgICAgIHRoaXMuT3hFcnJvciA9IE94RXJyb3I7XHJcbiAgICAgICAgdGhpcy5lcnJIZWxwZXIgPSBlcnJIZWxwZXI7XHJcbiAgICAgICAgLy8gaG9sZHMgZWxlbWVudCBvcGVyYXRpb24gdGltZW91dCB2YWx1ZVxyXG4gICAgICAgIHRoaXMud2FpdEZvclRpbWVvdXQgPSBERUZBVUxUX1dBSVRfVElNRU9VVDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0RHJpdmVyXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIFdESU8gZHJpdmVyLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBXRElPIGRyaXZlci5cclxuICAgICAqL1xyXG4gICAgZ2V0RHJpdmVyKCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXREcml2ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXRDYXBhYmlsaXRpZXNcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgY3VycmVudGx5IGRlZmluZWQgY2FwYWJpbGl0aWVzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldENhcGFiaWxpdGllcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXBzIHx8IHN1cGVyLmdldENhcGFiaWxpdGllcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGluaXRcclxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IEFwcGl1bSBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBjYXBzIC0gRGVzaXJlZCBjYXBhYmlsaXRpZXMuIElmIG5vdCBzcGVjaWZpZWQgY2FwYWJpbGl0aWVzIHdpbGwgYmUgdGFrZW4gZnJvbSBzdWl0ZSBkZWZpbml0aW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBhcHBpdW1VcmwgLSBSZW1vdGUgQXBwaXVtIHNlcnZlciBVUkwgKGRlZmF1bHQ6IGh0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWIpLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KGNhcHMsIGFwcGl1bVVybCkge1xyXG4gICAgICAgIC8vIGlmIHJlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlaW5pdGlsaXplIHRoZSBtb2R1bGVcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVvcGVuU2Vzc2lvbiAhPT0gZmFsc2UpIHsgLy8gdHJ1ZSBvciBmYWxzZSBpZiBleHBsaXNpdGx5IHNldC4gdHJ1ZSBvbiBudWxsIG9yIHVuZGVmaW5lZC5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdyZW9wZW5TZXNzaW9uIGlzIHRydWUgLSByZWxvYWRpbmcgdGhlIHNlc3Npb24uLi4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnJlbG9hZFNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ21vYi5pbml0IHdhcyBjYWxsZWQgZm9yIGFscmVhZHkgaW5pdGlhbGl6ZWQgbW9kdWxlLiByZW9wZW5TZXNzaW9uIGlzIGZhbHNlIHNvIHRoZSBjYWxsIGlzIGlnbm9yZWQuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIHJlZmFjdG9yZWRcclxuICAgICAgICBpZiAodGhpcy5jdHguY2FwcyAmJiB0aGlzLmN0eC5jYXBzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLnBsYXRmb3JtTmFtZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLnBsYXRmb3JtVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLmRldmljZU5hbWU7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy5icm93c2VyTmFtZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLmF1dG9tYXRpb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMudWRpZDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2Fwcy5hcHApIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXBzLmVuYWJsZUFwcGl1bUJlaGF2aW9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2Fwcy51c2VBcHBpdW1Gb3JXZWIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcHMuZW5hYmxlQXBwaXVtQmVoYXZpb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHguY2Fwcy51c2VBcHBpdW1Gb3JXZWIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHguY2Fwcy5lbmFibGVBcHBpdW1CZWhhdmlvciA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYXBwaXVtVXJsKSB7XHJcbiAgICAgICAgICAgIGFwcGl1bVVybCA9IHRoaXMub3B0aW9ucy5hcHBpdW1VcmwgfHwgREVGQVVMVF9BUFBJVU1fVVJMO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbWVyZ2UgY2FwYWJpbGl0aWVzIGZyb20gY29udGV4dCBhbmQgZnJvbSBpbml0IGZ1bmN0aW9uIGFyZ3VtZW50LCBnaXZlIHByZWZlcmVuY2UgdG8gY29udGV4dC1wYXNzZWQgY2FwYWJpbGl0aWVzXHJcbiAgICAgICAgdGhpcy5jYXBzID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmN0eC5jYXBzIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jYXBzLCAuLi5jYXBzIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gY2xlYXIgdGhlIGV4aXN0aW5nIGRldmljZSBsb2dzLCBpZiBjb2xsZWN0RGV2aWNlTG9ncyBvcHRpb24gaXMgdHJ1ZSAod2Ugd2FudCB0byBpbmNsdWRlIGxvZ3Mgb25seSByZWxldmFudCBmb3IgdGhpcyBzZXNzaW9uKVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdERldmljZUxvZ3MpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzWydhcHBpdW06Y2xlYXJEZXZpY2VMb2dzT25TdGFydCddID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGlmIGJvdGggYnJvd3Nlck5hbWUgYW5kIGFwcFBhY2thZ2UvYXBwL2J1bmRsZUlkIHdlcmUgc3BlY2lmaWVkIC0gYXNzdW1lIHdlIHdhbnQgdG8gcnVuIHRoZSBhcHBsaWNhdGlvbiBhbmQgcmVtb3ZlIGJyb3dzZXJOYW1lXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZSAmJiAodGhpcy5jYXBzLmFwcFBhY2thZ2UgfHwgdGhpcy5jYXBzLmFwcCB8fCB0aGlzLmNhcHMuYnVuZGxlSWQpKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhcHMuYnJvd3Nlck5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmIG5vIGFwcFBhY2thZ2UvYXBwL2J1bmRsZUlkIGNhcGFiaWxpdHkgbm9yIGJyb3dzZXJOYW1lIGFyZSBkZWZpbmVkLCBhc3N1bWUgd2Ugd2FudCB0byBydW4gdGhlIHRlc3QgYWdhaW5zdCBkZWZhdWx0IGJyb3dzZXJcclxuICAgICAgICBlbHNlIGlmICghdGhpcy5jYXBzLmJyb3dzZXJOYW1lICYmICF0aGlzLmNhcHMuYXBwUGFja2FnZSAmJiAhdGhpcy5jYXBzLmFwcCAmJiAhdGhpcy5jYXBzLmJ1bmRsZUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IERFRkFVTFRfQlJPV1NFUl9OQU1FO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB3ZWJkcml2ZXIgZXhwZWN0cyBsb3dlciBjYXNlIG5hbWVzXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZSAmJiB0eXBlb2YgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB0aGlzLmNhcHMuYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYWRqdXN0IGNhcGFiaWxpdGllcyB0byBlbmFibGUgY29sbGVjdGluZyBicm93c2VyIGFuZCBwZXJmb3JtYW5jZSBzdGF0cyBpbiBDaHJvbWUgXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHNbJ2dvb2c6bG9nZ2luZ1ByZWZzJ10gPSB7ICAgICAvLyBmb3IgQ2hyb21lRHJpdmVyID49IDc1XHJcbiAgICAgICAgICAgICAgICBicm93c2VyOiAnQUxMJyxcclxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiAnQUxMJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcG9wdWxhdGUgV0RJTyBvcHRpb25zXHJcbiAgICAgICAgY29uc3QgdXJsID0gVVJMLnBhcnNlKGFwcGl1bVVybCk7XHJcbiAgICAgICAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJyk7XHJcbiAgICAgICAgY29uc3QgaG9zdCA9IHVybC5ob3N0bmFtZTtcclxuICAgICAgICBjb25zdCBwb3J0ID0gcGFyc2VJbnQodXJsLnBvcnQgfHwgKHByb3RvY29sID09PSAnaHR0cHMnID8gNDQzIDogODApKTtcclxuICAgICAgICBjb25zdCBwYXRoID0gdXJsLnBhdGhuYW1lO1xyXG5cclxuICAgICAgICAvLyBhdXRoIGlzIG5lZWRlZCBtb3N0bHkgZm9yIGNsb3VkIHByb3ZpZGVycyBzdWNoIGFzIExhbWJkYVRlc3RcclxuICAgICAgICBpZiAodXJsLmF1dGgpIHtcclxuICAgICAgICAgICAgY29uc3QgYXV0aCA9IHVybC5hdXRoLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy53ZGlvT3B0cyA9IHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IGF1dGhbMF0sXHJcbiAgICAgICAgICAgICAgICBrZXk6IGF1dGhbMV1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3ZGlvT3B0cyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLndkaW9PcHRzIHx8IHt9LFxyXG4gICAgICAgICAgICBwcm90b2NvbDogcHJvdG9jb2wsXHJcbiAgICAgICAgICAgIGhvc3RuYW1lOiBob3N0LFxyXG4gICAgICAgICAgICBwb3J0OiBwb3J0LFxyXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IHRoaXMuY2FwcyxcclxuICAgICAgICAgICAgbG9nTGV2ZWw6ICdzaWxlbnQnLFxyXG4gICAgICAgICAgICBydW5uZXI6ICdyZXBsJyxcclxuICAgICAgICAgICAgd2FpdGZvclRpbWVvdXQ6IDUwMDAsIC8vIGluY3JlYXNlIHRoZSBkZWZhdWx0IDMwMDBcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogMzEwKjEwMDAsXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiAxXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbGV0IHByb3ZpZGVyID0gbW9kVXRpbHMuZGV0ZXJtaW5lUHJvdmlkZXIod2Rpb09wdHMpO1xyXG4gICAgICAgIGxldCBuYW1lID0gJ25hbWUnO1xyXG5cclxuICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLmNhcGFiaWxpdGllcy5tYXhJbnN0YW5jZXMgPSAxO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5wYXRoID0gJy9uZXhwZXJpZW5jZS9wZXJmZWN0b21vYmlsZS93ZC9odWInO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5wb3J0ID0gODA7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLnByb3RvY29sID0gJ2h0dHAnO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5vcGVuRGV2aWNlVGltZW91dCA9IDE1O1xyXG5cclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllcy5tYW51ZmFjdHVyZXI7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMubW9kZWw7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWU7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMuaG9zdDtcclxuXHJcbiAgICAgICAgICAgIG5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXVsnbmFtZSddO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddICYmIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXVsnbmFtZSddKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMud2Rpb09wdHMgPSB3ZGlvT3B0cztcclxuXHJcbiAgICAgICAgLy8gaW5pdCB3ZWJkcml2ZXJcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IGF3YWl0IHdkaW8ucmVtb3RlKHdkaW9PcHRzKTtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIucHJvdmlkZXIgPSBwcm92aWRlcjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGVyZmVjdG9FeGVjdXRpb25Db250ZXh0ID0gYXdhaXQgbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgd2ViZHJpdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVTY3JpcHQ6IGFzeW5jIChjb21tYW5kLCBwYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKGNvbW1hbmQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0aW5nQ2xpZW50ID0gbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50KHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RhcnQobmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVyckhlbHBlci5nZXRBcHBpdW1Jbml0RXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFwcENvbnRleHQgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRDb250ZXh0KCk7XHJcblxyXG4gICAgICAgIC8vIGlmIHdlIGFyZSBydW5uaW5nIG9uIEFuZHJvaWQgNysgZW11bGF0b3IsIGFuZCB0aHVzL29yIHVzaW5nIGEgV2ViVmlldyBCcm93c2VyIFRlc3RlciAtXHJcbiAgICAgICAgLy8gcGVyZm9ybSBhbiBhY3R1YWwgYXBwQ29udGV4dCBzd2l0Y2ggdG8gV0VCXHJcbiAgICAgICAgLy8gc28gQXBwaXVtIHdpbGwgZGVsZWdhdGUgY29tbWFuZHMgdG8gQ2hyb21lIERyaXZlciBpbnN0ZWFkIG9mIEFwcGl1bSBEcml2ZXJcclxuICAgICAgICBpZiAodGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAgJ2Nocm9taXVtLXdlYnZpZXcnKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0V2ViVmlld0NvbnRleHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuQlJPV1NFUlNUQUNLKSB7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAvLyBmYWlscyBvbiBicm93c2Vyc3RhY2tcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHsgJ2ltcGxpY2l0JzogdGhpcy53YWl0Rm9yVGltZW91dCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VwZXIuaW5pdCh0aGlzLmRyaXZlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZGlzcG9zZVxyXG4gICAgICogQHN1bW1hcnkgRW5kcyB0aGUgY3VycmVudCBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBzdGF0dXMgLSBUZXN0IHN0YXR1cywgZWl0aGVyIGBwYXNzZWRgIG9yIGBmYWlsZWRgLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cykge1xyXG4gICAgICAgIGlmICghc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHN0YXR1cyA9ICdwYXNzZWQnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucnMuc3RlcHMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnJzLnN0ZXBzKSAmJiB0aGlzLnJzLnN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZEZpbmRlZCA9IHRoaXMucnMuc3RlcHMuZmluZCgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWRGaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICBzdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwb3J0aW5nQ2xpZW50LnRlc3RTdG9wKHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZlY3RvUmVwb3J0aW5nLkNvbnN0YW50cy5yZXN1bHRzLnBhc3NlZCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZmVjdG9SZXBvcnRpbmcuQ29uc3RhbnRzLnJlc3VsdHMuZmFpbGVkXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuQlJPV1NFUlNUQUNLKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2soc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFbJ0NBTkNFTEVEJywgJ0ZBSUxFRCddLmluY2x1ZGVzKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGVTZXNzaW9uIHdpbGwgdGFrZSA1IG1pbiB0byBjYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignRXJyb3IgZGlzcG9zaW5nIGRyaXZlcjogJyArIGUpOyAgICAvLyBpZ25vcmUgYW55IGVycm9ycyBhdCBkaXNwb3NhbCBzdGFnZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgT3BlbnMgbmV3IHRyYW5zYWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHBlcnNpc3QgdGlsbCBhIG5ldyBvbmUgaXMgb3BlbmVkLiBUcmFuc2FjdGlvbiBuYW1lcyBtdXN0IGJlXHJcbiAgICAgKiAgICAgICAgICAgICAgdW5pcXVlLlxyXG4gICAgICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSB0cmFuc2FjdGlvbiBuYW1lLlxyXG4gICAgICogQGZvciBhbmRyb2lkLCBpb3MsIGh5YnJpZCwgd2ViXHJcbiAgICAgKi9cclxuICAgIHRyYW5zYWN0aW9uKG5hbWUpIHtcclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBQcml2YXRlXHJcbiAgICAgKi9cclxuXHJcbiAgICBfaXNBY3Rpb24obmFtZSkge1xyXG4gICAgICAgIHJldHVybiBBQ1RJT05fQ09NTUFORFMuaW5jbHVkZXMobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Rha2VTY3JlZW5zaG90U2lsZW50KG5hbWUpIHtcclxuICAgICAgICBpZiAoIU5PX1NDUkVFTlNIT1RfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3RcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FsbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0VW50aWxSZXRWYWwgPSB0aGlzLmRyaXZlci53YWl0VW50aWwoYXN5bmMoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHVzaEltYWdlVG9JbWFnZXMgPSBhc3luYyhmZXRjaFRpdGxlID0gdHJ1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZldGNoVGl0bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFRpdGxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRUb0ltYWdlID0gcmVxdWlyZSgnLi4vbGliL3RleHQtdG8taW1hZ2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlSW1hZ2UgPSBhd2FpdCB0ZXh0VG9JbWFnZS5nZW5lcmF0ZSh0aXRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZUltYWdlICYmIHR5cGVvZiB0aXRsZUltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVJbWFnZSA9IHRpdGxlSW1hZ2UucmVwbGFjZSgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKHRpdGxlSW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKGltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzV2ViVmlld0NvbnRleHQgPSBhd2FpdCB0aGlzLmlzV2ViVmlld0NvbnRleHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzV2ViVmlld0NvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgYWxsIChzY3JlZW5zaG90IGFuZCB0aXRsZSkgaW1hZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0V2luZG93SGFuZGxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGhhbmRsZXMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZSBvZiBoYW5kbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnN3aXRjaFRvV2luZG93KGhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHB1c2hJbWFnZVRvSW1hZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHVzaEltYWdlVG9JbWFnZXMoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZXJnZSBhbGwgaW1hZ2VzIGludG8gb25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZEltYWdlID0gYXdhaXQgbWVyZ2VJbWFnZXMoaW1hZ2VzLCB7IGRpcmVjdGlvbjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lcmdlZEltYWdlICYmIHR5cGVvZiBtZXJnZWRJbWFnZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IG1lcmdlZEltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRpbWVvdXQ6IDMwKjEwMDAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXRVbnRpbFJldFZhbCAmJiB3YWl0VW50aWxSZXRWYWwudGhlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRVbnRpbFJldFZhbC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCcsIGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCBpbm5lciBlcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIF9nZXRMb2dzKG5hbWUpIHtcclxuICAgIC8vICAgICBpZiAoIU5PX0xPR1NfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9ncygpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBfYWRqdXN0QXBwaXVtTG9nKGxvZywgc3JjKSB7XHJcbiAgICAgICAgaWYgKCFsb2cgfHwgdHlwZW9mIGxvZyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGNvbnZlcnQgbG9nLnRpbWVzdGFtcCBmcm9tIHRoZSBkZXZpY2UgdGltZSB6b25lIHRvIHRoZSBsb2NhbCBvbmUgKHNvIHdlIGNhbiBsYXRlciBjb3JyZWxhdGUgYmV0d2VlbiBzdGVwcyBhbmQgbG9ncykgICAgICAgIFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIG1zZzogbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwsXHJcbiAgICAgICAgICAgIHNyYzogc3JjXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uU3RhcnQoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgdHJhbnNhY3Rpb24gbmFtZSBzYXZlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gaWYgYW55XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5BUFBJVU1fU0VTU0lPTl9USU1FT1VUKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWdub3JlIHRoZSByZXN0IGlmIG1vYiBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCB0aGUgZGV2aWNlIGxvZ3MgZm9yIHRoaXMgc2Vzc2lvblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdERldmljZUxvZ3MpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCB0aGlzLmdldERldmljZUxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RBcHBpdW1Mb2cobG9nLCAnZGV2aWNlJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBkZXZpY2UgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY29sbGVjdCBhbGwgdGhlIGJyb3dzZXIgbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QnJvd3NlckxvZ3MpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCB0aGlzLmdldEJyb3dzZXJMb2dzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9ncyAmJiBBcnJheS5pc0FycmF5KGxvZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbG9nIG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZywgJ2Jyb3dzZXInKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGJyb3dzZXIgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY29sbGVjdCBhbGwgQXBwaXVtIGxvZ3MgZm9yIHRoaXMgc2Vzc2lvblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdEFwcGl1bUxvZ3MpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3MgPSB0aGlzLmdldEFwcGl1bUxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsb2dFbnRyeSBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEFwcGl1bUxvZyhsb2dFbnRyeSwgJ2FwcGl1bScpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgQXBwaXVtIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2dldFdkaW9Mb2NhdG9yKGxvY2F0b3IpIHtcclxuICAgICAgICBpZiAoIWxvY2F0b3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGFyZ3VtZW50IC0gbG9jYXRvciBub3Qgc3BlY2lmaWVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgbG9jYXRvciAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJy8nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjsgLy8gbGVhdmUgeHBhdGggbG9jYXRvciBhcyBpc1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IHRoaXMuY2FwcyAmJiB0aGlzLmNhcHMucGxhdGZvcm1OYW1lID8gdGhpcy5jYXBzLnBsYXRmb3JtTmFtZS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXBwQ29udGV4dCA9PT0gJ05BVElWRV9BUFAnICYmIHBsYXRmb3JtID09PSAnYW5kcm9pZCcpIHtcclxuICAgICAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignaWQ9JykgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIHByZXBlbmQgcGFja2FnZSBuYW1lIGlmIGl0J3Mgbm90IHNwZWNpZmllZFxyXG4gICAgICAgICAgICAgICAgLy8gTk9URTogZ2V0Q3VycmVudFBhY2thZ2UoKSBzZWVtcyB0byBjcmFzaCBwb3NzaWJseSBkdWUgdG8gYSB3ZGlvIGJ1Zy4gXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgICBzbyB3ZSBnZXQgcGFja2FnZSBuYW1lIGZyb20gY2FwcyBpbnN0ZWFkLlxyXG4gICAgICAgICAgICAgICAgbG9jYXRvciA9IGxvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCc6aWQvJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRvciA9IHRoaXMuY2Fwcy5hcHBQYWNrYWdlICsgJzppZC8nICsgbG9jYXRvcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnJlc291cmNlSWQoXCInICsgbG9jYXRvciArICdcIiknO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignY2xhc3M9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS5jbGFzc05hbWUoXCInICsgbG9jYXRvci5zdWJzdHIoJ2NsYXNzPScubGVuZ3RoKSArICdcIiknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ3RleHQ9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS50ZXh0KFwiJyArIGxvY2F0b3Iuc3Vic3RyKCd0ZXh0PScubGVuZ3RoKSArICdcIiknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ3RleHQtY29udGFpbnM9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS50ZXh0Q29udGFpbnMoXCInICsgbG9jYXRvci5zdWJzdHIoJ3RleHQtY29udGFpbnM9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignZGVzYz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLmRlc2NyaXB0aW9uKFwiJyArIGxvY2F0b3Iuc3Vic3RyKCdkZXNjPScubGVuZ3RoKSArICdcIiknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2Rlc2MtY29udGFpbnM9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS5kZXNjcmlwdGlvbkNvbnRhaW5zKFwiJyArIGxvY2F0b3Iuc3Vic3RyKCdkZXNjLWNvbnRhaW5zPScubGVuZ3RoKSArICdcIiknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ3Njcm9sbGFibGUnKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnNjcm9sbGFibGUodHJ1ZSknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ34nKSA9PT0gMCkgICAgLy8gYWNjZXNzaWJpbGl0eSBpZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcENvbnRleHQgPT09ICdOQVRJVkVfQVBQJyAmJiBwbGF0Zm9ybSA9PT0gJ2lvcycpIHtcclxuICAgICAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignficpID09PSAwKSAvLyBhY2Nlc3NpYmlsaXR5IGlkXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwQ29udGV4dCAhPT0gJ05BVElWRV9BUFAnKSB7ICAgICAgICAgICAgLy8gSHlicmlkIG9yIFdlYiBhcHBsaWNhdGlvblxyXG4gICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnIycgKyBsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpOyAgICAgIC8vIGNvbnZlcnQgJ2lkPScgdG8gJyMnXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbmFtZT0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnW25hbWU9JyArIGxvY2F0b3Iuc3Vic3RyKCduYW1lPScubGVuZ3RoKSArICddJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICc9JyArIGxvY2F0b3Iuc3Vic3RyKCdsaW5rPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rLWNvbnRhaW5zPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcqPScgKyBsb2NhdG9yLnN1YnN0cignbGluaz0nLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignY3NzPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3Iuc3Vic3RyKCdjc3M9Jy5sZW5ndGgpOyAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBjc3MsIGp1c3QgcmVtb3ZlIGNzcz0gcHJlZml4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEhlbHBlckZ1bmN0aW9ucygpIHtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSB0aGlzLl9nZXRXZGlvTG9jYXRvcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMubWF0Y2hQYXR0ZXJuID0gbW9kVXRpbHMubWF0Y2hQYXR0ZXJuO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0RWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5yZXN0b3JlVGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXI7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50VGltZW91dDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0Q29udGV4dCA9IG1vZFV0aWxzLmFzc2VydENvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNvbnRleHRMaXN0ID0gbW9kVXRpbHMuY29udGV4dExpc3Q7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldExvZ1R5cGVzID0gbW9kVXRpbHMuZ2V0TG9nVHlwZXM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlU2Vzc2lvbigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZGVsZXRlU2Vzc2lvbiBlcnJvcicsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc2VuZFJlc3VsdFN0YXR1c1RvQnJvd3NlcnN0YWNrKHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPT09ICdQQVNTRUQnID8gJ3Bhc3NlZCcgOiAnZmFpbGVkJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbGV0IG9wdGlvbnM7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuYnJvd3NlcnN0YWNrLmNvbS9hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogcmVxdWVzdEJvZHksXHJcbiAgICAgICAgICAgICAgICAgICAgJ2F1dGgnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyJzogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAncGFzcyc6IHRoaXMud2Rpb09wdHMua2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2VuZEltbWVkaWF0ZWx5JzogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBgaHR0cHM6Ly9hcGktY2xvdWQuYnJvd3NlcnN0YWNrLmNvbS9hcHAtYXV0b21hdGUvc2Vzc2lvbnMvJHt0aGlzLmRyaXZlci5zZXNzaW9uSWR9Lmpzb25gLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgICAgICAgICAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICdhdXRoJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAndXNlcic6IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydicm93c2Vyc3RhY2sudXNlciddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAncGFzcyc6IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydicm93c2Vyc3RhY2sua2V5J10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZW5kSW1tZWRpYXRlbHknOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gQnJvd3NlcnN0YWNrOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
704
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1tb2IuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0JST1dTRVJfTkFNRSIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIk1vYmlsZU1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsImFwcENvbnRleHQiLCJfbG9hZEhlbHBlckZ1bmN0aW9ucyIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJ3YWl0Rm9yVGltZW91dCIsIm5hbWUiLCJnZXREcml2ZXIiLCJnZXRDYXBhYmlsaXRpZXMiLCJjYXBzIiwiaW5pdCIsImFwcGl1bVVybCIsImlzSW5pdGlhbGl6ZWQiLCJyZW9wZW5TZXNzaW9uIiwiZGVidWciLCJkcml2ZXIiLCJyZWxvYWRTZXNzaW9uIiwiX2lzSW5pdGlhbGl6ZWQiLCJjdHgiLCJwbGF0Zm9ybU5hbWUiLCJwbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VOYW1lIiwiYnJvd3Nlck5hbWUiLCJhdXRvbWF0aW9uTmFtZSIsInVkaWQiLCJhcHAiLCJlbmFibGVBcHBpdW1CZWhhdmlvciIsInVzZUFwcGl1bUZvcldlYiIsImNvbGxlY3REZXZpY2VMb2dzIiwiYXBwUGFja2FnZSIsImJ1bmRsZUlkIiwidG9Mb3dlckNhc2UiLCJyZWNvcmRIQVIiLCJicm93c2VyIiwicGVyZm9ybWFuY2UiLCJ1cmwiLCJVUkwiLCJwYXJzZSIsInByb3RvY29sIiwicmVwbGFjZSIsImhvc3QiLCJob3N0bmFtZSIsInBvcnQiLCJwYXJzZUludCIsInBhdGgiLCJwYXRobmFtZSIsImF1dGgiLCJzcGxpdCIsIndkaW9PcHRzIiwidXNlciIsImtleSIsImNhcGFiaWxpdGllcyIsImxvZ0xldmVsIiwicnVubmVyIiwid2FpdGZvclRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5Q291bnQiLCJwcm92aWRlciIsIm1vZFV0aWxzIiwiZGV0ZXJtaW5lUHJvdmlkZXIiLCJQRVJGRUNUTyIsIm1heEluc3RhbmNlcyIsIm9wZW5EZXZpY2VUaW1lb3V0IiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJ3ZGlvIiwicmVtb3RlIiwic2VsZW5pdW1Ccm93c2VyVGltZW91dCIsInNlbGVuaXVtVGltZW91dCIsInBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCIsInBlcmZlY3RvUmVwb3J0aW5nIiwiUGVyZmVjdG8iLCJQZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJ3ZWJkcml2ZXIiLCJleGVjdXRlU2NyaXB0IiwiY29tbWFuZCIsInBhcmFtcyIsImV4ZWN1dGUiLCJyZXBvcnRpbmdDbGllbnQiLCJQZXJmZWN0b1JlcG9ydGluZ0NsaWVudCIsInRlc3RTdGFydCIsImUiLCJnZXRBcHBpdW1Jbml0RXJyb3IiLCJnZXRDb250ZXh0Iiwic2V0V2ViVmlld0NvbnRleHQiLCJCUk9XU0VSU1RBQ0siLCJzZXRUaW1lb3V0IiwiZGlzcG9zZSIsInN0YXR1cyIsInN0ZXBzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiZmFpbGVkRmluZGVkIiwiZmluZCIsIml0ZW0iLCJ0b1VwcGVyQ2FzZSIsInRlc3RTdG9wIiwiQ29uc3RhbnRzIiwicmVzdWx0cyIsInBhc3NlZCIsImZhaWxlZCIsIl9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2siLCJkZWxldGVTZXNzaW9uIiwiaW5jbHVkZXMiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0Iiwid2FybiIsInRyYW5zYWN0aW9uIiwidG9TdHJpbmciLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsImVycm9yIiwidGFrZVNjcmVlbnNob3QiLCJyZXR2YWwiLCJjYWxsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ3YWl0VW50aWxSZXRWYWwiLCJ3YWl0VW50aWwiLCJpbWFnZXMiLCJwdXNoSW1hZ2VUb0ltYWdlcyIsImZldGNoVGl0bGUiLCJpbWFnZSIsInRpdGxlIiwiZ2V0VGl0bGUiLCJ0ZXh0VG9JbWFnZSIsInJlcXVpcmUiLCJ0aXRsZUltYWdlIiwiZ2VuZXJhdGUiLCJwdXNoIiwiaXNXZWJWaWV3Q29udGV4dCIsImhhbmRsZXMiLCJnZXRXaW5kb3dIYW5kbGVzIiwiaGFuZGxlIiwic3dpdGNoVG9XaW5kb3ciLCJtZXJnZWRJbWFnZSIsImRpcmVjdGlvbiIsInRpbWVvdXQiLCJ0aGVuIiwiY2F0Y2giLCJlcnIiLCJfYWRqdXN0QXBwaXVtTG9nIiwibG9nIiwic3JjIiwidGltZSIsInRpbWVzdGFtcCIsIm1zZyIsIm1lc3NhZ2UiLCJsZXZlbCIsIl9pdGVyYXRpb25TdGFydCIsIl9pdGVyYXRpb25FbmQiLCJ0eXBlIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJBUFBJVU1fU0VTU0lPTl9USU1FT1VUIiwibG9ncyIsImdldERldmljZUxvZ3MiLCJjb2xsZWN0QnJvd3NlckxvZ3MiLCJnZXRCcm93c2VyTG9ncyIsImNvbGxlY3RBcHBpdW1Mb2dzIiwiZ2V0QXBwaXVtTG9ncyIsImxvZ0VudHJ5IiwiX2dldFdkaW9Mb2NhdG9yIiwibG9jYXRvciIsIlNDUklQVF9FUlJPUiIsImluZGV4T2YiLCJwbGF0Zm9ybSIsInN1YnN0ciIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwiZ2V0RWxlbWVudCIsImdldEVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50IiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNldFRpbWVvdXRJbXBsaWNpdCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImFzc2VydENvbnRleHQiLCJjb250ZXh0TGlzdCIsImdldExvZ1R5cGVzIiwicmVxdWVzdEJvZHkiLCJzZXNzaW9uSWQiLCJtZXRob2QiLCJqc29uIiwicmVqZWN0VW5hdXRob3JpemVkIiwiYm9keSIsInJlcyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFHQSxNQUFNQSxXQUFXLEdBQUcsS0FBcEI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyw4QkFBM0I7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxTQUE3QjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLENBQUMsTUFBRCxFQUFTLGFBQVQsQ0FBL0I7QUFDQSxNQUFNQyxlQUFlLEdBQUcsQ0FBQyxNQUFELEVBQVEsS0FBUixFQUFjLE9BQWQsRUFBc0IsT0FBdEIsRUFBOEIsUUFBOUIsRUFBdUMsVUFBdkMsQ0FBeEI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxLQUFLLElBQWxDLEMsQ0FBbUQ7O0FBRXBDLE1BQU1D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QWtCLEVBQUUsS0FKZDtBQUtOQyxVQUFBQSxJQUFJLEVBQUVMLFdBTEE7QUFNTixrQkFBUTtBQUNKLG9CQUFRLEtBQUs3SSxRQUFMLENBQWNHLFlBQWQsQ0FBMkIsbUJBQTNCLENBREo7QUFFSixvQkFBUSxLQUFLSCxRQUFMLENBQWNHLFlBQWQsQ0FBMkIsa0JBQTNCLENBRko7QUFHSiwrQkFBbUI7QUFIZjtBQU5GLFNBQVY7QUFZSDs7QUFFRCxVQUFJO0FBQ0EsOEJBQVE1RCxPQUFSLEVBQWlCLENBQUN3SixHQUFELEVBQU1vRCxHQUFOLEVBQVdELElBQVgsS0FBb0I7QUFDakM1RSxVQUFBQSxPQUFPO0FBQ1YsU0FGRDtBQUdILE9BSkQsQ0FJRSxPQUFPckMsQ0FBUCxFQUFVO0FBQ1IsYUFBS3ZGLE1BQUwsQ0FBWXVILEtBQVosQ0FBa0IsbURBQW1EaEMsQ0FBQyxDQUFDMkIsUUFBRixFQUFyRTtBQUNBVSxRQUFBQSxPQUFPO0FBQ1Y7QUFDSixLQTNDTSxDQUFQO0FBNENIOztBQXpsQnFEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4ndXNlIHN0cmljdCc7XHJcbi8qKlxyXG4gKiBAbmFtZSBtb2JcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIG1vYmlsZSBhdXRvbWF0aW9uLlxyXG4gKiBAc2FtcGxlICoqTG9jYXRvcnM6KiogIFxyXG4gKiBcclxuICogTmF0aXZlIGFwcGxpY2F0aW9uIGxvY2F0b3JzIGZvciFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvYW5kcm9pZC5wbmcpICBcclxuICogKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogKiBgfkFDQ0VTU0lCSUxJVFlfSURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBBY2Nlc3NpYmlsaXR5IElkLlxyXG4gKiAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGlkLlxyXG4gKiAqIGBjbGFzcz1DTEFTU2AgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGNsYXNzLlxyXG4gKiAqIGB0ZXh0PVRFWFRgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyB2aXNpYmxlIHRleHQuXHJcbiAqICogYHRleHQtY29udGFpbnM9VEVYVGAgLSBMb2NhdGVzIGVsZW1lbnQgd2hvc2UgdmlzaWJsZSB0ZXh0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc3RyaW5nLlxyXG4gKiAqIGBkZXNjPURFU0NSSVBUSU9OYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgZGVzY3JpcHRpb24uXHJcbiAqICogYGRlc2MtY29udGFpbnM9REVTQ1JJUFRJT05gIC0gTG9jYXRlcyBlbGVtZW50IHdob3NlIGRlc2NyaXB0aW9uIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc3RyaW5nLlxyXG4gKiAqIGBzY3JvbGxhYmxlYCAtIExvY2F0ZXMgZWxlbWVudHMgdGhhdCBhcmUgc2Nyb2xsYWJsZS4gIFxyXG4gKiAgXHJcbiAqIE5hdGl2ZSBhcHBsaWNhdGlvbiBsb2NhdG9ycyBmb3IhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2FwcGxlLnBuZykgIFxyXG4gKiAgXHJcbiAqICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICogYGlkPUlEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgSUQuXHJcbiAqICogYH5BQ0NFU1NJQklMSVRZX0lEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgQWNjZXNzaWJpbGl0eSBJZC4gIFxyXG4gKiAqIGAtaW9zIHByZWRpY2F0ZSBzdHJpbmc6UFJFRElDQVRFX1NUUklOR2AgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYSBbcHJlZGljYXRlIHF1ZXJ5XShodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2thcmNoaXZlL1dlYkRyaXZlckFnZW50L3dpa2kvUHJlZGljYXRlLVF1ZXJpZXMtQ29uc3RydWN0aW9uLVJ1bGVzKS4gIFxyXG4gKiAqIGAtaW9zIGNsYXNzIGNoYWluOkNMQVNTX0NIQUlOYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIFtjbGFzcyBjaGFpbiBleHByZXNzaW9uXShodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2thcmNoaXZlL1dlYkRyaXZlckFnZW50L3dpa2kvQ2xhc3MtQ2hhaW4tUXVlcmllcy1Db25zdHJ1Y3Rpb24tUnVsZXMpLiAgXHJcbiAqICBcclxuICogSHlicmlkIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9oeWJyaWQucG5nKSAgYW5kIFdlYiFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvd2ViLnBuZykgIGFwcGxpY2F0aW9uIGxvY2F0b3JzIGZvciFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvYW5kcm9pZC5wbmcpICAhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2FwcGxlLnBuZykgIFxyXG4gKiAgXHJcbiAqICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICogYGlkPUlEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgaWQuXHJcbiAqICogYG5hbWU9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIG5hbWUgYXR0cmlidXRlLlxyXG4gKiAqIGB0YWc9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIHRhZyBuYW1lLlxyXG4gKiAqIGBsaW5rPVRFWFRgIC0gTG9jYXRlcyBhbmNob3IgZWxlbWVudCB3aG9zZSB0ZXh0IG1hdGNoZXMgdGhlIGdpdmVuIHN0cmluZy5cclxuICogKiBgbGluay1jb250YWlucz1URVhUYCAtIExvY2F0ZXMgYW5jaG9yIGVsZW1lbnQgd2hvc2UgdGV4dCBjb250YWlucyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAqIGBjc3M9Q1NTX1NFTEVDVE9SYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIENTUyBzZWxlY3Rvci5cclxuICogXHJcbiAqICoqUGF0dGVybiBhcmd1bWVudHM6KipcclxuICogXHJcbiAqIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAqIGByZWdleDpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICogKiBgUEFUVEVSTmAgLSBWZXJiYXRpbSBtYXRjaGluZy5cclxuICogXHJcbiAqL1xyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgcGVyZmVjdG9SZXBvcnRpbmcgZnJvbSAncGVyZmVjdG8tcmVwb3J0aW5nJztcclxuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XHJcbmltcG9ydCBtZXJnZUltYWdlcyBmcm9tICcuLi9saWIvaW1nLW1lcmdlJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAnbW9iJztcclxuY29uc3QgREVGQVVMVF9BUFBJVU1fVVJMID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWInO1xyXG5jb25zdCBERUZBVUxUX0JST1dTRVJfTkFNRSA9ICdkZWZhdWx0JztcclxuY29uc3QgTk9fU0NSRUVOU0hPVF9DT01NQU5EUyA9IFsnaW5pdCcsICdhc3NlcnRBbGVydCddO1xyXG5jb25zdCBBQ1RJT05fQ09NTUFORFMgPSBbJ29wZW4nLCd0YXAnLCdjbGljaycsJ3N3aXBlJywnc3VibWl0Jywnc2V0VmFsdWUnXTtcclxuY29uc3QgREVGQVVMVF9XQUlUX1RJTUVPVVQgPSA2MCAqIDEwMDA7ICAgICAgICAgICAgLy8gZGVmYXVsdCA2MHMgd2FpdCB0aW1lb3V0XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2JpbGVNb2R1bGUgZXh0ZW5kcyBXZWJEcml2ZXJNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5ldHdvcmtSZXF1ZXN0cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzID0ge307XHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0ID0gJ05BVElWRV9BUFAnO1xyXG4gICAgICAgIHRoaXMuX2xvYWRIZWxwZXJGdW5jdGlvbnMoKTtcclxuICAgICAgICAvLyBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKHNvbWUgbW9kdWxlIGNvbW1hbmRzIG1pZ2h0IHJlZmVyIHRvIHRoaXMuT3hFcnJvciBhbmQgdGhpcy5lcnJIZWxwZXIpXHJcbiAgICAgICAgdGhpcy5PeEVycm9yID0gT3hFcnJvcjtcclxuICAgICAgICB0aGlzLmVyckhlbHBlciA9IGVyckhlbHBlcjtcclxuICAgICAgICAvLyBob2xkcyBlbGVtZW50IG9wZXJhdGlvbiB0aW1lb3V0IHZhbHVlXHJcbiAgICAgICAgdGhpcy53YWl0Rm9yVGltZW91dCA9IERFRkFVTFRfV0FJVF9USU1FT1VUO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgV0RJTyBkcml2ZXIuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFdESU8gZHJpdmVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcml2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyaXZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBjdXJyZW50bHkgZGVmaW5lZCBjYXBhYmlsaXRpZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHMgfHwgc3VwZXIuZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgQXBwaXVtIHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNhcHMgLSBEZXNpcmVkIGNhcGFiaWxpdGllcy4gSWYgbm90IHNwZWNpZmllZCBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0YWtlbiBmcm9tIHN1aXRlIGRlZmluaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGFwcGl1bVVybCAtIFJlbW90ZSBBcHBpdW0gc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2FwcywgYXBwaXVtVXJsKSB7XHJcbiAgICAgICAgLy8gaWYgcmVvcGVuU2Vzc2lvbiBpcyB0cnVlIC0gcmVpbml0aWxpemUgdGhlIG1vZHVsZVxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZW9wZW5TZXNzaW9uICE9PSBmYWxzZSkgeyAvLyB0cnVlIG9yIGZhbHNlIGlmIGV4cGxpc2l0bHkgc2V0LiB0cnVlIG9uIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3Jlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlbG9hZGluZyB0aGUgc2Vzc2lvbi4uLicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIucmVsb2FkU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnbW9iLmluaXQgd2FzIGNhbGxlZCBmb3IgYWxyZWFkeSBpbml0aWFsaXplZCBtb2R1bGUuIHJlb3BlblNlc3Npb24gaXMgZmFsc2Ugc28gdGhlIGNhbGwgaXMgaWdub3JlZC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgcmVmYWN0b3JlZFxyXG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzICYmIHRoaXMuY3R4LmNhcHNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICBpZiAoY2Fwcykge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMucGxhdGZvcm1OYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMucGxhdGZvcm1WZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMuZGV2aWNlTmFtZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMuYXV0b21hdGlvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy51ZGlkO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYXBzLmFwcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcHMuZW5hYmxlQXBwaXVtQmVoYXZpb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXBzLnVzZUFwcGl1bUZvcldlYiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2Fwcy5lbmFibGVBcHBpdW1CZWhhdmlvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5jYXBzLnVzZUFwcGl1bUZvcldlYiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5jYXBzLmVuYWJsZUFwcGl1bUJlaGF2aW9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFhcHBpdW1VcmwpIHtcclxuICAgICAgICAgICAgYXBwaXVtVXJsID0gdGhpcy5vcHRpb25zLmFwcGl1bVVybCB8fCBERUZBVUxUX0FQUElVTV9VUkw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcclxuICAgICAgICB0aGlzLmNhcHMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5jdHguY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBjbGVhciB0aGUgZXhpc3RpbmcgZGV2aWNlIGxvZ3MsIGlmIGNvbGxlY3REZXZpY2VMb2dzIG9wdGlvbiBpcyB0cnVlICh3ZSB3YW50IHRvIGluY2x1ZGUgbG9ncyBvbmx5IHJlbGV2YW50IGZvciB0aGlzIHNlc3Npb24pXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0RGV2aWNlTG9ncykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHNbJ2NsZWFyRGV2aWNlTG9nc09uU3RhcnQnXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiBib3RoIGJyb3dzZXJOYW1lIGFuZCBhcHBQYWNrYWdlL2FwcC9idW5kbGVJZCB3ZXJlIHNwZWNpZmllZCAtIGFzc3VtZSB3ZSB3YW50IHRvIHJ1biB0aGUgYXBwbGljYXRpb24gYW5kIHJlbW92ZSBicm93c2VyTmFtZVxyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgKHRoaXMuY2Fwcy5hcHBQYWNrYWdlIHx8IHRoaXMuY2Fwcy5hcHAgfHwgdGhpcy5jYXBzLmJ1bmRsZUlkKSkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYXBzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBubyBhcHBQYWNrYWdlL2FwcC9idW5kbGVJZCBjYXBhYmlsaXR5IG5vciBicm93c2VyTmFtZSBhcmUgZGVmaW5lZCwgYXNzdW1lIHdlIHdhbnQgdG8gcnVuIHRoZSB0ZXN0IGFnYWluc3QgZGVmYXVsdCBicm93c2VyXHJcbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuY2Fwcy5icm93c2VyTmFtZSAmJiAhdGhpcy5jYXBzLmFwcFBhY2thZ2UgJiYgIXRoaXMuY2Fwcy5hcHAgJiYgIXRoaXMuY2Fwcy5idW5kbGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSBERUZBVUxUX0JST1dTRVJfTkFNRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2ViZHJpdmVyIGV4cGVjdHMgbG93ZXIgY2FzZSBuYW1lc1xyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgdHlwZW9mIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gdGhpcy5jYXBzLmJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFkanVzdCBjYXBhYmlsaXRpZXMgdG8gZW5hYmxlIGNvbGxlY3RpbmcgYnJvd3NlciBhbmQgcGVyZm9ybWFuY2Ugc3RhdHMgaW4gQ2hyb21lIFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzWydnb29nOmxvZ2dpbmdQcmVmcyddID0geyAgICAgLy8gZm9yIENocm9tZURyaXZlciA+PSA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBvcHVsYXRlIFdESU8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5wYXJzZShhcHBpdW1VcmwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgd2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxyXG4gICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHMsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcclxuICAgICAgICAgICAgcnVubmVyOiAncmVwbCcsXHJcbiAgICAgICAgICAgIHdhaXRmb3JUaW1lb3V0OiA1MDAwLCAvLyBpbmNyZWFzZSB0aGUgZGVmYXVsdCAzMDAwXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBwcm92aWRlciA9IG1vZFV0aWxzLmRldGVybWluZVByb3ZpZGVyKHdkaW9PcHRzKTtcclxuICAgICAgICBsZXQgbmFtZSA9ICduYW1lJztcclxuXHJcbiAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMubWF4SW5zdGFuY2VzID0gMTtcclxuICAgICAgICAgICAgd2Rpb09wdHMucGF0aCA9ICcvbmV4cGVyaWVuY2UvcGVyZmVjdG9tb2JpbGUvd2QvaHViJztcclxuICAgICAgICAgICAgd2Rpb09wdHMucG9ydCA9IDgwO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5wcm90b2NvbCA9ICdodHRwJztcclxuICAgICAgICAgICAgd2Rpb09wdHMub3BlbkRldmljZVRpbWVvdXQgPSAxNTtcclxuXHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMubWFudWZhY3R1cmVyO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLm1vZGVsO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLmhvc3Q7XHJcblxyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXSAmJiB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ11bJ25hbWUnXSkge1xyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddWyduYW1lJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLndkaW9PcHRzID0gd2Rpb09wdHM7XHJcblxyXG4gICAgICAgIC8vIGluaXQgd2ViZHJpdmVyXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBhd2FpdCB3ZGlvLnJlbW90ZSh3ZGlvT3B0cyk7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLnByb3ZpZGVyID0gcHJvdmlkZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCA9IGF3YWl0IG5ldyBwZXJmZWN0b1JlcG9ydGluZy5QZXJmZWN0by5QZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHdlYmRyaXZlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlU2NyaXB0OiBhc3luYyAoY29tbWFuZCwgcGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kcml2ZXIuZXhlY3V0ZShjb21tYW5kLCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGluZ0NsaWVudCA9IG5ldyBwZXJmZWN0b1JlcG9ydGluZy5QZXJmZWN0by5QZXJmZWN0b1JlcG9ydGluZ0NsaWVudChwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0YXJ0KG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0QXBwaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0ID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0Q29udGV4dCgpO1xyXG5cclxuICAgICAgICAvLyBpZiB3ZSBhcmUgcnVubmluZyBvbiBBbmRyb2lkIDcrIGVtdWxhdG9yLCBhbmQgdGh1cy9vciB1c2luZyBhIFdlYlZpZXcgQnJvd3NlciBUZXN0ZXIgLVxyXG4gICAgICAgIC8vIHBlcmZvcm0gYW4gYWN0dWFsIGFwcENvbnRleHQgc3dpdGNoIHRvIFdFQlxyXG4gICAgICAgIC8vIHNvIEFwcGl1bSB3aWxsIGRlbGVnYXRlIGNvbW1hbmRzIHRvIENocm9tZSBEcml2ZXIgaW5zdGVhZCBvZiBBcHBpdW0gRHJpdmVyXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gICdjaHJvbWl1bS13ZWJ2aWV3Jykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldFdlYlZpZXdDb250ZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgLy8gZmFpbHMgb24gYnJvd3NlcnN0YWNrXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyLmluaXQodGhpcy5kcml2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGRpc3Bvc2VcclxuICAgICAqIEBzdW1tYXJ5IEVuZHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gc3RhdHVzIC0gVGVzdCBzdGF0dXMsIGVpdGhlciBgcGFzc2VkYCBvciBgZmFpbGVkYC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMpIHtcclxuICAgICAgICBpZiAoIXN0YXR1cykge1xyXG4gICAgICAgICAgICBzdGF0dXMgPSAncGFzc2VkJztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJzLnN0ZXBzICYmIEFycmF5LmlzQXJyYXkodGhpcy5ycy5zdGVwcykgJiYgdGhpcy5ycy5zdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmYWlsZWRGaW5kZWQgPSB0aGlzLnJzLnN0ZXBzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmFpbGVkRmluZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gJ2ZhaWxlZCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgc3RhdHVzID0gc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RvcCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPT09ICdQQVNTRUQnID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5wYXNzZWQgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZlY3RvUmVwb3J0aW5nLkNvbnN0YW50cy5yZXN1bHRzLmZhaWxlZFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvQnJvd3NlcnN0YWNrKHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICghWydDQU5DRUxFRCcsICdGQUlMRUQnXS5pbmNsdWRlcyhzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlU2Vzc2lvbiB3aWxsIHRha2UgNSBtaW4gdG8gY2FsbFxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0Vycm9yIGRpc3Bvc2luZyBkcml2ZXI6ICcgKyBlKTsgICAgLy8gaWdub3JlIGFueSBlcnJvcnMgYXQgZGlzcG9zYWwgc3RhZ2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdHJhbnNhY3Rpb24gd2lsbCBwZXJzaXN0IHRpbGwgYSBuZXcgb25lIGlzIG9wZW5lZC4gVHJhbnNhY3Rpb24gbmFtZXMgbXVzdCBiZSB1bmlxdWUuXHJcbiAgICAgKiBAZnVuY3Rpb24gdHJhbnNhY3Rpb25cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gVGhlIHRyYW5zYWN0aW9uIG5hbWUuXHJcbiAgICAgKiBAZm9yIGFuZHJvaWQsIGlvcywgaHlicmlkLCB3ZWJcclxuICAgICAqL1xyXG4gICAgdHJhbnNhY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGp1c3QgaW4gY2FzZSB1c2VyIHBhc3NlZCBhIGNvbXBsZXggb2JqZWN0IGJ5IG1pc3Rha2VcclxuICAgICAgICBuYW1lID0gbmFtZS50b1N0cmluZygpO1xyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIFByaXZhdGVcclxuICAgICAqL1xyXG5cclxuICAgIF9pc0FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIEFDVElPTl9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBfdGFrZVNjcmVlbnNob3RTaWxlbnQobmFtZSkge1xyXG4gICAgICAgIGlmICghTk9fU0NSRUVOU0hPVF9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRVbnRpbFJldFZhbCA9IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2VzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdXNoSW1hZ2VUb0ltYWdlcyA9IGFzeW5jKGZldGNoVGl0bGUgPSB0cnVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmV0Y2hUaXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0VGl0bGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dFRvSW1hZ2UgPSByZXF1aXJlKCcuLi9saWIvdGV4dC10by1pbWFnZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGVJbWFnZSA9IGF3YWl0IHRleHRUb0ltYWdlLmdlbmVyYXRlKHRpdGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlSW1hZ2UgJiYgdHlwZW9mIHRpdGxlSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUltYWdlID0gdGl0bGVJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2godGl0bGVJbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goaW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNXZWJWaWV3Q29udGV4dCA9IGF3YWl0IHRoaXMuaXNXZWJWaWV3Q29udGV4dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNXZWJWaWV3Q29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29sbGVjdCBhbGwgKHNjcmVlbnNob3QgYW5kIHRpdGxlKSBpbWFnZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRXaW5kb3dIYW5kbGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoaGFuZGxlcykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaGFuZGxlIG9mIGhhbmRsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc3dpdGNoVG9XaW5kb3coaGFuZGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHVzaEltYWdlVG9JbWFnZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwdXNoSW1hZ2VUb0ltYWdlcyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1lcmdlIGFsbCBpbWFnZXMgaW50byBvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkSW1hZ2UgPSBhd2FpdCBtZXJnZUltYWdlcyhpbWFnZXMsIHsgZGlyZWN0aW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVyZ2VkSW1hZ2UgJiYgdHlwZW9mIG1lcmdlZEltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gbWVyZ2VkSW1hZ2UucmVwbGFjZSgnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdGltZW91dDogMzAqMTAwMCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FpdFVudGlsUmV0VmFsICYmIHdhaXRVbnRpbFJldFZhbC50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFVudGlsUmV0VmFsLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90JywgZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90IGlubmVyIGVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gX2dldExvZ3MobmFtZSkge1xyXG4gICAgLy8gICAgIGlmICghTk9fTE9HU19DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2dzKCk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIF9hZGp1c3RBcHBpdW1Mb2cobG9nLCBzcmMpIHtcclxuICAgICAgICBpZiAoIWxvZyB8fCB0eXBlb2YgbG9nICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogY29udmVydCBsb2cudGltZXN0YW1wIGZyb20gdGhlIGRldmljZSB0aW1lIHpvbmUgdG8gdGhlIGxvY2FsIG9uZSAoc28gd2UgY2FuIGxhdGVyIGNvcnJlbGF0ZSBiZXR3ZWVuIHN0ZXBzIGFuZCBsb2dzKSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGltZTogbG9nLnRpbWVzdGFtcCxcclxuICAgICAgICAgICAgbXNnOiBsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgbGV2ZWw6IGxvZy5sZXZlbCxcclxuICAgICAgICAgICAgc3JjOiBzcmNcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIF9pdGVyYXRpb25TdGFydCgpIHtcclxuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHNhdmVkIGluIHByZXZpb3VzIGl0ZXJhdGlvbiBpZiBhbnlcclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pdGVyYXRpb25FbmQoZXJyb3IpIHtcclxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkFQUElVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZ25vcmUgdGhlIHJlc3QgaWYgbW9iIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWRcclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbGxlY3QgYWxsIHRoZSBkZXZpY2UgbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0RGV2aWNlTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEFwcGl1bUxvZyhsb2csICdkZXZpY2UnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGRldmljZSBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCB0aGUgYnJvd3NlciBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RCcm93c2VyTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0QnJvd3NlckxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RBcHBpdW1Mb2cobG9nLCAnYnJvd3NlcicpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgYnJvd3NlciBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCBBcHBpdW0gbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QXBwaXVtTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IHRoaXMuZ2V0QXBwaXVtTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxvZ0VudHJ5IG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZ0VudHJ5LCAnYXBwaXVtJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBBcHBpdW0gbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcikge1xyXG4gICAgICAgIGlmICghbG9jYXRvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBsb2NhdG9yIG5vdCBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhdG9yICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignLycpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yOyAvLyBsZWF2ZSB4cGF0aCBsb2NhdG9yIGFzIGlzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBsYXRmb3JtID0gdGhpcy5jYXBzICYmIHRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUgPyB0aGlzLmNhcHMucGxhdGZvcm1OYW1lLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hcHBDb250ZXh0ID09PSAnTkFUSVZFX0FQUCcgJiYgcGxhdGZvcm0gPT09ICdhbmRyb2lkJykge1xyXG4gICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gcHJlcGVuZCBwYWNrYWdlIG5hbWUgaWYgaXQncyBub3Qgc3BlY2lmaWVkXHJcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBnZXRDdXJyZW50UGFja2FnZSgpIHNlZW1zIHRvIGNyYXNoIHBvc3NpYmx5IGR1ZSB0byBhIHdkaW8gYnVnLiBcclxuICAgICAgICAgICAgICAgIC8vICAgICAgIHNvIHdlIGdldCBwYWNrYWdlIG5hbWUgZnJvbSBjYXBzIGluc3RlYWQuXHJcbiAgICAgICAgICAgICAgICBsb2NhdG9yID0gbG9jYXRvci5zdWJzdHIoJ2lkPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJzppZC8nKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhdG9yID0gdGhpcy5jYXBzLmFwcFBhY2thZ2UgKyAnOmlkLycgKyBsb2NhdG9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkucmVzb3VyY2VJZChcIicgKyBsb2NhdG9yICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdjbGFzcz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLmNsYXNzTmFtZShcIicgKyBsb2NhdG9yLnN1YnN0cignY2xhc3M9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGV4dD0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnRleHQoXCInICsgbG9jYXRvci5zdWJzdHIoJ3RleHQ9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGV4dC1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnRleHRDb250YWlucyhcIicgKyBsb2NhdG9yLnN1YnN0cigndGV4dC1jb250YWlucz0nLmxlbmd0aCkgKyAnXCIpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdkZXNjPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkuZGVzY3JpcHRpb24oXCInICsgbG9jYXRvci5zdWJzdHIoJ2Rlc2M9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignZGVzYy1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLmRlc2NyaXB0aW9uQ29udGFpbnMoXCInICsgbG9jYXRvci5zdWJzdHIoJ2Rlc2MtY29udGFpbnM9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignc2Nyb2xsYWJsZScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkuc2Nyb2xsYWJsZSh0cnVlKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignficpID09PSAwKSAgICAvLyBhY2Nlc3NpYmlsaXR5IGlkXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwQ29udGV4dCA9PT0gJ05BVElWRV9BUFAnICYmIHBsYXRmb3JtID09PSAnaW9zJykge1xyXG4gICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCd+JykgPT09IDApIC8vIGFjY2Vzc2liaWxpdHkgaWRcclxuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBDb250ZXh0ICE9PSAnTkFUSVZFX0FQUCcpIHsgICAgICAgICAgICAvLyBIeWJyaWQgb3IgV2ViIGFwcGxpY2F0aW9uXHJcbiAgICAgICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJ2lkPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcjJyArIGxvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCk7ICAgICAgLy8gY29udmVydCAnaWQ9JyB0byAnIydcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCduYW1lPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbmFtZT0nICsgbG9jYXRvci5zdWJzdHIoJ25hbWU9Jy5sZW5ndGgpICsgJ10nO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2xpbms9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJz0nICsgbG9jYXRvci5zdWJzdHIoJ2xpbms9Jy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2xpbmstY29udGFpbnM9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyo9JyArIGxvY2F0b3Iuc3Vic3RyKCdsaW5rPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdjc3M9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRvci5zdWJzdHIoJ2Nzcz0nLmxlbmd0aCk7ICAgICAgICAgICAvLyBpbiBjYXNlIG9mIGNzcywganVzdCByZW1vdmUgY3NzPSBwcmVmaXhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkSGVscGVyRnVuY3Rpb25zKCkge1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvciA9IHRoaXMuX2dldFdkaW9Mb2NhdG9yO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5tYXRjaFBhdHRlcm4gPSBtb2RVdGlscy5tYXRjaFBhdHRlcm47XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQgPSBtb2RVdGlscy5nZXRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50cyA9IG1vZFV0aWxzLmdldEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnQgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudHMgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5zZXRUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5zZXRUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5yZXN0b3JlVGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXIgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRDb250ZXh0ID0gbW9kVXRpbHMuYXNzZXJ0Q29udGV4dDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuY29udGV4dExpc3QgPSBtb2RVdGlscy5jb250ZXh0TGlzdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0TG9nVHlwZXMgPSBtb2RVdGlscy5nZXRMb2dUeXBlcztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVTZXNzaW9uKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdkZWxldGVTZXNzaW9uIGVycm9yJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2soc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBsZXQgb3B0aW9ucztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS5icm93c2Vyc3RhY2suY29tL2F1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYCxcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBib2R5OiByZXF1ZXN0Qm9keSxcclxuICAgICAgICAgICAgICAgICAgICAnYXV0aCc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXInOiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5rZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZW5kSW1tZWRpYXRlbHknOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS1jbG91ZC5icm93c2Vyc3RhY2suY29tL2FwcC1hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogcmVxdWVzdEJvZHksXHJcbiAgICAgICAgICAgICAgICAgICAgJ2F1dGgnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyJzogdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2Jyb3dzZXJzdGFjay51c2VyJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2Jyb3dzZXJzdGFjay5rZXknXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbmRJbW1lZGlhdGVseSc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0KG9wdGlvbnMsIChlcnIsIHJlcywgYm9keSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBCcm93c2Vyc3RhY2s6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19