appium-xcuitest-driver 3.49.0 → 3.49.1

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.
@@ -1155,13 +1155,23 @@ class XCUITestDriver extends _appiumBaseDriver.BaseDriver {
1155
1155
  return;
1156
1156
  }
1157
1157
 
1158
+ let appsList;
1159
+
1158
1160
  try {
1159
- otherApps = this.helpers.parseCapsArray(otherApps);
1161
+ appsList = this.helpers.parseCapsArray(otherApps);
1160
1162
  } catch (e) {
1161
1163
  _logger.default.errorAndThrow(`Could not parse "otherApps" capability: ${e.message}`);
1162
1164
  }
1163
1165
 
1164
- for (const otherApp of otherApps) {
1166
+ if (_lodash.default.isEmpty(appsList)) {
1167
+ _logger.default.info(`Got zero apps from 'otherApps' capability value. Doing nothing`);
1168
+
1169
+ return;
1170
+ }
1171
+
1172
+ const appPaths = await _bluebird.default.all(appsList.map(app => this.helpers.configureApp(app, '.app')));
1173
+
1174
+ for (const otherApp of appPaths) {
1165
1175
  await (0, _simulatorManagement.installToSimulator)(this.opts.device, otherApp, undefined, {
1166
1176
  noReset: this.opts.noReset,
1167
1177
  newSimulator: this.lifecycleData.createSim
@@ -1274,4 +1284,4 @@ var _default = XCUITestDriver;
1274
1284
  exports.default = _default;require('source-map-support').install();
1275
1285
 
1276
1286
 
1277
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FIiwiQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiU0FGQVJJX0JVTkRMRV9JRCIsIldEQV9TSU1fU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyIsIldEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwiLCJXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCIsIkRFRkFVTFRfU0VUVElOR1MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJ1c2VKU09OU291cmNlIiwic2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyIsImVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMiLCJtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTZXJ2ZXJGcmFtZXJhdGUiLCJzY3JlZW5zaG90UXVhbGl0eSIsIm1qcGVnU2NhbGluZ0ZhY3RvciIsInJlZHVjZU1vdGlvbiIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJOT19QUk9YWV9OQVRJVkVfTElTVCIsIk5PX1BST1hZX1dFQl9MSVNUIiwiY29uY2F0IiwiTUVNT0laRURfRlVOQ1RJT05TIiwiWENVSVRlc3REcml2ZXIiLCJCYXNlRHJpdmVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJ3ZWJMb2NhdG9yU3RyYXRlZ2llcyIsInJlc2V0SW9zIiwic2V0dGluZ3MiLCJEZXZpY2VTZXR0aW5ncyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJiaW5kIiwibG9ncyIsImZuIiwiXyIsIm1lbW9pemUiLCJrZXkiLCJ2YWx1ZSIsInByb3h5Q29tbWFuZCIsIndkYSIsImRldmljZSIsImp3cFByb3h5QWN0aXZlIiwicHJveHlSZXFSZXMiLCJqd3BQcm94eUF2b2lkIiwic2FmYXJpIiwiY2FjaGVkV2RhU3RhdHVzIiwiY3VyV2ViRnJhbWVzIiwid2ViRWxlbWVudElkcyIsIl9jdXJyZW50VXJsIiwiY3VyQ29udGV4dCIsInhjb2RlVmVyc2lvbiIsImNvbnRleHRzIiwiaW1wbGljaXRXYWl0TXMiLCJhc3luY2xpYldhaXRNcyIsInBhZ2VMb2FkTXMiLCJsYW5kc2NhcGVXZWJDb29yZHNPZmZzZXQiLCJyZW1vdGUiLCJkcml2ZXJEYXRhIiwiZ2V0U3RhdHVzIiwiZHJpdmVySW5mbyIsInN0YXR1cyIsImJ1aWxkIiwidmVyc2lvbiIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwibGlmZWN5Y2xlRGF0YSIsInNlc3Npb25JZCIsImNhcHMiLCJzdGFydCIsIk9iamVjdCIsImFzc2lnbiIsInVkaWQiLCJoYXMiLCJ1cGRhdGVTZXR0aW5ncyIsIndkYVNldHRpbmdzIiwibG9nIiwiaW5mbyIsIm1qcGVnU2NyZWVuc2hvdFVybCIsIm1qcGVnU3RyZWFtIiwibWpwZWciLCJNSnBlZ1N0cmVhbSIsImUiLCJlcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWxldGVTZXNzaW9uIiwibm9SZXNldCIsImZ1bGxSZXNldCIsImlvc1Nka1ZlcnNpb24iLCJyZWFsRGV2aWNlIiwiZGV0ZXJtaW5lRGV2aWNlIiwic2ltdWxhdG9yRGV2aWNlc1NldFBhdGgiLCJkZXZpY2VzU2V0UGF0aCIsInBsYXRmb3JtVmVyc2lvbiIsImdldFBsYXRmb3JtVmVyc2lvbiIsIm5vcm1hbGl6ZWRWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsIkVycm9yIiwiaXNFbXB0eSIsIndlYkRyaXZlckFnZW50VXJsIiwibG9nRXZlbnQiLCJ0b0xvd2VyIiwiYXBwIiwidW5kZWZpbmVkIiwicHJvY2Vzc0FyZ3VtZW50cyIsImJ1bmRsZUlkIiwic2FmYXJpSW5pdGlhbFVybCIsImlzUmVhbERldmljZSIsImFkZHJlc3MiLCJwb3J0IiwiY29uZmlndXJlQXBwIiwicnVuUmVzZXQiLCJXZWJEcml2ZXJBZ2VudCIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwiY2F0Y2giLCJkZWJ1ZyIsIm1lbW9pemVkTG9nSW5mbyIsImxvZ0luZm8iLCJzdGFydExvZ0NhcHR1cmUiLCJza2lwTG9nQ2FwdHVyZSIsInJlc3VsdCIsImlzTG9nQ2FwdHVyZVN0YXJ0ZWQiLCJpc1NpbXVsYXRvciIsInNodXRkb3duT3RoZXJTaW11bGF0b3JzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJpc1NhZmFyaSIsInNhZmFyaUdsb2JhbFByZWZlcmVuY2VzIiwidXBkYXRlU2FmYXJpR2xvYmFsU2V0dGluZ3MiLCJsb2NhbENvbmZpZyIsInNpbSIsImN1c3RvbVNTTENlcnQiLCJjZXJ0SGVhZCIsInRydW5jYXRlIiwibGVuZ3RoIiwic2ltY3RsIiwiYWRkUm9vdENlcnRpZmljYXRlIiwicmF3IiwiaWduIiwic3RhcnRTaW0iLCJsYXVuY2hXaXRoSURCIiwiaWRiIiwiSURCIiwiY29ubmVjdCIsIm1lc3NhZ2UiLCJpbnN0YWxsQVVUIiwiaXNBcHBJbnN0YWxsZWQiLCJlcnJvckFuZFRocm93IiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uc01hcHBpbmciLCJ0b1BhaXJzIiwicGFyc2UiLCJzZXRQZXJtaXNzaW9ucyIsIndhcm4iLCJjYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQiLCJlbmFibGVDYWxlbmRhckFjY2VzcyIsImRpc2FibGVDYWxlbmRhckFjY2VzcyIsInN0YXJ0V2RhIiwic2V0UmVkdWNlTW90aW9uIiwic2V0SW5pdGlhbE9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iLCJvcGVuVXJsIiwiYXV0b1dlYnZpZXciLCJuYXZUb0luaXRpYWxXZWJ2aWV3Iiwic2V0VXJsIiwiaGFzVmFsdWUiLCJjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMiLCJ1c2VQb3J0Rm9yd2FyZGluZyIsIndkYUJhc2VVcmwiLCJERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSIsInJlcXVlc3RDb25uZWN0aW9uIiwidXJsIiwiZGV2aWNlUG9ydCIsIndkYVJlbW90ZVBvcnQiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJuYW1lIiwidXNlWGN0ZXN0cnVuRmlsZSIsImlzU291cmNlRnJlc2giLCJkZXJpdmVkRGF0YVBhdGgiLCJwYXRoIiwibm9ybWFsaXplIiwiaXNCdXN5IiwiYm9vdHN0cmFwUGF0aCIsImFjcXVpcmUiLCJ1c2VOZXdXREEiLCJxdWl0QW5kVW5pbnN0YWxsIiwic2V0dXBDYWNoaW5nIiwibXNnIiwicmVzdWx0QnVuZGxlUGF0aCIsInN0YXJ0dXBSZXRyaWVzIiwid2RhU3RhcnR1cFJldHJpZXMiLCJzdGFydHVwUmV0cnlJbnRlcnZhbCIsIndkYVN0YXJ0dXBSZXRyeUludGVydmFsIiwicmV0cnlDb3VudCIsInJldHJpZXMiLCJtYWpvciIsImxhdW5jaCIsImVyciIsImVycm9yTXNnIiwib3JpZ2luYWxTdGFja3RyYWNlIiwic3RhcnRXZGFTZXNzaW9uIiwic3RhY2siLCJjbGVhclN5c3RlbUZpbGVzIiwiZnVsbHlTdGFydGVkIiwic2VydmVyIiwicmVjb3JkZXIiLCJjb21wYWN0IiwiX3JlY2VudFNjcmVlblJlY29yZGVyIiwiX2F1ZGlvUmVjb3JkZXIiLCJpbnRlcnJ1cHQiLCJjbGVhbnVwIiwiX3BlcmZSZWNvcmRlcnMiLCJCIiwiYWxsIiwibWFwIiwieCIsInN0b3AiLCJzdG9wUmVtb3RlIiwicmVzZXRPblNlc3Npb25TdGFydE9ubHkiLCJlbmZvcmNlU2ltdWxhdG9yU2h1dGRvd24iLCJjcmVhdGVTaW0iLCJkZWxldGUiLCJzeXNsb2ciLCJzdG9wQ2FwdHVyZSIsImp3cHJveHkiLCJxdWl0IiwicmVsZWFzZUNvbm5lY3Rpb24iLCJleGVjdXRlQ29tbWFuZCIsImNtZCIsInJlY2VpdmVBc3luY1Jlc3BvbnNlIiwiYXBwSXNQYWNrYWdlT3JCdW5kbGUiLCJ0ZXN0IiwiaGVscGVycyIsImRldmljZU5hbWUiLCJzZXR1cFZlcnNpb25DYXBzIiwidG9Mb3dlckNhc2UiLCJkZXZpY2VQbGF0Zm9ybSIsImRldmljZXMiLCJqb2luIiwiaW5jbHVkZXMiLCJlbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbiIsInJ1bk9wdHMiLCJzY2FsZUZhY3RvciIsImNvbm5lY3RIYXJkd2FyZUtleWJvYXJkIiwicGFzdGVib2FyZEF1dG9tYXRpY1N5bmMiLCJzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsImlzSGVhZGxlc3MiLCJ0cmFjZVBvaW50ZXIiLCJzaW11bGF0b3JUcmFjZVBvaW50ZXIiLCJkZXZpY2VQcmVmZXJlbmNlcyIsIlNpbXVsYXRvcldpbmRvd0NlbnRlciIsImlzSW50ZWdlciIsInNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0Iiwic3RhcnR1cFRpbWVvdXQiLCJpc1N0cmluZyIsInRvVXBwZXJDYXNlIiwiU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24iLCJTaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlIiwicnVuIiwicGxhdGZvcm1OYW1lIiwiaXNUdk9TIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwiUExBVEZPUk1fTkFNRV9JT1MiLCJsYXVuY2hBcHAiLCJBUFBfTEFVTkNIX1RJTUVPVVQiLCJjaGVja1N0YXR1cyIsInJlc3BvbnNlIiwiY3VycmVudEFwcCIsImJ1bmRsZUlEIiwicGFyc2VJbnQiLCJpc0FycmF5IiwiZW52IiwiaXNQbGFpbk9iamVjdCIsImxhbmd1YWdlIiwicHVzaCIsImxvY2FsZSIsImlzTmlsIiwic2hvdWxkVGVybWluYXRlQXBwIiwiZm9yY2VBcHBMYXVuY2giLCJ3ZGFDYXBzIiwiYXV0b0xhdW5jaCIsImFyZ3VtZW50cyIsImVudmlyb25tZW50IiwiZXZlbnRsb29wSWRsZURlbGF5U2VjIiwid2RhRXZlbnRsb29wSWRsZURlbGF5Iiwic2hvdWxkV2FpdEZvclF1aWVzY2VuY2UiLCJ3YWl0Rm9yUXVpZXNjZW5jZSIsInNob3VsZFVzZVRlc3RNYW5hZ2VyRm9yVmlzaWJpbGl0eURldGVjdGlvbiIsInNpbXBsZUlzVmlzaWJsZUNoZWNrIiwibWF4VHlwaW5nRnJlcXVlbmN5Iiwic2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIiLCJ3YWl0Rm9ySWRsZVRpbWVvdXQiLCJlbGVtZW50UmVzcG9uc2VGaWVsZHMiLCJkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMiLCJ1c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3kiLCJhdXRvQWNjZXB0QWxlcnRzIiwiZGVmYXVsdEFsZXJ0QWN0aW9uIiwiYXV0b0Rpc21pc3NBbGVydHMiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJwcm94eUFjdGl2ZSIsImdldFByb3h5QXZvaWRMaXN0IiwiaXNXZWJ2aWV3IiwiY2FuUHJveHkiLCJpc1dlYkNvbnRleHQiLCJ2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSIsInN0cmF0ZWd5IiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsImNvZXJjZVZlcnNpb24iLCJ2ZXJpZnlQcm9jZXNzQXJndW1lbnQiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwiY29tbWFuZFRpbWVvdXRzIiwicHJvdG9jb2wiLCJob3N0IiwicGVybXMiLCJhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyIsInBhcnNlQ2Fwc0FycmF5IiwidGltZW91dCIsImFwcFB1c2hUaW1lb3V0IiwibmV3U2ltdWxhdG9yIiwib3RoZXJBcHBzIiwiaW5zdGFsbE90aGVyQXBwcyIsImlvc0luc3RhbGxQYXVzZSIsInBhdXNlIiwiZGVsYXkiLCJvdGhlckFwcCIsImlzRW5hYmxlZCIsImlzQm9vbGVhbiIsImN1ck9yaWVudGF0aW9uIiwiX2dldENvbW1hbmRUaW1lb3V0IiwiY21kTmFtZSIsIkRFRkFVTFRfVElNRU9VVF9LRVkiLCJnZXRTZXNzaW9uIiwiZHJpdmVyU2Vzc2lvbiIsInNob3VsZEdldERldmljZUNhcHMiLCJpbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm8iLCJkZXZpY2VDYXBzIiwic3RhdHVzQmFyU2l6ZSIsInNjYWxlIiwiZ2V0U2NyZWVuSW5mbyIsInBpeGVsUmF0aW8iLCJzdGF0QmFySGVpZ2h0IiwiaGVpZ2h0Iiwidmlld3BvcnRSZWN0IiwiZ2V0Vmlld3BvcnRSZWN0IiwicmVzZXQiLCJjbG9uZURlZXAiLCJzaHV0ZG93bkhhbmRsZXIiLCJyZXNldE9uVW5leHBlY3RlZFNodXRkb3duIiwicHJvdG90eXBlIiwiY29tbWFuZHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBUUE7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsd0JBQXdCLEdBQUcscUJBQWpDO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsOEJBQXJDO0FBRUEsTUFBTUMsaUJBQWlCLEdBQUc7QUFDeEJDLEVBQUFBLGlCQUFpQixFQUFFLEtBREs7QUFFeEJDLEVBQUFBLHNCQUFzQixFQUFFLEtBRkE7QUFHeEJDLEVBQUFBLFdBQVcsRUFBRSxFQUhXO0FBSXhCQyxFQUFBQSxRQUFRLEVBQUUsS0FKYztBQUt4QkMsRUFBQUEsaUJBQWlCLEVBQUUsSUFMSztBQU14QkMsRUFBQUEsZUFBZSxFQUFFLEtBTk87QUFPeEJDLEVBQUFBLGVBQWUsRUFBRSxJQVBPO0FBUXhCQyxFQUFBQSx3QkFBd0IsRUFBRTtBQVJGLENBQTFCO0FBVUEsTUFBTUMsZ0JBQWdCLEdBQUcsd0JBQXpCO0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcsQ0FBaEM7QUFDQSxNQUFNQyw0QkFBNEIsR0FBRyxDQUFyQztBQUNBLE1BQU1DLHlCQUF5QixHQUFHLHlGQUFsQztBQUNBLE1BQU1DLDBCQUEwQixHQUFH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SEosT0FBbEI7QUFLRDs7QUFDRC9RLG9CQUFJQyxJQUFKLENBQVMsK0RBQVQ7O0FBQ0EsV0FBT1AsTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFBQ0MsTUFBQUEsSUFBSSxFQUFFLEtBQUtqRCxJQUFMLENBQVVpRDtBQUFqQixLQUFkLEVBQXNDd1EsYUFBdEMsRUFDTCxLQUFLeEQsT0FBTCxDQUFhbUIsWUFEUixFQUNzQixLQUFLd0MsVUFBTCxJQUFtQixFQUR6QyxDQUFQO0FBRUQ7O0FBRVUsUUFBTFMsS0FBSyxHQUFJO0FBQ2IsUUFBSSxLQUFLclUsSUFBTCxDQUFVZ0UsT0FBZCxFQUF1QjtBQUVyQixVQUFJaEUsSUFBSSxHQUFHWSxnQkFBRTBULFNBQUYsQ0FBWSxLQUFLdFUsSUFBakIsQ0FBWDs7QUFDQUEsTUFBQUEsSUFBSSxDQUFDZ0UsT0FBTCxHQUFlLEtBQWY7QUFDQWhFLE1BQUFBLElBQUksQ0FBQ2lFLFNBQUwsR0FBaUIsS0FBakI7QUFDQSxZQUFNc1EsZUFBZSxHQUFHLEtBQUtDLHlCQUE3Qjs7QUFDQSxXQUFLQSx5QkFBTCxHQUFpQyxNQUFNLENBQUUsQ0FBekM7O0FBQ0EsVUFBSTtBQUNGLGNBQU0sS0FBSzlPLFFBQUwsQ0FBYzFGLElBQWQsQ0FBTjtBQUNELE9BRkQsU0FFVTtBQUNSLGFBQUt3VSx5QkFBTCxHQUFpQ0QsZUFBakM7QUFDRDtBQUNGOztBQUNELFVBQU0sTUFBTUYsS0FBTixFQUFOO0FBQ0Q7O0FBdm5DcUM7OztBQTBuQ3hDdFIsTUFBTSxDQUFDQyxNQUFQLENBQWNuRCxjQUFjLENBQUM0VSxTQUE3QixFQUF3Q0MsY0FBeEM7ZUFFZTdVLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRHJpdmVyLCBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB1dGlsLCBtanBlZyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgeyBXZWJEcml2ZXJBZ2VudCB9IGZyb20gJ2FwcGl1bS13ZWJkcml2ZXJhZ2VudCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7XG4gIGNyZWF0ZVNpbSwgZ2V0RXhpc3RpbmdTaW0sIHJ1blNpbXVsYXRvclJlc2V0LCBpbnN0YWxsVG9TaW11bGF0b3IsXG4gIHNodXRkb3duT3RoZXJTaW11bGF0b3JzLCBzaHV0ZG93blNpbXVsYXRvciwgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXNcbn0gZnJvbSAnLi9zaW11bGF0b3ItbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBnZXRTaW11bGF0b3IsIGluc3RhbGxTU0xDZXJ0LCBoYXNTU0xDZXJ0IH0gZnJvbSAnYXBwaXVtLWlvcy1zaW11bGF0b3InO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCwgcmV0cnkgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtLCBleHRyYWN0QnVuZGxlSWQgfSBmcm9tICcuL2FwcC11dGlscyc7XG5pbXBvcnQgeyBkZXNpcmVkQ2FwQ29uc3RyYWludHMsIFBMQVRGT1JNX05BTUVfSU9TLCBQTEFURk9STV9OQU1FX1RWT1MgfSBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQge1xuICBkZXRlY3RVZGlkLCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbiwgZ2V0QW5kQ2hlY2tJb3NTZGtWZXJzaW9uLFxuICBjaGVja0FwcFByZXNlbnQsIGdldERyaXZlckluZm8sXG4gIGNsZWFyU3lzdGVtRmlsZXMsIHRyYW5zbGF0ZURldmljZU5hbWUsIG5vcm1hbGl6ZUNvbW1hbmRUaW1lb3V0cyxcbiAgREVGQVVMVF9USU1FT1VUX0tFWSwgbWFya1N5c3RlbUZpbGVzRm9yQ2xlYW51cCxcbiAgcHJpbnRVc2VyLCByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMsXG4gIG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbiwgaXNMb2NhbEhvc3Rcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge1xuICBnZXRDb25uZWN0ZWREZXZpY2VzLCBydW5SZWFsRGV2aWNlUmVzZXQsIGluc3RhbGxUb1JlYWxEZXZpY2UsXG4gIGdldFJlYWxEZXZpY2VPYmpcbn0gZnJvbSAnLi9yZWFsLWRldmljZS1tYW5hZ2VtZW50JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBJREIgZnJvbSAnYXBwaXVtLWlkYic7XG5pbXBvcnQgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkgZnJvbSAnLi9kZXZpY2UtY29ubmVjdGlvbnMtZmFjdG9yeSc7XG5cblxuY29uc3QgU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FID0gJ3NodXRkb3duX290aGVyX3NpbXMnO1xuY29uc3QgQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCA9ICdjdXN0b21pemVfcmVzdWx0X2J1bmRsZV9wYXRoJztcblxuY29uc3QgZGVmYXVsdFNlcnZlckNhcHMgPSB7XG4gIHdlYlN0b3JhZ2VFbmFibGVkOiBmYWxzZSxcbiAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gIGJyb3dzZXJOYW1lOiAnJyxcbiAgcGxhdGZvcm06ICdNQUMnLFxuICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgZGF0YWJhc2VFbmFibGVkOiBmYWxzZSxcbiAgdGFrZXNTY3JlZW5zaG90OiB0cnVlLFxuICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IGZhbHNlLFxufTtcbmNvbnN0IFNBRkFSSV9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLm1vYmlsZXNhZmFyaSc7XG5jb25zdCBXREFfU0lNX1NUQVJUVVBfUkVUUklFUyA9IDI7XG5jb25zdCBXREFfUkVBTF9ERVZfU1RBUlRVUF9SRVRSSUVTID0gMTtcbmNvbnN0IFdEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0teGN1aXRlc3QtZHJpdmVyL2Jsb2IvbWFzdGVyL2RvY3MvcmVhbC1kZXZpY2UtY29uZmlnLm1kJztcbmNvbnN0IFdEQV9TVEFSVFVQX1JFVFJZX0lOVEVSVkFMID0gMTAwMDA7XG5jb25zdCBERUZBVUxUX1NFVFRJTkdTID0ge1xuICBuYXRpdmVXZWJUYXA6IGZhbHNlLFxuICBuYXRpdmVXZWJUYXBTdHJpY3Q6IGZhbHNlLFxuICB1c2VKU09OU291cmNlOiBmYWxzZSxcbiAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogdHJ1ZSxcbiAgZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlczogJ3R5cGUsbGFiZWwnLFxuICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvYmxvYi9tYXN0ZXIvV2ViRHJpdmVyQWdlbnRMaWIvVXRpbGl0aWVzL0ZCQ29uZmlndXJhdGlvbi5tIGZvciBmb2xsb3dpbmcgc2V0dGluZ3MnIHZhbHVlc1xuICBtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5OiAyNSxcbiAgbWpwZWdTZXJ2ZXJGcmFtZXJhdGU6IDEwLFxuICBzY3JlZW5zaG90UXVhbGl0eTogMSxcbiAgbWpwZWdTY2FsaW5nRmFjdG9yOiAxMDAsXG4gIC8vIHNldCBgcmVkdWNlTW90aW9uYCB0byBgbnVsbGAgc28gdGhhdCBpdCB3aWxsIGJlIHZlcmlmaWVkIGJ1dCBzdGlsbCBzZXQgZWl0aGVyIHRydWUvZmFsc2VcbiAgcmVkdWNlTW90aW9uOiBudWxsLFxufTtcbi8vIFRoaXMgbG9jayBhc3N1cmVzLCB0aGF0IGVhY2ggZHJpdmVyIHNlc3Npb24gZG9lcyBub3Rcbi8vIGFmZmVjdCBzaGFyZWQgcmVzb3VyY2VzIG9mIHRoZSBvdGhlciBwYXJhbGxlbCBzZXNzaW9uc1xuY29uc3QgU0hBUkVEX1JFU09VUkNFU19HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cbmNvbnN0IE5PX1BST1hZX05BVElWRV9MSVNUID0gW1xuICBbJ0RFTEVURScsIC93aW5kb3cvXSxcbiAgWydHRVQnLCAvXlxcL3Nlc3Npb25cXC9bXlxcL10rJC9dLFxuICBbJ0dFVCcsIC9hbGVydF90ZXh0L10sXG4gIFsnR0VUJywgL2FsZXJ0XFwvW15cXC9dKy9dLFxuICBbJ0dFVCcsIC9hcHBpdW0vXSxcbiAgWydHRVQnLCAvYXR0cmlidXRlL10sXG4gIFsnR0VUJywgL2NvbnRleHQvXSxcbiAgWydHRVQnLCAvbG9jYXRpb24vXSxcbiAgWydHRVQnLCAvbG9nL10sXG4gIFsnR0VUJywgL3NjcmVlbnNob3QvXSxcbiAgWydHRVQnLCAvc2l6ZS9dLFxuICBbJ0dFVCcsIC9zb3VyY2UvXSxcbiAgWydHRVQnLCAvdGltZW91dHMkL10sXG4gIFsnR0VUJywgL3VybC9dLFxuICBbJ0dFVCcsIC93aW5kb3cvXSxcbiAgWydQT1NUJywgL2FjY2VwdF9hbGVydC9dLFxuICBbJ1BPU1QnLCAvYWN0aW9ucyQvXSxcbiAgWydQT1NUJywgL2FsZXJ0X3RleHQvXSxcbiAgWydQT1NUJywgL2FsZXJ0XFwvW15cXC9dKy9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC9pc19sb2NrZWQvXSxcbiAgWydQT1NUJywgL2FwcGl1bVxcL2RldmljZVxcL2xvY2svXSxcbiAgWydQT1NUJywgL2FwcGl1bVxcL2RldmljZVxcL3VubG9jay9dLFxuICBbJ1BPU1QnLCAvYmFjay9dLFxuICBbJ1BPU1QnLCAvY2xlYXIvXSxcbiAgWydQT1NUJywgL2NvbnRleHQvXSxcbiAgWydQT1NUJywgL2Rpc21pc3NfYWxlcnQvXSxcbiAgWydQT1NUJywgL2VsZW1lbnRcXC9hY3RpdmUvXSwgLy8gTUpTT05XUCBnZXQgYWN0aXZlIGVsZW1lbnQgc2hvdWxkIHByb3h5XG4gIFsnUE9TVCcsIC9lbGVtZW50JC9dLFxuICBbJ1BPU1QnLCAvZWxlbWVudHMkL10sXG4gIFsnUE9TVCcsIC9leGVjdXRlL10sXG4gIFsnUE9TVCcsIC9rZXlzL10sXG4gIFsnUE9TVCcsIC9sb2cvXSxcbiAgWydQT1NUJywgL21vdmV0by9dLFxuICBbJ1BPU1QnLCAvcmVjZWl2ZV9hc3luY19yZXNwb25zZS9dLCAvLyBhbHdheXMsIGluIGNhc2UgY29udGV4dCBzd2l0Y2hlcyB3aGlsZSB3YWl0aW5nXG4gIFsnUE9TVCcsIC9zZXNzaW9uXFwvW15cXC9dK1xcL2xvY2F0aW9uL10sIC8vIGdlbyBsb2NhdGlvbiwgYnV0IG5vdCBlbGVtZW50IGxvY2F0aW9uXG4gIFsnUE9TVCcsIC9zaGFrZS9dLFxuICBbJ1BPU1QnLCAvdGltZW91dHMvXSxcbiAgWydQT1NUJywgL3RvdWNoL10sXG4gIFsnUE9TVCcsIC91cmwvXSxcbiAgWydQT1NUJywgL3ZhbHVlL10sXG4gIFsnUE9TVCcsIC93aW5kb3cvXSxcbiAgWydERUxFVEUnLCAvY29va2llL10sXG4gIFsnR0VUJywgL2Nvb2tpZS9dLFxuICBbJ1BPU1QnLCAvY29va2llL10sXG5dO1xuY29uc3QgTk9fUFJPWFlfV0VCX0xJU1QgPSBbXG4gIFsnR0VUJywgL2F0dHJpYnV0ZS9dLFxuICBbJ0dFVCcsIC9lbGVtZW50L10sXG4gIFsnR0VUJywgL3RleHQvXSxcbiAgWydHRVQnLCAvdGl0bGUvXSxcbiAgWydQT1NUJywgL2NsZWFyL10sXG4gIFsnUE9TVCcsIC9jbGljay9dLFxuICBbJ1BPU1QnLCAvZWxlbWVudC9dLFxuICBbJ1BPU1QnLCAvZm9yd2FyZC9dLFxuICBbJ1BPU1QnLCAvZnJhbWUvXSxcbiAgWydQT1NUJywgL2tleXMvXSxcbiAgWydQT1NUJywgL3JlZnJlc2gvXSxcbl0uY29uY2F0KE5PX1BST1hZX05BVElWRV9MSVNUKTtcbi8qIGVzbGludC1lbmFibGUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cblxuY29uc3QgTUVNT0laRURfRlVOQ1RJT05TID0gW1xuICAnZ2V0U3RhdHVzQmFySGVpZ2h0JyxcbiAgJ2dldERldmljZVBpeGVsUmF0aW8nLFxuICAnZ2V0U2NyZWVuSW5mbycsXG5dO1xuXG5jbGFzcyBYQ1VJVGVzdERyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9LCBzaG91bGRWYWxpZGF0ZUNhcHMgPSB0cnVlKSB7XG4gICAgc3VwZXIob3B0cywgc2hvdWxkVmFsaWRhdGVDYXBzKTtcblxuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuXG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAnaWQnLFxuICAgICAgJ25hbWUnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJy1pb3MgcHJlZGljYXRlIHN0cmluZycsXG4gICAgICAnLWlvcyBjbGFzcyBjaGFpbicsXG4gICAgICAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICBdO1xuICAgIHRoaXMud2ViTG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAnbGluayB0ZXh0JyxcbiAgICAgICdjc3Mgc2VsZWN0b3InLFxuICAgICAgJ3RhZyBuYW1lJyxcbiAgICAgICdsaW5rIHRleHQnLFxuICAgICAgJ3BhcnRpYWwgbGluayB0ZXh0JyxcbiAgICBdO1xuICAgIHRoaXMucmVzZXRJb3MoKTtcbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKERFRkFVTFRfU0VUVElOR1MsIHRoaXMub25TZXR0aW5nc1VwZGF0ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmxvZ3MgPSB7fTtcblxuICAgIC8vIG1lbW9pemUgZnVuY3Rpb25zIGhlcmUsIHNvIHRoYXQgdGhleSBhcmUgZG9uZSBvbiBhIHBlci1pbnN0YW5jZSBiYXNpc1xuICAgIGZvciAoY29uc3QgZm4gb2YgTUVNT0laRURfRlVOQ1RJT05TKSB7XG4gICAgICB0aGlzW2ZuXSA9IF8ubWVtb2l6ZSh0aGlzW2ZuXSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgIT09ICduYXRpdmVXZWJUYXAnICYmIGtleSAhPT0gJ25hdGl2ZVdlYlRhcFN0cmljdCcpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJywge1xuICAgICAgICBzZXR0aW5nczoge1trZXldOiB2YWx1ZX1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm9wdHNba2V5XSA9ICEhdmFsdWU7XG4gIH1cblxuICByZXNldElvcyAoKSB7XG4gICAgdGhpcy5vcHRzID0gdGhpcy5vcHRzIHx8IHt9O1xuICAgIHRoaXMud2RhID0gbnVsbDtcbiAgICB0aGlzLm9wdHMuZGV2aWNlID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gW107XG4gICAgdGhpcy5zYWZhcmkgPSBmYWxzZTtcbiAgICB0aGlzLmNhY2hlZFdkYVN0YXR1cyA9IG51bGw7XG5cbiAgICB0aGlzLmN1cldlYkZyYW1lcyA9IFtdO1xuICAgIHRoaXMud2ViRWxlbWVudElkcyA9IFtdO1xuICAgIHRoaXMuX2N1cnJlbnRVcmwgPSBudWxsO1xuICAgIHRoaXMuY3VyQ29udGV4dCA9IG51bGw7XG4gICAgdGhpcy54Y29kZVZlcnNpb24gPSB7fTtcbiAgICB0aGlzLmNvbnRleHRzID0gW107XG4gICAgdGhpcy5pbXBsaWNpdFdhaXRNcyA9IDA7XG4gICAgdGhpcy5hc3luY2xpYldhaXRNcyA9IDA7XG4gICAgdGhpcy5wYWdlTG9hZE1zID0gNjAwMDtcbiAgICB0aGlzLmxhbmRzY2FwZVdlYkNvb3Jkc09mZnNldCA9IDA7XG4gICAgdGhpcy5yZW1vdGUgPSBudWxsO1xuICB9XG5cbiAgZ2V0IGRyaXZlckRhdGEgKCkge1xuICAgIC8vIFRPRE8gZmlsbCBvdXQgcmVzb3VyY2UgaW5mbyBoZXJlXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgYXN5bmMgZ2V0U3RhdHVzICgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuZHJpdmVySW5mbyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuZHJpdmVySW5mbyA9IGF3YWl0IGdldERyaXZlckluZm8oKTtcbiAgICB9XG4gICAgbGV0IHN0YXR1cyA9IHtidWlsZDoge3ZlcnNpb246IHRoaXMuZHJpdmVySW5mby52ZXJzaW9ufX07XG4gICAgaWYgKHRoaXMuY2FjaGVkV2RhU3RhdHVzKSB7XG4gICAgICBzdGF0dXMud2RhID0gdGhpcy5jYWNoZWRXZGFTdGF0dXM7XG4gICAgfVxuICAgIHJldHVybiBzdGF0dXM7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgdGhpcy5saWZlY3ljbGVEYXRhID0ge307IC8vIHRoaXMgaXMgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiB0aGUgc3RhdGUgd2Ugc3RhcnQgc28gd2hlbiB3ZSBkZWxldGUgdGhlIHNlc3Npb24gd2UgY2FuIHB1dCB0aGluZ3MgYmFja1xuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPIGFkZCB2YWxpZGF0aW9uIG9uIGNhcHNcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG4gICAgICB0aGlzLm9wdHMuc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0KCk7XG5cbiAgICAgIC8vIG1lcmdlIHNlcnZlciBjYXBhYmlsaXRpZXMgKyBkZXNpcmVkIGNhcGFiaWxpdGllc1xuICAgICAgY2FwcyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXJ2ZXJDYXBzLCBjYXBzKTtcbiAgICAgIC8vIHVwZGF0ZSB0aGUgdWRpZCB3aXRoIHdoYXQgaXMgYWN0dWFsbHkgdXNlZFxuICAgICAgY2Fwcy51ZGlkID0gdGhpcy5vcHRzLnVkaWQ7XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgbmF0aXZlV2ViVGFwIGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICduYXRpdmVXZWJUYXAnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtuYXRpdmVXZWJUYXA6IHRoaXMub3B0cy5uYXRpdmVXZWJUYXB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayBuYXRpdmVXZWJUYXBTdHJpY3QgY2FwYWJpbGl0eSBhcyBhIHNldHRpbmcgYXMgd2VsbFxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ25hdGl2ZVdlYlRhcFN0cmljdCcpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe25hdGl2ZVdlYlRhcFN0cmljdDogdGhpcy5vcHRzLm5hdGl2ZVdlYlRhcFN0cmljdH0pO1xuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIHVzZUpTT05Tb3VyY2UgY2FwYWJpbGl0eSBhcyBhIHNldHRpbmcgYXMgd2VsbFxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3VzZUpTT05Tb3VyY2UnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHt1c2VKU09OU291cmNlOiB0aGlzLm9wdHMudXNlSlNPTlNvdXJjZX0pO1xuICAgICAgfVxuXG4gICAgICBsZXQgd2RhU2V0dGluZ3MgPSB7XG4gICAgICAgIGVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXM6IERFRkFVTFRfU0VUVElOR1MuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcyxcbiAgICAgICAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogREVGQVVMVF9TRVRUSU5HUy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzLFxuICAgICAgfTtcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3MuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcyA9IHRoaXMub3B0cy5lbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3Nob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzID0gdGhpcy5vcHRzLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eScpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHkgPSB0aGlzLm9wdHMubWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdtanBlZ1NlcnZlckZyYW1lcmF0ZScpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLm1qcGVnU2VydmVyRnJhbWVyYXRlID0gdGhpcy5vcHRzLm1qcGVnU2VydmVyRnJhbWVyYXRlO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3NjcmVlbnNob3RRdWFsaXR5JykpIHtcbiAgICAgICAgbG9nLmluZm8oYFNldHRpbmcgdGhlIHF1YWxpdHkgb2YgcGhvbmUgc2NyZWVuc2hvdDogJyR7dGhpcy5vcHRzLnNjcmVlbnNob3RRdWFsaXR5fSdgKTtcbiAgICAgICAgd2RhU2V0dGluZ3Muc2NyZWVuc2hvdFF1YWxpdHkgPSB0aGlzLm9wdHMuc2NyZWVuc2hvdFF1YWxpdHk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgV0RBIGdldHMgb3VyIGRlZmF1bHRzIGluc3RlYWQgb2Ygd2hhdGV2ZXIgaXRzIG93biBtaWdodCBiZVxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh3ZGFTZXR0aW5ncyk7XG5cbiAgICAgIC8vIHR1cm4gb24gbWpwZWcgc3RyZWFtIHJlYWRpbmcgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCkge1xuICAgICAgICBsb2cuaW5mbyhgU3RhcnRpbmcgTUpQRUcgc3RyZWFtIHJlYWRpbmcgVVJMOiAnJHt0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsfSdgKTtcbiAgICAgICAgdGhpcy5tanBlZ1N0cmVhbSA9IG5ldyBtanBlZy5NSnBlZ1N0cmVhbSh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tanBlZ1N0cmVhbS5zdGFydCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtzZXNzaW9uSWQsIGNhcHNdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5lcnJvcihKU09OLnN0cmluZ2lmeShlKSk7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnQgKCkge1xuICAgIHRoaXMub3B0cy5ub1Jlc2V0ID0gISF0aGlzLm9wdHMubm9SZXNldDtcbiAgICB0aGlzLm9wdHMuZnVsbFJlc2V0ID0gISF0aGlzLm9wdHMuZnVsbFJlc2V0O1xuXG4gICAgYXdhaXQgcHJpbnRVc2VyKCk7XG5cbiAgICB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbiA9IG51bGw7IC8vIEZvciBXREEgYW5kIHhjb2RlYnVpbGRcbiAgICBjb25zdCB7ZGV2aWNlLCB1ZGlkLCByZWFsRGV2aWNlfSA9IGF3YWl0IHRoaXMuZGV0ZXJtaW5lRGV2aWNlKCk7XG4gICAgbG9nLmluZm8oYERldGVybWluaW5nIGRldmljZSB0byBydW4gdGVzdHMgb246IHVkaWQ6ICcke3VkaWR9JywgcmVhbCBkZXZpY2U6ICR7cmVhbERldmljZX1gKTtcbiAgICB0aGlzLm9wdHMuZGV2aWNlID0gZGV2aWNlO1xuICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICB0aGlzLm9wdHMucmVhbERldmljZSA9IHJlYWxEZXZpY2U7XG5cbiAgICBpZiAodGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRoKSB7XG4gICAgICBpZiAocmVhbERldmljZSkge1xuICAgICAgICBsb2cuaW5mbyhgVGhlICdzaW11bGF0b3JEZXZpY2VzU2V0UGF0aCcgY2FwYWJpbGl0eSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgU2ltdWxhdG9yIGRldmljZXNgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5pbmZvKGBTZXR0aW5nIHNpbXVsYXRvciBkZXZpY2VzIHNldCBwYXRoIHRvICcke3RoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aH0nYCk7XG4gICAgICAgIHRoaXMub3B0cy5kZXZpY2UuZGV2aWNlc1NldFBhdGggPSB0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCBpZiB0aGVyZSBpcyBubyBwbGF0Zm9ybVZlcnNpb24sIGdldCBpdCBmcm9tIHRoZSBkZXZpY2VcbiAgICBpZiAoIXRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gJiYgdGhpcy5vcHRzLmRldmljZSkge1xuICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgICBsb2cuaW5mbyhgTm8gcGxhdGZvcm1WZXJzaW9uIHNwZWNpZmllZC4gVXNpbmcgZGV2aWNlIHZlcnNpb246ICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259J2ApO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRWZXJzaW9uID0gbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24pO1xuICAgIGlmICh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICE9PSBub3JtYWxpemVkVmVyc2lvbikge1xuICAgICAgbG9nLmluZm8oYE5vcm1hbGl6ZWQgcGxhdGZvcm1WZXJzaW9uIGNhcGFiaWxpdHkgdmFsdWUgJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nIHRvICcke25vcm1hbGl6ZWRWZXJzaW9ufSdgKTtcbiAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBub3JtYWxpemVkVmVyc2lvbjtcbiAgICB9XG4gICAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzkuMycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBsYXRmb3JtIHZlcnNpb24gbXVzdCBiZSA5LjMgb3IgYWJvdmUuICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259JyBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgIH1cblxuICAgIGlmIChfLmlzRW1wdHkodGhpcy54Y29kZVZlcnNpb24pICYmICghdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsIHx8ICF0aGlzLm9wdHMucmVhbERldmljZSkpIHtcbiAgICAgIC8vIG5vIGB3ZWJEcml2ZXJBZ2VudFVybGAsIG9yIG9uIGEgc2ltdWxhdG9yLCBzbyB3ZSBuZWVkIGFuIFhjb2RlIHZlcnNpb25cbiAgICAgIHRoaXMueGNvZGVWZXJzaW9uID0gYXdhaXQgZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24oKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgneGNvZGVEZXRhaWxzUmV0cmlldmVkJyk7XG5cbiAgICBpZiAoXy50b0xvd2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSkgPT09ICdzYWZhcmknKSB7XG4gICAgICBsb2cuaW5mbygnU2FmYXJpIHRlc3QgcmVxdWVzdGVkJyk7XG4gICAgICB0aGlzLnNhZmFyaSA9IHRydWU7XG4gICAgICB0aGlzLm9wdHMuYXBwID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMgPSB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyB8fCB7fTtcbiAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IFNBRkFSSV9CVU5ETEVfSUQ7XG4gICAgICB0aGlzLl9jdXJyZW50VXJsID0gdGhpcy5vcHRzLnNhZmFyaUluaXRpYWxVcmwgfHwgKFxuICAgICAgICB0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICAgICAgPyAnaHR0cDovL2FwcGl1bS5pbydcbiAgICAgICAgICA6IGBodHRwOi8vJHt0aGlzLm9wdHMuYWRkcmVzc306JHt0aGlzLm9wdHMucG9ydH0vd2VsY29tZWBcbiAgICAgICk7XG4gICAgICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJzwnLCAnMTIuMicpKSB7XG4gICAgICAgIC8vIHRoaXMgb3B0aW9uIGRvZXMgbm90IHdvcmsgb24gMTIuMiBhbmQgYWJvdmVcbiAgICAgICAgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMuYXJncyA9IFsnLXUnLCB0aGlzLl9jdXJyZW50VXJsXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5hcHAgfHwgdGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyZUFwcCgpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBDb25maWd1cmVkJyk7XG5cbiAgICAvLyBmYWlsIHZlcnkgZWFybHkgaWYgdGhlIGFwcCBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0XG4gICAgLy8gb3IgaWYgYnVuZGxlIGlkIGRvZXNuJ3QgcG9pbnQgdG8gYW4gaW5zdGFsbGVkIGFwcFxuICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBhd2FpdCBjaGVja0FwcFByZXNlbnQodGhpcy5vcHRzLmFwcCk7XG5cbiAgICAgIGlmICghdGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IGF3YWl0IGV4dHJhY3RCdW5kbGVJZCh0aGlzLm9wdHMuYXBwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJ1blJlc2V0KCk7XG5cbiAgICB0aGlzLndkYSA9IG5ldyBXZWJEcml2ZXJBZ2VudCh0aGlzLnhjb2RlVmVyc2lvbiwgdGhpcy5vcHRzKTtcbiAgICAvLyBEZXJpdmVkIGRhdGEgcGF0aCByZXRyaWV2YWwgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvblxuICAgIC8vIFdlIGNvdWxkIHN0YXJ0IHRoYXQgbm93IGluIGJhY2tncm91bmQgYW5kIGdldCB0aGUgY2FjaGVkIHJlc3VsdFxuICAgIC8vIHdoZW5ldmVyIGl0IGlzIG5lZWRlZFxuICAgIHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCkuY2F0Y2goKGUpID0+IGxvZy5kZWJ1ZyhlKSk7XG5cbiAgICBjb25zdCBtZW1vaXplZExvZ0luZm8gPSBfLm1lbW9pemUoZnVuY3Rpb24gbG9nSW5mbyAoKSB7XG4gICAgICBsb2cuaW5mbyhcIidza2lwTG9nQ2FwdHVyZScgaXMgc2V0LiBTa2lwcGluZyBzdGFydGluZyBsb2dzIHN1Y2ggYXMgY3Jhc2gsIHN5c3RlbSwgc2FmYXJpIGNvbnNvbGUgYW5kIHNhZmFyaSBuZXR3b3JrLlwiKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydExvZ0NhcHR1cmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNraXBMb2dDYXB0dXJlKSB7XG4gICAgICAgIG1lbW9pemVkTG9nSW5mbygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc3RhcnRMb2dDYXB0dXJlKCk7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2xvZ0NhcHR1cmVTdGFydGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgaXNMb2dDYXB0dXJlU3RhcnRlZCA9IGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuXG4gICAgbG9nLmluZm8oYFNldHRpbmcgdXAgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdzaW11bGF0b3InfWApO1xuXG4gICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgaWYgKHRoaXMub3B0cy5zaHV0ZG93bk90aGVyU2ltdWxhdG9ycykge1xuICAgICAgICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKFNIVVRET1dOX09USEVSX0ZFQVRfTkFNRSk7XG4gICAgICAgIGF3YWl0IHNodXRkb3duT3RoZXJTaW11bGF0b3JzKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgfVxuXG4gICAgICAvLyB0aGlzIHNob3VsZCBiZSBkb25lIGJlZm9yZSB0aGUgc2ltdWxhdG9yIGlzIHN0YXJ0ZWRcbiAgICAgIC8vIGlmIGl0IGlzIGFscmVhZHkgcnVubmluZywgdGhpcyBjYXAgd29uJ3Qgd29yaywgd2hpY2ggaXMgZG9jdW1lbnRlZFxuICAgICAgaWYgKHRoaXMuaXNTYWZhcmkoKSAmJiB0aGlzLm9wdHMuc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMpIHtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMub3B0cy5kZXZpY2UudXBkYXRlU2FmYXJpR2xvYmFsU2V0dGluZ3ModGhpcy5vcHRzLnNhZmFyaUdsb2JhbFByZWZlcmVuY2VzKSkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgU2FmYXJpIGdsb2JhbCBwcmVmZXJlbmNlcyB1cGRhdGVkYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2NhbENvbmZpZyA9IGF3YWl0IHNldExvY2FsZUFuZFByZWZlcmVuY2VzKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cywgdGhpcy5pc1NhZmFyaSgpLCBhc3luYyAoc2ltKSA9PiB7XG4gICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHNpbSk7XG5cbiAgICAgICAgLy8gd2UgZG9uJ3Qga25vdyBpZiB0aGVyZSBuZWVkcyB0byBiZSBjaGFuZ2VzIGEgcHJpb3JpLCBzbyBjaGFuZ2UgZmlyc3QuXG4gICAgICAgIC8vIHNvbWV0aW1lcyB0aGUgc2h1dGRvd24gcHJvY2VzcyBjaGFuZ2VzIHRoZSBzZXR0aW5ncywgc28gcmVzZXQgdGhlbSxcbiAgICAgICAgLy8ga25vd2luZyB0aGF0IHRoZSBzaW0gaXMgYWxyZWFkeSBzaHV0XG4gICAgICAgIGF3YWl0IHNldExvY2FsZUFuZFByZWZlcmVuY2VzKHNpbSwgdGhpcy5vcHRzLCB0aGlzLmlzU2FmYXJpKCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCkge1xuICAgICAgICBjb25zdCBjZXJ0SGVhZCA9IF8udHJ1bmNhdGUodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQsIHtsZW5ndGg6IDIwfSk7XG4gICAgICAgIGxvZy5pbmZvKGBJbnN0YWxsaW5nIHRoZSBjdXN0b20gU1NMIGNlcnRpZmljYXRlICcke2NlcnRIZWFkfSdgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNpbWN0bC5hZGRSb290Q2VydGlmaWNhdGUodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQsIHtyYXc6IHRydWV9KTtcbiAgICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgICAgaWYgKGF3YWl0IGhhc1NTTENlcnQodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQsIHRoaXMub3B0cy51ZGlkKSkge1xuICAgICAgICAgICAgbG9nLmluZm8oYFNTTCBjZXJ0aWZpY2F0ZSAnJHtjZXJ0SGVhZH0nIGFscmVhZHkgaW5zdGFsbGVkYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZy5pbmZvKGBNYWtpbmcgc3VyZSBTaW11bGF0b3IgaXMgc2h1dCBkb3duLCAnICtcbiAgICAgICAgICAgICAgJ3NvIHRoYXQgU1NMIGNlcnRpZmljYXRlIGluc3RhbGxhdGlvbiB0YWtlcyBlZmZlY3RgKTtcbiAgICAgICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgICAgICAgYXdhaXQgaW5zdGFsbFNTTENlcnQodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQsIHRoaXMub3B0cy51ZGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dFdmVudCgnY3VzdG9tQ2VydEluc3RhbGxlZCcpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0U2ltKCk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMubGF1bmNoV2l0aElEQiAmJiB0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpZGIgPSBuZXcgSURCKHt1ZGlkfSk7XG4gICAgICAgICAgYXdhaXQgaWRiLmNvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLm9wdHMuZGV2aWNlLmlkYiA9IGlkYjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy5pbmZvKGBpZGIgd2lsbCBub3QgYmUgdXNlZCBmb3IgU2ltdWxhdG9yIGludGVyYWN0aW9uLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dFdmVudCgnc2ltU3RhcnRlZCcpO1xuICAgICAgaWYgKCFpc0xvZ0NhcHR1cmVTdGFydGVkKSB7XG4gICAgICAgIC8vIFJldHJ5IGxvZyBjYXB0dXJlIGlmIFNpbXVsYXRvciB3YXMgbm90IHJ1bm5pbmcgYmVmb3JlXG4gICAgICAgIGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBhd2FpdCB0aGlzLmluc3RhbGxBVVQoKTtcbiAgICAgIHRoaXMubG9nRXZlbnQoJ2FwcEluc3RhbGxlZCcpO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIG9ubHkgaGF2ZSBidW5kbGUgaWRlbnRpZmllciBhbmQgbm8gYXBwLCBmYWlsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZFxuICAgIGlmICghdGhpcy5vcHRzLmFwcCAmJiB0aGlzLm9wdHMuYnVuZGxlSWQgJiYgIXRoaXMuc2FmYXJpKSB7XG4gICAgICBpZiAoIWF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQodGhpcy5vcHRzLmJ1bmRsZUlkKSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQXBwIHdpdGggYnVuZGxlIGlkZW50aWZpZXIgJyR7dGhpcy5vcHRzLmJ1bmRsZUlkfScgdW5rbm93bmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMucGVybWlzc2lvbnMpIHtcbiAgICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgICAgbG9nLmRlYnVnKCdTZXR0aW5nIHRoZSByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgYmVmb3JlIFdEQSBpcyBzdGFydGVkJyk7XG4gICAgICAgIGZvciAoY29uc3QgW2J1bmRsZUlkLCBwZXJtaXNzaW9uc01hcHBpbmddIG9mIF8udG9QYWlycyhKU09OLnBhcnNlKHRoaXMub3B0cy5wZXJtaXNzaW9ucykpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zZXRQZXJtaXNzaW9ucyhidW5kbGVJZCwgcGVybWlzc2lvbnNNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLndhcm4oJ1NldHRpbmcgcGVybWlzc2lvbnMgaXMgb25seSBzdXBwb3J0ZWQgb24gU2ltdWxhdG9yLiAnICtcbiAgICAgICAgICAnVGhlIFwicGVybWlzc2lvbnNcIiBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCkge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmVuYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5jYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZGlzYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zdGFydFdkYSh0aGlzLm9wdHMuc2Vzc2lvbklkLCByZWFsRGV2aWNlKTtcblxuICAgIGF3YWl0IHRoaXMuc2V0UmVkdWNlTW90aW9uKHRoaXMub3B0cy5yZWR1Y2VNb3Rpb24pO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRJbml0aWFsT3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdvcmllbnRhdGlvblNldCcpO1xuXG4gICAgLy8gcmVhbCBkZXZpY2VzIHdpbGwgYmUgaGFuZGxlZCBsYXRlciwgYWZ0ZXIgdGhlIHdlYiBjb250ZXh0IGhhcyBiZWVuIGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSAmJiAhdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzEyLjInKSkge1xuICAgICAgLy8gb24gMTIuMiB0aGUgcGFnZSBpcyBub3Qgb3BlbmVkIGluIFdEQVxuICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5vcGVuVXJsKHRoaXMuX2N1cnJlbnRVcmwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgfHwgdGhpcy5vcHRzLmF1dG9XZWJ2aWV3KSB7XG4gICAgICBsb2cuZGVidWcoJ1dhaXRpbmcgZm9yIGluaXRpYWwgd2VidmlldycpO1xuICAgICAgYXdhaXQgdGhpcy5uYXZUb0luaXRpYWxXZWJ2aWV3KCk7XG4gICAgICB0aGlzLmxvZ0V2ZW50KCdpbml0aWFsV2Vidmlld05hdmlnYXRlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgJiYgdGhpcy5pc1JlYWxEZXZpY2UoKSAmJiB1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPj0nLCAnMTIuMicpKSB7XG4gICAgICAvLyBvbiAxMi4yIHRoZSBwYWdlIGlzIG5vdCBvcGVuZWQgaW4gV0RBXG4gICAgICBhd2FpdCB0aGlzLnNldFVybCh0aGlzLl9jdXJyZW50VXJsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgV2ViRHJpdmVyQWdlbnRSdW5uZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCAtIFRoZSBpZCBvZiB0aGUgdGFyZ2V0IHNlc3Npb24gdG8gbGF1bmNoIFdEQSB3aXRoLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlYWxEZXZpY2UgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgdGVzdCB0YXJnZXQgZGV2aWNlIGlzIGEgcmVhbCBkZXZpY2UuXG4gICAqL1xuICBhc3luYyBzdGFydFdkYSAoc2Vzc2lvbklkLCByZWFsRGV2aWNlKSB7XG4gICAgLy8gRG9uJ3QgY2xlYW51cCB0aGUgcHJvY2Vzc2VzIGlmIHdlYkRyaXZlckFnZW50VXJsIGlzIHNldFxuICAgIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgIGF3YWl0IHRoaXMud2RhLmNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZVBvcnRGb3J3YXJkaW5nID0gdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgJiYgIXRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsXG4gICAgICAmJiBpc0xvY2FsSG9zdCh0aGlzLndkYS53ZGFCYXNlVXJsKTtcbiAgICBhd2FpdCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWS5yZXF1ZXN0Q29ubmVjdGlvbih0aGlzLm9wdHMudWRpZCwgdGhpcy53ZGEudXJsLnBvcnQsIHtcbiAgICAgIGRldmljZVBvcnQ6IHVzZVBvcnRGb3J3YXJkaW5nID8gdGhpcy53ZGEud2RhUmVtb3RlUG9ydCA6IG51bGwsXG4gICAgICB1c2VQb3J0Rm9yd2FyZGluZyxcbiAgICB9KTtcblxuICAgIC8vIExldCBtdWx0aXBsZSBXREEgYmluYXJpZXMgd2l0aCBkaWZmZXJlbnQgZGVyaXZlZCBkYXRhIGZvbGRlcnMgYmUgYnVpbHQgaW4gcGFyYWxsZWxcbiAgICAvLyBDb25jdXJyZW50IFdEQSBidWlsZHMgZnJvbSB0aGUgc2FtZSBzb3VyY2Ugd2lsbCBjYXVzZSB4Y29kZWJ1aWxkIHN5bmNocm9uaXphdGlvbiBlcnJvcnNcbiAgICBsZXQgc3luY2hyb25pemF0aW9uS2V5ID0gWENVSVRlc3REcml2ZXIubmFtZTtcbiAgICBpZiAodGhpcy5vcHRzLnVzZVhjdGVzdHJ1bkZpbGUgfHwgIShhd2FpdCB0aGlzLndkYS5pc1NvdXJjZUZyZXNoKCkpKSB7XG4gICAgICAvLyBGaXJzdC10aW1lIGNvbXBpbGF0aW9uIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24sIHdoaWNoIGlzIGRvbmUgZmFzdGVyIGlmIGV4ZWN1dGVkXG4gICAgICAvLyBzZXF1ZW50aWFsbHkuIFhjb2RlYnVpbGQgc3ByZWFkcyB0aGUgbG9hZCBjYXVzZWQgYnkgdGhlIGNsYW5nIGNvbXBpbGVyIHRvIGFsbCBhdmFpbGFibGUgQ1BVIGNvcmVzXG4gICAgICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICAgICAgaWYgKGRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZShkZXJpdmVkRGF0YVBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYFN0YXJ0aW5nIFdlYkRyaXZlckFnZW50IGluaXRpYWxpemF0aW9uIHdpdGggdGhlIHN5bmNocm9uaXphdGlvbiBrZXkgJyR7c3luY2hyb25pemF0aW9uS2V5fSdgKTtcbiAgICBpZiAoU0hBUkVEX1JFU09VUkNFU19HVUFSRC5pc0J1c3koKSAmJiAhdGhpcy5vcHRzLmRlcml2ZWREYXRhUGF0aCAmJiAhdGhpcy5vcHRzLmJvb3RzdHJhcFBhdGgpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29uc2lkZXIgc2V0dGluZyBhIHVuaXF1ZSAnZGVyaXZlZERhdGFQYXRoJyBjYXBhYmlsaXR5IHZhbHVlIGZvciBlYWNoIHBhcmFsbGVsIGRyaXZlciBpbnN0YW5jZSBgICtcbiAgICAgICAgYHRvIGF2b2lkIGNvbmZsaWN0cyBhbmQgc3BlZWQgdXAgdGhlIGJ1aWxkaW5nIHByb2Nlc3NgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdHMudXNlTmV3V0RBKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ2FwYWJpbGl0eSAndXNlTmV3V0RBJyBzZXQgdG8gdHJ1ZSwgc28gdW5pbnN0YWxsaW5nIFdEQSBiZWZvcmUgcHJvY2VlZGluZ2ApO1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0QW5kVW5pbnN0YWxsKCk7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVVuaW5zdGFsbGVkJyk7XG4gICAgICB9IGVsc2UgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsKSkge1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5zZXR1cENhY2hpbmcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gbG9jYWwgaGVscGVyIGZvciB0aGUgdHdvIHBsYWNlcyB3ZSBuZWVkIHRvIHVuaW5zdGFsbCB3ZGEgYW5kIHJlLXN0YXJ0IGl0XG4gICAgICBjb25zdCBxdWl0QW5kVW5pbnN0YWxsID0gYXN5bmMgKG1zZykgPT4ge1xuICAgICAgICBsb2cuZGVidWcobXNnKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZygnTm90IHF1aXR0aW5nL3VuaW5zdGFsbGluZyBXZWJEcml2ZXJBZ2VudCBzaW5jZSB3ZWJEcml2ZXJBZ2VudFVybCBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkJyk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nLndhcm4oJ1F1aXR0aW5nIGFuZCB1bmluc3RhbGxpbmcgV2ViRHJpdmVyQWdlbnQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdEFuZFVuaW5zdGFsbCgpO1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfTtcblxuICAgICAgLy8gVXNlZCBpbiB0aGUgZm9sbG93aW5nIFdEQSBidWlsZFxuICAgICAgaWYgKHRoaXMub3B0cy5yZXN1bHRCdW5kbGVQYXRoKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXRyaWVzID0gdGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyaWVzIHx8ICh0aGlzLmlzUmVhbERldmljZSgpID8gV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyA6IFdEQV9TSU1fU1RBUlRVUF9SRVRSSUVTKTtcbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXRyeUludGVydmFsID0gdGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyeUludGVydmFsIHx8IFdEQV9TVEFSVFVQX1JFVFJZX0lOVEVSVkFMO1xuICAgICAgbG9nLmRlYnVnKGBUcnlpbmcgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQgJHtzdGFydHVwUmV0cmllc30gdGltZXMgd2l0aCAke3N0YXJ0dXBSZXRyeUludGVydmFsfW1zIGludGVydmFsYCk7XG4gICAgICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyaWVzKSAmJiAhdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGhlc2UgdmFsdWVzIGNhbiBiZSBjdXN0b21pemVkIGJ5IGNoYW5naW5nIHdkYVN0YXJ0dXBSZXRyaWVzL3dkYVN0YXJ0dXBSZXRyeUludGVydmFsIGNhcGFiaWxpdGllc2ApO1xuICAgICAgfVxuICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbChzdGFydHVwUmV0cmllcywgc3RhcnR1cFJldHJ5SW50ZXJ2YWwsIGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRBdHRlbXB0ZWQnKTtcbiAgICAgICAgaWYgKHJldHJ5Q291bnQgPiAwKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFJldHJ5aW5nIFdEQSBzdGFydHVwICgke3JldHJ5Q291bnQgKyAxfSBvZiAke3N0YXJ0dXBSZXRyaWVzfSlgKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIG9uIHhjb2RlIDEwIGluc3RhbGxkIHdpbGwgb2Z0ZW4gdHJ5IHRvIGFjY2VzcyB0aGUgYXBwIGZyb20gaXRzIHN0YWdpbmdcbiAgICAgICAgICAvLyBkaXJlY3RvcnkgYmVmb3JlIGZ1bGx5IG1vdmluZyBpdCB0aGVyZSwgYW5kIGZhaWwuIFJldHJ5aW5nIG9uY2VcbiAgICAgICAgICAvLyBpbW1lZGlhdGVseSBoZWxwc1xuICAgICAgICAgIGNvbnN0IHJldHJpZXMgPSB0aGlzLnhjb2RlVmVyc2lvbi5tYWpvciA+PSAxMCA/IDIgOiAxO1xuICAgICAgICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gYXdhaXQgcmV0cnkocmV0cmllcywgdGhpcy53ZGEubGF1bmNoLmJpbmQodGhpcy53ZGEpLCBzZXNzaW9uSWQsIHJlYWxEZXZpY2UpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydEZhaWxlZCcpO1xuICAgICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgICBsZXQgZXJyb3JNc2cgPSBgVW5hYmxlIHRvIGxhdW5jaCBXZWJEcml2ZXJBZ2VudCBiZWNhdXNlIG9mIHhjb2RlYnVpbGQgZmFpbHVyZTogJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgICAgICBlcnJvck1zZyArPSBgLiBNYWtlIHN1cmUgeW91IGZvbGxvdyB0aGUgdHV0b3JpYWwgYXQgJHtXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMfS4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgVHJ5IHRvIHJlbW92ZSB0aGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgYXBwbGljYXRpb24gZnJvbSB0aGUgZGV2aWNlIGlmIGl0IGlzIGluc3RhbGxlZCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBhbmQgcmVib290IHRoZSBkZXZpY2UuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgcXVpdEFuZFVuaW5zdGFsbChlcnJvck1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy53ZGEucHJveHlSZXFSZXMuYmluZCh0aGlzLndkYSk7XG4gICAgICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgIGxldCBvcmlnaW5hbFN0YWNrdHJhY2UgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwoMTUsIDEwMDAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVNlc3Npb25BdHRlbXB0ZWQnKTtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZygnU2VuZGluZyBjcmVhdGVTZXNzaW9uIGNvbW1hbmQgdG8gV0RBJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB0aGlzLmNhY2hlZFdkYVN0YXR1cyA9IHRoaXMuY2FjaGVkV2RhU3RhdHVzIHx8IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0V2RhU2Vzc2lvbih0aGlzLm9wdHMuYnVuZGxlSWQsIHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICBvcmlnaW5hbFN0YWNrdHJhY2UgPSBlcnIuc3RhY2s7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgRmFpbGVkIHRvIGNyZWF0ZSBXREEgc2Vzc2lvbiAoJHtlcnIubWVzc2FnZX0pLiBSZXRyeWluZy4uLmApO1xuICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU2Vzc2lvblN0YXJ0ZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKG9yaWdpbmFsU3RhY2t0cmFjZSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKG9yaWdpbmFsU3RhY2t0cmFjZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBlcnJvck1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQgc2Vzc2lvbiBiZWNhdXNlIG9mIHhjb2RlYnVpbGQgZmFpbHVyZTogJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgICAgICBlcnJvck1zZyArPSBgIE1ha2Ugc3VyZSB5b3UgZm9sbG93IHRoZSB0dXRvcmlhbCBhdCAke1dEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkx9LiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBUcnkgdG8gcmVtb3ZlIHRoZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBhcHBsaWNhdGlvbiBmcm9tIHRoZSBkZXZpY2UgaWYgaXQgaXMgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYGFuZCByZWJvb3QgdGhlIGRldmljZS5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBxdWl0QW5kVW5pbnN0YWxsKGVycm9yTXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdHMuY2xlYXJTeXN0ZW1GaWxlcyAmJiAhdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgICAgYXdhaXQgbWFya1N5c3RlbUZpbGVzRm9yQ2xlYW51cCh0aGlzLndkYSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBleHBlY3QgY2VydGFpbiBzb2NrZXQgZXJyb3JzIHVudGlsIHRoaXMgcG9pbnQsIGJ1dCBub3dcbiAgICAgICAgLy8gbWFyayB0aGluZ3MgYXMgZnVsbHkgd29ya2luZ1xuICAgICAgICB0aGlzLndkYS5mdWxseVN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydGVkJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJ1blJlc2V0IChvcHRzID0gbnVsbCkge1xuICAgIHRoaXMubG9nRXZlbnQoJ3Jlc2V0U3RhcnRlZCcpO1xuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICBhd2FpdCBydW5SZWFsRGV2aWNlUmVzZXQodGhpcy5vcHRzLmRldmljZSwgb3B0cyB8fCB0aGlzLm9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBydW5TaW11bGF0b3JSZXNldCh0aGlzLm9wdHMuZGV2aWNlLCBvcHRzIHx8IHRoaXMub3B0cyk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ3Jlc2V0Q29tcGxldGUnKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIGF3YWl0IHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgZm9yIChjb25zdCByZWNvcmRlciBvZiBfLmNvbXBhY3QoW3RoaXMuX3JlY2VudFNjcmVlblJlY29yZGVyLCB0aGlzLl9hdWRpb1JlY29yZGVyXSkpIHtcbiAgICAgIGF3YWl0IHJlY29yZGVyLmludGVycnVwdCh0cnVlKTtcbiAgICAgIGF3YWl0IHJlY29yZGVyLmNsZWFudXAoKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9wZXJmUmVjb3JkZXJzKSkge1xuICAgICAgYXdhaXQgQi5hbGwodGhpcy5fcGVyZlJlY29yZGVycy5tYXAoKHgpID0+IHguc3RvcCh0cnVlKSkpO1xuICAgICAgdGhpcy5fcGVyZlJlY29yZGVycyA9IFtdO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc3RvcCgpO1xuXG4gICAgaWYgKHRoaXMud2RhICYmICF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuY2xlYXJTeXN0ZW1GaWxlcykge1xuICAgICAgICBsZXQgc3luY2hyb25pemF0aW9uS2V5ID0gWENVSVRlc3REcml2ZXIubmFtZTtcbiAgICAgICAgY29uc3QgZGVyaXZlZERhdGFQYXRoID0gYXdhaXQgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgICAgICAgaWYgKGRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICAgIHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKGRlcml2ZWREYXRhUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGNsZWFyU3lzdGVtRmlsZXModGhpcy53ZGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnTm90IGNsZWFyaW5nIGxvZyBmaWxlcy4gVXNlIGBjbGVhclN5c3RlbUZpbGVzYCBjYXBhYmlsaXR5IHRvIHR1cm4gb24uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3RlKSB7XG4gICAgICBsb2cuZGVidWcoJ0ZvdW5kIGEgcmVtb3RlIGRlYnVnZ2VyIHNlc3Npb24uIFJlbW92aW5nLi4uJyk7XG4gICAgICBhd2FpdCB0aGlzLnN0b3BSZW1vdGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5ID09PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdHMsIHtcbiAgICAgICAgZW5mb3JjZVNpbXVsYXRvclNodXRkb3duOiB0cnVlLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkgJiYgIXRoaXMub3B0cy5ub1Jlc2V0ICYmICEhdGhpcy5vcHRzLmRldmljZSkge1xuICAgICAgaWYgKHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0pIHtcbiAgICAgICAgbG9nLmRlYnVnKGBEZWxldGluZyBzaW11bGF0b3IgY3JlYXRlZCBmb3IgdGhpcyBydW4gKHVkaWQ6ICcke3RoaXMub3B0cy51ZGlkfScpYCk7XG4gICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmRlbGV0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghXy5pc0VtcHR5KHRoaXMubG9ncykpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9ncy5zeXNsb2cuc3RvcENhcHR1cmUoKTtcbiAgICAgIHRoaXMubG9ncyA9IHt9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1qcGVnU3RyZWFtKSB7XG4gICAgICBsb2cuaW5mbygnQ2xvc2luZyBNSlBFRyBzdHJlYW0nKTtcbiAgICAgIHRoaXMubWpwZWdTdHJlYW0uc3RvcCgpO1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRJb3MoKTtcblxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gbnVsbDtcblxuXG4gICAgaWYgKHRoaXMud2RhICYmIHRoaXMud2RhLmZ1bGx5U3RhcnRlZCkge1xuICAgICAgaWYgKHRoaXMud2RhLmp3cHJveHkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3Nlc3Npb24vJHt0aGlzLnNlc3Npb25JZH1gLCAnREVMRVRFJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIGFuIGVycm9yIGhlcmUgc2hvdWxkIG5vdCBzaG9ydC1jaXJjdWl0IHRoZSByZXN0IG9mIGNsZWFuIHVwXG4gICAgICAgICAgbG9nLmRlYnVnKGBVbmFibGUgdG8gREVMRVRFIHNlc3Npb24gb24gV0RBOiAnJHtlcnIubWVzc2FnZX0nLiBDb250aW51aW5nIHNodXRkb3duLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsICYmIHRoaXMub3B0cy51c2VOZXdXREEpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZLnJlbGVhc2VDb25uZWN0aW9uKHRoaXMub3B0cy51ZGlkKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVDb21tYW5kIChjbWQsIC4uLmFyZ3MpIHtcbiAgICBsb2cuZGVidWcoYEV4ZWN1dGluZyBjb21tYW5kICcke2NtZH0nYCk7XG5cbiAgICBpZiAoY21kID09PSAncmVjZWl2ZUFzeW5jUmVzcG9uc2UnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWNlaXZlQXN5bmNSZXNwb25zZSguLi5hcmdzKTtcbiAgICB9XG4gICAgLy8gVE9ETzogb25jZSB0aGlzIGZpeCBnZXRzIGludG8gYmFzZSBkcml2ZXIgcmVtb3ZlIGZyb20gaGVyZVxuICAgIGlmIChjbWQgPT09ICdnZXRTdGF0dXMnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmV4ZWN1dGVDb21tYW5kKGNtZCwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBjb25maWd1cmVBcHAgKCkge1xuICAgIGZ1bmN0aW9uIGFwcElzUGFja2FnZU9yQnVuZGxlIChhcHApIHtcbiAgICAgIHJldHVybiAoL14oW2EtekEtWjAtOVxcLV9dK1xcLlthLXpBLVowLTlcXC1fXSspKyQvKS50ZXN0KGFwcCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGFwcCBuYW1lIGlzIGEgYnVuZGxlSWQgYXNzaWduIGl0IHRvIHRoZSBidW5kbGVJZCBwcm9wZXJ0eVxuICAgIGlmICghdGhpcy5vcHRzLmJ1bmRsZUlkICYmIGFwcElzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApKSB7XG4gICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSB0aGlzLm9wdHMuYXBwO1xuICAgICAgdGhpcy5vcHRzLmFwcCA9ICcnO1xuICAgIH1cbiAgICAvLyB3ZSBoYXZlIGEgYnVuZGxlIElELCBidXQgbm8gYXBwLCBvciBhcHAgaXMgYWxzbyBhIGJ1bmRsZVxuICAgIGlmICgodGhpcy5vcHRzLmJ1bmRsZUlkICYmIGFwcElzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5idW5kbGVJZCkpICYmXG4gICAgICAgICh0aGlzLm9wdHMuYXBwID09PSAnJyB8fCBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkpIHtcbiAgICAgIGxvZy5kZWJ1ZygnQXBwIGlzIGFuIGlPUyBidW5kbGUsIHdpbGwgYXR0ZW1wdCB0byBydW4gYXMgcHJlLWV4aXN0aW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9yIHN1cHBvcnRlZCBidWlsZC1pbiBhcHBzXG4gICAgc3dpdGNoIChfLnRvTG93ZXIodGhpcy5vcHRzLmFwcCkpIHtcbiAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gJ2NvbS5hcHBsZS5QcmVmZXJlbmNlcyc7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdjYWxlbmRhcic6XG4gICAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9ICdjb20uYXBwbGUubW9iaWxlY2FsJztcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gZG93bmxvYWQgaWYgbmVjZXNzYXJ5XG4gICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCAnLmFwcCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmVycm9yKGVycik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBhcHA6ICR7dGhpcy5vcHRzLmFwcH0uIGAgK1xuICAgICAgICBgQXBwIHBhdGhzIG5lZWQgdG8gYmUgYWJzb2x1dGUgb3IgYW4gVVJMIHRvIGEgY29tcHJlc3NlZCBhcHAgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZXRlcm1pbmVEZXZpY2UgKCkge1xuICAgIC8vIGluIHRoZSBvbmUgY2FzZSB3aGVyZSB3ZSBjcmVhdGUgYSBzaW0sIHdlIHdpbGwgc2V0IHRoaXMgc3RhdGVcbiAgICB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltID0gZmFsc2U7XG5cbiAgICAvLyBpZiB3ZSBnZXQgZ2VuZXJpYyBuYW1lcywgdHJhbnNsYXRlIHRoZW1cbiAgICB0aGlzLm9wdHMuZGV2aWNlTmFtZSA9IHRyYW5zbGF0ZURldmljZU5hbWUodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgdGhpcy5vcHRzLmRldmljZU5hbWUpO1xuXG4gICAgY29uc3Qgc2V0dXBWZXJzaW9uQ2FwcyA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uID0gYXdhaXQgZ2V0QW5kQ2hlY2tJb3NTZGtWZXJzaW9uKCk7XG4gICAgICBsb2cuaW5mbyhgaU9TIFNESyBWZXJzaW9uIHNldCB0byAnJHt0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbn0nYCk7XG4gICAgICBpZiAoIXRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gJiYgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24pIHtcbiAgICAgICAgbG9nLmluZm8oYE5vIHBsYXRmb3JtVmVyc2lvbiBzcGVjaWZpZWQuIFVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBYY29kZSBzdXBwb3J0czogJyR7dGhpcy5vcHRzLmlvc1Nka1ZlcnNpb259Jy4gYCArXG4gICAgICAgICAgYFRoaXMgbWF5IGNhdXNlIHByb2JsZW1zIGlmIGEgc2ltdWxhdG9yIGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIHBsYXRmb3JtIHZlcnNpb24uYCk7XG4gICAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24odGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRzLnVkaWQpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMudWRpZC50b0xvd2VyQ2FzZSgpID09PSAnYXV0bycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLm9wdHMudWRpZCA9IGF3YWl0IGRldGVjdFVkaWQoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gVHJ5aW5nIHRvIGZpbmQgbWF0Y2hpbmcgVURJRCBmb3IgU2ltdWxhdG9yXG4gICAgICAgICAgbG9nLndhcm4oYENhbm5vdCBkZXRlY3QgYW55IGNvbm5lY3RlZCByZWFsIGRldmljZXMuIEZhbGxpbmcgYmFjayB0byBTaW11bGF0b3IuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldEV4aXN0aW5nU2ltKHRoaXMub3B0cyk7XG4gICAgICAgICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgICAgICAgIC8vIE5vIG1hdGNoaW5nIFNpbXVsYXRvciBpcyBmb3VuZC4gVGhyb3cgYW4gZXJyb3JcbiAgICAgICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZGV0ZWN0IHVkaWQgZm9yICR7dGhpcy5vcHRzLmRldmljZU5hbWV9IFNpbXVsYXRvciBydW5uaW5nIGlPUyAke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTWF0Y2hpbmcgU2ltdWxhdG9yIGV4aXN0cyBhbmQgaXMgZm91bmQuIFVzZSBpdFxuICAgICAgICAgIHRoaXMub3B0cy51ZGlkID0gZGV2aWNlLnVkaWQ7XG4gICAgICAgICAgY29uc3QgZGV2aWNlUGxhdGZvcm0gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24oYXdhaXQgZGV2aWNlLmdldFBsYXRmb3JtVmVyc2lvbigpKTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAhPT0gZGV2aWNlUGxhdGZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBkZXZpY2VQbGF0Zm9ybTtcbiAgICAgICAgICAgIGxvZy5pbmZvKGBTZXQgcGxhdGZvcm1WZXJzaW9uIHRvICcke2RldmljZVBsYXRmb3JtfScgdG8gbWF0Y2ggdGhlIGRldmljZSB3aXRoIGdpdmVuIFVESURgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgc2V0dXBWZXJzaW9uQ2FwcygpO1xuICAgICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtYWtlIHN1cmUgaXQgaXMgYSBjb25uZWN0ZWQgZGV2aWNlLiBJZiBub3QsIHRoZSB1ZGlkIHBhc3NlZCBpbiBpcyBpbnZhbGlkXG4gICAgICAgIGNvbnN0IGRldmljZXMgPSBhd2FpdCBnZXRDb25uZWN0ZWREZXZpY2VzKCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQXZhaWxhYmxlIGRldmljZXM6ICR7ZGV2aWNlcy5qb2luKCcsICcpfWApO1xuICAgICAgICBpZiAoIWRldmljZXMuaW5jbHVkZXModGhpcy5vcHRzLnVkaWQpKSB7XG4gICAgICAgICAgLy8gY2hlY2sgZm9yIGEgcGFydGljdWxhciBzaW11bGF0b3JcbiAgICAgICAgICBsb2cuZGVidWcoYE5vIHJlYWwgZGV2aWNlIHdpdGggdWRpZCAnJHt0aGlzLm9wdHMudWRpZH0nLiBMb29raW5nIGZvciBzaW11bGF0b3JgKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0U2ltdWxhdG9yKHRoaXMub3B0cy51ZGlkLCB7XG4gICAgICAgICAgICAgIGRldmljZXNTZXRQYXRoOiB0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogdGhpcy5vcHRzLnVkaWR9O1xuICAgICAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRldmljZSBvciBzaW11bGF0b3IgVURJRDogJyR7dGhpcy5vcHRzLnVkaWR9J2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRSZWFsRGV2aWNlT2JqKHRoaXMub3B0cy51ZGlkKTtcbiAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiB0cnVlLCB1ZGlkOiB0aGlzLm9wdHMudWRpZH07XG4gICAgfVxuXG4gICAgLy8gTm93IHdlIGtub3cgZm9yIHN1cmUgdGhlIGRldmljZSB3aWxsIGJlIGEgU2ltdWxhdG9yXG4gICAgYXdhaXQgc2V0dXBWZXJzaW9uQ2FwcygpO1xuICAgIGlmICh0aGlzLm9wdHMuZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb24pIHtcbiAgICAgIGxvZy5kZWJ1ZyhgTmV3IHNpbXVsYXRvciBpcyByZXF1ZXN0ZWQuIElmIHRoaXMgaXMgbm90IHdhbnRlZCwgc2V0ICdlbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbicgY2FwYWJpbGl0eSB0byBmYWxzZWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IHNpbXVsYXRvciB0byB1c2UsIGdpdmVuIHRoZSBkZXNpcmVkIGNhcGFiaWxpdGllc1xuICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0RXhpc3RpbmdTaW0odGhpcy5vcHRzKTtcblxuICAgICAgLy8gY2hlY2sgZm9yIGFuIGV4aXN0aW5nIHNpbXVsYXRvclxuICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IGRldmljZS51ZGlkfTtcbiAgICAgIH1cblxuICAgICAgbG9nLmluZm8oJ1NpbXVsYXRvciB1ZGlkIG5vdCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIC8vIG5vIGRldmljZSBvZiB0aGlzIHR5cGUgZXhpc3RzLCBvciB0aGV5IHJlcXVlc3QgbmV3IHNpbSwgc28gY3JlYXRlIG9uZVxuICAgIGxvZy5pbmZvKCdVc2luZyBkZXNpcmVkIGNhcHMgdG8gY3JlYXRlIGEgbmV3IHNpbXVsYXRvcicpO1xuICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMuY3JlYXRlU2ltKCk7XG4gICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gIH1cblxuICBhc3luYyBzdGFydFNpbSAoKSB7XG4gICAgY29uc3QgcnVuT3B0cyA9IHtcbiAgICAgIHNjYWxlRmFjdG9yOiB0aGlzLm9wdHMuc2NhbGVGYWN0b3IsXG4gICAgICBjb25uZWN0SGFyZHdhcmVLZXlib2FyZDogISF0aGlzLm9wdHMuY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQsXG4gICAgICBwYXN0ZWJvYXJkQXV0b21hdGljU3luYzogdGhpcy5vcHRzLnNpbXVsYXRvclBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jID8/ICdvZmYnLFxuICAgICAgaXNIZWFkbGVzczogISF0aGlzLm9wdHMuaXNIZWFkbGVzcyxcbiAgICAgIHRyYWNlUG9pbnRlcjogdGhpcy5vcHRzLnNpbXVsYXRvclRyYWNlUG9pbnRlcixcbiAgICAgIGRldmljZVByZWZlcmVuY2VzOiB7fSxcbiAgICB9O1xuXG4gICAgLy8gYWRkIHRoZSB3aW5kb3cgY2VudGVyLCBpZiBpdCBpcyBzcGVjaWZpZWRcbiAgICBpZiAodGhpcy5vcHRzLlNpbXVsYXRvcldpbmRvd0NlbnRlcikge1xuICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dDZW50ZXIgPSB0aGlzLm9wdHMuU2ltdWxhdG9yV2luZG93Q2VudGVyO1xuICAgIH1cblxuICAgIGlmIChfLmlzSW50ZWdlcih0aGlzLm9wdHMuc2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQpKSB7XG4gICAgICBydW5PcHRzLnN0YXJ0dXBUaW1lb3V0ID0gdGhpcy5vcHRzLnNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0O1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgdG8gd29ya2Fyb3VuZCBYQ1Rlc3QgYnVnIGFib3V0IGNoYW5naW5nIFNpbXVsYXRvclxuICAgIC8vIG9yaWVudGF0aW9uIGlzIG5vdCBzeW5jaHJvbml6ZWQgdG8gdGhlIGFjdHVhbCB3aW5kb3cgb3JpZW50YXRpb25cbiAgICBjb25zdCBvcmllbnRhdGlvbiA9IF8uaXNTdHJpbmcodGhpcy5vcHRzLm9yaWVudGF0aW9uKSAmJiB0aGlzLm9wdHMub3JpZW50YXRpb24udG9VcHBlckNhc2UoKTtcbiAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7XG4gICAgICBjYXNlICdMQU5EU0NBUEUnOlxuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uID0gJ0xhbmRzY2FwZUxlZnQnO1xuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUgPSA5MDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdQT1JUUkFJVCc6XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24gPSAnUG9ydHJhaXQnO1xuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUgPSAwO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnJ1bihydW5PcHRzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNpbSAoKSB7XG4gICAgdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSA9IHRydWU7XG5cbiAgICAvLyBHZXQgcGxhdGZvcm0gbmFtZSBmcm9tIGNvbnN0IHNpbmNlIGl0IG11c3QgYmUgY2FzZSBzZW5zaXRpdmUgdG8gY3JlYXRlIGEgbmV3IHNpbXVsYXRvclxuICAgIGNvbnN0IHBsYXRmb3JtTmFtZSA9IHRoaXMuaXNUdk9TKCkgPyBQTEFURk9STV9OQU1FX1RWT1MgOiBQTEFURk9STV9OQU1FX0lPUztcblxuICAgIC8vIGNyZWF0ZSBzaW0gZm9yIGNhcHNcbiAgICBjb25zdCBzaW0gPSBhd2FpdCBjcmVhdGVTaW0odGhpcy5vcHRzLCBwbGF0Zm9ybU5hbWUpO1xuICAgIGxvZy5pbmZvKGBDcmVhdGVkIHNpbXVsYXRvciB3aXRoIHVkaWQgJyR7c2ltLnVkaWR9Jy5gKTtcblxuICAgIHJldHVybiBzaW07XG4gIH1cblxuICBhc3luYyBsYXVuY2hBcHAgKCkge1xuICAgIGNvbnN0IEFQUF9MQVVOQ0hfVElNRU9VVCA9IDIwICogMTAwMDtcblxuICAgIHRoaXMubG9nRXZlbnQoJ2FwcExhdW5jaEF0dGVtcHRlZCcpO1xuICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2ltY3RsLmxhdW5jaEFwcCh0aGlzLm9wdHMuYnVuZGxlSWQpO1xuXG4gICAgbGV0IGNoZWNrU3RhdHVzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICBsZXQgY3VycmVudEFwcCA9IHJlc3BvbnNlLmN1cnJlbnRBcHAuYnVuZGxlSUQ7XG4gICAgICBpZiAoY3VycmVudEFwcCAhPT0gdGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm9wdHMuYnVuZGxlSWR9IG5vdCBpbiBmb3JlZ3JvdW5kLiAke2N1cnJlbnRBcHB9IGlzIGluIGZvcmVncm91bmRgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbG9nLmluZm8oYFdhaXRpbmcgZm9yICcke3RoaXMub3B0cy5idW5kbGVJZH0nIHRvIGJlIGluIGZvcmVncm91bmRgKTtcbiAgICBsZXQgcmV0cmllcyA9IHBhcnNlSW50KEFQUF9MQVVOQ0hfVElNRU9VVCAvIDIwMCwgMTApO1xuICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgMjAwLCBjaGVja1N0YXR1cyk7XG4gICAgbG9nLmluZm8oYCR7dGhpcy5vcHRzLmJ1bmRsZUlkfSBpcyBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgdGhpcy5sb2dFdmVudCgnYXBwTGF1bmNoZWQnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0V2RhU2Vzc2lvbiAoYnVuZGxlSWQsIHByb2Nlc3NBcmd1bWVudHMpIHtcbiAgICBjb25zdCBhcmdzID0gcHJvY2Vzc0FyZ3VtZW50cyA/IChwcm9jZXNzQXJndW1lbnRzLmFyZ3MgfHwgW10pIDogW107XG4gICAgaWYgKCFfLmlzQXJyYXkoYXJncykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvY2Vzc0FyZ3VtZW50cy5hcmdzIGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXkuIGAgK1xuICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShhcmdzKX0gaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cbiAgICBjb25zdCBlbnYgPSBwcm9jZXNzQXJndW1lbnRzID8gKHByb2Nlc3NBcmd1bWVudHMuZW52IHx8IHt9KSA6IHt9O1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGVudikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvY2Vzc0FyZ3VtZW50cy5lbnYgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBiZSBhIGRpY3Rpb25hcnkuIGAgK1xuICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShlbnYpfSBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmxhbmd1YWdlKSkge1xuICAgICAgYXJncy5wdXNoKCctQXBwbGVMYW5ndWFnZXMnLCBgKCR7dGhpcy5vcHRzLmxhbmd1YWdlfSlgKTtcbiAgICAgIGFyZ3MucHVzaCgnLU5TTGFuZ3VhZ2VzJywgYCgke3RoaXMub3B0cy5sYW5ndWFnZX0pYCk7XG4gICAgfVxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5sb2NhbGUpKSB7XG4gICAgICBhcmdzLnB1c2goJy1BcHBsZUxvY2FsZScsIHRoaXMub3B0cy5sb2NhbGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgaWYgKF8uaXNOaWwodGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCkpIHtcbiAgICAgICAgdGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKF8uaXNOaWwodGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoKSkge1xuICAgICAgICB0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2ggPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3ZGFDYXBzID0ge1xuICAgICAgYnVuZGxlSWQ6IHRoaXMub3B0cy5hdXRvTGF1bmNoID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IGJ1bmRsZUlkLFxuICAgICAgYXJndW1lbnRzOiBhcmdzLFxuICAgICAgZW52aXJvbm1lbnQ6IGVudixcbiAgICAgIGV2ZW50bG9vcElkbGVEZWxheVNlYzogdGhpcy5vcHRzLndkYUV2ZW50bG9vcElkbGVEZWxheSA/PyAwLFxuICAgICAgc2hvdWxkV2FpdEZvclF1aWVzY2VuY2U6IHRoaXMub3B0cy53YWl0Rm9yUXVpZXNjZW5jZSA/PyB0cnVlLFxuICAgICAgc2hvdWxkVXNlVGVzdE1hbmFnZXJGb3JWaXNpYmlsaXR5RGV0ZWN0aW9uOiB0aGlzLm9wdHMuc2ltcGxlSXNWaXNpYmxlQ2hlY2sgPz8gZmFsc2UsXG4gICAgICBtYXhUeXBpbmdGcmVxdWVuY3k6IHRoaXMub3B0cy5tYXhUeXBpbmdGcmVxdWVuY3kgPz8gNjAsXG4gICAgICBzaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlcjogdGhpcy5vcHRzLnNob3VsZFVzZVNpbmdsZXRvblRlc3RNYW5hZ2VyID8/IHRydWUsXG4gICAgICB3YWl0Rm9ySWRsZVRpbWVvdXQ6IHRoaXMub3B0cy53YWl0Rm9ySWRsZVRpbWVvdXQsXG4gICAgICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiB0aGlzLm9wdHMuc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyxcbiAgICAgIGVsZW1lbnRSZXNwb25zZUZpZWxkczogdGhpcy5vcHRzLmVsZW1lbnRSZXNwb25zZUZpZWxkcyxcbiAgICAgIGRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90czogdGhpcy5vcHRzLmRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90cyxcbiAgICAgIHNob3VsZFRlcm1pbmF0ZUFwcDogdGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCA/PyB0cnVlLFxuICAgICAgZm9yY2VBcHBMYXVuY2g6IHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCA/PyB0cnVlLFxuICAgICAgdXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5OiB0aGlzLm9wdHMudXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5ID8/IHRydWUsXG4gICAgfTtcbiAgICBpZiAodGhpcy5vcHRzLmF1dG9BY2NlcHRBbGVydHMpIHtcbiAgICAgIHdkYUNhcHMuZGVmYXVsdEFsZXJ0QWN0aW9uID0gJ2FjY2VwdCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXV0b0Rpc21pc3NBbGVydHMpIHtcbiAgICAgIHdkYUNhcHMuZGVmYXVsdEFsZXJ0QWN0aW9uID0gJ2Rpc21pc3MnO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFt3ZGFDYXBzXSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHt9LFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgUHJveHkgbWV0aG9kcyBmcm9tIEJhc2VEcml2ZXJcbiAgcHJveHlBY3RpdmUgKCkge1xuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKCkge1xuICAgIGlmICh0aGlzLmlzV2VidmlldygpKSB7XG4gICAgICByZXR1cm4gTk9fUFJPWFlfV0VCX0xJU1Q7XG4gICAgfVxuICAgIHJldHVybiBOT19QUk9YWV9OQVRJVkVfTElTVDtcbiAgfVxuXG4gIGNhblByb3h5ICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzU2FmYXJpICgpIHtcbiAgICByZXR1cm4gISF0aGlzLnNhZmFyaTtcbiAgfVxuXG4gIGlzUmVhbERldmljZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0cy5yZWFsRGV2aWNlO1xuICB9XG5cbiAgaXNTaW11bGF0b3IgKCkge1xuICAgIHJldHVybiAhdGhpcy5vcHRzLnJlYWxEZXZpY2U7XG4gIH1cblxuICBpc1R2T1MgKCkge1xuICAgIHJldHVybiBfLnRvTG93ZXIodGhpcy5vcHRzLnBsYXRmb3JtTmFtZSkgPT09IF8udG9Mb3dlcihQTEFURk9STV9OQU1FX1RWT1MpO1xuICB9XG5cbiAgaXNXZWJ2aWV3ICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1NhZmFyaSgpIHx8IHRoaXMuaXNXZWJDb250ZXh0KCk7XG4gIH1cblxuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSAoc3RyYXRlZ3kpIHtcbiAgICBzdXBlci52YWxpZGF0ZUxvY2F0b3JTdHJhdGVneShzdHJhdGVneSwgdGhpcy5pc1dlYkNvbnRleHQoKSk7XG4gIH1cblxuICB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gICAgaWYgKCFzdXBlci52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIGNhcGFiaWxpdGllcyBoYXZlIG9uZSBvZiBgYXBwYCBvciBgYnVuZGxlSWRgXG4gICAgaWYgKF8udG9Mb3dlcihjYXBzLmJyb3dzZXJOYW1lKSAhPT0gJ3NhZmFyaScgJiYgIWNhcHMuYXBwICYmICFjYXBzLmJ1bmRsZUlkKSB7XG4gICAgICBsb2cuaW5mbygnVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIGluY2x1ZGUgbmVpdGhlciBhbiBhcHAgbm9yIGEgYnVuZGxlSWQuICcgK1xuICAgICAgICAnV2ViRHJpdmVyQWdlbnQgd2lsbCBiZSBzdGFydGVkIHdpdGhvdXQgdGhlIGRlZmF1bHQgYXBwJyk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlsLmNvZXJjZVZlcnNpb24oY2Fwcy5wbGF0Zm9ybVZlcnNpb24sIGZhbHNlKSkge1xuICAgICAgbG9nLndhcm4oYCdwbGF0Zm9ybVZlcnNpb24nIGNhcGFiaWxpdHkgKCcke2NhcHMucGxhdGZvcm1WZXJzaW9ufScpIGlzIG5vdCBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBgICtcbiAgICAgICAgYENvbnNpZGVyIGZpeGluZyBpdCBvciBiZSByZWFkeSB0byBleHBlcmllbmNlIGFuIGluY29uc2lzdGVudCBkcml2ZXIgYmVoYXZpb3IuYCk7XG4gICAgfVxuXG4gICAgbGV0IHZlcmlmeVByb2Nlc3NBcmd1bWVudCA9IChwcm9jZXNzQXJndW1lbnRzKSA9PiB7XG4gICAgICBjb25zdCB7YXJncywgZW52fSA9IHByb2Nlc3NBcmd1bWVudHM7XG4gICAgICBpZiAoIV8uaXNOaWwoYXJncykgJiYgIV8uaXNBcnJheShhcmdzKSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdygncHJvY2Vzc0FyZ3VtZW50cy5hcmdzIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncycpO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzTmlsKGVudikgJiYgIV8uaXNQbGFpbk9iamVjdChlbnYpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KCdwcm9jZXNzQXJndW1lbnRzLmVudiBtdXN0IGJlIGFuIG9iamVjdCA8a2V5LHZhbHVlPiBwYWlyIHthOmIsIGM6ZH0nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYHByb2Nlc3NBcmd1bWVudHNgIHNob3VsZCBiZSBKU09OIHN0cmluZyBvciBhbiBvYmplY3Qgd2l0aCBhcmd1bWVudHMgYW5kLyBlbnZpcm9ubWVudCBkZXRhaWxzXG4gICAgaWYgKGNhcHMucHJvY2Vzc0FyZ3VtZW50cykge1xuICAgICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIHRyeSB0byBwYXJzZSB0aGUgc3RyaW5nIGFzIEpTT05cbiAgICAgICAgICBjYXBzLnByb2Nlc3NBcmd1bWVudHMgPSBKU09OLnBhcnNlKGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgICAgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50KGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBwcm9jZXNzQXJndW1lbnRzIG11c3QgYmUgYSBKU09OIGZvcm1hdCBvciBhbiBvYmplY3Qgd2l0aCBmb3JtYXQge2FyZ3MgOiBbXSwgZW52IDoge2E6YiwgYzpkfX0uIGAgK1xuICAgICAgICAgICAgYEJvdGggZW52aXJvbm1lbnQgYW5kIGFyZ3VtZW50IGNhbiBiZSBudWxsLiBFcnJvcjogJHtlcnJ9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KGNhcHMucHJvY2Vzc0FyZ3VtZW50cykpIHtcbiAgICAgICAgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50KGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ3Byb2Nlc3NBcmd1bWVudHMgbXVzdCBiZSBhbiBvYmplY3QsIG9yIGEgc3RyaW5nIEpTT04gb2JqZWN0IHdpdGggZm9ybWF0IHthcmdzIDogW10sIGVudiA6IHthOmIsIGM6ZH19LiBgICtcbiAgICAgICAgICBgQm90aCBlbnZpcm9ubWVudCBhbmQgYXJndW1lbnQgY2FuIGJlIG51bGwuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhlcmUgaXMgbm8gcG9pbnQgaW4gaGF2aW5nIGBrZXljaGFpblBhdGhgIHdpdGhvdXQgYGtleWNoYWluUGFzc3dvcmRgXG4gICAgaWYgKChjYXBzLmtleWNoYWluUGF0aCAmJiAhY2Fwcy5rZXljaGFpblBhc3N3b3JkKSB8fCAoIWNhcHMua2V5Y2hhaW5QYXRoICYmIGNhcHMua2V5Y2hhaW5QYXNzd29yZCkpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBJZiAna2V5Y2hhaW5QYXRoJyBpcyBzZXQsICdrZXljaGFpblBhc3N3b3JkJyBtdXN0IGFsc28gYmUgc2V0IChhbmQgdmljZSB2ZXJzYSkuYCk7XG4gICAgfVxuXG4gICAgLy8gYHJlc2V0T25TZXNzaW9uU3RhcnRPbmx5YCBzaG91bGQgYmUgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgIHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSA9ICF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSkgfHwgdGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5O1xuICAgIHRoaXMub3B0cy51c2VOZXdXREEgPSB1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy51c2VOZXdXREEpID8gdGhpcy5vcHRzLnVzZU5ld1dEQSA6IGZhbHNlO1xuXG4gICAgaWYgKGNhcHMuY29tbWFuZFRpbWVvdXRzKSB7XG4gICAgICBjYXBzLmNvbW1hbmRUaW1lb3V0cyA9IG5vcm1hbGl6ZUNvbW1hbmRUaW1lb3V0cyhjYXBzLmNvbW1hbmRUaW1lb3V0cyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdH0gPSB1cmwucGFyc2UoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KHByb3RvY29sKSB8fCBfLmlzRW1wdHkoaG9zdCkpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCd3ZWJEcml2ZXJBZ2VudFVybCcgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBjb250YWluIGEgdmFsaWQgV2ViRHJpdmVyQWdlbnQgc2VydmVyIFVSTC4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAnJHtjYXBzLndlYkRyaXZlckFnZW50VXJsfScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLmJyb3dzZXJOYW1lKSB7XG4gICAgICBpZiAoY2Fwcy5idW5kbGVJZCkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ2Jyb3dzZXJOYW1lJyBjYW5ub3QgYmUgc2V0IHRvZ2V0aGVyIHdpdGggJ2J1bmRsZUlkJyBjYXBhYmlsaXR5YCk7XG4gICAgICB9XG4gICAgICAvLyB3YXJuIGlmIHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBib3RoIGBhcHBgIGFuZCBgYnJvd3NlciwgYWx0aG91Z2ggdGhpc1xuICAgICAgLy8gaXMgY29tbW9uIHdpdGggc2VsZW5pdW0gZ3JpZFxuICAgICAgaWYgKGNhcHMuYXBwKSB7XG4gICAgICAgIGxvZy53YXJuKGBUaGUgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMucGVybWlzc2lvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgW2J1bmRsZUlkLCBwZXJtc10gb2YgXy50b1BhaXJzKEpTT04ucGFyc2UoY2Fwcy5wZXJtaXNzaW9ucykpKSB7XG4gICAgICAgICAgaWYgKCFfLmlzU3RyaW5nKGJ1bmRsZUlkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShidW5kbGVJZCl9JyBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHBlcm1zKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShwZXJtcyl9JyBtdXN0IGJlIGEgSlNPTiBvYmplY3RgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCcke2NhcHMucGVybWlzc2lvbnN9JyBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIG9iamVjdCB3aXRoIGZvcm1hdCBgICtcbiAgICAgICAgICBge1wiPGJ1bmRsZUlkMT5cIjoge1wiPHNlcnZpY2VOYW1lMT5cIjogXCI8c2VydmljZVN0YXR1czE+XCIsIC4uLn0sIC4uLn0uIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2Fwcy5wbGF0Zm9ybVZlcnNpb24gJiYgIXV0aWwuY29lcmNlVmVyc2lvbihjYXBzLnBsYXRmb3JtVmVyc2lvbiwgZmFsc2UpKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJ3BsYXRmb3JtVmVyc2lvbicgbXVzdCBiZSBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBgICtcbiAgICAgICAgYCcke2NhcHMucGxhdGZvcm1WZXJzaW9ufScgaXMgZ2l2ZW4gaW5zdGVhZC5gKTtcbiAgICB9XG5cbiAgICAvLyBhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyBpcyBhbiBhcnJheSwgSlNPTiBhcnJheSwgb3Igc3RyaW5nXG4gICAgaWYgKGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMpIHtcbiAgICAgIGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMgPSB0aGlzLmhlbHBlcnMucGFyc2VDYXBzQXJyYXkoY2Fwcy5hZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyk7XG4gICAgfVxuXG4gICAgLy8gZmluYWxseSwgcmV0dXJuIHRydWUgc2luY2UgdGhlIHN1cGVyY2xhc3MgY2hlY2sgcGFzc2VkLCBhcyBkaWQgdGhpc1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbEFVVCAoKSB7XG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0odGhpcy5vcHRzLmFwcCwge1xuICAgICAgaXNTaW11bGF0b3I6IHRoaXMuaXNTaW11bGF0b3IoKSxcbiAgICAgIGlzVHZPUzogdGhpcy5pc1R2T1MoKSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9SZWFsRGV2aWNlKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5idW5kbGVJZCwge1xuICAgICAgICBub1Jlc2V0OiB0aGlzLm9wdHMubm9SZXNldCxcbiAgICAgICAgdGltZW91dDogdGhpcy5vcHRzLmFwcFB1c2hUaW1lb3V0LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGluc3RhbGxUb1NpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuYXBwLCB0aGlzLm9wdHMuYnVuZGxlSWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIG5ld1NpbXVsYXRvcjogdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLm90aGVyQXBwcykge1xuICAgICAgYXdhaXQgdGhpcy5pbnN0YWxsT3RoZXJBcHBzKHRoaXMub3B0cy5vdGhlckFwcHMpO1xuICAgIH1cblxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5pb3NJbnN0YWxsUGF1c2UpKSB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvNjg4OVxuICAgICAgbGV0IHBhdXNlID0gcGFyc2VJbnQodGhpcy5vcHRzLmlvc0luc3RhbGxQYXVzZSwgMTApO1xuICAgICAgbG9nLmRlYnVnKGBpb3NJbnN0YWxsUGF1c2Ugc2V0LiBQYXVzaW5nICR7cGF1c2V9IG1zIGJlZm9yZSBjb250aW51aW5nYCk7XG4gICAgICBhd2FpdCBCLmRlbGF5KHBhdXNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbnN0YWxsT3RoZXJBcHBzIChvdGhlckFwcHMpIHtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgbG9nLndhcm4oJ0NhcGFiaWxpdHkgb3RoZXJBcHBzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBTaW11bGF0b3JzJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBvdGhlckFwcHMgPSB0aGlzLmhlbHBlcnMucGFyc2VDYXBzQXJyYXkob3RoZXJBcHBzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIFwib3RoZXJBcHBzXCIgY2FwYWJpbGl0eTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3RoZXJBcHAgb2Ygb3RoZXJBcHBzKSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSwgb3RoZXJBcHAsIHVuZGVmaW5lZCwge1xuICAgICAgICBub1Jlc2V0OiB0aGlzLm9wdHMubm9SZXNldCxcbiAgICAgICAgbmV3U2ltdWxhdG9yOiB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZWR1Y2VNb3Rpb24gYXMgJ2lzRW5hYmxlZCcgb25seSB3aGVuIHRoZSBjYXBhYmlsaXRpZXMgaGFzICdyZWR1Y2VNb3Rpb24nXG4gICAqIFRoZSBjYWxsIGlzIGlnbm9yZWQgZm9yIHJlYWwgZGV2aWNlcy5cbiAgICogQHBhcmFtIHs/Ym9vbGVhbn0gaXNFbmFibGVkIFdldGhlciBlbmFibGUgcmVkdWNlTW90aW9uXG4gICAqL1xuICBhc3luYyBzZXRSZWR1Y2VNb3Rpb24gKGlzRW5hYmxlZCkge1xuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpIHx8ICFfLmlzQm9vbGVhbihpc0VuYWJsZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmluZm8oYFNldHRpbmcgcmVkdWNlTW90aW9uIHRvICR7aXNFbmFibGVkfWApO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe3JlZHVjZU1vdGlvbjogaXNFbmFibGVkfSk7XG4gIH1cblxuICBhc3luYyBzZXRJbml0aWFsT3JpZW50YXRpb24gKG9yaWVudGF0aW9uKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9yaWVudGF0aW9uKSkge1xuICAgICAgbG9nLmluZm8oJ1NraXBwaW5nIHNldHRpbmcgb2YgdGhlIGluaXRpYWwgZGlzcGxheSBvcmllbnRhdGlvbi4gJyArXG4gICAgICAgICdTZXQgdGhlIFwib3JpZW50YXRpb25cIiBjYXBhYmlsaXR5IHRvIGVpdGhlciBcIkxBTkRTQ0FQRVwiIG9yIFwiUE9SVFJBSVRcIiwgaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9yaWVudGF0aW9uID0gb3JpZW50YXRpb24udG9VcHBlckNhc2UoKTtcbiAgICBpZiAoIV8uaW5jbHVkZXMoWydMQU5EU0NBUEUnLCAnUE9SVFJBSVQnXSwgb3JpZW50YXRpb24pKSB7XG4gICAgICBsb2cuZGVidWcoYFVuYWJsZSB0byBzZXQgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHtvcmllbnRhdGlvbn0nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgU2V0dGluZyBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke29yaWVudGF0aW9ufSdgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9vcmllbnRhdGlvbicsICdQT1NUJywge29yaWVudGF0aW9ufSk7XG4gICAgICB0aGlzLm9wdHMuY3VyT3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gZmFpbGVkIHdpdGg6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgX2dldENvbW1hbmRUaW1lb3V0IChjbWROYW1lKSB7XG4gICAgaWYgKHRoaXMub3B0cy5jb21tYW5kVGltZW91dHMpIHtcbiAgICAgIGlmIChjbWROYW1lICYmIF8uaGFzKHRoaXMub3B0cy5jb21tYW5kVGltZW91dHMsIGNtZE5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzW2NtZE5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMub3B0cy5jb21tYW5kVGltZW91dHNbREVGQVVMVF9USU1FT1VUX0tFWV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZXNzaW9uIGNhcGFiaWxpdGllcyBtZXJnZWQgd2l0aCB3aGF0IFdEQSByZXBvcnRzXG4gICAqIFRoaXMgaXMgYSBsaWJyYXJ5IGNvbW1hbmQgYnV0IG5lZWRzIHRvIGNhbGwgJ3N1cGVyJyBzbyBjYW4ndCBiZSBvblxuICAgKiBhIGhlbHBlciBvYmplY3RcbiAgICovXG4gIGFzeW5jIGdldFNlc3Npb24gKCkge1xuICAgIC8vIGNhbGwgc3VwZXIgdG8gZ2V0IGV2ZW50IHRpbWluZ3MsIGV0Yy4uLlxuICAgIGNvbnN0IGRyaXZlclNlc3Npb24gPSBhd2FpdCBzdXBlci5nZXRTZXNzaW9uKCk7XG4gICAgaWYgKCF0aGlzLndkYUNhcHMpIHtcbiAgICAgIHRoaXMud2RhQ2FwcyA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvJywgJ0dFVCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZEdldERldmljZUNhcHMgPSBfLmlzQm9vbGVhbih0aGlzLm9wdHMuaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvKVxuICAgICAgPyB0aGlzLm9wdHMuaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvXG4gICAgICA6IHRydWU7IC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICBpZiAoc2hvdWxkR2V0RGV2aWNlQ2FwcyAmJiAhdGhpcy5kZXZpY2VDYXBzKSB7XG4gICAgICBjb25zdCB7c3RhdHVzQmFyU2l6ZSwgc2NhbGV9ID0gYXdhaXQgdGhpcy5nZXRTY3JlZW5JbmZvKCk7XG4gICAgICB0aGlzLmRldmljZUNhcHMgPSB7XG4gICAgICAgIHBpeGVsUmF0aW86IHNjYWxlLFxuICAgICAgICBzdGF0QmFySGVpZ2h0OiBzdGF0dXNCYXJTaXplLmhlaWdodCxcbiAgICAgICAgdmlld3BvcnRSZWN0OiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0UmVjdCgpLFxuICAgICAgfTtcbiAgICB9XG4gICAgbG9nLmluZm8oJ01lcmdpbmcgV0RBIGNhcHMgb3ZlciBBcHBpdW0gY2FwcyBmb3Igc2Vzc2lvbiBkZXRhaWwgcmVzcG9uc2UnKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7dWRpZDogdGhpcy5vcHRzLnVkaWR9LCBkcml2ZXJTZXNzaW9uLFxuICAgICAgdGhpcy53ZGFDYXBzLmNhcGFiaWxpdGllcywgdGhpcy5kZXZpY2VDYXBzIHx8IHt9KTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgIC8vIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHJlc2V0IGhhcHBlbnMgZXZlbiBpZiBub1Jlc2V0IGlzIHNldCB0byB0cnVlXG4gICAgICBsZXQgb3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG4gICAgICBvcHRzLm5vUmVzZXQgPSBmYWxzZTtcbiAgICAgIG9wdHMuZnVsbFJlc2V0ID0gZmFsc2U7XG4gICAgICBjb25zdCBzaHV0ZG93bkhhbmRsZXIgPSB0aGlzLnJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd247XG4gICAgICB0aGlzLnJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24gPSAoKSA9PiB7fTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUmVzZXQob3B0cyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24gPSBzaHV0ZG93bkhhbmRsZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLnJlc2V0KCk7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihYQ1VJVGVzdERyaXZlci5wcm90b3R5cGUsIGNvbW1hbmRzKTtcblxuZXhwb3J0IGRlZmF1bHQgWENVSVRlc3REcml2ZXI7XG5leHBvcnQgeyBYQ1VJVGVzdERyaXZlciB9O1xuIl0sImZpbGUiOiJsaWIvZHJpdmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
1287
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FIiwiQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiU0FGQVJJX0JVTkRMRV9JRCIsIldEQV9TSU1fU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyIsIldEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwiLCJXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCIsIkRFRkFVTFRfU0VUVElOR1MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJ1c2VKU09OU291cmNlIiwic2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyIsImVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMiLCJtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTZXJ2ZXJGcmFtZXJhdGUiLCJzY3JlZW5zaG90UXVhbGl0eSIsIm1qcGVnU2NhbGluZ0ZhY3RvciIsInJlZHVjZU1vdGlvbiIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJOT19QUk9YWV9OQVRJVkVfTElTVCIsIk5PX1BST1hZX1dFQl9MSVNUIiwiY29uY2F0IiwiTUVNT0laRURfRlVOQ1RJT05TIiwiWENVSVRlc3REcml2ZXIiLCJCYXNlRHJpdmVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJ3ZWJMb2NhdG9yU3RyYXRlZ2llcyIsInJlc2V0SW9zIiwic2V0dGluZ3MiLCJEZXZpY2VTZXR0aW5ncyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJiaW5kIiwibG9ncyIsImZuIiwiXyIsIm1lbW9pemUiLCJrZXkiLCJ2YWx1ZSIsInByb3h5Q29tbWFuZCIsIndkYSIsImRldmljZSIsImp3cFByb3h5QWN0aXZlIiwicHJveHlSZXFSZXMiLCJqd3BQcm94eUF2b2lkIiwic2FmYXJpIiwiY2FjaGVkV2RhU3RhdHVzIiwiY3VyV2ViRnJhbWVzIiwid2ViRWxlbWVudElkcyIsIl9jdXJyZW50VXJsIiwiY3VyQ29udGV4dCIsInhjb2RlVmVyc2lvbiIsImNvbnRleHRzIiwiaW1wbGljaXRXYWl0TXMiLCJhc3luY2xpYldhaXRNcyIsInBhZ2VMb2FkTXMiLCJsYW5kc2NhcGVXZWJDb29yZHNPZmZzZXQiLCJyZW1vdGUiLCJkcml2ZXJEYXRhIiwiZ2V0U3RhdHVzIiwiZHJpdmVySW5mbyIsInN0YXR1cyIsImJ1aWxkIiwidmVyc2lvbiIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwibGlmZWN5Y2xlRGF0YSIsInNlc3Npb25JZCIsImNhcHMiLCJzdGFydCIsIk9iamVjdCIsImFzc2lnbiIsInVkaWQiLCJoYXMiLCJ1cGRhdGVTZXR0aW5ncyIsIndkYVNldHRpbmdzIiwibG9nIiwiaW5mbyIsIm1qcGVnU2NyZWVuc2hvdFVybCIsIm1qcGVnU3RyZWFtIiwibWpwZWciLCJNSnBlZ1N0cmVhbSIsImUiLCJlcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWxldGVTZXNzaW9uIiwibm9SZXNldCIsImZ1bGxSZXNldCIsImlvc1Nka1ZlcnNpb24iLCJyZWFsRGV2aWNlIiwiZGV0ZXJtaW5lRGV2aWNlIiwic2ltdWxhdG9yRGV2aWNlc1NldFBhdGgiLCJkZXZpY2VzU2V0UGF0aCIsInBsYXRmb3JtVmVyc2lvbiIsImdldFBsYXRmb3JtVmVyc2lvbiIsIm5vcm1hbGl6ZWRWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsIkVycm9yIiwiaXNFbXB0eSIsIndlYkRyaXZlckFnZW50VXJsIiwibG9nRXZlbnQiLCJ0b0xvd2VyIiwiYXBwIiwidW5kZWZpbmVkIiwicHJvY2Vzc0FyZ3VtZW50cyIsImJ1bmRsZUlkIiwic2FmYXJpSW5pdGlhbFVybCIsImlzUmVhbERldmljZSIsImFkZHJlc3MiLCJwb3J0IiwiY29uZmlndXJlQXBwIiwicnVuUmVzZXQiLCJXZWJEcml2ZXJBZ2VudCIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwiY2F0Y2giLCJkZWJ1ZyIsIm1lbW9pemVkTG9nSW5mbyIsImxvZ0luZm8iLCJzdGFydExvZ0NhcHR1cmUiLCJza2lwTG9nQ2FwdHVyZSIsInJlc3VsdCIsImlzTG9nQ2FwdHVyZVN0YXJ0ZWQiLCJpc1NpbXVsYXRvciIsInNodXRkb3duT3RoZXJTaW11bGF0b3JzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJpc1NhZmFyaSIsInNhZmFyaUdsb2JhbFByZWZlcmVuY2VzIiwidXBkYXRlU2FmYXJpR2xvYmFsU2V0dGluZ3MiLCJsb2NhbENvbmZpZyIsInNpbSIsImN1c3RvbVNTTENlcnQiLCJjZXJ0SGVhZCIsInRydW5jYXRlIiwibGVuZ3RoIiwic2ltY3RsIiwiYWRkUm9vdENlcnRpZmljYXRlIiwicmF3IiwiaWduIiwic3RhcnRTaW0iLCJsYXVuY2hXaXRoSURCIiwiaWRiIiwiSURCIiwiY29ubmVjdCIsIm1lc3NhZ2UiLCJpbnN0YWxsQVVUIiwiaXNBcHBJbnN0YWxsZWQiLCJlcnJvckFuZFRocm93IiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uc01hcHBpbmciLCJ0b1BhaXJzIiwicGFyc2UiLCJzZXRQZXJtaXNzaW9ucyIsIndhcm4iLCJjYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQiLCJlbmFibGVDYWxlbmRhckFjY2VzcyIsImRpc2FibGVDYWxlbmRhckFjY2VzcyIsInN0YXJ0V2RhIiwic2V0UmVkdWNlTW90aW9uIiwic2V0SW5pdGlhbE9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iLCJvcGVuVXJsIiwiYXV0b1dlYnZpZXciLCJuYXZUb0luaXRpYWxXZWJ2aWV3Iiwic2V0VXJsIiwiaGFzVmFsdWUiLCJjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMiLCJ1c2VQb3J0Rm9yd2FyZGluZyIsIndkYUJhc2VVcmwiLCJERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSIsInJlcXVlc3RDb25uZWN0aW9uIiwidXJsIiwiZGV2aWNlUG9ydCIsIndkYVJlbW90ZVBvcnQiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJuYW1lIiwidXNlWGN0ZXN0cnVuRmlsZSIsImlzU291cmNlRnJlc2giLCJkZXJpdmVkRGF0YVBhdGgiLCJwYXRoIiwibm9ybWFsaXplIiwiaXNCdXN5IiwiYm9vdHN0cmFwUGF0aCIsImFjcXVpcmUiLCJ1c2VOZXdXREEiLCJxdWl0QW5kVW5pbnN0YWxsIiwic2V0dXBDYWNoaW5nIiwibXNnIiwicmVzdWx0QnVuZGxlUGF0aCIsInN0YXJ0dXBSZXRyaWVzIiwid2RhU3RhcnR1cFJldHJpZXMiLCJzdGFydHVwUmV0cnlJbnRlcnZhbCIsIndkYVN0YXJ0dXBSZXRyeUludGVydmFsIiwicmV0cnlDb3VudCIsInJldHJpZXMiLCJtYWpvciIsImxhdW5jaCIsImVyciIsImVycm9yTXNnIiwib3JpZ2luYWxTdGFja3RyYWNlIiwic3RhcnRXZGFTZXNzaW9uIiwic3RhY2siLCJjbGVhclN5c3RlbUZpbGVzIiwiZnVsbHlTdGFydGVkIiwic2VydmVyIiwicmVjb3JkZXIiLCJjb21wYWN0IiwiX3JlY2VudFNjcmVlblJlY29yZGVyIiwiX2F1ZGlvUmVjb3JkZXIiLCJpbnRlcnJ1cHQiLCJjbGVhbnVwIiwiX3BlcmZSZWNvcmRlcnMiLCJCIiwiYWxsIiwibWFwIiwieCIsInN0b3AiLCJzdG9wUmVtb3RlIiwicmVzZXRPblNlc3Npb25TdGFydE9ubHkiLCJlbmZvcmNlU2ltdWxhdG9yU2h1dGRvd24iLCJjcmVhdGVTaW0iLCJkZWxldGUiLCJzeXNsb2ciLCJzdG9wQ2FwdHVyZSIsImp3cHJveHkiLCJxdWl0IiwicmVsZWFzZUNvbm5lY3Rpb24iLCJleGVjdXRlQ29tbWFuZCIsImNtZCIsInJlY2VpdmVBc3luY1Jlc3BvbnNlIiwiYXBwSXNQYWNrYWdlT3JCdW5kbGUiLCJ0ZXN0IiwiaGVscGVycyIsImRldmljZU5hbWUiLCJzZXR1cFZlcnNpb25DYXBzIiwidG9Mb3dlckNhc2UiLCJkZXZpY2VQbGF0Zm9ybSIsImRldmljZXMiLCJqb2luIiwiaW5jbHVkZXMiLCJlbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbiIsInJ1bk9wdHMiLCJzY2FsZUZhY3RvciIsImNvbm5lY3RIYXJkd2FyZUtleWJvYXJkIiwicGFzdGVib2FyZEF1dG9tYXRpY1N5bmMiLCJzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsImlzSGVhZGxlc3MiLCJ0cmFjZVBvaW50ZXIiLCJzaW11bGF0b3JUcmFjZVBvaW50ZXIiLCJkZXZpY2VQcmVmZXJlbmNlcyIsIlNpbXVsYXRvcldpbmRvd0NlbnRlciIsImlzSW50ZWdlciIsInNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0Iiwic3RhcnR1cFRpbWVvdXQiLCJpc1N0cmluZyIsInRvVXBwZXJDYXNlIiwiU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24iLCJTaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlIiwicnVuIiwicGxhdGZvcm1OYW1lIiwiaXNUdk9TIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwiUExBVEZPUk1fTkFNRV9JT1MiLCJsYXVuY2hBcHAiLCJBUFBfTEFVTkNIX1RJTUVPVVQiLCJjaGVja1N0YXR1cyIsInJlc3BvbnNlIiwiY3VycmVudEFwcCIsImJ1bmRsZUlEIiwicGFyc2VJbnQiLCJpc0FycmF5IiwiZW52IiwiaXNQbGFpbk9iamVjdCIsImxhbmd1YWdlIiwicHVzaCIsImxvY2FsZSIsImlzTmlsIiwic2hvdWxkVGVybWluYXRlQXBwIiwiZm9yY2VBcHBMYXVuY2giLCJ3ZGFDYXBzIiwiYXV0b0xhdW5jaCIsImFyZ3VtZW50cyIsImVudmlyb25tZW50IiwiZXZlbnRsb29wSWRsZURlbGF5U2VjIiwid2RhRXZlbnRsb29wSWRsZURlbGF5Iiwic2hvdWxkV2FpdEZvclF1aWVzY2VuY2UiLCJ3YWl0Rm9yUXVpZXNjZW5jZSIsInNob3VsZFVzZVRlc3RNYW5hZ2VyRm9yVmlzaWJpbGl0eURldGVjdGlvbiIsInNpbXBsZUlzVmlzaWJsZUNoZWNrIiwibWF4VHlwaW5nRnJlcXVlbmN5Iiwic2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIiLCJ3YWl0Rm9ySWRsZVRpbWVvdXQiLCJlbGVtZW50UmVzcG9uc2VGaWVsZHMiLCJkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMiLCJ1c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3kiLCJhdXRvQWNjZXB0QWxlcnRzIiwiZGVmYXVsdEFsZXJ0QWN0aW9uIiwiYXV0b0Rpc21pc3NBbGVydHMiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJwcm94eUFjdGl2ZSIsImdldFByb3h5QXZvaWRMaXN0IiwiaXNXZWJ2aWV3IiwiY2FuUHJveHkiLCJpc1dlYkNvbnRleHQiLCJ2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSIsInN0cmF0ZWd5IiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsImNvZXJjZVZlcnNpb24iLCJ2ZXJpZnlQcm9jZXNzQXJndW1lbnQiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwiY29tbWFuZFRpbWVvdXRzIiwicHJvdG9jb2wiLCJob3N0IiwicGVybXMiLCJhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyIsInBhcnNlQ2Fwc0FycmF5IiwidGltZW91dCIsImFwcFB1c2hUaW1lb3V0IiwibmV3U2ltdWxhdG9yIiwib3RoZXJBcHBzIiwiaW5zdGFsbE90aGVyQXBwcyIsImlvc0luc3RhbGxQYXVzZSIsInBhdXNlIiwiZGVsYXkiLCJhcHBzTGlzdCIsImFwcFBhdGhzIiwib3RoZXJBcHAiLCJpc0VuYWJsZWQiLCJpc0Jvb2xlYW4iLCJjdXJPcmllbnRhdGlvbiIsIl9nZXRDb21tYW5kVGltZW91dCIsImNtZE5hbWUiLCJERUZBVUxUX1RJTUVPVVRfS0VZIiwiZ2V0U2Vzc2lvbiIsImRyaXZlclNlc3Npb24iLCJzaG91bGRHZXREZXZpY2VDYXBzIiwiaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvIiwiZGV2aWNlQ2FwcyIsInN0YXR1c0JhclNpemUiLCJzY2FsZSIsImdldFNjcmVlbkluZm8iLCJwaXhlbFJhdGlvIiwic3RhdEJhckhlaWdodCIsImhlaWdodCIsInZpZXdwb3J0UmVjdCIsImdldFZpZXdwb3J0UmVjdCIsInJlc2V0IiwiY2xvbmVEZWVwIiwic2h1dGRvd25IYW5kbGVyIiwicmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVFBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLHdCQUF3QixHQUFHLHFCQUFqQztBQUNBLE1BQU1DLDRCQUE0QixHQUFHLDhCQUFyQztBQUVBLE1BQU1DLGlCQUFpQixHQUFHO0FBQ3hCQyxFQUFBQSxpQkFBaUIsRUFBRSxLQURLO0FBRXhCQyxFQUFBQSxzQkFBc0IsRUFBRSxLQUZBO0FBR3hCQyxFQUFBQSxXQUFXLEVBQUUsRUFIVztBQUl4QkMsRUFBQUEsUUFBUSxFQUFFLEtBSmM7QUFLeEJDLEVBQUFBLGlCQUFpQixFQUFFLElBTEs7QUFNeEJDLEVBQUFBLGVBQWUsRUFBRSxLQU5PO0FBT3hCQyxFQUFBQSxlQUFlLEVBQUUsSUFQTztBQVF4QkMsRUFBQUEsd0JBQXdCLEVBQUU7QUFSRixDQUExQjtBQVVBLE1BQU1DLGdCQUFnQixHQUFHLHdCQUF6QjtBQUNBLE1BQU1DLHVCQUF1QixHQUFHLENBQWhDO0FBQ0EsTUFBTUMsNEJBQTRCLEdBQUcsQ0FBckM7QUFDQSxNQUFNQyx5QkFBeUIsR0FBRyx5RkFBbEM7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RUFBTjtBQUNEOztBQWhvQ3FDOzs7QUFtb0N4Q3hSLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjbkQsY0FBYyxDQUFDOFUsU0FBN0IsRUFBd0NDLGNBQXhDO2VBRWUvVSxjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCwgbWpwZWcgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IHsgV2ViRHJpdmVyQWdlbnQgfSBmcm9tICdhcHBpdW0td2ViZHJpdmVyYWdlbnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQge1xuICBjcmVhdGVTaW0sIGdldEV4aXN0aW5nU2ltLCBydW5TaW11bGF0b3JSZXNldCwgaW5zdGFsbFRvU2ltdWxhdG9yLFxuICBzaHV0ZG93bk90aGVyU2ltdWxhdG9ycywgc2h1dGRvd25TaW11bGF0b3IsIHNldExvY2FsZUFuZFByZWZlcmVuY2VzXG59IGZyb20gJy4vc2ltdWxhdG9yLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgZ2V0U2ltdWxhdG9yLCBpbnN0YWxsU1NMQ2VydCwgaGFzU1NMQ2VydCB9IGZyb20gJ2FwcGl1bS1pb3Mtc2ltdWxhdG9yJztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwsIHJldHJ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSwgZXh0cmFjdEJ1bmRsZUlkIH0gZnJvbSAnLi9hcHAtdXRpbHMnO1xuaW1wb3J0IHsgZGVzaXJlZENhcENvbnN0cmFpbnRzLCBQTEFURk9STV9OQU1FX0lPUywgUExBVEZPUk1fTkFNRV9UVk9TIH0gZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHtcbiAgZGV0ZWN0VWRpZCwgZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24sIGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbixcbiAgY2hlY2tBcHBQcmVzZW50LCBnZXREcml2ZXJJbmZvLFxuICBjbGVhclN5c3RlbUZpbGVzLCB0cmFuc2xhdGVEZXZpY2VOYW1lLCBub3JtYWxpemVDb21tYW5kVGltZW91dHMsXG4gIERFRkFVTFRfVElNRU9VVF9LRVksIG1hcmtTeXN0ZW1GaWxlc0ZvckNsZWFudXAsXG4gIHByaW50VXNlciwgcmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzLFxuICBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24sIGlzTG9jYWxIb3N0XG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgcnVuUmVhbERldmljZVJlc2V0LCBpbnN0YWxsVG9SZWFsRGV2aWNlLFxuICBnZXRSZWFsRGV2aWNlT2JqXG59IGZyb20gJy4vcmVhbC1kZXZpY2UtbWFuYWdlbWVudCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgSURCIGZyb20gJ2FwcGl1bS1pZGInO1xuaW1wb3J0IERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZIGZyb20gJy4vZGV2aWNlLWNvbm5lY3Rpb25zLWZhY3RvcnknO1xuXG5cbmNvbnN0IFNIVVRET1dOX09USEVSX0ZFQVRfTkFNRSA9ICdzaHV0ZG93bl9vdGhlcl9zaW1zJztcbmNvbnN0IENVU1RPTUlaRV9SRVNVTFRfQlVORFBFX1BBVEggPSAnY3VzdG9taXplX3Jlc3VsdF9idW5kbGVfcGF0aCc7XG5cbmNvbnN0IGRlZmF1bHRTZXJ2ZXJDYXBzID0ge1xuICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICBicm93c2VyTmFtZTogJycsXG4gIHBsYXRmb3JtOiAnTUFDJyxcbiAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgbmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkOiBmYWxzZSxcbn07XG5jb25zdCBTQUZBUklfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5tb2JpbGVzYWZhcmknO1xuY29uc3QgV0RBX1NJTV9TVEFSVFVQX1JFVFJJRVMgPSAyO1xuY29uc3QgV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyA9IDE7XG5jb25zdCBXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLXhjdWl0ZXN0LWRyaXZlci9ibG9iL21hc3Rlci9kb2NzL3JlYWwtZGV2aWNlLWNvbmZpZy5tZCc7XG5jb25zdCBXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCA9IDEwMDAwO1xuY29uc3QgREVGQVVMVF9TRVRUSU5HUyA9IHtcbiAgbmF0aXZlV2ViVGFwOiBmYWxzZSxcbiAgbmF0aXZlV2ViVGFwU3RyaWN0OiBmYWxzZSxcbiAgdXNlSlNPTlNvdXJjZTogZmFsc2UsXG4gIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IHRydWUsXG4gIGVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXM6ICd0eXBlLGxhYmVsJyxcbiAgLy8gUmVhZCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL1dlYkRyaXZlckFnZW50L2Jsb2IvbWFzdGVyL1dlYkRyaXZlckFnZW50TGliL1V0aWxpdGllcy9GQkNvbmZpZ3VyYXRpb24ubSBmb3IgZm9sbG93aW5nIHNldHRpbmdzJyB2YWx1ZXNcbiAgbWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eTogMjUsXG4gIG1qcGVnU2VydmVyRnJhbWVyYXRlOiAxMCxcbiAgc2NyZWVuc2hvdFF1YWxpdHk6IDEsXG4gIG1qcGVnU2NhbGluZ0ZhY3RvcjogMTAwLFxuICAvLyBzZXQgYHJlZHVjZU1vdGlvbmAgdG8gYG51bGxgIHNvIHRoYXQgaXQgd2lsbCBiZSB2ZXJpZmllZCBidXQgc3RpbGwgc2V0IGVpdGhlciB0cnVlL2ZhbHNlXG4gIHJlZHVjZU1vdGlvbjogbnVsbCxcbn07XG4vLyBUaGlzIGxvY2sgYXNzdXJlcywgdGhhdCBlYWNoIGRyaXZlciBzZXNzaW9uIGRvZXMgbm90XG4vLyBhZmZlY3Qgc2hhcmVkIHJlc291cmNlcyBvZiB0aGUgb3RoZXIgcGFyYWxsZWwgc2Vzc2lvbnNcbmNvbnN0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5jb25zdCBOT19QUk9YWV9OQVRJVkVfTElTVCA9IFtcbiAgWydERUxFVEUnLCAvd2luZG93L10sXG4gIFsnR0VUJywgL15cXC9zZXNzaW9uXFwvW15cXC9dKyQvXSxcbiAgWydHRVQnLCAvYWxlcnRfdGV4dC9dLFxuICBbJ0dFVCcsIC9hbGVydFxcL1teXFwvXSsvXSxcbiAgWydHRVQnLCAvYXBwaXVtL10sXG4gIFsnR0VUJywgL2F0dHJpYnV0ZS9dLFxuICBbJ0dFVCcsIC9jb250ZXh0L10sXG4gIFsnR0VUJywgL2xvY2F0aW9uL10sXG4gIFsnR0VUJywgL2xvZy9dLFxuICBbJ0dFVCcsIC9zY3JlZW5zaG90L10sXG4gIFsnR0VUJywgL3NpemUvXSxcbiAgWydHRVQnLCAvc291cmNlL10sXG4gIFsnR0VUJywgL3RpbWVvdXRzJC9dLFxuICBbJ0dFVCcsIC91cmwvXSxcbiAgWydHRVQnLCAvd2luZG93L10sXG4gIFsnUE9TVCcsIC9hY2NlcHRfYWxlcnQvXSxcbiAgWydQT1NUJywgL2FjdGlvbnMkL10sXG4gIFsnUE9TVCcsIC9hbGVydF90ZXh0L10sXG4gIFsnUE9TVCcsIC9hbGVydFxcL1teXFwvXSsvXSxcbiAgWydQT1NUJywgL2FwcGl1bS9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvaXNfbG9ja2VkL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC9sb2NrL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC91bmxvY2svXSxcbiAgWydQT1NUJywgL2JhY2svXSxcbiAgWydQT1NUJywgL2NsZWFyL10sXG4gIFsnUE9TVCcsIC9jb250ZXh0L10sXG4gIFsnUE9TVCcsIC9kaXNtaXNzX2FsZXJ0L10sXG4gIFsnUE9TVCcsIC9lbGVtZW50XFwvYWN0aXZlL10sIC8vIE1KU09OV1AgZ2V0IGFjdGl2ZSBlbGVtZW50IHNob3VsZCBwcm94eVxuICBbJ1BPU1QnLCAvZWxlbWVudCQvXSxcbiAgWydQT1NUJywgL2VsZW1lbnRzJC9dLFxuICBbJ1BPU1QnLCAvZXhlY3V0ZS9dLFxuICBbJ1BPU1QnLCAva2V5cy9dLFxuICBbJ1BPU1QnLCAvbG9nL10sXG4gIFsnUE9TVCcsIC9tb3ZldG8vXSxcbiAgWydQT1NUJywgL3JlY2VpdmVfYXN5bmNfcmVzcG9uc2UvXSwgLy8gYWx3YXlzLCBpbiBjYXNlIGNvbnRleHQgc3dpdGNoZXMgd2hpbGUgd2FpdGluZ1xuICBbJ1BPU1QnLCAvc2Vzc2lvblxcL1teXFwvXStcXC9sb2NhdGlvbi9dLCAvLyBnZW8gbG9jYXRpb24sIGJ1dCBub3QgZWxlbWVudCBsb2NhdGlvblxuICBbJ1BPU1QnLCAvc2hha2UvXSxcbiAgWydQT1NUJywgL3RpbWVvdXRzL10sXG4gIFsnUE9TVCcsIC90b3VjaC9dLFxuICBbJ1BPU1QnLCAvdXJsL10sXG4gIFsnUE9TVCcsIC92YWx1ZS9dLFxuICBbJ1BPU1QnLCAvd2luZG93L10sXG4gIFsnREVMRVRFJywgL2Nvb2tpZS9dLFxuICBbJ0dFVCcsIC9jb29raWUvXSxcbiAgWydQT1NUJywgL2Nvb2tpZS9dLFxuXTtcbmNvbnN0IE5PX1BST1hZX1dFQl9MSVNUID0gW1xuICBbJ0dFVCcsIC9hdHRyaWJ1dGUvXSxcbiAgWydHRVQnLCAvZWxlbWVudC9dLFxuICBbJ0dFVCcsIC90ZXh0L10sXG4gIFsnR0VUJywgL3RpdGxlL10sXG4gIFsnUE9TVCcsIC9jbGVhci9dLFxuICBbJ1BPU1QnLCAvY2xpY2svXSxcbiAgWydQT1NUJywgL2VsZW1lbnQvXSxcbiAgWydQT1NUJywgL2ZvcndhcmQvXSxcbiAgWydQT1NUJywgL2ZyYW1lL10sXG4gIFsnUE9TVCcsIC9rZXlzL10sXG4gIFsnUE9TVCcsIC9yZWZyZXNoL10sXG5dLmNvbmNhdChOT19QUk9YWV9OQVRJVkVfTElTVCk7XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5cbmNvbnN0IE1FTU9JWkVEX0ZVTkNUSU9OUyA9IFtcbiAgJ2dldFN0YXR1c0JhckhlaWdodCcsXG4gICdnZXREZXZpY2VQaXhlbFJhdGlvJyxcbiAgJ2dldFNjcmVlbkluZm8nLFxuXTtcblxuY2xhc3MgWENVSVRlc3REcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG5cbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcblxuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAneHBhdGgnLFxuICAgICAgJ2lkJyxcbiAgICAgICduYW1lJyxcbiAgICAgICdjbGFzcyBuYW1lJyxcbiAgICAgICctaW9zIHByZWRpY2F0ZSBzdHJpbmcnLFxuICAgICAgJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgXTtcbiAgICB0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICAgICd0YWcgbmFtZScsXG4gICAgICAnbGluayB0ZXh0JyxcbiAgICAgICdwYXJ0aWFsIGxpbmsgdGV4dCcsXG4gICAgXTtcbiAgICB0aGlzLnJlc2V0SW9zKCk7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyhERUZBVUxUX1NFVFRJTkdTLCB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5sb2dzID0ge307XG5cbiAgICAvLyBtZW1vaXplIGZ1bmN0aW9ucyBoZXJlLCBzbyB0aGF0IHRoZXkgYXJlIGRvbmUgb24gYSBwZXItaW5zdGFuY2UgYmFzaXNcbiAgICBmb3IgKGNvbnN0IGZuIG9mIE1FTU9JWkVEX0ZVTkNUSU9OUykge1xuICAgICAgdGhpc1tmbl0gPSBfLm1lbW9pemUodGhpc1tmbl0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ICE9PSAnbmF0aXZlV2ViVGFwJyAmJiBrZXkgIT09ICduYXRpdmVXZWJUYXBTdHJpY3QnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hcHBpdW0vc2V0dGluZ3MnLCAnUE9TVCcsIHtcbiAgICAgICAgc2V0dGluZ3M6IHtba2V5XTogdmFsdWV9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5vcHRzW2tleV0gPSAhIXZhbHVlO1xuICB9XG5cbiAgcmVzZXRJb3MgKCkge1xuICAgIHRoaXMub3B0cyA9IHRoaXMub3B0cyB8fCB7fTtcbiAgICB0aGlzLndkYSA9IG51bGw7XG4gICAgdGhpcy5vcHRzLmRldmljZSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IFtdO1xuICAgIHRoaXMuc2FmYXJpID0gZmFsc2U7XG4gICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgICB0aGlzLndlYkVsZW1lbnRJZHMgPSBbXTtcbiAgICB0aGlzLl9jdXJyZW50VXJsID0gbnVsbDtcbiAgICB0aGlzLmN1ckNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0ge307XG4gICAgdGhpcy5jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSAwO1xuICAgIHRoaXMuYXN5bmNsaWJXYWl0TXMgPSAwO1xuICAgIHRoaXMucGFnZUxvYWRNcyA9IDYwMDA7XG4gICAgdGhpcy5sYW5kc2NhcGVXZWJDb29yZHNPZmZzZXQgPSAwO1xuICAgIHRoaXMucmVtb3RlID0gbnVsbDtcbiAgfVxuXG4gIGdldCBkcml2ZXJEYXRhICgpIHtcbiAgICAvLyBUT0RPIGZpbGwgb3V0IHJlc291cmNlIGluZm8gaGVyZVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmRyaXZlckluZm8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmRyaXZlckluZm8gPSBhd2FpdCBnZXREcml2ZXJJbmZvKCk7XG4gICAgfVxuICAgIGxldCBzdGF0dXMgPSB7YnVpbGQ6IHt2ZXJzaW9uOiB0aGlzLmRyaXZlckluZm8udmVyc2lvbn19O1xuICAgIGlmICh0aGlzLmNhY2hlZFdkYVN0YXR1cykge1xuICAgICAgc3RhdHVzLndkYSA9IHRoaXMuY2FjaGVkV2RhU3RhdHVzO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRoaXMubGlmZWN5Y2xlRGF0YSA9IHt9OyAvLyB0aGlzIGlzIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHN0YXRlIHdlIHN0YXJ0IHNvIHdoZW4gd2UgZGVsZXRlIHRoZSBzZXNzaW9uIHdlIGNhbiBwdXQgdGhpbmdzIGJhY2tcbiAgICB0cnkge1xuICAgICAgLy8gVE9ETyBhZGQgdmFsaWRhdGlvbiBvbiBjYXBzXG4gICAgICBsZXQgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuICAgICAgdGhpcy5vcHRzLnNlc3Npb25JZCA9IHNlc3Npb25JZDtcblxuICAgICAgYXdhaXQgdGhpcy5zdGFydCgpO1xuXG4gICAgICAvLyBtZXJnZSBzZXJ2ZXIgY2FwYWJpbGl0aWVzICsgZGVzaXJlZCBjYXBhYmlsaXRpZXNcbiAgICAgIGNhcHMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2VydmVyQ2FwcywgY2Fwcyk7XG4gICAgICAvLyB1cGRhdGUgdGhlIHVkaWQgd2l0aCB3aGF0IGlzIGFjdHVhbGx5IHVzZWRcbiAgICAgIGNhcHMudWRpZCA9IHRoaXMub3B0cy51ZGlkO1xuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIG5hdGl2ZVdlYlRhcCBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbmF0aXZlV2ViVGFwJykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7bmF0aXZlV2ViVGFwOiB0aGlzLm9wdHMubmF0aXZlV2ViVGFwfSk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgbmF0aXZlV2ViVGFwU3RyaWN0IGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICduYXRpdmVXZWJUYXBTdHJpY3QnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtuYXRpdmVXZWJUYXBTdHJpY3Q6IHRoaXMub3B0cy5uYXRpdmVXZWJUYXBTdHJpY3R9KTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayB1c2VKU09OU291cmNlIGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICd1c2VKU09OU291cmNlJykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7dXNlSlNPTlNvdXJjZTogdGhpcy5vcHRzLnVzZUpTT05Tb3VyY2V9KTtcbiAgICAgIH1cblxuICAgICAgbGV0IHdkYVNldHRpbmdzID0ge1xuICAgICAgICBlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzOiBERUZBVUxUX1NFVFRJTkdTLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMsXG4gICAgICAgIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IERFRkFVTFRfU0VUVElOR1Muc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyxcbiAgICAgIH07XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcycpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMgPSB0aGlzLm9wdHMuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcztcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3Muc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyA9IHRoaXMub3B0cy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ21qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHknKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5tanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5ID0gdGhpcy5vcHRzLm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHk7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbWpwZWdTZXJ2ZXJGcmFtZXJhdGUnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5tanBlZ1NlcnZlckZyYW1lcmF0ZSA9IHRoaXMub3B0cy5tanBlZ1NlcnZlckZyYW1lcmF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdzY3JlZW5zaG90UXVhbGl0eScpKSB7XG4gICAgICAgIGxvZy5pbmZvKGBTZXR0aW5nIHRoZSBxdWFsaXR5IG9mIHBob25lIHNjcmVlbnNob3Q6ICcke3RoaXMub3B0cy5zY3JlZW5zaG90UXVhbGl0eX0nYCk7XG4gICAgICAgIHdkYVNldHRpbmdzLnNjcmVlbnNob3RRdWFsaXR5ID0gdGhpcy5vcHRzLnNjcmVlbnNob3RRdWFsaXR5O1xuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIFdEQSBnZXRzIG91ciBkZWZhdWx0cyBpbnN0ZWFkIG9mIHdoYXRldmVyIGl0cyBvd24gbWlnaHQgYmVcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Mod2RhU2V0dGluZ3MpO1xuXG4gICAgICAvLyB0dXJuIG9uIG1qcGVnIHN0cmVhbSByZWFkaW5nIGlmIHJlcXVlc3RlZFxuICAgICAgaWYgKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpIHtcbiAgICAgICAgbG9nLmluZm8oYFN0YXJ0aW5nIE1KUEVHIHN0cmVhbSByZWFkaW5nIFVSTDogJyR7dGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybH0nYCk7XG4gICAgICAgIHRoaXMubWpwZWdTdHJlYW0gPSBuZXcgbWpwZWcuTUpwZWdTdHJlYW0odGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCk7XG4gICAgICAgIGF3YWl0IHRoaXMubWpwZWdTdHJlYW0uc3RhcnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbc2Vzc2lvbklkLCBjYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZSkpO1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICB0aGlzLm9wdHMubm9SZXNldCA9ICEhdGhpcy5vcHRzLm5vUmVzZXQ7XG4gICAgdGhpcy5vcHRzLmZ1bGxSZXNldCA9ICEhdGhpcy5vcHRzLmZ1bGxSZXNldDtcblxuICAgIGF3YWl0IHByaW50VXNlcigpO1xuXG4gICAgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24gPSBudWxsOyAvLyBGb3IgV0RBIGFuZCB4Y29kZWJ1aWxkXG4gICAgY29uc3Qge2RldmljZSwgdWRpZCwgcmVhbERldmljZX0gPSBhd2FpdCB0aGlzLmRldGVybWluZURldmljZSgpO1xuICAgIGxvZy5pbmZvKGBEZXRlcm1pbmluZyBkZXZpY2UgdG8gcnVuIHRlc3RzIG9uOiB1ZGlkOiAnJHt1ZGlkfScsIHJlYWwgZGV2aWNlOiAke3JlYWxEZXZpY2V9YCk7XG4gICAgdGhpcy5vcHRzLmRldmljZSA9IGRldmljZTtcbiAgICB0aGlzLm9wdHMudWRpZCA9IHVkaWQ7XG4gICAgdGhpcy5vcHRzLnJlYWxEZXZpY2UgPSByZWFsRGV2aWNlO1xuXG4gICAgaWYgKHRoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aCkge1xuICAgICAgaWYgKHJlYWxEZXZpY2UpIHtcbiAgICAgICAgbG9nLmluZm8oYFRoZSAnc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgnIGNhcGFiaWxpdHkgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFNpbXVsYXRvciBkZXZpY2VzYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuaW5mbyhgU2V0dGluZyBzaW11bGF0b3IgZGV2aWNlcyBzZXQgcGF0aCB0byAnJHt0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGh9J2ApO1xuICAgICAgICB0aGlzLm9wdHMuZGV2aWNlLmRldmljZXNTZXRQYXRoID0gdGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQgaWYgdGhlcmUgaXMgbm8gcGxhdGZvcm1WZXJzaW9uLCBnZXQgaXQgZnJvbSB0aGUgZGV2aWNlXG4gICAgaWYgKCF0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICYmIHRoaXMub3B0cy5kZXZpY2UpIHtcbiAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmdldFBsYXRmb3JtVmVyc2lvbigpO1xuICAgICAgbG9nLmluZm8oYE5vIHBsYXRmb3JtVmVyc2lvbiBzcGVjaWZpZWQuIFVzaW5nIGRldmljZSB2ZXJzaW9uOiAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufSdgKTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkVmVyc2lvbiA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbih0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uKTtcbiAgICBpZiAodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAhPT0gbm9ybWFsaXplZFZlcnNpb24pIHtcbiAgICAgIGxvZy5pbmZvKGBOb3JtYWxpemVkIHBsYXRmb3JtVmVyc2lvbiBjYXBhYmlsaXR5IHZhbHVlICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259JyB0byAnJHtub3JtYWxpemVkVmVyc2lvbn0nYCk7XG4gICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gbm9ybWFsaXplZFZlcnNpb247XG4gICAgfVxuICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICc5LjMnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGF0Zm9ybSB2ZXJzaW9uIG11c3QgYmUgOS4zIG9yIGFib3ZlLiAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufScgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMueGNvZGVWZXJzaW9uKSAmJiAoIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCB8fCAhdGhpcy5vcHRzLnJlYWxEZXZpY2UpKSB7XG4gICAgICAvLyBubyBgd2ViRHJpdmVyQWdlbnRVcmxgLCBvciBvbiBhIHNpbXVsYXRvciwgc28gd2UgbmVlZCBhbiBYY29kZSB2ZXJzaW9uXG4gICAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IGF3YWl0IGdldEFuZENoZWNrWGNvZGVWZXJzaW9uKCk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ3hjb2RlRGV0YWlsc1JldHJpZXZlZCcpO1xuXG4gICAgaWYgKF8udG9Mb3dlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpID09PSAnc2FmYXJpJykge1xuICAgICAgbG9nLmluZm8oJ1NhZmFyaSB0ZXN0IHJlcXVlc3RlZCcpO1xuICAgICAgdGhpcy5zYWZhcmkgPSB0cnVlO1xuICAgICAgdGhpcy5vcHRzLmFwcCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzID0gdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMgfHwge307XG4gICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSBTQUZBUklfQlVORExFX0lEO1xuICAgICAgdGhpcy5fY3VycmVudFVybCA9IHRoaXMub3B0cy5zYWZhcmlJbml0aWFsVXJsIHx8IChcbiAgICAgICAgdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgICAgID8gJ2h0dHA6Ly9hcHBpdW0uaW8nXG4gICAgICAgICAgOiBgaHR0cDovLyR7dGhpcy5vcHRzLmFkZHJlc3N9OiR7dGhpcy5vcHRzLnBvcnR9L3dlbGNvbWVgXG4gICAgICApO1xuICAgICAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzEyLjInKSkge1xuICAgICAgICAvLyB0aGlzIG9wdGlvbiBkb2VzIG5vdCB3b3JrIG9uIDEyLjIgYW5kIGFib3ZlXG4gICAgICAgIHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzLmFyZ3MgPSBbJy11JywgdGhpcy5fY3VycmVudFVybF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXBwIHx8IHRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmVBcHAoKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgnYXBwQ29uZmlndXJlZCcpO1xuXG4gICAgLy8gZmFpbCB2ZXJ5IGVhcmx5IGlmIHRoZSBhcHAgZG9lc24ndCBhY3R1YWxseSBleGlzdFxuICAgIC8vIG9yIGlmIGJ1bmRsZSBpZCBkb2Vzbid0IHBvaW50IHRvIGFuIGluc3RhbGxlZCBhcHBcbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgYXdhaXQgY2hlY2tBcHBQcmVzZW50KHRoaXMub3B0cy5hcHApO1xuXG4gICAgICBpZiAoIXRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSBhd2FpdCBleHRyYWN0QnVuZGxlSWQodGhpcy5vcHRzLmFwcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5ydW5SZXNldCgpO1xuXG4gICAgdGhpcy53ZGEgPSBuZXcgV2ViRHJpdmVyQWdlbnQodGhpcy54Y29kZVZlcnNpb24sIHRoaXMub3B0cyk7XG4gICAgLy8gRGVyaXZlZCBkYXRhIHBhdGggcmV0cmlldmFsIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb25cbiAgICAvLyBXZSBjb3VsZCBzdGFydCB0aGF0IG5vdyBpbiBiYWNrZ3JvdW5kIGFuZCBnZXQgdGhlIGNhY2hlZCByZXN1bHRcbiAgICAvLyB3aGVuZXZlciBpdCBpcyBuZWVkZWRcbiAgICB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpLmNhdGNoKChlKSA9PiBsb2cuZGVidWcoZSkpO1xuXG4gICAgY29uc3QgbWVtb2l6ZWRMb2dJbmZvID0gXy5tZW1vaXplKGZ1bmN0aW9uIGxvZ0luZm8gKCkge1xuICAgICAgbG9nLmluZm8oXCInc2tpcExvZ0NhcHR1cmUnIGlzIHNldC4gU2tpcHBpbmcgc3RhcnRpbmcgbG9ncyBzdWNoIGFzIGNyYXNoLCBzeXN0ZW0sIHNhZmFyaSBjb25zb2xlIGFuZCBzYWZhcmkgbmV0d29yay5cIik7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRMb2dDYXB0dXJlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0cy5za2lwTG9nQ2FwdHVyZSkge1xuICAgICAgICBtZW1vaXplZExvZ0luZm8oKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnN0YXJ0TG9nQ2FwdHVyZSgpO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCdsb2dDYXB0dXJlU3RhcnRlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGNvbnN0IGlzTG9nQ2FwdHVyZVN0YXJ0ZWQgPSBhd2FpdCBzdGFydExvZ0NhcHR1cmUoKTtcblxuICAgIGxvZy5pbmZvKGBTZXR0aW5nIHVwICR7dGhpcy5pc1JlYWxEZXZpY2UoKSA/ICdyZWFsIGRldmljZScgOiAnc2ltdWxhdG9yJ31gKTtcblxuICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuc2h1dGRvd25PdGhlclNpbXVsYXRvcnMpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVGZWF0dXJlRW5hYmxlZChTSFVURE9XTl9PVEhFUl9GRUFUX05BTUUpO1xuICAgICAgICBhd2FpdCBzaHV0ZG93bk90aGVyU2ltdWxhdG9ycyh0aGlzLm9wdHMuZGV2aWNlKTtcbiAgICAgIH1cblxuICAgICAgLy8gdGhpcyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgdGhlIHNpbXVsYXRvciBpcyBzdGFydGVkXG4gICAgICAvLyBpZiBpdCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRoaXMgY2FwIHdvbid0IHdvcmssIHdoaWNoIGlzIGRvY3VtZW50ZWRcbiAgICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgJiYgdGhpcy5vcHRzLnNhZmFyaUdsb2JhbFByZWZlcmVuY2VzKSB7XG4gICAgICAgIGlmIChhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnVwZGF0ZVNhZmFyaUdsb2JhbFNldHRpbmdzKHRoaXMub3B0cy5zYWZhcmlHbG9iYWxQcmVmZXJlbmNlcykpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYFNhZmFyaSBnbG9iYWwgcHJlZmVyZW5jZXMgdXBkYXRlZGApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9jYWxDb25maWcgPSBhd2FpdCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlcyh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMsIHRoaXMuaXNTYWZhcmkoKSwgYXN5bmMgKHNpbSkgPT4ge1xuICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcihzaW0pO1xuXG4gICAgICAgIC8vIHdlIGRvbid0IGtub3cgaWYgdGhlcmUgbmVlZHMgdG8gYmUgY2hhbmdlcyBhIHByaW9yaSwgc28gY2hhbmdlIGZpcnN0LlxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIHNodXRkb3duIHByb2Nlc3MgY2hhbmdlcyB0aGUgc2V0dGluZ3MsIHNvIHJlc2V0IHRoZW0sXG4gICAgICAgIC8vIGtub3dpbmcgdGhhdCB0aGUgc2ltIGlzIGFscmVhZHkgc2h1dFxuICAgICAgICBhd2FpdCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlcyhzaW0sIHRoaXMub3B0cywgdGhpcy5pc1NhZmFyaSgpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpIHtcbiAgICAgICAgY29uc3QgY2VydEhlYWQgPSBfLnRydW5jYXRlKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0LCB7bGVuZ3RoOiAyMH0pO1xuICAgICAgICBsb2cuaW5mbyhgSW5zdGFsbGluZyB0aGUgY3VzdG9tIFNTTCBjZXJ0aWZpY2F0ZSAnJHtjZXJ0SGVhZH0nYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaW1jdGwuYWRkUm9vdENlcnRpZmljYXRlKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0LCB7cmF3OiB0cnVlfSk7XG4gICAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICAgIGlmIChhd2FpdCBoYXNTU0xDZXJ0KHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0LCB0aGlzLm9wdHMudWRpZCkpIHtcbiAgICAgICAgICAgIGxvZy5pbmZvKGBTU0wgY2VydGlmaWNhdGUgJyR7Y2VydEhlYWR9JyBhbHJlYWR5IGluc3RhbGxlZGApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgTWFraW5nIHN1cmUgU2ltdWxhdG9yIGlzIHNodXQgZG93biwgJyArXG4gICAgICAgICAgICAgICdzbyB0aGF0IFNTTCBjZXJ0aWZpY2F0ZSBpbnN0YWxsYXRpb24gdGFrZXMgZWZmZWN0YCk7XG4gICAgICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlKTtcbiAgICAgICAgICAgIGF3YWl0IGluc3RhbGxTU0xDZXJ0KHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0LCB0aGlzLm9wdHMudWRpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2N1c3RvbUNlcnRJbnN0YWxsZWQnKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydFNpbSgpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmxhdW5jaFdpdGhJREIgJiYgdGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaWRiID0gbmV3IElEQih7dWRpZH0pO1xuICAgICAgICAgIGF3YWl0IGlkYi5jb25uZWN0KCk7XG4gICAgICAgICAgdGhpcy5vcHRzLmRldmljZS5pZGIgPSBpZGI7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgaWRiIHdpbGwgbm90IGJlIHVzZWQgZm9yIFNpbXVsYXRvciBpbnRlcmFjdGlvbi4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nRXZlbnQoJ3NpbVN0YXJ0ZWQnKTtcbiAgICAgIGlmICghaXNMb2dDYXB0dXJlU3RhcnRlZCkge1xuICAgICAgICAvLyBSZXRyeSBsb2cgY2FwdHVyZSBpZiBTaW11bGF0b3Igd2FzIG5vdCBydW5uaW5nIGJlZm9yZVxuICAgICAgICBhd2FpdCBzdGFydExvZ0NhcHR1cmUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgYXdhaXQgdGhpcy5pbnN0YWxsQVVUKCk7XG4gICAgICB0aGlzLmxvZ0V2ZW50KCdhcHBJbnN0YWxsZWQnKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBvbmx5IGhhdmUgYnVuZGxlIGlkZW50aWZpZXIgYW5kIG5vIGFwcCwgZmFpbCBpZiBpdCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWRcbiAgICBpZiAoIXRoaXMub3B0cy5hcHAgJiYgdGhpcy5vcHRzLmJ1bmRsZUlkICYmICF0aGlzLnNhZmFyaSkge1xuICAgICAgaWYgKCFhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmlzQXBwSW5zdGFsbGVkKHRoaXMub3B0cy5idW5kbGVJZCkpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYEFwcCB3aXRoIGJ1bmRsZSBpZGVudGlmaWVyICcke3RoaXMub3B0cy5idW5kbGVJZH0nIHVua25vd25gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnBlcm1pc3Npb25zKSB7XG4gICAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnU2V0dGluZyB0aGUgcmVxdWVzdGVkIHBlcm1pc3Npb25zIGJlZm9yZSBXREEgaXMgc3RhcnRlZCcpO1xuICAgICAgICBmb3IgKGNvbnN0IFtidW5kbGVJZCwgcGVybWlzc2lvbnNNYXBwaW5nXSBvZiBfLnRvUGFpcnMoSlNPTi5wYXJzZSh0aGlzLm9wdHMucGVybWlzc2lvbnMpKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2V0UGVybWlzc2lvbnMoYnVuZGxlSWQsIHBlcm1pc3Npb25zTWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKCdTZXR0aW5nIHBlcm1pc3Npb25zIGlzIG9ubHkgc3VwcG9ydGVkIG9uIFNpbXVsYXRvci4gJyArXG4gICAgICAgICAgJ1RoZSBcInBlcm1pc3Npb25zXCIgY2FwYWJpbGl0eSB3aWxsIGJlIGlnbm9yZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgaWYgKHRoaXMub3B0cy5jYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5lbmFibGVDYWxlbmRhckFjY2Vzcyh0aGlzLm9wdHMuYnVuZGxlSWQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmRpc2FibGVDYWxlbmRhckFjY2Vzcyh0aGlzLm9wdHMuYnVuZGxlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc3RhcnRXZGEodGhpcy5vcHRzLnNlc3Npb25JZCwgcmVhbERldmljZSk7XG5cbiAgICBhd2FpdCB0aGlzLnNldFJlZHVjZU1vdGlvbih0aGlzLm9wdHMucmVkdWNlTW90aW9uKTtcblxuICAgIGF3YWl0IHRoaXMuc2V0SW5pdGlhbE9yaWVudGF0aW9uKHRoaXMub3B0cy5vcmllbnRhdGlvbik7XG4gICAgdGhpcy5sb2dFdmVudCgnb3JpZW50YXRpb25TZXQnKTtcblxuICAgIC8vIHJlYWwgZGV2aWNlcyB3aWxsIGJlIGhhbmRsZWQgbGF0ZXIsIGFmdGVyIHRoZSB3ZWIgY29udGV4dCBoYXMgYmVlbiBpbml0aWFsaXplZFxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgJiYgIXRoaXMuaXNSZWFsRGV2aWNlKClcbiAgICAgICYmIHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc+PScsICcxMi4yJykpIHtcbiAgICAgIC8vIG9uIDEyLjIgdGhlIHBhZ2UgaXMgbm90IG9wZW5lZCBpbiBXREFcbiAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uub3BlblVybCh0aGlzLl9jdXJyZW50VXJsKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpIHx8IHRoaXMub3B0cy5hdXRvV2Vidmlldykge1xuICAgICAgbG9nLmRlYnVnKCdXYWl0aW5nIGZvciBpbml0aWFsIHdlYnZpZXcnKTtcbiAgICAgIGF3YWl0IHRoaXMubmF2VG9Jbml0aWFsV2VidmlldygpO1xuICAgICAgdGhpcy5sb2dFdmVudCgnaW5pdGlhbFdlYnZpZXdOYXZpZ2F0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmIHRoaXMuaXNSZWFsRGV2aWNlKCkgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzEyLjInKSkge1xuICAgICAgLy8gb24gMTIuMiB0aGUgcGFnZSBpcyBub3Qgb3BlbmVkIGluIFdEQVxuICAgICAgYXdhaXQgdGhpcy5zZXRVcmwodGhpcy5fY3VycmVudFVybCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IFdlYkRyaXZlckFnZW50UnVubmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWQgLSBUaGUgaWQgb2YgdGhlIHRhcmdldCBzZXNzaW9uIHRvIGxhdW5jaCBXREEgd2l0aC5cbiAgICogQHBhcmFtIHtib29sZWFufSByZWFsRGV2aWNlIC0gRXF1YWxzIHRvIHRydWUgaWYgdGhlIHRlc3QgdGFyZ2V0IGRldmljZSBpcyBhIHJlYWwgZGV2aWNlLlxuICAgKi9cbiAgYXN5bmMgc3RhcnRXZGEgKHNlc3Npb25JZCwgcmVhbERldmljZSkge1xuICAgIC8vIERvbid0IGNsZWFudXAgdGhlIHByb2Nlc3NlcyBpZiB3ZWJEcml2ZXJBZ2VudFVybCBpcyBzZXRcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICBhd2FpdCB0aGlzLndkYS5jbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMoKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VQb3J0Rm9yd2FyZGluZyA9IHRoaXMuaXNSZWFsRGV2aWNlKClcbiAgICAgICYmICF0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybFxuICAgICAgJiYgaXNMb2NhbEhvc3QodGhpcy53ZGEud2RhQmFzZVVybCk7XG4gICAgYXdhaXQgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkucmVxdWVzdENvbm5lY3Rpb24odGhpcy5vcHRzLnVkaWQsIHRoaXMud2RhLnVybC5wb3J0LCB7XG4gICAgICBkZXZpY2VQb3J0OiB1c2VQb3J0Rm9yd2FyZGluZyA/IHRoaXMud2RhLndkYVJlbW90ZVBvcnQgOiBudWxsLFxuICAgICAgdXNlUG9ydEZvcndhcmRpbmcsXG4gICAgfSk7XG5cbiAgICAvLyBMZXQgbXVsdGlwbGUgV0RBIGJpbmFyaWVzIHdpdGggZGlmZmVyZW50IGRlcml2ZWQgZGF0YSBmb2xkZXJzIGJlIGJ1aWx0IGluIHBhcmFsbGVsXG4gICAgLy8gQ29uY3VycmVudCBXREEgYnVpbGRzIGZyb20gdGhlIHNhbWUgc291cmNlIHdpbGwgY2F1c2UgeGNvZGVidWlsZCBzeW5jaHJvbml6YXRpb24gZXJyb3JzXG4gICAgbGV0IHN5bmNocm9uaXphdGlvbktleSA9IFhDVUlUZXN0RHJpdmVyLm5hbWU7XG4gICAgaWYgKHRoaXMub3B0cy51c2VYY3Rlc3RydW5GaWxlIHx8ICEoYXdhaXQgdGhpcy53ZGEuaXNTb3VyY2VGcmVzaCgpKSkge1xuICAgICAgLy8gRmlyc3QtdGltZSBjb21waWxhdGlvbiBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLCB3aGljaCBpcyBkb25lIGZhc3RlciBpZiBleGVjdXRlZFxuICAgICAgLy8gc2VxdWVudGlhbGx5LiBYY29kZWJ1aWxkIHNwcmVhZHMgdGhlIGxvYWQgY2F1c2VkIGJ5IHRoZSBjbGFuZyBjb21waWxlciB0byBhbGwgYXZhaWxhYmxlIENQVSBjb3Jlc1xuICAgICAgY29uc3QgZGVyaXZlZERhdGFQYXRoID0gYXdhaXQgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgICAgIGlmIChkZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgICAgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUoZGVyaXZlZERhdGFQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nLmRlYnVnKGBTdGFydGluZyBXZWJEcml2ZXJBZ2VudCBpbml0aWFsaXphdGlvbiB3aXRoIHRoZSBzeW5jaHJvbml6YXRpb24ga2V5ICcke3N5bmNocm9uaXphdGlvbktleX0nYCk7XG4gICAgaWYgKFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuaXNCdXN5KCkgJiYgIXRoaXMub3B0cy5kZXJpdmVkRGF0YVBhdGggJiYgIXRoaXMub3B0cy5ib290c3RyYXBQYXRoKSB7XG4gICAgICBsb2cuZGVidWcoYENvbnNpZGVyIHNldHRpbmcgYSB1bmlxdWUgJ2Rlcml2ZWREYXRhUGF0aCcgY2FwYWJpbGl0eSB2YWx1ZSBmb3IgZWFjaCBwYXJhbGxlbCBkcml2ZXIgaW5zdGFuY2UgYCArXG4gICAgICAgIGB0byBhdm9pZCBjb25mbGljdHMgYW5kIHNwZWVkIHVwIHRoZSBidWlsZGluZyBwcm9jZXNzYCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLnVzZU5ld1dEQSkge1xuICAgICAgICBsb2cuZGVidWcoYENhcGFiaWxpdHkgJ3VzZU5ld1dEQScgc2V0IHRvIHRydWUsIHNvIHVuaW5zdGFsbGluZyBXREEgYmVmb3JlIHByb2NlZWRpbmdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdEFuZFVuaW5zdGFsbCgpO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFVbmluc3RhbGxlZCcpO1xuICAgICAgfSBlbHNlIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEuc2V0dXBDYWNoaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGxvY2FsIGhlbHBlciBmb3IgdGhlIHR3byBwbGFjZXMgd2UgbmVlZCB0byB1bmluc3RhbGwgd2RhIGFuZCByZS1zdGFydCBpdFxuICAgICAgY29uc3QgcXVpdEFuZFVuaW5zdGFsbCA9IGFzeW5jIChtc2cpID0+IHtcbiAgICAgICAgbG9nLmRlYnVnKG1zZyk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgICAgICBsb2cuZGVidWcoJ05vdCBxdWl0dGluZy91bmluc3RhbGxpbmcgV2ViRHJpdmVyQWdlbnQgc2luY2Ugd2ViRHJpdmVyQWdlbnRVcmwgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCcpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGxvZy53YXJuKCdRdWl0dGluZyBhbmQgdW5pbnN0YWxsaW5nIFdlYkRyaXZlckFnZW50Jyk7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXRBbmRVbmluc3RhbGwoKTtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFVzZWQgaW4gdGhlIGZvbGxvd2luZyBXREEgYnVpbGRcbiAgICAgIGlmICh0aGlzLm9wdHMucmVzdWx0QnVuZGxlUGF0aCkge1xuICAgICAgICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKENVU1RPTUlaRV9SRVNVTFRfQlVORFBFX1BBVEgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydHVwUmV0cmllcyA9IHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cmllcyB8fCAodGhpcy5pc1JlYWxEZXZpY2UoKSA/IFdEQV9SRUFMX0RFVl9TVEFSVFVQX1JFVFJJRVMgOiBXREFfU0lNX1NUQVJUVVBfUkVUUklFUyk7XG4gICAgICBjb25zdCBzdGFydHVwUmV0cnlJbnRlcnZhbCA9IHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCB8fCBXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTDtcbiAgICAgIGxvZy5kZWJ1ZyhgVHJ5aW5nIHRvIHN0YXJ0IFdlYkRyaXZlckFnZW50ICR7c3RhcnR1cFJldHJpZXN9IHRpbWVzIHdpdGggJHtzdGFydHVwUmV0cnlJbnRlcnZhbH1tcyBpbnRlcnZhbGApO1xuICAgICAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cmllcykgJiYgIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyeUludGVydmFsKSkge1xuICAgICAgICBsb2cuZGVidWcoYFRoZXNlIHZhbHVlcyBjYW4gYmUgY3VzdG9taXplZCBieSBjaGFuZ2luZyB3ZGFTdGFydHVwUmV0cmllcy93ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCBjYXBhYmlsaXRpZXNgKTtcbiAgICAgIH1cbiAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwoc3RhcnR1cFJldHJpZXMsIHN0YXJ0dXBSZXRyeUludGVydmFsLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0QXR0ZW1wdGVkJyk7XG4gICAgICAgIGlmIChyZXRyeUNvdW50ID4gMCkge1xuICAgICAgICAgIGxvZy5pbmZvKGBSZXRyeWluZyBXREEgc3RhcnR1cCAoJHtyZXRyeUNvdW50ICsgMX0gb2YgJHtzdGFydHVwUmV0cmllc30pYCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBvbiB4Y29kZSAxMCBpbnN0YWxsZCB3aWxsIG9mdGVuIHRyeSB0byBhY2Nlc3MgdGhlIGFwcCBmcm9tIGl0cyBzdGFnaW5nXG4gICAgICAgICAgLy8gZGlyZWN0b3J5IGJlZm9yZSBmdWxseSBtb3ZpbmcgaXQgdGhlcmUsIGFuZCBmYWlsLiBSZXRyeWluZyBvbmNlXG4gICAgICAgICAgLy8gaW1tZWRpYXRlbHkgaGVscHNcbiAgICAgICAgICBjb25zdCByZXRyaWVzID0gdGhpcy54Y29kZVZlcnNpb24ubWFqb3IgPj0gMTAgPyAyIDogMTtcbiAgICAgICAgICB0aGlzLmNhY2hlZFdkYVN0YXR1cyA9IGF3YWl0IHJldHJ5KHJldHJpZXMsIHRoaXMud2RhLmxhdW5jaC5iaW5kKHRoaXMud2RhKSwgc2Vzc2lvbklkLCByZWFsRGV2aWNlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRGYWlsZWQnKTtcbiAgICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgICAgbGV0IGVycm9yTXNnID0gYFVuYWJsZSB0byBsYXVuY2ggV2ViRHJpdmVyQWdlbnQgYmVjYXVzZSBvZiB4Y29kZWJ1aWxkIGZhaWx1cmU6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICAgICAgZXJyb3JNc2cgKz0gYC4gTWFrZSBzdXJlIHlvdSBmb2xsb3cgdGhlIHR1dG9yaWFsIGF0ICR7V0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTH0uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFRyeSB0byByZW1vdmUgdGhlIFdlYkRyaXZlckFnZW50UnVubmVyIGFwcGxpY2F0aW9uIGZyb20gdGhlIGRldmljZSBpZiBpdCBpcyBpbnN0YWxsZWQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgYW5kIHJlYm9vdCB0aGUgZGV2aWNlLmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHF1aXRBbmRVbmluc3RhbGwoZXJyb3JNc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMud2RhLnByb3h5UmVxUmVzLmJpbmQodGhpcy53ZGEpO1xuICAgICAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcblxuICAgICAgICBsZXQgb3JpZ2luYWxTdGFja3RyYWNlID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCByZXRyeUludGVydmFsKDE1LCAxMDAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTZXNzaW9uQXR0ZW1wdGVkJyk7XG4gICAgICAgICAgICBsb2cuZGVidWcoJ1NlbmRpbmcgY3JlYXRlU2Vzc2lvbiBjb21tYW5kIHRvIFdEQScpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSB0aGlzLmNhY2hlZFdkYVN0YXR1cyB8fCBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFdkYVNlc3Npb24odGhpcy5vcHRzLmJ1bmRsZUlkLCB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxTdGFja3RyYWNlID0gZXJyLnN0YWNrO1xuICAgICAgICAgICAgICBsb2cuZGVidWcoYEZhaWxlZCB0byBjcmVhdGUgV0RBIHNlc3Npb24gKCR7ZXJyLm1lc3NhZ2V9KS4gUmV0cnlpbmcuLi5gKTtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVNlc3Npb25TdGFydGVkJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChvcmlnaW5hbFN0YWNrdHJhY2UpIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhvcmlnaW5hbFN0YWNrdHJhY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZXJyb3JNc2cgPSBgVW5hYmxlIHRvIHN0YXJ0IFdlYkRyaXZlckFnZW50IHNlc3Npb24gYmVjYXVzZSBvZiB4Y29kZWJ1aWxkIGZhaWx1cmU6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICAgICAgZXJyb3JNc2cgKz0gYCBNYWtlIHN1cmUgeW91IGZvbGxvdyB0aGUgdHV0b3JpYWwgYXQgJHtXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMfS4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgVHJ5IHRvIHJlbW92ZSB0aGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgYXBwbGljYXRpb24gZnJvbSB0aGUgZGV2aWNlIGlmIGl0IGlzIGluc3RhbGxlZCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBhbmQgcmVib290IHRoZSBkZXZpY2UuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgcXVpdEFuZFVuaW5zdGFsbChlcnJvck1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRzLmNsZWFyU3lzdGVtRmlsZXMgJiYgIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICAgIGF3YWl0IG1hcmtTeXN0ZW1GaWxlc0ZvckNsZWFudXAodGhpcy53ZGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2UgZXhwZWN0IGNlcnRhaW4gc29ja2V0IGVycm9ycyB1bnRpbCB0aGlzIHBvaW50LCBidXQgbm93XG4gICAgICAgIC8vIG1hcmsgdGhpbmdzIGFzIGZ1bGx5IHdvcmtpbmdcbiAgICAgICAgdGhpcy53ZGEuZnVsbHlTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRlZCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBydW5SZXNldCAob3B0cyA9IG51bGwpIHtcbiAgICB0aGlzLmxvZ0V2ZW50KCdyZXNldFN0YXJ0ZWQnKTtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgYXdhaXQgcnVuUmVhbERldmljZVJlc2V0KHRoaXMub3B0cy5kZXZpY2UsIG9wdHMgfHwgdGhpcy5vcHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgcnVuU2ltdWxhdG9yUmVzZXQodGhpcy5vcHRzLmRldmljZSwgb3B0cyB8fCB0aGlzLm9wdHMpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCdyZXNldENvbXBsZXRlJyk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICBhd2FpdCByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGZvciAoY29uc3QgcmVjb3JkZXIgb2YgXy5jb21wYWN0KFt0aGlzLl9yZWNlbnRTY3JlZW5SZWNvcmRlciwgdGhpcy5fYXVkaW9SZWNvcmRlcl0pKSB7XG4gICAgICBhd2FpdCByZWNvcmRlci5pbnRlcnJ1cHQodHJ1ZSk7XG4gICAgICBhd2FpdCByZWNvcmRlci5jbGVhbnVwKCk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fcGVyZlJlY29yZGVycykpIHtcbiAgICAgIGF3YWl0IEIuYWxsKHRoaXMuX3BlcmZSZWNvcmRlcnMubWFwKCh4KSA9PiB4LnN0b3AodHJ1ZSkpKTtcbiAgICAgIHRoaXMuX3BlcmZSZWNvcmRlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnN0b3AoKTtcblxuICAgIGlmICh0aGlzLndkYSAmJiAhdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmNsZWFyU3lzdGVtRmlsZXMpIHtcbiAgICAgICAgbGV0IHN5bmNocm9uaXphdGlvbktleSA9IFhDVUlUZXN0RHJpdmVyLm5hbWU7XG4gICAgICAgIGNvbnN0IGRlcml2ZWREYXRhUGF0aCA9IGF3YWl0IHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gICAgICAgIGlmIChkZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgICAgICBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZShkZXJpdmVkRGF0YVBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBjbGVhclN5c3RlbUZpbGVzKHRoaXMud2RhKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoJ05vdCBjbGVhcmluZyBsb2cgZmlsZXMuIFVzZSBgY2xlYXJTeXN0ZW1GaWxlc2AgY2FwYWJpbGl0eSB0byB0dXJuIG9uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbW90ZSkge1xuICAgICAgbG9nLmRlYnVnKCdGb3VuZCBhIHJlbW90ZSBkZWJ1Z2dlciBzZXNzaW9uLiBSZW1vdmluZy4uLicpO1xuICAgICAgYXdhaXQgdGhpcy5zdG9wUmVtb3RlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSA9PT0gZmFsc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMucnVuUmVzZXQoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRzLCB7XG4gICAgICAgIGVuZm9yY2VTaW11bGF0b3JTaHV0ZG93bjogdHJ1ZSxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpICYmICF0aGlzLm9wdHMubm9SZXNldCAmJiAhIXRoaXMub3B0cy5kZXZpY2UpIHtcbiAgICAgIGlmICh0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgRGVsZXRpbmcgc2ltdWxhdG9yIGNyZWF0ZWQgZm9yIHRoaXMgcnVuICh1ZGlkOiAnJHt0aGlzLm9wdHMudWRpZH0nKWApO1xuICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5kZWxldGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmxvZ3MpKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvZ3Muc3lzbG9nLnN0b3BDYXB0dXJlKCk7XG4gICAgICB0aGlzLmxvZ3MgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tanBlZ1N0cmVhbSkge1xuICAgICAgbG9nLmluZm8oJ0Nsb3NpbmcgTUpQRUcgc3RyZWFtJyk7XG4gICAgICB0aGlzLm1qcGVnU3RyZWFtLnN0b3AoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0SW9zKCk7XG5cbiAgICBhd2FpdCBzdXBlci5kZWxldGVTZXNzaW9uKCk7XG4gIH1cblxuICBhc3luYyBzdG9wICgpIHtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG5cblxuICAgIGlmICh0aGlzLndkYSAmJiB0aGlzLndkYS5mdWxseVN0YXJ0ZWQpIHtcbiAgICAgIGlmICh0aGlzLndkYS5qd3Byb3h5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC9zZXNzaW9uLyR7dGhpcy5zZXNzaW9uSWR9YCwgJ0RFTEVURScpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBhbiBlcnJvciBoZXJlIHNob3VsZCBub3Qgc2hvcnQtY2lyY3VpdCB0aGUgcmVzdCBvZiBjbGVhbiB1cFxuICAgICAgICAgIGxvZy5kZWJ1ZyhgVW5hYmxlIHRvIERFTEVURSBzZXNzaW9uIG9uIFdEQTogJyR7ZXJyLm1lc3NhZ2V9Jy4gQ29udGludWluZyBzaHV0ZG93bi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCAmJiB0aGlzLm9wdHMudXNlTmV3V0RBKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWS5yZWxlYXNlQ29ubmVjdGlvbih0aGlzLm9wdHMudWRpZCk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlQ29tbWFuZCAoY21kLCAuLi5hcmdzKSB7XG4gICAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgY29tbWFuZCAnJHtjbWR9J2ApO1xuXG4gICAgaWYgKGNtZCA9PT0gJ3JlY2VpdmVBc3luY1Jlc3BvbnNlJykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVjZWl2ZUFzeW5jUmVzcG9uc2UoLi4uYXJncyk7XG4gICAgfVxuICAgIC8vIFRPRE86IG9uY2UgdGhpcyBmaXggZ2V0cyBpbnRvIGJhc2UgZHJpdmVyIHJlbW92ZSBmcm9tIGhlcmVcbiAgICBpZiAoY21kID09PSAnZ2V0U3RhdHVzJykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBzdXBlci5leGVjdXRlQ29tbWFuZChjbWQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgY29uZmlndXJlQXBwICgpIHtcbiAgICBmdW5jdGlvbiBhcHBJc1BhY2thZ2VPckJ1bmRsZSAoYXBwKSB7XG4gICAgICByZXR1cm4gKC9eKFthLXpBLVowLTlcXC1fXStcXC5bYS16QS1aMC05XFwtX10rKSskLykudGVzdChhcHApO1xuICAgIH1cblxuICAgIC8vIHRoZSBhcHAgbmFtZSBpcyBhIGJ1bmRsZUlkIGFzc2lnbiBpdCB0byB0aGUgYnVuZGxlSWQgcHJvcGVydHlcbiAgICBpZiAoIXRoaXMub3B0cy5idW5kbGVJZCAmJiBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gdGhpcy5vcHRzLmFwcDtcbiAgICAgIHRoaXMub3B0cy5hcHAgPSAnJztcbiAgICB9XG4gICAgLy8gd2UgaGF2ZSBhIGJ1bmRsZSBJRCwgYnV0IG5vIGFwcCwgb3IgYXBwIGlzIGFsc28gYSBidW5kbGVcbiAgICBpZiAoKHRoaXMub3B0cy5idW5kbGVJZCAmJiBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYnVuZGxlSWQpKSAmJlxuICAgICAgICAodGhpcy5vcHRzLmFwcCA9PT0gJycgfHwgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpKSB7XG4gICAgICBsb2cuZGVidWcoJ0FwcCBpcyBhbiBpT1MgYnVuZGxlLCB3aWxsIGF0dGVtcHQgdG8gcnVuIGFzIHByZS1leGlzdGluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGZvciBzdXBwb3J0ZWQgYnVpbGQtaW4gYXBwc1xuICAgIHN3aXRjaCAoXy50b0xvd2VyKHRoaXMub3B0cy5hcHApKSB7XG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9ICdjb20uYXBwbGUuUHJlZmVyZW5jZXMnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnY2FsZW5kYXInOlxuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSAnY29tLmFwcGxlLm1vYmlsZWNhbCc7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIGRvd25sb2FkIGlmIG5lY2Vzc2FyeVxuICAgICAgdGhpcy5vcHRzLmFwcCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAodGhpcy5vcHRzLmFwcCwgJy5hcHAnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5lcnJvcihlcnIpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgYXBwOiAke3RoaXMub3B0cy5hcHB9LiBgICtcbiAgICAgICAgYEFwcCBwYXRocyBuZWVkIHRvIGJlIGFic29sdXRlIG9yIGFuIFVSTCB0byBhIGNvbXByZXNzZWQgYXBwIGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGV0ZXJtaW5lRGV2aWNlICgpIHtcbiAgICAvLyBpbiB0aGUgb25lIGNhc2Ugd2hlcmUgd2UgY3JlYXRlIGEgc2ltLCB3ZSB3aWxsIHNldCB0aGlzIHN0YXRlXG4gICAgdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSA9IGZhbHNlO1xuXG4gICAgLy8gaWYgd2UgZ2V0IGdlbmVyaWMgbmFtZXMsIHRyYW5zbGF0ZSB0aGVtXG4gICAgdGhpcy5vcHRzLmRldmljZU5hbWUgPSB0cmFuc2xhdGVEZXZpY2VOYW1lKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sIHRoaXMub3B0cy5kZXZpY2VOYW1lKTtcblxuICAgIGNvbnN0IHNldHVwVmVyc2lvbkNhcHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbiA9IGF3YWl0IGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbigpO1xuICAgICAgbG9nLmluZm8oYGlPUyBTREsgVmVyc2lvbiBzZXQgdG8gJyR7dGhpcy5vcHRzLmlvc1Nka1ZlcnNpb259J2ApO1xuICAgICAgaWYgKCF0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICYmIHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uKSB7XG4gICAgICAgIGxvZy5pbmZvKGBObyBwbGF0Zm9ybVZlcnNpb24gc3BlY2lmaWVkLiBVc2luZyB0aGUgbGF0ZXN0IHZlcnNpb24gWGNvZGUgc3VwcG9ydHM6ICcke3RoaXMub3B0cy5pb3NTZGtWZXJzaW9ufScuIGAgK1xuICAgICAgICAgIGBUaGlzIG1heSBjYXVzZSBwcm9ibGVtcyBpZiBhIHNpbXVsYXRvciBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBwbGF0Zm9ybSB2ZXJzaW9uLmApO1xuICAgICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uKHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0cy51ZGlkKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnVkaWQudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5vcHRzLnVkaWQgPSBhd2FpdCBkZXRlY3RVZGlkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIFRyeWluZyB0byBmaW5kIG1hdGNoaW5nIFVESUQgZm9yIFNpbXVsYXRvclxuICAgICAgICAgIGxvZy53YXJuKGBDYW5ub3QgZGV0ZWN0IGFueSBjb25uZWN0ZWQgcmVhbCBkZXZpY2VzLiBGYWxsaW5nIGJhY2sgdG8gU2ltdWxhdG9yLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuICAgICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICAvLyBObyBtYXRjaGluZyBTaW11bGF0b3IgaXMgZm91bmQuIFRocm93IGFuIGVycm9yXG4gICAgICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGRldGVjdCB1ZGlkIGZvciAke3RoaXMub3B0cy5kZXZpY2VOYW1lfSBTaW11bGF0b3IgcnVubmluZyBpT1MgJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE1hdGNoaW5nIFNpbXVsYXRvciBleGlzdHMgYW5kIGlzIGZvdW5kLiBVc2UgaXRcbiAgICAgICAgICB0aGlzLm9wdHMudWRpZCA9IGRldmljZS51ZGlkO1xuICAgICAgICAgIGNvbnN0IGRldmljZVBsYXRmb3JtID0gbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uKGF3YWl0IGRldmljZS5nZXRQbGF0Zm9ybVZlcnNpb24oKSk7XG4gICAgICAgICAgaWYgKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gIT09IGRldmljZVBsYXRmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gZGV2aWNlUGxhdGZvcm07XG4gICAgICAgICAgICBsb2cuaW5mbyhgU2V0IHBsYXRmb3JtVmVyc2lvbiB0byAnJHtkZXZpY2VQbGF0Zm9ybX0nIHRvIG1hdGNoIHRoZSBkZXZpY2Ugd2l0aCBnaXZlbiBVRElEYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHNldHVwVmVyc2lvbkNhcHMoKTtcbiAgICAgICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IGRldmljZS51ZGlkfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIGl0IGlzIGEgY29ubmVjdGVkIGRldmljZS4gSWYgbm90LCB0aGUgdWRpZCBwYXNzZWQgaW4gaXMgaW52YWxpZFxuICAgICAgICBjb25zdCBkZXZpY2VzID0gYXdhaXQgZ2V0Q29ubmVjdGVkRGV2aWNlcygpO1xuICAgICAgICBsb2cuZGVidWcoYEF2YWlsYWJsZSBkZXZpY2VzOiAke2RldmljZXMuam9pbignLCAnKX1gKTtcbiAgICAgICAgaWYgKCFkZXZpY2VzLmluY2x1ZGVzKHRoaXMub3B0cy51ZGlkKSkge1xuICAgICAgICAgIC8vIGNoZWNrIGZvciBhIHBhcnRpY3VsYXIgc2ltdWxhdG9yXG4gICAgICAgICAgbG9nLmRlYnVnKGBObyByZWFsIGRldmljZSB3aXRoIHVkaWQgJyR7dGhpcy5vcHRzLnVkaWR9Jy4gTG9va2luZyBmb3Igc2ltdWxhdG9yYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldFNpbXVsYXRvcih0aGlzLm9wdHMudWRpZCwge1xuICAgICAgICAgICAgICBkZXZpY2VzU2V0UGF0aDogdGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IHRoaXMub3B0cy51ZGlkfTtcbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkZXZpY2Ugb3Igc2ltdWxhdG9yIFVESUQ6ICcke3RoaXMub3B0cy51ZGlkfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0UmVhbERldmljZU9iaih0aGlzLm9wdHMudWRpZCk7XG4gICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogdHJ1ZSwgdWRpZDogdGhpcy5vcHRzLnVkaWR9O1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBrbm93IGZvciBzdXJlIHRoZSBkZXZpY2Ugd2lsbCBiZSBhIFNpbXVsYXRvclxuICAgIGF3YWl0IHNldHVwVmVyc2lvbkNhcHMoKTtcbiAgICBpZiAodGhpcy5vcHRzLmVuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uKSB7XG4gICAgICBsb2cuZGVidWcoYE5ldyBzaW11bGF0b3IgaXMgcmVxdWVzdGVkLiBJZiB0aGlzIGlzIG5vdCB3YW50ZWQsIHNldCAnZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb24nIGNhcGFiaWxpdHkgdG8gZmFsc2VgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBzaW11bGF0b3IgdG8gdXNlLCBnaXZlbiB0aGUgZGVzaXJlZCBjYXBhYmlsaXRpZXNcbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldEV4aXN0aW5nU2ltKHRoaXMub3B0cyk7XG5cbiAgICAgIC8vIGNoZWNrIGZvciBhbiBleGlzdGluZyBzaW11bGF0b3JcbiAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gICAgICB9XG5cbiAgICAgIGxvZy5pbmZvKCdTaW11bGF0b3IgdWRpZCBub3QgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICAvLyBubyBkZXZpY2Ugb2YgdGhpcyB0eXBlIGV4aXN0cywgb3IgdGhleSByZXF1ZXN0IG5ldyBzaW0sIHNvIGNyZWF0ZSBvbmVcbiAgICBsb2cuaW5mbygnVXNpbmcgZGVzaXJlZCBjYXBzIHRvIGNyZWF0ZSBhIG5ldyBzaW11bGF0b3InKTtcbiAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCB0aGlzLmNyZWF0ZVNpbSgpO1xuICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTaW0gKCkge1xuICAgIGNvbnN0IHJ1bk9wdHMgPSB7XG4gICAgICBzY2FsZUZhY3RvcjogdGhpcy5vcHRzLnNjYWxlRmFjdG9yLFxuICAgICAgY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQ6ICEhdGhpcy5vcHRzLmNvbm5lY3RIYXJkd2FyZUtleWJvYXJkLFxuICAgICAgcGFzdGVib2FyZEF1dG9tYXRpY1N5bmM6IHRoaXMub3B0cy5zaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyA/PyAnb2ZmJyxcbiAgICAgIGlzSGVhZGxlc3M6ICEhdGhpcy5vcHRzLmlzSGVhZGxlc3MsXG4gICAgICB0cmFjZVBvaW50ZXI6IHRoaXMub3B0cy5zaW11bGF0b3JUcmFjZVBvaW50ZXIsXG4gICAgICBkZXZpY2VQcmVmZXJlbmNlczoge30sXG4gICAgfTtcblxuICAgIC8vIGFkZCB0aGUgd2luZG93IGNlbnRlciwgaWYgaXQgaXMgc3BlY2lmaWVkXG4gICAgaWYgKHRoaXMub3B0cy5TaW11bGF0b3JXaW5kb3dDZW50ZXIpIHtcbiAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Q2VudGVyID0gdGhpcy5vcHRzLlNpbXVsYXRvcldpbmRvd0NlbnRlcjtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0ludGVnZXIodGhpcy5vcHRzLnNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0KSkge1xuICAgICAgcnVuT3B0cy5zdGFydHVwVGltZW91dCA9IHRoaXMub3B0cy5zaW11bGF0b3JTdGFydHVwVGltZW91dDtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIHRvIHdvcmthcm91bmQgWENUZXN0IGJ1ZyBhYm91dCBjaGFuZ2luZyBTaW11bGF0b3JcbiAgICAvLyBvcmllbnRhdGlvbiBpcyBub3Qgc3luY2hyb25pemVkIHRvIHRoZSBhY3R1YWwgd2luZG93IG9yaWVudGF0aW9uXG4gICAgY29uc3Qgb3JpZW50YXRpb24gPSBfLmlzU3RyaW5nKHRoaXMub3B0cy5vcmllbnRhdGlvbikgJiYgdGhpcy5vcHRzLm9yaWVudGF0aW9uLnRvVXBwZXJDYXNlKCk7XG4gICAgc3dpdGNoIChvcmllbnRhdGlvbikge1xuICAgICAgY2FzZSAnTEFORFNDQVBFJzpcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiA9ICdMYW5kc2NhcGVMZWZ0JztcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlID0gOTA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUE9SVFJBSVQnOlxuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uID0gJ1BvcnRyYWl0JztcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5ydW4ocnVuT3B0cyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTaW0gKCkge1xuICAgIHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0gPSB0cnVlO1xuXG4gICAgLy8gR2V0IHBsYXRmb3JtIG5hbWUgZnJvbSBjb25zdCBzaW5jZSBpdCBtdXN0IGJlIGNhc2Ugc2Vuc2l0aXZlIHRvIGNyZWF0ZSBhIG5ldyBzaW11bGF0b3JcbiAgICBjb25zdCBwbGF0Zm9ybU5hbWUgPSB0aGlzLmlzVHZPUygpID8gUExBVEZPUk1fTkFNRV9UVk9TIDogUExBVEZPUk1fTkFNRV9JT1M7XG5cbiAgICAvLyBjcmVhdGUgc2ltIGZvciBjYXBzXG4gICAgY29uc3Qgc2ltID0gYXdhaXQgY3JlYXRlU2ltKHRoaXMub3B0cywgcGxhdGZvcm1OYW1lKTtcbiAgICBsb2cuaW5mbyhgQ3JlYXRlZCBzaW11bGF0b3Igd2l0aCB1ZGlkICcke3NpbS51ZGlkfScuYCk7XG5cbiAgICByZXR1cm4gc2ltO1xuICB9XG5cbiAgYXN5bmMgbGF1bmNoQXBwICgpIHtcbiAgICBjb25zdCBBUFBfTEFVTkNIX1RJTUVPVVQgPSAyMCAqIDEwMDA7XG5cbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBMYXVuY2hBdHRlbXB0ZWQnKTtcbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNpbWN0bC5sYXVuY2hBcHAodGhpcy5vcHRzLmJ1bmRsZUlkKTtcblxuICAgIGxldCBjaGVja1N0YXR1cyA9IGFzeW5jICgpID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgbGV0IGN1cnJlbnRBcHAgPSByZXNwb25zZS5jdXJyZW50QXBwLmJ1bmRsZUlEO1xuICAgICAgaWYgKGN1cnJlbnRBcHAgIT09IHRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5vcHRzLmJ1bmRsZUlkfSBub3QgaW4gZm9yZWdyb3VuZC4gJHtjdXJyZW50QXBwfSBpcyBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxvZy5pbmZvKGBXYWl0aW5nIGZvciAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9JyB0byBiZSBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgbGV0IHJldHJpZXMgPSBwYXJzZUludChBUFBfTEFVTkNIX1RJTUVPVVQgLyAyMDAsIDEwKTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIDIwMCwgY2hlY2tTdGF0dXMpO1xuICAgIGxvZy5pbmZvKGAke3RoaXMub3B0cy5idW5kbGVJZH0gaXMgaW4gZm9yZWdyb3VuZGApO1xuICAgIHRoaXMubG9nRXZlbnQoJ2FwcExhdW5jaGVkJyk7XG4gIH1cblxuICBhc3luYyBzdGFydFdkYVNlc3Npb24gKGJ1bmRsZUlkLCBwcm9jZXNzQXJndW1lbnRzKSB7XG4gICAgY29uc3QgYXJncyA9IHByb2Nlc3NBcmd1bWVudHMgPyAocHJvY2Vzc0FyZ3VtZW50cy5hcmdzIHx8IFtdKSA6IFtdO1xuICAgIGlmICghXy5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb2Nlc3NBcmd1bWVudHMuYXJncyBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5LiBgICtcbiAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkoYXJncyl9IGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG4gICAgY29uc3QgZW52ID0gcHJvY2Vzc0FyZ3VtZW50cyA/IChwcm9jZXNzQXJndW1lbnRzLmVudiB8fCB7fSkgOiB7fTtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChlbnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb2Nlc3NBcmd1bWVudHMuZW52IGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBkaWN0aW9uYXJ5LiBgICtcbiAgICAgICAgYCR7SlNPTi5zdHJpbmdpZnkoZW52KX0gaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cblxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5sYW5ndWFnZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLUFwcGxlTGFuZ3VhZ2VzJywgYCgke3RoaXMub3B0cy5sYW5ndWFnZX0pYCk7XG4gICAgICBhcmdzLnB1c2goJy1OU0xhbmd1YWdlcycsIGAoJHt0aGlzLm9wdHMubGFuZ3VhZ2V9KWApO1xuICAgIH1cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMubG9jYWxlKSkge1xuICAgICAgYXJncy5wdXNoKCctQXBwbGVMb2NhbGUnLCB0aGlzLm9wdHMubG9jYWxlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgIGlmIChfLmlzTmlsKHRoaXMub3B0cy5zaG91bGRUZXJtaW5hdGVBcHApKSB7XG4gICAgICAgIHRoaXMub3B0cy5zaG91bGRUZXJtaW5hdGVBcHAgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmlzTmlsKHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCkpIHtcbiAgICAgICAgdGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2RhQ2FwcyA9IHtcbiAgICAgIGJ1bmRsZUlkOiB0aGlzLm9wdHMuYXV0b0xhdW5jaCA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBidW5kbGVJZCxcbiAgICAgIGFyZ3VtZW50czogYXJncyxcbiAgICAgIGVudmlyb25tZW50OiBlbnYsXG4gICAgICBldmVudGxvb3BJZGxlRGVsYXlTZWM6IHRoaXMub3B0cy53ZGFFdmVudGxvb3BJZGxlRGVsYXkgPz8gMCxcbiAgICAgIHNob3VsZFdhaXRGb3JRdWllc2NlbmNlOiB0aGlzLm9wdHMud2FpdEZvclF1aWVzY2VuY2UgPz8gdHJ1ZSxcbiAgICAgIHNob3VsZFVzZVRlc3RNYW5hZ2VyRm9yVmlzaWJpbGl0eURldGVjdGlvbjogdGhpcy5vcHRzLnNpbXBsZUlzVmlzaWJsZUNoZWNrID8/IGZhbHNlLFxuICAgICAgbWF4VHlwaW5nRnJlcXVlbmN5OiB0aGlzLm9wdHMubWF4VHlwaW5nRnJlcXVlbmN5ID8/IDYwLFxuICAgICAgc2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXI6IHRoaXMub3B0cy5zaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlciA/PyB0cnVlLFxuICAgICAgd2FpdEZvcklkbGVUaW1lb3V0OiB0aGlzLm9wdHMud2FpdEZvcklkbGVUaW1lb3V0LFxuICAgICAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogdGhpcy5vcHRzLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMsXG4gICAgICBlbGVtZW50UmVzcG9uc2VGaWVsZHM6IHRoaXMub3B0cy5lbGVtZW50UmVzcG9uc2VGaWVsZHMsXG4gICAgICBkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHM6IHRoaXMub3B0cy5kaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMsXG4gICAgICBzaG91bGRUZXJtaW5hdGVBcHA6IHRoaXMub3B0cy5zaG91bGRUZXJtaW5hdGVBcHAgPz8gdHJ1ZSxcbiAgICAgIGZvcmNlQXBwTGF1bmNoOiB0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2ggPz8gdHJ1ZSxcbiAgICAgIHVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneTogdGhpcy5vcHRzLnVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneSA/PyB0cnVlLFxuICAgIH07XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvQWNjZXB0QWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdhY2NlcHQnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmF1dG9EaXNtaXNzQWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdkaXNtaXNzJztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbd2RhQ2Fwc10sXG4gICAgICAgIGFsd2F5c01hdGNoOiB7fSxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIFByb3h5IG1ldGhvZHMgZnJvbSBCYXNlRHJpdmVyXG4gIHByb3h5QWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0ICgpIHtcbiAgICBpZiAodGhpcy5pc1dlYnZpZXcoKSkge1xuICAgICAgcmV0dXJuIE5PX1BST1hZX1dFQl9MSVNUO1xuICAgIH1cbiAgICByZXR1cm4gTk9fUFJPWFlfTkFUSVZFX0xJU1Q7XG4gIH1cblxuICBjYW5Qcm94eSAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc1NhZmFyaSAoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zYWZhcmk7XG4gIH1cblxuICBpc1JlYWxEZXZpY2UgKCkge1xuICAgIHJldHVybiB0aGlzLm9wdHMucmVhbERldmljZTtcbiAgfVxuXG4gIGlzU2ltdWxhdG9yICgpIHtcbiAgICByZXR1cm4gIXRoaXMub3B0cy5yZWFsRGV2aWNlO1xuICB9XG5cbiAgaXNUdk9TICgpIHtcbiAgICByZXR1cm4gXy50b0xvd2VyKHRoaXMub3B0cy5wbGF0Zm9ybU5hbWUpID09PSBfLnRvTG93ZXIoUExBVEZPUk1fTkFNRV9UVk9TKTtcbiAgfVxuXG4gIGlzV2VidmlldyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTYWZhcmkoKSB8fCB0aGlzLmlzV2ViQ29udGV4dCgpO1xuICB9XG5cbiAgdmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kgKHN0cmF0ZWd5KSB7XG4gICAgc3VwZXIudmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3koc3RyYXRlZ3ksIHRoaXMuaXNXZWJDb250ZXh0KCkpO1xuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBvbmUgb2YgYGFwcGAgb3IgYGJ1bmRsZUlkYFxuICAgIGlmIChfLnRvTG93ZXIoY2Fwcy5icm93c2VyTmFtZSkgIT09ICdzYWZhcmknICYmICFjYXBzLmFwcCAmJiAhY2Fwcy5idW5kbGVJZCkge1xuICAgICAgbG9nLmluZm8oJ1RoZSBkZXNpcmVkIGNhcGFiaWxpdGllcyBpbmNsdWRlIG5laXRoZXIgYW4gYXBwIG5vciBhIGJ1bmRsZUlkLiAnICtcbiAgICAgICAgJ1dlYkRyaXZlckFnZW50IHdpbGwgYmUgc3RhcnRlZCB3aXRob3V0IHRoZSBkZWZhdWx0IGFwcCcpO1xuICAgIH1cblxuICAgIGlmICghdXRpbC5jb2VyY2VWZXJzaW9uKGNhcHMucGxhdGZvcm1WZXJzaW9uLCBmYWxzZSkpIHtcbiAgICAgIGxvZy53YXJuKGAncGxhdGZvcm1WZXJzaW9uJyBjYXBhYmlsaXR5ICgnJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn0nKSBpcyBub3QgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gYCArXG4gICAgICAgIGBDb25zaWRlciBmaXhpbmcgaXQgb3IgYmUgcmVhZHkgdG8gZXhwZXJpZW5jZSBhbiBpbmNvbnNpc3RlbnQgZHJpdmVyIGJlaGF2aW9yLmApO1xuICAgIH1cblxuICAgIGxldCB2ZXJpZnlQcm9jZXNzQXJndW1lbnQgPSAocHJvY2Vzc0FyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3Qge2FyZ3MsIGVudn0gPSBwcm9jZXNzQXJndW1lbnRzO1xuICAgICAgaWYgKCFfLmlzTmlsKGFyZ3MpICYmICFfLmlzQXJyYXkoYXJncykpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ3Byb2Nlc3NBcmd1bWVudHMuYXJncyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc05pbChlbnYpICYmICFfLmlzUGxhaW5PYmplY3QoZW52KSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdygncHJvY2Vzc0FyZ3VtZW50cy5lbnYgbXVzdCBiZSBhbiBvYmplY3QgPGtleSx2YWx1ZT4gcGFpciB7YTpiLCBjOmR9Jyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGBwcm9jZXNzQXJndW1lbnRzYCBzaG91bGQgYmUgSlNPTiBzdHJpbmcgb3IgYW4gb2JqZWN0IHdpdGggYXJndW1lbnRzIGFuZC8gZW52aXJvbm1lbnQgZGV0YWlsc1xuICAgIGlmIChjYXBzLnByb2Nlc3NBcmd1bWVudHMpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKGNhcHMucHJvY2Vzc0FyZ3VtZW50cykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyB0cnkgdG8gcGFyc2UgdGhlIHN0cmluZyBhcyBKU09OXG4gICAgICAgICAgY2Fwcy5wcm9jZXNzQXJndW1lbnRzID0gSlNPTi5wYXJzZShjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgICAgIHZlcmlmeVByb2Nlc3NBcmd1bWVudChjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgcHJvY2Vzc0FyZ3VtZW50cyBtdXN0IGJlIGEgSlNPTiBmb3JtYXQgb3IgYW4gb2JqZWN0IHdpdGggZm9ybWF0IHthcmdzIDogW10sIGVudiA6IHthOmIsIGM6ZH19LiBgICtcbiAgICAgICAgICAgIGBCb3RoIGVudmlyb25tZW50IGFuZCBhcmd1bWVudCBjYW4gYmUgbnVsbC4gRXJyb3I6ICR7ZXJyfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChjYXBzLnByb2Nlc3NBcmd1bWVudHMpKSB7XG4gICAgICAgIHZlcmlmeVByb2Nlc3NBcmd1bWVudChjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdwcm9jZXNzQXJndW1lbnRzIG11c3QgYmUgYW4gb2JqZWN0LCBvciBhIHN0cmluZyBKU09OIG9iamVjdCB3aXRoIGZvcm1hdCB7YXJncyA6IFtdLCBlbnYgOiB7YTpiLCBjOmR9fS4gYCArXG4gICAgICAgICAgYEJvdGggZW52aXJvbm1lbnQgYW5kIGFyZ3VtZW50IGNhbiBiZSBudWxsLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoZXJlIGlzIG5vIHBvaW50IGluIGhhdmluZyBga2V5Y2hhaW5QYXRoYCB3aXRob3V0IGBrZXljaGFpblBhc3N3b3JkYFxuICAgIGlmICgoY2Fwcy5rZXljaGFpblBhdGggJiYgIWNhcHMua2V5Y2hhaW5QYXNzd29yZCkgfHwgKCFjYXBzLmtleWNoYWluUGF0aCAmJiBjYXBzLmtleWNoYWluUGFzc3dvcmQpKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgSWYgJ2tleWNoYWluUGF0aCcgaXMgc2V0LCAna2V5Y2hhaW5QYXNzd29yZCcgbXVzdCBhbHNvIGJlIHNldCAoYW5kIHZpY2UgdmVyc2EpLmApO1xuICAgIH1cblxuICAgIC8vIGByZXNldE9uU2Vzc2lvblN0YXJ0T25seWAgc2hvdWxkIGJlIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICB0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHkgPSAhdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHkpIHx8IHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seTtcbiAgICB0aGlzLm9wdHMudXNlTmV3V0RBID0gdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMudXNlTmV3V0RBKSA/IHRoaXMub3B0cy51c2VOZXdXREEgOiBmYWxzZTtcblxuICAgIGlmIChjYXBzLmNvbW1hbmRUaW1lb3V0cykge1xuICAgICAgY2Fwcy5jb21tYW5kVGltZW91dHMgPSBub3JtYWxpemVDb21tYW5kVGltZW91dHMoY2Fwcy5jb21tYW5kVGltZW91dHMpO1xuICAgIH1cblxuICAgIGlmIChfLmlzU3RyaW5nKGNhcHMud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICBjb25zdCB7cHJvdG9jb2wsIGhvc3R9ID0gdXJsLnBhcnNlKGNhcHMud2ViRHJpdmVyQWdlbnRVcmwpO1xuICAgICAgaWYgKF8uaXNFbXB0eShwcm90b2NvbCkgfHwgXy5pc0VtcHR5KGhvc3QpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGAnd2ViRHJpdmVyQWdlbnRVcmwnIGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhIHZhbGlkIFdlYkRyaXZlckFnZW50IHNlcnZlciBVUkwuIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJyR7Y2Fwcy53ZWJEcml2ZXJBZ2VudFVybH0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2Fwcy5icm93c2VyTmFtZSkge1xuICAgICAgaWYgKGNhcHMuYnVuZGxlSWQpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdicm93c2VyTmFtZScgY2Fubm90IGJlIHNldCB0b2dldGhlciB3aXRoICdidW5kbGVJZCcgY2FwYWJpbGl0eWApO1xuICAgICAgfVxuICAgICAgLy8gd2FybiBpZiB0aGUgY2FwYWJpbGl0aWVzIGhhdmUgYm90aCBgYXBwYCBhbmQgYGJyb3dzZXIsIGFsdGhvdWdoIHRoaXNcbiAgICAgIC8vIGlzIGNvbW1vbiB3aXRoIHNlbGVuaXVtIGdyaWRcbiAgICAgIGlmIChjYXBzLmFwcCkge1xuICAgICAgICBsb2cud2FybihgVGhlIGNhcGFiaWxpdGllcyBzaG91bGQgZ2VuZXJhbGx5IG5vdCBpbmNsdWRlIGJvdGggYW4gJ2FwcCcgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLnBlcm1pc3Npb25zKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKGNvbnN0IFtidW5kbGVJZCwgcGVybXNdIG9mIF8udG9QYWlycyhKU09OLnBhcnNlKGNhcHMucGVybWlzc2lvbnMpKSkge1xuICAgICAgICAgIGlmICghXy5pc1N0cmluZyhidW5kbGVJZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7SlNPTi5zdHJpbmdpZnkoYnVuZGxlSWQpfScgbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChwZXJtcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7SlNPTi5zdHJpbmdpZnkocGVybXMpfScgbXVzdCBiZSBhIEpTT04gb2JqZWN0YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGAnJHtjYXBzLnBlcm1pc3Npb25zfScgaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBvYmplY3Qgd2l0aCBmb3JtYXQgYCArXG4gICAgICAgICAgYHtcIjxidW5kbGVJZDE+XCI6IHtcIjxzZXJ2aWNlTmFtZTE+XCI6IFwiPHNlcnZpY2VTdGF0dXMxPlwiLCAuLi59LCAuLi59LiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMucGxhdGZvcm1WZXJzaW9uICYmICF1dGlsLmNvZXJjZVZlcnNpb24oY2Fwcy5wbGF0Zm9ybVZlcnNpb24sIGZhbHNlKSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdwbGF0Zm9ybVZlcnNpb24nIG11c3QgYmUgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gYCArXG4gICAgICAgIGAnJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn0nIGlzIGdpdmVuIGluc3RlYWQuYCk7XG4gICAgfVxuXG4gICAgLy8gYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMgaXMgYW4gYXJyYXksIEpTT04gYXJyYXksIG9yIHN0cmluZ1xuICAgIGlmIChjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzKSB7XG4gICAgICBjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMpO1xuICAgIH1cblxuICAgIC8vIGZpbmFsbHksIHJldHVybiB0cnVlIHNpbmNlIHRoZSBzdXBlcmNsYXNzIGNoZWNrIHBhc3NlZCwgYXMgZGlkIHRoaXNcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxBVVQgKCkge1xuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtKHRoaXMub3B0cy5hcHAsIHtcbiAgICAgIGlzU2ltdWxhdG9yOiB0aGlzLmlzU2ltdWxhdG9yKCksXG4gICAgICBpc1R2T1M6IHRoaXMuaXNUdk9TKCksXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvUmVhbERldmljZSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuYXBwLCB0aGlzLm9wdHMuYnVuZGxlSWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmJ1bmRsZUlkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbE90aGVyQXBwcyh0aGlzLm9wdHMub3RoZXJBcHBzKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuaW9zSW5zdGFsbFBhdXNlKSkge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzY4ODlcbiAgICAgIGxldCBwYXVzZSA9IHBhcnNlSW50KHRoaXMub3B0cy5pb3NJbnN0YWxsUGF1c2UsIDEwKTtcbiAgICAgIGxvZy5kZWJ1ZyhgaW9zSW5zdGFsbFBhdXNlIHNldC4gUGF1c2luZyAke3BhdXNlfSBtcyBiZWZvcmUgY29udGludWluZ2ApO1xuICAgICAgYXdhaXQgQi5kZWxheShwYXVzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbE90aGVyQXBwcyAob3RoZXJBcHBzKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIGxvZy53YXJuKCdDYXBhYmlsaXR5IG90aGVyQXBwcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgU2ltdWxhdG9ycycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYXBwc0xpc3Q7XG4gICAgdHJ5IHtcbiAgICAgIGFwcHNMaXN0ID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KG90aGVyQXBwcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcIm90aGVyQXBwc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAoXy5pc0VtcHR5KGFwcHNMaXN0KSkge1xuICAgICAgbG9nLmluZm8oYEdvdCB6ZXJvIGFwcHMgZnJvbSAnb3RoZXJBcHBzJyBjYXBhYmlsaXR5IHZhbHVlLiBEb2luZyBub3RoaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXBwUGF0aHMgPSBhd2FpdCBCLmFsbChhcHBzTGlzdC5tYXAoXG4gICAgICAoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgJy5hcHAnKVxuICAgICkpO1xuICAgIGZvciAoY29uc3Qgb3RoZXJBcHAgb2YgYXBwUGF0aHMpIHtcbiAgICAgIGF3YWl0IGluc3RhbGxUb1NpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlLCBvdGhlckFwcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHJlZHVjZU1vdGlvbiBhcyAnaXNFbmFibGVkJyBvbmx5IHdoZW4gdGhlIGNhcGFiaWxpdGllcyBoYXMgJ3JlZHVjZU1vdGlvbidcbiAgICogVGhlIGNhbGwgaXMgaWdub3JlZCBmb3IgcmVhbCBkZXZpY2VzLlxuICAgKiBAcGFyYW0gez9ib29sZWFufSBpc0VuYWJsZWQgV2V0aGVyIGVuYWJsZSByZWR1Y2VNb3Rpb25cbiAgICovXG4gIGFzeW5jIHNldFJlZHVjZU1vdGlvbiAoaXNFbmFibGVkKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkgfHwgIV8uaXNCb29sZWFuKGlzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2cuaW5mbyhgU2V0dGluZyByZWR1Y2VNb3Rpb24gdG8gJHtpc0VuYWJsZWR9YCk7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7cmVkdWNlTW90aW9uOiBpc0VuYWJsZWR9KTtcbiAgfVxuXG4gIGFzeW5jIHNldEluaXRpYWxPcmllbnRhdGlvbiAob3JpZW50YXRpb24pIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcob3JpZW50YXRpb24pKSB7XG4gICAgICBsb2cuaW5mbygnU2tpcHBpbmcgc2V0dGluZyBvZiB0aGUgaW5pdGlhbCBkaXNwbGF5IG9yaWVudGF0aW9uLiAnICtcbiAgICAgICAgJ1NldCB0aGUgXCJvcmllbnRhdGlvblwiIGNhcGFiaWxpdHkgdG8gZWl0aGVyIFwiTEFORFNDQVBFXCIgb3IgXCJQT1JUUkFJVFwiLCBpZiB0aGlzIGlzIGFuIHVuZGVzaXJlZCBiZWhhdmlvci4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICAgIGlmICghXy5pbmNsdWRlcyhbJ0xBTkRTQ0FQRScsICdQT1JUUkFJVCddLCBvcmllbnRhdGlvbikpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVW5hYmxlIHRvIHNldCBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke29yaWVudGF0aW9ufSdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7b3JpZW50YXRpb259J2ApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL29yaWVudGF0aW9uJywgJ1BPU1QnLCB7b3JpZW50YXRpb259KTtcbiAgICAgIHRoaXMub3B0cy5jdXJPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiBmYWlsZWQgd2l0aDogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBfZ2V0Q29tbWFuZFRpbWVvdXQgKGNtZE5hbWUpIHtcbiAgICBpZiAodGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0cykge1xuICAgICAgaWYgKGNtZE5hbWUgJiYgXy5oYXModGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0cywgY21kTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0cy5jb21tYW5kVGltZW91dHNbY21kTmFtZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0c1tERUZBVUxUX1RJTUVPVVRfS0VZXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlc3Npb24gY2FwYWJpbGl0aWVzIG1lcmdlZCB3aXRoIHdoYXQgV0RBIHJlcG9ydHNcbiAgICogVGhpcyBpcyBhIGxpYnJhcnkgY29tbWFuZCBidXQgbmVlZHMgdG8gY2FsbCAnc3VwZXInIHNvIGNhbid0IGJlIG9uXG4gICAqIGEgaGVscGVyIG9iamVjdFxuICAgKi9cbiAgYXN5bmMgZ2V0U2Vzc2lvbiAoKSB7XG4gICAgLy8gY2FsbCBzdXBlciB0byBnZXQgZXZlbnQgdGltaW5ncywgZXRjLi4uXG4gICAgY29uc3QgZHJpdmVyU2Vzc2lvbiA9IGF3YWl0IHN1cGVyLmdldFNlc3Npb24oKTtcbiAgICBpZiAoIXRoaXMud2RhQ2Fwcykge1xuICAgICAgdGhpcy53ZGFDYXBzID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy8nLCAnR0VUJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkR2V0RGV2aWNlQ2FwcyA9IF8uaXNCb29sZWFuKHRoaXMub3B0cy5pbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm8pXG4gICAgICA/IHRoaXMub3B0cy5pbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm9cbiAgICAgIDogdHJ1ZTsgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIGlmIChzaG91bGRHZXREZXZpY2VDYXBzICYmICF0aGlzLmRldmljZUNhcHMpIHtcbiAgICAgIGNvbnN0IHtzdGF0dXNCYXJTaXplLCBzY2FsZX0gPSBhd2FpdCB0aGlzLmdldFNjcmVlbkluZm8oKTtcbiAgICAgIHRoaXMuZGV2aWNlQ2FwcyA9IHtcbiAgICAgICAgcGl4ZWxSYXRpbzogc2NhbGUsXG4gICAgICAgIHN0YXRCYXJIZWlnaHQ6IHN0YXR1c0JhclNpemUuaGVpZ2h0LFxuICAgICAgICB2aWV3cG9ydFJlY3Q6IGF3YWl0IHRoaXMuZ2V0Vmlld3BvcnRSZWN0KCksXG4gICAgICB9O1xuICAgIH1cbiAgICBsb2cuaW5mbygnTWVyZ2luZyBXREEgY2FwcyBvdmVyIEFwcGl1bSBjYXBzIGZvciBzZXNzaW9uIGRldGFpbCByZXNwb25zZScpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt1ZGlkOiB0aGlzLm9wdHMudWRpZH0sIGRyaXZlclNlc3Npb24sXG4gICAgICB0aGlzLndkYUNhcHMuY2FwYWJpbGl0aWVzLCB0aGlzLmRldmljZUNhcHMgfHwge30pO1xuICB9XG5cbiAgYXN5bmMgcmVzZXQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgLy8gVGhpcyBpcyB0byBtYWtlIHN1cmUgcmVzZXQgaGFwcGVucyBldmVuIGlmIG5vUmVzZXQgaXMgc2V0IHRvIHRydWVcbiAgICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICAgIG9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgICAgb3B0cy5mdWxsUmVzZXQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHNodXRkb3duSGFuZGxlciA9IHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93bjtcbiAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9ICgpID0+IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChvcHRzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9IHNodXRkb3duSGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgc3VwZXIucmVzZXQoKTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFhDVUlUZXN0RHJpdmVyLnByb3RvdHlwZSwgY29tbWFuZHMpO1xuXG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbmV4cG9ydCB7IFhDVUlUZXN0RHJpdmVyIH07XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
package/lib/driver.js CHANGED
@@ -1181,12 +1181,21 @@ class XCUITestDriver extends BaseDriver {
1181
1181
  log.warn('Capability otherApps is only supported for Simulators');
1182
1182
  return;
1183
1183
  }
1184
+ let appsList;
1184
1185
  try {
1185
- otherApps = this.helpers.parseCapsArray(otherApps);
1186
+ appsList = this.helpers.parseCapsArray(otherApps);
1186
1187
  } catch (e) {
1187
1188
  log.errorAndThrow(`Could not parse "otherApps" capability: ${e.message}`);
1188
1189
  }
1189
- for (const otherApp of otherApps) {
1190
+ if (_.isEmpty(appsList)) {
1191
+ log.info(`Got zero apps from 'otherApps' capability value. Doing nothing`);
1192
+ return;
1193
+ }
1194
+
1195
+ const appPaths = await B.all(appsList.map(
1196
+ (app) => this.helpers.configureApp(app, '.app')
1197
+ ));
1198
+ for (const otherApp of appPaths) {
1190
1199
  await installToSimulator(this.opts.device, otherApp, undefined, {
1191
1200
  noReset: this.opts.noReset,
1192
1201
  newSimulator: this.lifecycleData.createSim,
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "xcuitest",
9
9
  "xctest"
10
10
  ],
11
- "version": "3.49.0",
11
+ "version": "3.49.1",
12
12
  "author": "appium",
13
13
  "license": "Apache-2.0",
14
14
  "repository": {