appium-android-driver 5.0.6 → 5.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/build/lib/commands/actions.js +16 -20
  2. package/build/lib/commands/app-management.js +10 -18
  3. package/build/lib/commands/context.js +43 -56
  4. package/build/lib/commands/coverage.js +2 -6
  5. package/build/lib/commands/element.js +3 -9
  6. package/build/lib/commands/emu-console.js +3 -5
  7. package/build/lib/commands/execute.js +3 -6
  8. package/build/lib/commands/file-actions.js +22 -29
  9. package/build/lib/commands/general.js +18 -30
  10. package/build/lib/commands/ime.js +8 -21
  11. package/build/lib/commands/network.js +14 -27
  12. package/build/lib/commands/performance.js +3 -6
  13. package/build/lib/commands/recordscreen.js +27 -38
  14. package/build/lib/commands/shell.js +6 -7
  15. package/build/lib/commands/streamscreen.js +29 -43
  16. package/build/lib/commands/system-bars.js +10 -16
  17. package/build/lib/commands/touch.js +4 -10
  18. package/build/lib/driver.js +36 -60
  19. package/lib/commands/actions.js +18 -19
  20. package/lib/commands/app-management.js +10 -11
  21. package/lib/commands/context.js +33 -34
  22. package/lib/commands/coverage.js +1 -4
  23. package/lib/commands/element.js +2 -3
  24. package/lib/commands/emu-console.js +2 -2
  25. package/lib/commands/execute.js +2 -3
  26. package/lib/commands/file-actions.js +31 -25
  27. package/lib/commands/general.js +16 -18
  28. package/lib/commands/ime.js +7 -8
  29. package/lib/commands/network.js +15 -16
  30. package/lib/commands/performance.js +2 -3
  31. package/lib/commands/recordscreen.js +23 -22
  32. package/lib/commands/shell.js +6 -6
  33. package/lib/commands/streamscreen.js +22 -23
  34. package/lib/commands/system-bars.js +11 -10
  35. package/lib/commands/touch.js +3 -4
  36. package/lib/driver.js +35 -36
  37. package/package.json +2 -2
@@ -9,8 +9,6 @@ exports.helpers = exports.default = exports.commands = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
12
- var _logger = _interopRequireDefault(require("../logger"));
13
-
14
12
  var _lodash = _interopRequireDefault(require("lodash"));
15
13
 
16
14
  var _baseDriver = require("@appium/base-driver");
@@ -28,8 +26,7 @@ const DATA_MASK = 0b100;
28
26
  const GEO_EPSILON = Number.MIN_VALUE;
29
27
 
30
28
  commands.getNetworkConnection = async function getNetworkConnection() {
31
- _logger.default.info('Getting network connection');
32
-
29
+ this.log.info('Getting network connection');
33
30
  let airplaneModeOn = await this.adb.isAirplaneModeOn();
34
31
  let connection = airplaneModeOn ? AIRPLANE_MODE_MASK : 0;
35
32
 
@@ -48,8 +45,7 @@ commands.isWifiOn = async function isWifiOn() {
48
45
  };
49
46
 
50
47
  commands.setNetworkConnection = async function setNetworkConnection(type) {
51
- _logger.default.info('Setting network connection');
52
-
48
+ this.log.info('Setting network connection');
53
49
  const shouldEnableAirplaneMode = (type & AIRPLANE_MODE_MASK) !== 0;
54
50
  const shouldEnableWifi = (type & WIFI_MASK) !== 0;
55
51
  const shouldEnableDataConnection = (type & DATA_MASK) !== 0;
@@ -66,11 +62,11 @@ commands.setNetworkConnection = async function setNetworkConnection(type) {
66
62
  await this.adb.broadcastAirplaneMode(shouldEnableAirplaneMode);
67
63
  });
68
64
  } else {
69
- _logger.default.info(`Not changing airplane mode, since it is already ` + `${shouldEnableAirplaneMode ? 'enabled' : 'disabled'}`);
65
+ this.log.info(`Not changing airplane mode, since it is already ` + `${shouldEnableAirplaneMode ? 'enabled' : 'disabled'}`);
70
66
  }
71
67
 
72
68
  if (shouldEnableWifi === isWiFiEnabled && shouldEnableDataConnection === isDataEnabled) {
73
- _logger.default.info('Not changing data connection/Wi-Fi states, since they are already set to expected values');
69
+ this.log.info('Not changing data connection/Wi-Fi states, since they are already set to expected values');
74
70
 
75
71
  if (await this.adb.isAirplaneModeOn()) {
76
72
  return AIRPLANE_MODE_MASK | currentState;
@@ -83,13 +79,13 @@ commands.setNetworkConnection = async function setNetworkConnection(type) {
83
79
  if (shouldEnableWifi !== isWiFiEnabled) {
84
80
  await this.setWifiState(shouldEnableWifi);
85
81
  } else {
86
- _logger.default.info(`Not changing Wi-Fi state, since it is already ` + `${shouldEnableWifi ? 'enabled' : 'disabled'}`);
82
+ this.log.info(`Not changing Wi-Fi state, since it is already ` + `${shouldEnableWifi ? 'enabled' : 'disabled'}`);
87
83
  }
88
84
 
89
85
  if (shouldEnableAirplaneMode) {
90
- _logger.default.info('Not changing data connection state, because airplane mode is enabled');
86
+ this.log.info('Not changing data connection state, because airplane mode is enabled');
91
87
  } else if (shouldEnableDataConnection === isDataEnabled) {
92
- _logger.default.info(`Not changing data connection state, since it is already ` + `${shouldEnableDataConnection ? 'enabled' : 'disabled'}`);
88
+ this.log.info(`Not changing data connection state, since it is already ` + `${shouldEnableDataConnection ? 'enabled' : 'disabled'}`);
93
89
  } else {
94
90
  await this.adb.setDataState(shouldEnableDataConnection, this.isEmulator());
95
91
  }
@@ -103,9 +99,7 @@ commands.setWifiState = async function setWifiState(wifi) {
103
99
 
104
100
  commands.toggleData = async function toggleData() {
105
101
  let data = !(await this.adb.isDataOn());
106
-
107
- _logger.default.info(`Turning network data ${data ? 'on' : 'off'}`);
108
-
102
+ this.log.info(`Turning network data ${data ? 'on' : 'off'}`);
109
103
  await this.wrapBootstrapDisconnect(async () => {
110
104
  await this.adb.setWifiAndData({
111
105
  data
@@ -115,9 +109,7 @@ commands.toggleData = async function toggleData() {
115
109
 
116
110
  commands.toggleWiFi = async function toggleWiFi() {
117
111
  let wifi = !(await this.adb.isWifiOn());
118
-
119
- _logger.default.info(`Turning WiFi ${wifi ? 'on' : 'off'}`);
120
-
112
+ this.log.info(`Turning WiFi ${wifi ? 'on' : 'off'}`);
121
113
  await this.wrapBootstrapDisconnect(async () => {
122
114
  await this.adb.setWifiAndData({
123
115
  wifi
@@ -127,9 +119,7 @@ commands.toggleWiFi = async function toggleWiFi() {
127
119
 
128
120
  commands.toggleFlightMode = async function toggleFlightMode() {
129
121
  let flightMode = !(await this.adb.isAirplaneModeOn());
130
-
131
- _logger.default.info(`Turning flight mode ${flightMode ? 'on' : 'off'}`);
132
-
122
+ this.log.info(`Turning flight mode ${flightMode ? 'on' : 'off'}`);
133
123
  await this.wrapBootstrapDisconnect(async () => {
134
124
  await this.adb.setAirplaneMode(flightMode);
135
125
  });
@@ -144,10 +134,8 @@ commands.setGeoLocation = async function setGeoLocation(location) {
144
134
  try {
145
135
  return await this.getGeoLocation();
146
136
  } catch (e) {
147
- _logger.default.warn(`Could not get the current geolocation info: ${e.message}`);
148
-
149
- _logger.default.warn(`Returning the default zero'ed values`);
150
-
137
+ this.log.warn(`Could not get the current geolocation info: ${e.message}`);
138
+ this.log.warn(`Returning the default zero'ed values`);
151
139
  return {
152
140
  latitude: GEO_EPSILON,
153
141
  longitude: GEO_EPSILON,
@@ -184,8 +172,7 @@ const KeyCode = {
184
172
  };
185
173
 
186
174
  commands.toggleLocationServices = async function toggleLocationServices() {
187
- _logger.default.info('Toggling location services');
188
-
175
+ this.log.info('Toggling location services');
189
176
  let api = await this.adb.getApiLevel();
190
177
 
191
178
  if (this.isEmulator()) {
@@ -269,4 +256,4 @@ var _default = extensions;
269
256
  exports.default = _default;require('source-map-support').install();
270
257
 
271
258
 
272
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9uZXR3b3JrLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJBSVJQTEFORV9NT0RFX01BU0siLCJXSUZJX01BU0siLCJEQVRBX01BU0siLCJHRU9fRVBTSUxPTiIsIk51bWJlciIsIk1JTl9WQUxVRSIsImdldE5ldHdvcmtDb25uZWN0aW9uIiwibG9nIiwiaW5mbyIsImFpcnBsYW5lTW9kZU9uIiwiYWRiIiwiaXNBaXJwbGFuZU1vZGVPbiIsImNvbm5lY3Rpb24iLCJ3aWZpT24iLCJpc1dpZmlPbiIsImRhdGFPbiIsImlzRGF0YU9uIiwic2V0TmV0d29ya0Nvbm5lY3Rpb24iLCJ0eXBlIiwic2hvdWxkRW5hYmxlQWlycGxhbmVNb2RlIiwic2hvdWxkRW5hYmxlV2lmaSIsInNob3VsZEVuYWJsZURhdGFDb25uZWN0aW9uIiwiY3VycmVudFN0YXRlIiwiaXNBaXJwbGFuZU1vZGVFbmFibGVkIiwiaXNXaUZpRW5hYmxlZCIsImlzRGF0YUVuYWJsZWQiLCJ3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCIsInNldEFpcnBsYW5lTW9kZSIsImJyb2FkY2FzdEFpcnBsYW5lTW9kZSIsInNldFdpZmlTdGF0ZSIsInNldERhdGFTdGF0ZSIsImlzRW11bGF0b3IiLCJ3aWZpIiwidG9nZ2xlRGF0YSIsImRhdGEiLCJzZXRXaWZpQW5kRGF0YSIsInRvZ2dsZVdpRmkiLCJ0b2dnbGVGbGlnaHRNb2RlIiwiZmxpZ2h0TW9kZSIsInNldEdlb0xvY2F0aW9uIiwibG9jYXRpb24iLCJnZXRHZW9Mb2NhdGlvbiIsImUiLCJ3YXJuIiwibWVzc2FnZSIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwiYWx0aXR1ZGUiLCJtb2JpbGVSZWZyZXNoR3BzQ2FjaGUiLCJvcHRzIiwidGltZW91dE1zIiwicmVmcmVzaEdlb0xvY2F0aW9uQ2FjaGUiLCJwYXJzZUZsb2F0IiwiS2V5Q29kZSIsIlVQIiwiRE9XTiIsIlJJR0hUIiwiQ0VOVEVSIiwidG9nZ2xlTG9jYXRpb25TZXJ2aWNlcyIsImFwaSIsImdldEFwaUxldmVsIiwicHJvdmlkZXJzIiwiZ2V0TG9jYXRpb25Qcm92aWRlcnMiLCJpc0dwc0VuYWJsZWQiLCJpbmRleE9mIiwidG9nZ2xlR1BTTG9jYXRpb25Qcm92aWRlciIsInNlcSIsInB1c2giLCJrZXlldmVudCIsInRvZ2dsZVNldHRpbmciLCJlcnJvcnMiLCJOb3RZZXRJbXBsZW1lbnRlZEVycm9yIiwic2V0dGluZyIsInByZUtleVNlcSIsIl8iLCJpc051bGwiLCJvcGVuU2V0dGluZ3NBY3Rpdml0eSIsImtleSIsImRvS2V5IiwiYXBwUGFja2FnZSIsImFwcEFjdGl2aXR5IiwiZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSIsIndhaXRGb3JOb3RBY3Rpdml0eSIsImlnbiIsImJhY2siLCJCIiwiZGVsYXkiLCJ3cmFwcGVkIiwiYm9vdHN0cmFwIiwiaWdub3JlVW5leHBlY3RlZFNodXRkb3duIiwicmVzdGFydCIsInN0YXJ0IiwiZGlzYWJsZUFuZHJvaWRXYXRjaGVycyIsImFjY2VwdFNzbENlcnRzIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlDQyxVQUFVLEdBQUcsRUFBOUM7OztBQUVBLE1BQU1DLGtCQUFrQixHQUFHLEtBQTNCO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLEtBQWxCO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLEtBQWxCO0FBTUEsTUFBTUMsV0FBVyxHQUFHQyxNQUFNLENBQUNDLFNBQTNCOztBQUVBUixRQUFRLENBQUNTLG9CQUFULEdBQWdDLGVBQWVBLG9CQUFmLEdBQXVDO0FBQ3JFQyxrQkFBSUMsSUFBSixDQUFTLDRCQUFUOztBQUNBLE1BQUlDLGNBQWMsR0FBRyxNQUFNLEtBQUtDLEdBQUwsQ0FBU0MsZ0JBQVQsRUFBM0I7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QUFRLElBQVIsQ0FBTjtBQUNBLFFBQU0sS0FBSzVFLEdBQUwsQ0FBUzBELFFBQVQsQ0FBa0JTLEdBQWxCLENBQU47QUFDRCxDQUpEOztBQU1BL0UsT0FBTyxDQUFDNEIsdUJBQVIsR0FBa0MsZUFBZUEsdUJBQWYsQ0FBd0M2RCxPQUF4QyxFQUFpRDtBQUNqRixNQUFJLENBQUMsS0FBS0MsU0FBVixFQUFxQjtBQUNuQixXQUFPLE1BQU1ELE9BQU8sRUFBcEI7QUFDRDs7QUFFRCxPQUFLQyxTQUFMLENBQWVDLHdCQUFmLEdBQTBDLElBQTFDOztBQUNBLE1BQUk7QUFDRixVQUFNRixPQUFPLEVBQWI7QUFDQSxVQUFNLEtBQUs3RSxHQUFMLENBQVNnRixPQUFULEVBQU47QUFDQSxVQUFNLEtBQUtGLFNBQUwsQ0FBZUcsS0FBZixDQUFxQixLQUFLMUMsSUFBTCxDQUFVOEIsVUFBL0IsRUFBMkMsS0FBSzlCLElBQUwsQ0FBVTJDLHNCQUFyRCxFQUE2RSxLQUFLM0MsSUFBTCxDQUFVNEMsY0FBdkYsQ0FBTjtBQUNELEdBSkQsU0FJVTtBQUNSLFNBQUtMLFNBQUwsQ0FBZUMsd0JBQWYsR0FBMEMsS0FBMUM7QUFDRDtBQUNGLENBYkQ7O0FBZUFLLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjaEcsVUFBZCxFQUEwQkYsUUFBMUIsRUFBb0NDLE9BQXBDO2VBRWVDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29uc3QgQUlSUExBTkVfTU9ERV9NQVNLID0gMGIwMDE7XG5jb25zdCBXSUZJX01BU0sgPSAwYjAxMDtcbmNvbnN0IERBVEFfTUFTSyA9IDBiMTAwO1xuLy8gVGhlIHZhbHVlIGNsb3NlIHRvIHplcm8sIGJ1dCBub3QgemVybywgaXMgbmVlZGVkXG4vLyB0byB0cmljayBKU09OIGdlbmVyYXRpb24gYW5kIHNlbmQgYSBmbG9hdCB2YWx1ZSBpbnN0ZWFkIG9mIGFuIGludGVnZXIsXG4vLyBUaGlzIGFsbG93cyBzdHJpY3RseS10eXBlZCBjbGllbnRzLCBsaWtlIEphdmEsIHRvIHByb3Blcmx5XG4vLyBwYXJzZSBpdC4gT3RoZXJ3aXNlIGZsb2F0IDAuMCBpcyBhbHdheXMgcmVwcmVzZW50ZWQgYXMgaW50ZWdlciAwIGluIEpTLlxuLy8gVGhlIHZhbHVlIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBEQkxfRVBTSUxPTiAoaHR0cHM6Ly9vcGVuc291cmNlLmFwcGxlLmNvbS9zb3VyY2UvTGliYy9MaWJjLTQ5OC9pbmNsdWRlL2Zsb2F0LmgpXG5jb25zdCBHRU9fRVBTSUxPTiA9IE51bWJlci5NSU5fVkFMVUU7XG5cbmNvbW1hbmRzLmdldE5ldHdvcmtDb25uZWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gZ2V0TmV0d29ya0Nvbm5lY3Rpb24gKCkge1xuICBsb2cuaW5mbygnR2V0dGluZyBuZXR3b3JrIGNvbm5lY3Rpb24nKTtcbiAgbGV0IGFpcnBsYW5lTW9kZU9uID0gYXdhaXQgdGhpcy5hZGIuaXNBaXJwbGFuZU1vZGVPbigpO1xuICBsZXQgY29ubmVjdGlvbiA9IGFpcnBsYW5lTW9kZU9uID8gQUlSUExBTkVfTU9ERV9NQVNLIDogMDtcblxuICAvLyBubyBuZWVkIHRvIGNoZWNrIGFueXRoaW5nIGVsc2UgaWYgd2UgYXJlIGluIGFpcnBsYW5lIG1vZGVcbiAgaWYgKCFhaXJwbGFuZU1vZGVPbikge1xuICAgIGxldCB3aWZpT24gPSBhd2FpdCB0aGlzLmlzV2lmaU9uKCk7XG4gICAgY29ubmVjdGlvbiB8PSAod2lmaU9uID8gV0lGSV9NQVNLIDogMCk7XG4gICAgbGV0IGRhdGFPbiA9IGF3YWl0IHRoaXMuYWRiLmlzRGF0YU9uKCk7XG4gICAgY29ubmVjdGlvbiB8PSAoZGF0YU9uID8gREFUQV9NQVNLIDogMCk7XG4gIH1cblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG5cbi8qKlxuICogZGVjb3VwbGluZyB0byBvdmVycmlkZSB0aGUgYmVoYXZpb3VyIGluIG90aGVyIGRyaXZlcnMgbGlrZSBVaUF1dG9tYXRvcjIuXG4gKi9cbmNvbW1hbmRzLmlzV2lmaU9uID0gYXN5bmMgZnVuY3Rpb24gaXNXaWZpT24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaXNXaWZpT24oKTtcbn07XG5cbmNvbW1hbmRzLnNldE5ldHdvcmtDb25uZWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gc2V0TmV0d29ya0Nvbm5lY3Rpb24gKHR5cGUpIHtcbiAgbG9nLmluZm8oJ1NldHRpbmcgbmV0d29yayBjb25uZWN0aW9uJyk7XG4gIC8vIGRlY29kZSB0aGUgaW5wdXRcbiAgY29uc3Qgc2hvdWxkRW5hYmxlQWlycGxhbmVNb2RlID0gKHR5cGUgJiBBSVJQTEFORV9NT0RFX01BU0spICE9PSAwO1xuICBjb25zdCBzaG91bGRFbmFibGVXaWZpID0gKHR5cGUgJiBXSUZJX01BU0spICE9PSAwO1xuICBjb25zdCBzaG91bGRFbmFibGVEYXRhQ29ubmVjdGlvbiA9ICh0eXBlICYgREFUQV9NQVNLKSAhPT0gMDtcblxuICBjb25zdCBjdXJyZW50U3RhdGUgPSBhd2FpdCB0aGlzLmdldE5ldHdvcmtDb25uZWN0aW9uKCk7XG4gIGNvbnN0IGlzQWlycGxhbmVNb2RlRW5hYmxlZCA9IChjdXJyZW50U3RhdGUgJiBBSVJQTEFORV9NT0RFX01BU0spICE9PSAwO1xuICBjb25zdCBpc1dpRmlFbmFibGVkID0gKGN1cnJlbnRTdGF0ZSAmIFdJRklfTUFTSykgIT09IDA7XG4gIGNvbnN0IGlzRGF0YUVuYWJsZWQgPSAoY3VycmVudFN0YXRlICYgREFUQV9NQVNLKSAhPT0gMDtcblxuICBpZiAoc2hvdWxkRW5hYmxlQWlycGxhbmVNb2RlICE9PSBpc0FpcnBsYW5lTW9kZUVuYWJsZWQpIHtcbiAgICBhd2FpdCB0aGlzLndyYXBCb290c3RyYXBEaXNjb25uZWN0KGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFpcnBsYW5lTW9kZShzaG91bGRFbmFibGVBaXJwbGFuZU1vZGUpO1xuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMud3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuYnJvYWRjYXN0QWlycGxhbmVNb2RlKHNob3VsZEVuYWJsZUFpcnBsYW5lTW9kZSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgbG9nLmluZm8oYE5vdCBjaGFuZ2luZyBhaXJwbGFuZSBtb2RlLCBzaW5jZSBpdCBpcyBhbHJlYWR5IGAgK1xuICAgICAgICAgICAgIGAke3Nob3VsZEVuYWJsZUFpcnBsYW5lTW9kZSA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9YCk7XG4gIH1cblxuICBpZiAoc2hvdWxkRW5hYmxlV2lmaSA9PT0gaXNXaUZpRW5hYmxlZCAmJiBzaG91bGRFbmFibGVEYXRhQ29ubmVjdGlvbiA9PT0gaXNEYXRhRW5hYmxlZCkge1xuICAgIGxvZy5pbmZvKCdOb3QgY2hhbmdpbmcgZGF0YSBjb25uZWN0aW9uL1dpLUZpIHN0YXRlcywgc2luY2UgdGhleSBhcmUgYWxyZWFkeSBzZXQgdG8gZXhwZWN0ZWQgdmFsdWVzJyk7XG4gICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQWlycGxhbmVNb2RlT24oKSkge1xuICAgICAgcmV0dXJuIEFJUlBMQU5FX01PREVfTUFTSyB8IGN1cnJlbnRTdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIH5BSVJQTEFORV9NT0RFX01BU0sgJiBjdXJyZW50U3RhdGU7XG4gIH1cblxuICBhd2FpdCB0aGlzLndyYXBCb290c3RyYXBEaXNjb25uZWN0KGFzeW5jICgpID0+IHtcbiAgICBpZiAoc2hvdWxkRW5hYmxlV2lmaSAhPT0gaXNXaUZpRW5hYmxlZCkge1xuICAgICAgYXdhaXQgdGhpcy5zZXRXaWZpU3RhdGUoc2hvdWxkRW5hYmxlV2lmaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5pbmZvKGBOb3QgY2hhbmdpbmcgV2ktRmkgc3RhdGUsIHNpbmNlIGl0IGlzIGFscmVhZHkgYCArXG4gICAgICAgICAgICAgICBgJHtzaG91bGRFbmFibGVXaWZpID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ31gKTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkRW5hYmxlQWlycGxhbmVNb2RlKSB7XG4gICAgICBsb2cuaW5mbygnTm90IGNoYW5naW5nIGRhdGEgY29ubmVjdGlvbiBzdGF0ZSwgYmVjYXVzZSBhaXJwbGFuZSBtb2RlIGlzIGVuYWJsZWQnKTtcbiAgICB9IGVsc2UgaWYgKHNob3VsZEVuYWJsZURhdGFDb25uZWN0aW9uID09PSBpc0RhdGFFbmFibGVkKSB7XG4gICAgICBsb2cuaW5mbyhgTm90IGNoYW5naW5nIGRhdGEgY29ubmVjdGlvbiBzdGF0ZSwgc2luY2UgaXQgaXMgYWxyZWFkeSBgICtcbiAgICAgICAgICAgICAgIGAke3Nob3VsZEVuYWJsZURhdGFDb25uZWN0aW9uID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ31gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0RGF0YVN0YXRlKHNob3VsZEVuYWJsZURhdGFDb25uZWN0aW9uLCB0aGlzLmlzRW11bGF0b3IoKSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5nZXROZXR3b3JrQ29ubmVjdGlvbigpO1xufTtcblxuLyoqXG4gKiBkZWNvdXBsaW5nIHRvIG92ZXJyaWRlIGJlaGF2aW91ciBpbiBvdGhlciBkcml2ZXJzIGxpa2UgVWlBdXRvbWF0b3IyLlxuICovXG5jb21tYW5kcy5zZXRXaWZpU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBzZXRXaWZpU3RhdGUgKHdpZmkpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc2V0V2lmaVN0YXRlKHdpZmksIHRoaXMuaXNFbXVsYXRvcigpKTtcbn07XG5cbmNvbW1hbmRzLnRvZ2dsZURhdGEgPSBhc3luYyBmdW5jdGlvbiB0b2dnbGVEYXRhICgpIHtcbiAgbGV0IGRhdGEgPSAhKGF3YWl0IHRoaXMuYWRiLmlzRGF0YU9uKCkpO1xuICBsb2cuaW5mbyhgVHVybmluZyBuZXR3b3JrIGRhdGEgJHtkYXRhID8gJ29uJyA6ICdvZmYnfWApO1xuICBhd2FpdCB0aGlzLndyYXBCb290c3RyYXBEaXNjb25uZWN0KGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB0aGlzLmFkYi5zZXRXaWZpQW5kRGF0YSh7ZGF0YX0sIHRoaXMuaXNFbXVsYXRvcigpKTtcbiAgfSk7XG59O1xuXG5jb21tYW5kcy50b2dnbGVXaUZpID0gYXN5bmMgZnVuY3Rpb24gdG9nZ2xlV2lGaSAoKSB7XG4gIGxldCB3aWZpID0gIShhd2FpdCB0aGlzLmFkYi5pc1dpZmlPbigpKTtcbiAgbG9nLmluZm8oYFR1cm5pbmcgV2lGaSAke3dpZmkgPyAnb24nIDogJ29mZid9YCk7XG4gIGF3YWl0IHRoaXMud3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QoYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHRoaXMuYWRiLnNldFdpZmlBbmREYXRhKHt3aWZpfSwgdGhpcy5pc0VtdWxhdG9yKCkpO1xuICB9KTtcbn07XG5cbmNvbW1hbmRzLnRvZ2dsZUZsaWdodE1vZGUgPSBhc3luYyBmdW5jdGlvbiB0b2dnbGVGbGlnaHRNb2RlICgpIHtcbiAgLypcbiAgICogVE9ETzogSW1wbGVtZW50IGlzUmVhbERldmljZSgpLiBUaGlzIG1ldGhvZCBmYWlscyBvblxuICAgKiByZWFsIGRldmljZXMsIGl0IHNob3VsZCB0aHJvdyBhIE5vdFlldEltcGxlbWVudGVkRXJyb3JcbiAgICovXG4gIGxldCBmbGlnaHRNb2RlID0gIShhd2FpdCB0aGlzLmFkYi5pc0FpcnBsYW5lTW9kZU9uKCkpO1xuICBsb2cuaW5mbyhgVHVybmluZyBmbGlnaHQgbW9kZSAke2ZsaWdodE1vZGUgPyAnb24nIDogJ29mZid9YCk7XG4gIGF3YWl0IHRoaXMud3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QoYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHRoaXMuYWRiLnNldEFpcnBsYW5lTW9kZShmbGlnaHRNb2RlKTtcbiAgfSk7XG4gIGF3YWl0IHRoaXMud3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QoYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHRoaXMuYWRiLmJyb2FkY2FzdEFpcnBsYW5lTW9kZShmbGlnaHRNb2RlKTtcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5zZXRHZW9Mb2NhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHNldEdlb0xvY2F0aW9uIChsb2NhdGlvbikge1xuICBhd2FpdCB0aGlzLmFkYi5zZXRHZW9Mb2NhdGlvbihsb2NhdGlvbiwgdGhpcy5pc0VtdWxhdG9yKCkpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEdlb0xvY2F0aW9uKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cud2FybihgQ291bGQgbm90IGdldCB0aGUgY3VycmVudCBnZW9sb2NhdGlvbiBpbmZvOiAke2UubWVzc2FnZX1gKTtcbiAgICBsb2cud2FybihgUmV0dXJuaW5nIHRoZSBkZWZhdWx0IHplcm8nZWQgdmFsdWVzYCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhdGl0dWRlOiBHRU9fRVBTSUxPTixcbiAgICAgIGxvbmdpdHVkZTogR0VPX0VQU0lMT04sXG4gICAgICBhbHRpdHVkZTogR0VPX0VQU0lMT04sXG4gICAgfTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBHcHNDYWNoZVJlZnJlc2hPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dE1zIFsyMDAwMF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gYmxvY2sgdW50aWwgR1BTIGNhY2hlIGlzIHJlZnJlc2hlZC4gUHJvdmlkaW5nIHplcm8gb3IgYSBuZWdhdGl2ZVxuICogdmFsdWUgdG8gaXQgc2tpcHMgd2FpdGluZyBjb21wbGV0ZWx5LlxuICovXG5cbi8qKlxuICogU2VuZHMgYW4gYXN5bmMgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBHUFMgY2FjaGUuXG4gKiBUaGlzIGZlYXR1cmUgb25seSB3b3JrcyBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QgaGFzXG4gKiBHb29nbGUgUGxheSBTZXJ2aWNlcyBpbnN0YWxsZWQuIEluIGNhc2UgdGhlIHZhbmlsbGFcbiAqIExvY2F0aW9uTWFuYWdlciBpcyB1c2VkIHRoZSBkZXZpY2UgQVBJIGxldmVsIG11c3QgYmUgYXRcbiAqIHZlcnNpb24gMzAgKEFuZHJvaWQgUikgb3IgaGlnaGVyLlxuICpcbiAqIEBwYXJhbSB7R3BzQ2FjaGVSZWZyZXNoT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tb2JpbGVSZWZyZXNoR3BzQ2FjaGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVSZWZyZXNoR3BzQ2FjaGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IHRpbWVvdXRNcyB9ID0gb3B0cztcbiAgYXdhaXQgdGhpcy5hZGIucmVmcmVzaEdlb0xvY2F0aW9uQ2FjaGUodGltZW91dE1zKTtcbn07XG5cbmNvbW1hbmRzLmdldEdlb0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gZ2V0R2VvTG9jYXRpb24gKCkge1xuICBjb25zdCB7bGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGV9ID0gYXdhaXQgdGhpcy5hZGIuZ2V0R2VvTG9jYXRpb24oKTtcbiAgcmV0dXJuIHtcbiAgICBsYXRpdHVkZTogcGFyc2VGbG9hdChsYXRpdHVkZSkgfHwgR0VPX0VQU0lMT04sXG4gICAgbG9uZ2l0dWRlOiBwYXJzZUZsb2F0KGxvbmdpdHVkZSkgfHwgR0VPX0VQU0lMT04sXG4gICAgYWx0aXR1ZGU6IHBhcnNlRmxvYXQoYWx0aXR1ZGUpIHx8IEdFT19FUFNJTE9OLFxuICB9O1xufTtcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3ZpZXcvS2V5RXZlbnQuaHRtbCNLRVlDT0RFX0RQQURfQ0VOVEVSXG4vLyBpbiB0aGUgYW5kcm9pZCBkb2NzLCB0aGlzIGlzIGhvdyB0aGUga2V5Y29kZXMgYXJlIGRlZmluZWRcbmNvbnN0IEtleUNvZGUgPSB7XG4gIFVQOiAxOSxcbiAgRE9XTjogMjAsXG4gIFJJR0hUOiAyMixcbiAgQ0VOVEVSOiAyM1xufTtcbmNvbW1hbmRzLnRvZ2dsZUxvY2F0aW9uU2VydmljZXMgPSBhc3luYyBmdW5jdGlvbiB0b2dnbGVMb2NhdGlvblNlcnZpY2VzICgpIHtcbiAgbG9nLmluZm8oJ1RvZ2dsaW5nIGxvY2F0aW9uIHNlcnZpY2VzJyk7XG4gIGxldCBhcGkgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICBpZiAodGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICBsZXQgcHJvdmlkZXJzID0gYXdhaXQgdGhpcy5hZGIuZ2V0TG9jYXRpb25Qcm92aWRlcnMoKTtcbiAgICBsZXQgaXNHcHNFbmFibGVkID0gcHJvdmlkZXJzLmluZGV4T2YoJ2dwcycpICE9PSAtMTtcbiAgICBhd2FpdCB0aGlzLmFkYi50b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyKCFpc0dwc0VuYWJsZWQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhcGkgPiAxNSkge1xuICAgIGxldCBzZXEgPSBbS2V5Q29kZS5VUCwgS2V5Q29kZS5VUF07XG4gICAgaWYgKGFwaSA9PT0gMTYpIHtcbiAgICAgIC8vIFRoaXMgdmVyc2lvbiBvZiBBbmRyb2lkIGhhcyBhIFwicGFyZW50XCIgYnV0dG9uIGluIGl0cyBhY3Rpb24gYmFyXG4gICAgICBzZXEucHVzaChLZXlDb2RlLkRPV04pO1xuICAgIH0gZWxzZSBpZiAoYXBpIDwgMjgpIHtcbiAgICAgIC8vIE5ld2VyIHZlcnNpb25zIG9mIEFuZHJvaWQgaGF2ZSB0aGUgdG9nZ2xlIGluIHRoZSBBY3Rpb24gYmFyXG4gICAgICBzZXEgPSBbS2V5Q29kZS5SSUdIVCwgS2V5Q29kZS5SSUdIVCwgS2V5Q29kZS5VUF07XG4gICAgICAvKlxuICAgICAgICogT25jZSB0aGUgTG9jYXRpb24gc2VydmljZXMgc3dpdGNoIGlzIE9GRiwgaXQgd29uJ3QgcmVjZWl2ZSBmb2N1c1xuICAgICAgICogd2hlbiBnb2luZyBiYWNrIHRvIHRoZSBMb2NhdGlvbiBTZXJ2aWNlcyBzZXR0aW5ncyBzY3JlZW4gdW5sZXNzIHdlXG4gICAgICAgKiBzZW5kIGEgZHVtbXkga2V5ZXZlbnQgKFVQKSAqYmVmb3JlKiBvcGVuaW5nIHRoZSBzZXR0aW5ncyBzY3JlZW5cbiAgICAgICAqL1xuICAgICAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoS2V5Q29kZS5VUCk7XG4gICAgfSBlbHNlIGlmIChhcGkgPj0gMjgpIHtcbiAgICAgIC8vIEV2ZW4gbmV3ZXIgdmVyc2lvbnMgb2YgYW5kcm9pZCBoYXZlIHRoZSB0b2dnbGUgaW4gYSBiYXIgYmVsb3cgdGhlIGFjdGlvbiBiYXJcbiAgICAgIC8vIHRoaXMgbWVhbnMgYSBzaW5nbGUgcmlnaHQgY2xpY2sgd2lsbCBjYXVzZSBpdCB0byBiZSBzZWxlY3RlZC5cbiAgICAgIHNlcSA9IFtLZXlDb2RlLlJJR0hUXTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KEtleUNvZGUuVVApO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnRvZ2dsZVNldHRpbmcoJ0xPQ0FUSU9OX1NPVVJDRV9TRVRUSU5HUycsIHNlcSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlcmUncyBubyBnbG9iYWwgbG9jYXRpb24gc2VydmljZXMgdG9nZ2xlIG9uIG9sZGVyIEFuZHJvaWQgdmVyc2lvbnNcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdFlldEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxufTtcblxuaGVscGVycy50b2dnbGVTZXR0aW5nID0gYXN5bmMgZnVuY3Rpb24gdG9nZ2xlU2V0dGluZyAoc2V0dGluZywgcHJlS2V5U2VxKSB7XG4gIC8qXG4gICAqIHByZUtleVNlcSBpcyB0aGUga2V5ZXZlbnQgc2VxdWVuY2UgdG8gc2VuZCBvdmVyIEFEQiBpbiBvcmRlclxuICAgKiB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIG9uIHRoZSByaWdodCBvcHRpb24uXG4gICAqIEJ5IGRlZmF1bHQgaXQncyBbdXAsIHVwLCBkb3duXSBiZWNhdXNlIHdlIHVzdWFsbHkgdGFyZ2V0IHRoZSAxc3QgaXRlbSBpblxuICAgKiB0aGUgc2NyZWVuLCBhbmQgc29tZXRpbWVzIHdoZW4gb3BlbmluZyBzZXR0aW5ncyBhY3Rpdml0aWVzIHRoZSBjdXJzb3IgaXNcbiAgICogYWxyZWFkeSBwb3NpdGlvbm5lZCBvbiB0aGUgMXN0IGl0ZW0sIGJ1dCB3ZSBjYW4ndCBrbm93IGZvciBzdXJlXG4gICAqL1xuICBpZiAoXy5pc051bGwocHJlS2V5U2VxKSkge1xuICAgIHByZUtleVNlcSA9IFtLZXlDb2RlLlVQLCBLZXlDb2RlLlVQLCBLZXlDb2RlLkRPV05dO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5vcGVuU2V0dGluZ3NBY3Rpdml0eShzZXR0aW5nKTtcblxuICBmb3IgKGxldCBrZXkgb2YgcHJlS2V5U2VxKSB7XG4gICAgYXdhaXQgdGhpcy5kb0tleShrZXkpO1xuICB9XG5cbiAgbGV0IHthcHBQYWNrYWdlLCBhcHBBY3Rpdml0eX0gPSBhd2FpdCB0aGlzLmFkYi5nZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5KCk7XG5cbiAgLypcbiAgICogQ2xpY2sgYW5kIGhhbmRsZSBwb3RlbnRpYWwgQURCIGRpc2Nvbm5lY3QgdGhhdCBvY2N1cnMgb24gb2ZmaWNpYWxcbiAgICogZW11bGF0b3Igd2hlbiB0aGUgbmV0d29yayBjb25uZWN0aW9uIGlzIGRpc2FibGVkXG4gICAqL1xuICBhd2FpdCB0aGlzLndyYXBCb290c3RyYXBEaXNjb25uZWN0KGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB0aGlzLmRvS2V5KEtleUNvZGUuQ0VOVEVSKTtcbiAgfSk7XG5cbiAgLypcbiAgICogSW4gb25lIHBhcnRpY3VsYXIgY2FzZSAoZW5hYmxlIExvY2F0aW9uIFNlcnZpY2VzKSwgYSBwb3AtdXAgaXNcbiAgICogZGlzcGxheWVkIG9uIHNvbWUgcGxhdGZvcm1zIHNvIHRoZSB1c2VyIGFjY2VwdHMgb3IgcmVmdXNlcyB0aGF0IEdvb2dsZVxuICAgKiBjb2xsZWN0cyBsb2NhdGlvbiBkYXRhLiBTbyB3ZSB3YWl0IGZvciB0aGF0IHBvcC11cCB0byBvcGVuLCBpZiBpdFxuICAgKiBkb2Vzbid0IHRoZW4gcHJvY2VlZFxuICAgKi9cbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yTm90QWN0aXZpdHkoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIDUwMDApO1xuICAgIGF3YWl0IHRoaXMuZG9LZXkoS2V5Q29kZS5SSUdIVCk7XG4gICAgYXdhaXQgdGhpcy5kb0tleShLZXlDb2RlLkNFTlRFUik7XG4gICAgYXdhaXQgdGhpcy5hZGIud2FpdEZvck5vdEFjdGl2aXR5KGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LCA1MDAwKTtcbiAgfSBjYXRjaCAoaWduKSB7fVxuXG4gIGF3YWl0IHRoaXMuYWRiLmJhY2soKTtcbn07XG5cbmhlbHBlcnMuZG9LZXkgPSBhc3luYyBmdW5jdGlvbiBkb0tleSAoa2V5KSB7XG4gIC8vIFRPRE86IENvbmZpcm0gd2UgbmVlZCB0aGlzIGRlbGF5LiBTZWVtcyB0byB3b3JrIHdpdGhvdXQgaXQuXG4gIGF3YWl0IEIuZGVsYXkoMjAwMCk7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KGtleSk7XG59O1xuXG5oZWxwZXJzLndyYXBCb290c3RyYXBEaXNjb25uZWN0ID0gYXN5bmMgZnVuY3Rpb24gd3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QgKHdyYXBwZWQpIHtcbiAgaWYgKCF0aGlzLmJvb3RzdHJhcCkge1xuICAgIHJldHVybiBhd2FpdCB3cmFwcGVkKCk7XG4gIH1cblxuICB0aGlzLmJvb3RzdHJhcC5pZ25vcmVVbmV4cGVjdGVkU2h1dGRvd24gPSB0cnVlO1xuICB0cnkge1xuICAgIGF3YWl0IHdyYXBwZWQoKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5yZXN0YXJ0KCk7XG4gICAgYXdhaXQgdGhpcy5ib290c3RyYXAuc3RhcnQodGhpcy5vcHRzLmFwcFBhY2thZ2UsIHRoaXMub3B0cy5kaXNhYmxlQW5kcm9pZFdhdGNoZXJzLCB0aGlzLm9wdHMuYWNjZXB0U3NsQ2VydHMpO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMuYm9vdHN0cmFwLmlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biA9IGZhbHNlO1xuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvbmV0d29yay5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
259
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9uZXR3b3JrLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJBSVJQTEFORV9NT0RFX01BU0siLCJXSUZJX01BU0siLCJEQVRBX01BU0siLCJHRU9fRVBTSUxPTiIsIk51bWJlciIsIk1JTl9WQUxVRSIsImdldE5ldHdvcmtDb25uZWN0aW9uIiwibG9nIiwiaW5mbyIsImFpcnBsYW5lTW9kZU9uIiwiYWRiIiwiaXNBaXJwbGFuZU1vZGVPbiIsImNvbm5lY3Rpb24iLCJ3aWZpT24iLCJpc1dpZmlPbiIsImRhdGFPbiIsImlzRGF0YU9uIiwic2V0TmV0d29ya0Nvbm5lY3Rpb24iLCJ0eXBlIiwic2hvdWxkRW5hYmxlQWlycGxhbmVNb2RlIiwic2hvdWxkRW5hYmxlV2lmaSIsInNob3VsZEVuYWJsZURhdGFDb25uZWN0aW9uIiwiY3VycmVudFN0YXRlIiwiaXNBaXJwbGFuZU1vZGVFbmFibGVkIiwiaXNXaUZpRW5hYmxlZCIsImlzRGF0YUVuYWJsZWQiLCJ3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCIsInNldEFpcnBsYW5lTW9kZSIsImJyb2FkY2FzdEFpcnBsYW5lTW9kZSIsInNldFdpZmlTdGF0ZSIsInNldERhdGFTdGF0ZSIsImlzRW11bGF0b3IiLCJ3aWZpIiwidG9nZ2xlRGF0YSIsImRhdGEiLCJzZXRXaWZpQW5kRGF0YSIsInRvZ2dsZVdpRmkiLCJ0b2dnbGVGbGlnaHRNb2RlIiwiZmxpZ2h0TW9kZSIsInNldEdlb0xvY2F0aW9uIiwibG9jYXRpb24iLCJnZXRHZW9Mb2NhdGlvbiIsImUiLCJ3YXJuIiwibWVzc2FnZSIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwiYWx0aXR1ZGUiLCJtb2JpbGVSZWZyZXNoR3BzQ2FjaGUiLCJvcHRzIiwidGltZW91dE1zIiwicmVmcmVzaEdlb0xvY2F0aW9uQ2FjaGUiLCJwYXJzZUZsb2F0IiwiS2V5Q29kZSIsIlVQIiwiRE9XTiIsIlJJR0hUIiwiQ0VOVEVSIiwidG9nZ2xlTG9jYXRpb25TZXJ2aWNlcyIsImFwaSIsImdldEFwaUxldmVsIiwicHJvdmlkZXJzIiwiZ2V0TG9jYXRpb25Qcm92aWRlcnMiLCJpc0dwc0VuYWJsZWQiLCJpbmRleE9mIiwidG9nZ2xlR1BTTG9jYXRpb25Qcm92aWRlciIsInNlcSIsInB1c2giLCJrZXlldmVudCIsInRvZ2dsZVNldHRpbmciLCJlcnJvcnMiLCJOb3RZZXRJbXBsZW1lbnRlZEVycm9yIiwic2V0dGluZyIsInByZUtleVNlcSIsIl8iLCJpc051bGwiLCJvcGVuU2V0dGluZ3NBY3Rpdml0eSIsImtleSIsImRvS2V5IiwiYXBwUGFja2FnZSIsImFwcEFjdGl2aXR5IiwiZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSIsIndhaXRGb3JOb3RBY3Rpdml0eSIsImlnbiIsImJhY2siLCJCIiwiZGVsYXkiLCJ3cmFwcGVkIiwiYm9vdHN0cmFwIiwiaWdub3JlVW5leHBlY3RlZFNodXRkb3duIiwicmVzdGFydCIsInN0YXJ0IiwiZGlzYWJsZUFuZHJvaWRXYXRjaGVycyIsImFjY2VwdFNzbENlcnRzIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlDQyxVQUFVLEdBQUcsRUFBOUM7OztBQUVBLE1BQU1DLGtCQUFrQixHQUFHLEtBQTNCO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLEtBQWxCO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLEtBQWxCO0FBTUEsTUFBTUMsV0FBVyxHQUFHQyxNQUFNLENBQUNDLFNBQTNCOztBQUVBUixRQUFRLENBQUNTLG9CQUFULEdBQWdDLGVBQWVBLG9CQUFmLEdBQXVDO0FBQ3JFLE9BQUtDLEdBQUwsQ0FBU0MsSUFBVCxDQUFjLDRCQUFkO0FBQ0EsTUFBSUMsY0FBYyxHQUFHLE1BQU0sS0FBS0MsR0FBTCxDQUFTQyxnQkFBVCxFQUEz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TjtBQUNELENBMUNEOztBQTRDQXRGLE9BQU8sQ0FBQ2dGLEtBQVIsR0FBZ0IsZUFBZUEsS0FBZixDQUFzQkQsR0FBdEIsRUFBMkI7QUFFekMsUUFBTVEsa0JBQUVDLEtBQUYsQ0FBUSxJQUFSLENBQU47QUFDQSxRQUFNLEtBQUs1RSxHQUFMLENBQVMwRCxRQUFULENBQWtCUyxHQUFsQixDQUFOO0FBQ0QsQ0FKRDs7QUFNQS9FLE9BQU8sQ0FBQzRCLHVCQUFSLEdBQWtDLGVBQWVBLHVCQUFmLENBQXdDNkQsT0FBeEMsRUFBaUQ7QUFDakYsTUFBSSxDQUFDLEtBQUtDLFNBQVYsRUFBcUI7QUFDbkIsV0FBTyxNQUFNRCxPQUFPLEVBQXBCO0FBQ0Q7O0FBRUQsT0FBS0MsU0FBTCxDQUFlQyx3QkFBZixHQUEwQyxJQUExQzs7QUFDQSxNQUFJO0FBQ0YsVUFBTUYsT0FBTyxFQUFiO0FBQ0EsVUFBTSxLQUFLN0UsR0FBTCxDQUFTZ0YsT0FBVCxFQUFOO0FBQ0EsVUFBTSxLQUFLRixTQUFMLENBQWVHLEtBQWYsQ0FBcUIsS0FBSzFDLElBQUwsQ0FBVThCLFVBQS9CLEVBQTJDLEtBQUs5QixJQUFMLENBQVUyQyxzQkFBckQsRUFBNkUsS0FBSzNDLElBQUwsQ0FBVTRDLGNBQXZGLENBQU47QUFDRCxHQUpELFNBSVU7QUFDUixTQUFLTCxTQUFMLENBQWVDLHdCQUFmLEdBQTBDLEtBQTFDO0FBQ0Q7QUFDRixDQWJEOztBQWVBSyxNQUFNLENBQUNDLE1BQVAsQ0FBY2hHLFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbnN0IEFJUlBMQU5FX01PREVfTUFTSyA9IDBiMDAxO1xuY29uc3QgV0lGSV9NQVNLID0gMGIwMTA7XG5jb25zdCBEQVRBX01BU0sgPSAwYjEwMDtcbi8vIFRoZSB2YWx1ZSBjbG9zZSB0byB6ZXJvLCBidXQgbm90IHplcm8sIGlzIG5lZWRlZFxuLy8gdG8gdHJpY2sgSlNPTiBnZW5lcmF0aW9uIGFuZCBzZW5kIGEgZmxvYXQgdmFsdWUgaW5zdGVhZCBvZiBhbiBpbnRlZ2VyLFxuLy8gVGhpcyBhbGxvd3Mgc3RyaWN0bHktdHlwZWQgY2xpZW50cywgbGlrZSBKYXZhLCB0byBwcm9wZXJseVxuLy8gcGFyc2UgaXQuIE90aGVyd2lzZSBmbG9hdCAwLjAgaXMgYWx3YXlzIHJlcHJlc2VudGVkIGFzIGludGVnZXIgMCBpbiBKUy5cbi8vIFRoZSB2YWx1ZSBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gREJMX0VQU0lMT04gKGh0dHBzOi8vb3BlbnNvdXJjZS5hcHBsZS5jb20vc291cmNlL0xpYmMvTGliYy00OTgvaW5jbHVkZS9mbG9hdC5oKVxuY29uc3QgR0VPX0VQU0lMT04gPSBOdW1iZXIuTUlOX1ZBTFVFO1xuXG5jb21tYW5kcy5nZXROZXR3b3JrQ29ubmVjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGdldE5ldHdvcmtDb25uZWN0aW9uICgpIHtcbiAgdGhpcy5sb2cuaW5mbygnR2V0dGluZyBuZXR3b3JrIGNvbm5lY3Rpb24nKTtcbiAgbGV0IGFpcnBsYW5lTW9kZU9uID0gYXdhaXQgdGhpcy5hZGIuaXNBaXJwbGFuZU1vZGVPbigpO1xuICBsZXQgY29ubmVjdGlvbiA9IGFpcnBsYW5lTW9kZU9uID8gQUlSUExBTkVfTU9ERV9NQVNLIDogMDtcblxuICAvLyBubyBuZWVkIHRvIGNoZWNrIGFueXRoaW5nIGVsc2UgaWYgd2UgYXJlIGluIGFpcnBsYW5lIG1vZGVcbiAgaWYgKCFhaXJwbGFuZU1vZGVPbikge1xuICAgIGxldCB3aWZpT24gPSBhd2FpdCB0aGlzLmlzV2lmaU9uKCk7XG4gICAgY29ubmVjdGlvbiB8PSAod2lmaU9uID8gV0lGSV9NQVNLIDogMCk7XG4gICAgbGV0IGRhdGFPbiA9IGF3YWl0IHRoaXMuYWRiLmlzRGF0YU9uKCk7XG4gICAgY29ubmVjdGlvbiB8PSAoZGF0YU9uID8gREFUQV9NQVNLIDogMCk7XG4gIH1cblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn07XG5cbi8qKlxuICogZGVjb3VwbGluZyB0byBvdmVycmlkZSB0aGUgYmVoYXZpb3VyIGluIG90aGVyIGRyaXZlcnMgbGlrZSBVaUF1dG9tYXRvcjIuXG4gKi9cbmNvbW1hbmRzLmlzV2lmaU9uID0gYXN5bmMgZnVuY3Rpb24gaXNXaWZpT24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaXNXaWZpT24oKTtcbn07XG5cbmNvbW1hbmRzLnNldE5ldHdvcmtDb25uZWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gc2V0TmV0d29ya0Nvbm5lY3Rpb24gKHR5cGUpIHtcbiAgdGhpcy5sb2cuaW5mbygnU2V0dGluZyBuZXR3b3JrIGNvbm5lY3Rpb24nKTtcbiAgLy8gZGVjb2RlIHRoZSBpbnB1dFxuICBjb25zdCBzaG91bGRFbmFibGVBaXJwbGFuZU1vZGUgPSAodHlwZSAmIEFJUlBMQU5FX01PREVfTUFTSykgIT09IDA7XG4gIGNvbnN0IHNob3VsZEVuYWJsZVdpZmkgPSAodHlwZSAmIFdJRklfTUFTSykgIT09IDA7XG4gIGNvbnN0IHNob3VsZEVuYWJsZURhdGFDb25uZWN0aW9uID0gKHR5cGUgJiBEQVRBX01BU0spICE9PSAwO1xuXG4gIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0TmV0d29ya0Nvbm5lY3Rpb24oKTtcbiAgY29uc3QgaXNBaXJwbGFuZU1vZGVFbmFibGVkID0gKGN1cnJlbnRTdGF0ZSAmIEFJUlBMQU5FX01PREVfTUFTSykgIT09IDA7XG4gIGNvbnN0IGlzV2lGaUVuYWJsZWQgPSAoY3VycmVudFN0YXRlICYgV0lGSV9NQVNLKSAhPT0gMDtcbiAgY29uc3QgaXNEYXRhRW5hYmxlZCA9IChjdXJyZW50U3RhdGUgJiBEQVRBX01BU0spICE9PSAwO1xuXG4gIGlmIChzaG91bGRFbmFibGVBaXJwbGFuZU1vZGUgIT09IGlzQWlycGxhbmVNb2RlRW5hYmxlZCkge1xuICAgIGF3YWl0IHRoaXMud3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QWlycGxhbmVNb2RlKHNob3VsZEVuYWJsZUFpcnBsYW5lTW9kZSk7XG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5icm9hZGNhc3RBaXJwbGFuZU1vZGUoc2hvdWxkRW5hYmxlQWlycGxhbmVNb2RlKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBOb3QgY2hhbmdpbmcgYWlycGxhbmUgbW9kZSwgc2luY2UgaXQgaXMgYWxyZWFkeSBgICtcbiAgICAgICAgICAgICBgJHtzaG91bGRFbmFibGVBaXJwbGFuZU1vZGUgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnfWApO1xuICB9XG5cbiAgaWYgKHNob3VsZEVuYWJsZVdpZmkgPT09IGlzV2lGaUVuYWJsZWQgJiYgc2hvdWxkRW5hYmxlRGF0YUNvbm5lY3Rpb24gPT09IGlzRGF0YUVuYWJsZWQpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdOb3QgY2hhbmdpbmcgZGF0YSBjb25uZWN0aW9uL1dpLUZpIHN0YXRlcywgc2luY2UgdGhleSBhcmUgYWxyZWFkeSBzZXQgdG8gZXhwZWN0ZWQgdmFsdWVzJyk7XG4gICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQWlycGxhbmVNb2RlT24oKSkge1xuICAgICAgcmV0dXJuIEFJUlBMQU5FX01PREVfTUFTSyB8IGN1cnJlbnRTdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIH5BSVJQTEFORV9NT0RFX01BU0sgJiBjdXJyZW50U3RhdGU7XG4gIH1cblxuICBhd2FpdCB0aGlzLndyYXBCb290c3RyYXBEaXNjb25uZWN0KGFzeW5jICgpID0+IHtcbiAgICBpZiAoc2hvdWxkRW5hYmxlV2lmaSAhPT0gaXNXaUZpRW5hYmxlZCkge1xuICAgICAgYXdhaXQgdGhpcy5zZXRXaWZpU3RhdGUoc2hvdWxkRW5hYmxlV2lmaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYE5vdCBjaGFuZ2luZyBXaS1GaSBzdGF0ZSwgc2luY2UgaXQgaXMgYWxyZWFkeSBgICtcbiAgICAgICAgYCR7c2hvdWxkRW5hYmxlV2lmaSA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9YCk7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZEVuYWJsZUFpcnBsYW5lTW9kZSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnTm90IGNoYW5naW5nIGRhdGEgY29ubmVjdGlvbiBzdGF0ZSwgYmVjYXVzZSBhaXJwbGFuZSBtb2RlIGlzIGVuYWJsZWQnKTtcbiAgICB9IGVsc2UgaWYgKHNob3VsZEVuYWJsZURhdGFDb25uZWN0aW9uID09PSBpc0RhdGFFbmFibGVkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBOb3QgY2hhbmdpbmcgZGF0YSBjb25uZWN0aW9uIHN0YXRlLCBzaW5jZSBpdCBpcyBhbHJlYWR5IGAgK1xuICAgICAgICBgJHtzaG91bGRFbmFibGVEYXRhQ29ubmVjdGlvbiA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNldERhdGFTdGF0ZShzaG91bGRFbmFibGVEYXRhQ29ubmVjdGlvbiwgdGhpcy5pc0VtdWxhdG9yKCkpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0TmV0d29ya0Nvbm5lY3Rpb24oKTtcbn07XG5cbi8qKlxuICogZGVjb3VwbGluZyB0byBvdmVycmlkZSBiZWhhdmlvdXIgaW4gb3RoZXIgZHJpdmVycyBsaWtlIFVpQXV0b21hdG9yMi5cbiAqL1xuY29tbWFuZHMuc2V0V2lmaVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0V2lmaVN0YXRlICh3aWZpKSB7XG4gIGF3YWl0IHRoaXMuYWRiLnNldFdpZmlTdGF0ZSh3aWZpLCB0aGlzLmlzRW11bGF0b3IoKSk7XG59O1xuXG5jb21tYW5kcy50b2dnbGVEYXRhID0gYXN5bmMgZnVuY3Rpb24gdG9nZ2xlRGF0YSAoKSB7XG4gIGxldCBkYXRhID0gIShhd2FpdCB0aGlzLmFkYi5pc0RhdGFPbigpKTtcbiAgdGhpcy5sb2cuaW5mbyhgVHVybmluZyBuZXR3b3JrIGRhdGEgJHtkYXRhID8gJ29uJyA6ICdvZmYnfWApO1xuICBhd2FpdCB0aGlzLndyYXBCb290c3RyYXBEaXNjb25uZWN0KGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB0aGlzLmFkYi5zZXRXaWZpQW5kRGF0YSh7ZGF0YX0sIHRoaXMuaXNFbXVsYXRvcigpKTtcbiAgfSk7XG59O1xuXG5jb21tYW5kcy50b2dnbGVXaUZpID0gYXN5bmMgZnVuY3Rpb24gdG9nZ2xlV2lGaSAoKSB7XG4gIGxldCB3aWZpID0gIShhd2FpdCB0aGlzLmFkYi5pc1dpZmlPbigpKTtcbiAgdGhpcy5sb2cuaW5mbyhgVHVybmluZyBXaUZpICR7d2lmaSA/ICdvbicgOiAnb2ZmJ31gKTtcbiAgYXdhaXQgdGhpcy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdGhpcy5hZGIuc2V0V2lmaUFuZERhdGEoe3dpZml9LCB0aGlzLmlzRW11bGF0b3IoKSk7XG4gIH0pO1xufTtcblxuY29tbWFuZHMudG9nZ2xlRmxpZ2h0TW9kZSA9IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZUZsaWdodE1vZGUgKCkge1xuICAvKlxuICAgKiBUT0RPOiBJbXBsZW1lbnQgaXNSZWFsRGV2aWNlKCkuIFRoaXMgbWV0aG9kIGZhaWxzIG9uXG4gICAqIHJlYWwgZGV2aWNlcywgaXQgc2hvdWxkIHRocm93IGEgTm90WWV0SW1wbGVtZW50ZWRFcnJvclxuICAgKi9cbiAgbGV0IGZsaWdodE1vZGUgPSAhKGF3YWl0IHRoaXMuYWRiLmlzQWlycGxhbmVNb2RlT24oKSk7XG4gIHRoaXMubG9nLmluZm8oYFR1cm5pbmcgZmxpZ2h0IG1vZGUgJHtmbGlnaHRNb2RlID8gJ29uJyA6ICdvZmYnfWApO1xuICBhd2FpdCB0aGlzLndyYXBCb290c3RyYXBEaXNjb25uZWN0KGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB0aGlzLmFkYi5zZXRBaXJwbGFuZU1vZGUoZmxpZ2h0TW9kZSk7XG4gIH0pO1xuICBhd2FpdCB0aGlzLndyYXBCb290c3RyYXBEaXNjb25uZWN0KGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB0aGlzLmFkYi5icm9hZGNhc3RBaXJwbGFuZU1vZGUoZmxpZ2h0TW9kZSk7XG4gIH0pO1xufTtcblxuY29tbWFuZHMuc2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBzZXRHZW9Mb2NhdGlvbiAobG9jYXRpb24pIHtcbiAgYXdhaXQgdGhpcy5hZGIuc2V0R2VvTG9jYXRpb24obG9jYXRpb24sIHRoaXMuaXNFbXVsYXRvcigpKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRHZW9Mb2NhdGlvbigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhpcy5sb2cud2FybihgQ291bGQgbm90IGdldCB0aGUgY3VycmVudCBnZW9sb2NhdGlvbiBpbmZvOiAke2UubWVzc2FnZX1gKTtcbiAgICB0aGlzLmxvZy53YXJuKGBSZXR1cm5pbmcgdGhlIGRlZmF1bHQgemVybydlZCB2YWx1ZXNgKTtcbiAgICByZXR1cm4ge1xuICAgICAgbGF0aXR1ZGU6IEdFT19FUFNJTE9OLFxuICAgICAgbG9uZ2l0dWRlOiBHRU9fRVBTSUxPTixcbiAgICAgIGFsdGl0dWRlOiBHRU9fRVBTSUxPTixcbiAgICB9O1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEdwc0NhY2hlUmVmcmVzaE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0TXMgWzIwMDAwXSBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gKiB0byBibG9jayB1bnRpbCBHUFMgY2FjaGUgaXMgcmVmcmVzaGVkLiBQcm92aWRpbmcgemVybyBvciBhIG5lZ2F0aXZlXG4gKiB2YWx1ZSB0byBpdCBza2lwcyB3YWl0aW5nIGNvbXBsZXRlbHkuXG4gKi9cblxuLyoqXG4gKiBTZW5kcyBhbiBhc3luYyByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIEdQUyBjYWNoZS5cbiAqIFRoaXMgZmVhdHVyZSBvbmx5IHdvcmtzIGlmIHRoZSBkZXZpY2UgdW5kZXIgdGVzdCBoYXNcbiAqIEdvb2dsZSBQbGF5IFNlcnZpY2VzIGluc3RhbGxlZC4gSW4gY2FzZSB0aGUgdmFuaWxsYVxuICogTG9jYXRpb25NYW5hZ2VyIGlzIHVzZWQgdGhlIGRldmljZSBBUEkgbGV2ZWwgbXVzdCBiZSBhdFxuICogdmVyc2lvbiAzMCAoQW5kcm9pZCBSKSBvciBoaWdoZXIuXG4gKlxuICogQHBhcmFtIHtHcHNDYWNoZVJlZnJlc2hPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVJlZnJlc2hHcHNDYWNoZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVJlZnJlc2hHcHNDYWNoZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgdGltZW91dE1zIH0gPSBvcHRzO1xuICBhd2FpdCB0aGlzLmFkYi5yZWZyZXNoR2VvTG9jYXRpb25DYWNoZSh0aW1lb3V0TXMpO1xufTtcblxuY29tbWFuZHMuZ2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBnZXRHZW9Mb2NhdGlvbiAoKSB7XG4gIGNvbnN0IHtsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhbHRpdHVkZX0gPSBhd2FpdCB0aGlzLmFkYi5nZXRHZW9Mb2NhdGlvbigpO1xuICByZXR1cm4ge1xuICAgIGxhdGl0dWRlOiBwYXJzZUZsb2F0KGxhdGl0dWRlKSB8fCBHRU9fRVBTSUxPTixcbiAgICBsb25naXR1ZGU6IHBhcnNlRmxvYXQobG9uZ2l0dWRlKSB8fCBHRU9fRVBTSUxPTixcbiAgICBhbHRpdHVkZTogcGFyc2VGbG9hdChhbHRpdHVkZSkgfHwgR0VPX0VQU0lMT04sXG4gIH07XG59O1xuLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvdmlldy9LZXlFdmVudC5odG1sI0tFWUNPREVfRFBBRF9DRU5URVJcbi8vIGluIHRoZSBhbmRyb2lkIGRvY3MsIHRoaXMgaXMgaG93IHRoZSBrZXljb2RlcyBhcmUgZGVmaW5lZFxuY29uc3QgS2V5Q29kZSA9IHtcbiAgVVA6IDE5LFxuICBET1dOOiAyMCxcbiAgUklHSFQ6IDIyLFxuICBDRU5URVI6IDIzXG59O1xuY29tbWFuZHMudG9nZ2xlTG9jYXRpb25TZXJ2aWNlcyA9IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZUxvY2F0aW9uU2VydmljZXMgKCkge1xuICB0aGlzLmxvZy5pbmZvKCdUb2dnbGluZyBsb2NhdGlvbiBzZXJ2aWNlcycpO1xuICBsZXQgYXBpID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgaWYgKHRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgbGV0IHByb3ZpZGVycyA9IGF3YWl0IHRoaXMuYWRiLmdldExvY2F0aW9uUHJvdmlkZXJzKCk7XG4gICAgbGV0IGlzR3BzRW5hYmxlZCA9IHByb3ZpZGVycy5pbmRleE9mKCdncHMnKSAhPT0gLTE7XG4gICAgYXdhaXQgdGhpcy5hZGIudG9nZ2xlR1BTTG9jYXRpb25Qcm92aWRlcighaXNHcHNFbmFibGVkKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXBpID4gMTUpIHtcbiAgICBsZXQgc2VxID0gW0tleUNvZGUuVVAsIEtleUNvZGUuVVBdO1xuICAgIGlmIChhcGkgPT09IDE2KSB7XG4gICAgICAvLyBUaGlzIHZlcnNpb24gb2YgQW5kcm9pZCBoYXMgYSBcInBhcmVudFwiIGJ1dHRvbiBpbiBpdHMgYWN0aW9uIGJhclxuICAgICAgc2VxLnB1c2goS2V5Q29kZS5ET1dOKTtcbiAgICB9IGVsc2UgaWYgKGFwaSA8IDI4KSB7XG4gICAgICAvLyBOZXdlciB2ZXJzaW9ucyBvZiBBbmRyb2lkIGhhdmUgdGhlIHRvZ2dsZSBpbiB0aGUgQWN0aW9uIGJhclxuICAgICAgc2VxID0gW0tleUNvZGUuUklHSFQsIEtleUNvZGUuUklHSFQsIEtleUNvZGUuVVBdO1xuICAgICAgLypcbiAgICAgICAqIE9uY2UgdGhlIExvY2F0aW9uIHNlcnZpY2VzIHN3aXRjaCBpcyBPRkYsIGl0IHdvbid0IHJlY2VpdmUgZm9jdXNcbiAgICAgICAqIHdoZW4gZ29pbmcgYmFjayB0byB0aGUgTG9jYXRpb24gU2VydmljZXMgc2V0dGluZ3Mgc2NyZWVuIHVubGVzcyB3ZVxuICAgICAgICogc2VuZCBhIGR1bW15IGtleWV2ZW50IChVUCkgKmJlZm9yZSogb3BlbmluZyB0aGUgc2V0dGluZ3Mgc2NyZWVuXG4gICAgICAgKi9cbiAgICAgIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KEtleUNvZGUuVVApO1xuICAgIH0gZWxzZSBpZiAoYXBpID49IDI4KSB7XG4gICAgICAvLyBFdmVuIG5ld2VyIHZlcnNpb25zIG9mIGFuZHJvaWQgaGF2ZSB0aGUgdG9nZ2xlIGluIGEgYmFyIGJlbG93IHRoZSBhY3Rpb24gYmFyXG4gICAgICAvLyB0aGlzIG1lYW5zIGEgc2luZ2xlIHJpZ2h0IGNsaWNrIHdpbGwgY2F1c2UgaXQgdG8gYmUgc2VsZWN0ZWQuXG4gICAgICBzZXEgPSBbS2V5Q29kZS5SSUdIVF07XG4gICAgICBhd2FpdCB0aGlzLmFkYi5rZXlldmVudChLZXlDb2RlLlVQKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy50b2dnbGVTZXR0aW5nKCdMT0NBVElPTl9TT1VSQ0VfU0VUVElOR1MnLCBzZXEpO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoZXJlJ3Mgbm8gZ2xvYmFsIGxvY2F0aW9uIHNlcnZpY2VzIHRvZ2dsZSBvbiBvbGRlciBBbmRyb2lkIHZlcnNpb25zXG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RZZXRJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cbn07XG5cbmhlbHBlcnMudG9nZ2xlU2V0dGluZyA9IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZVNldHRpbmcgKHNldHRpbmcsIHByZUtleVNlcSkge1xuICAvKlxuICAgKiBwcmVLZXlTZXEgaXMgdGhlIGtleWV2ZW50IHNlcXVlbmNlIHRvIHNlbmQgb3ZlciBBREIgaW4gb3JkZXJcbiAgICogdG8gcG9zaXRpb24gdGhlIGN1cnNvciBvbiB0aGUgcmlnaHQgb3B0aW9uLlxuICAgKiBCeSBkZWZhdWx0IGl0J3MgW3VwLCB1cCwgZG93bl0gYmVjYXVzZSB3ZSB1c3VhbGx5IHRhcmdldCB0aGUgMXN0IGl0ZW0gaW5cbiAgICogdGhlIHNjcmVlbiwgYW5kIHNvbWV0aW1lcyB3aGVuIG9wZW5pbmcgc2V0dGluZ3MgYWN0aXZpdGllcyB0aGUgY3Vyc29yIGlzXG4gICAqIGFscmVhZHkgcG9zaXRpb25uZWQgb24gdGhlIDFzdCBpdGVtLCBidXQgd2UgY2FuJ3Qga25vdyBmb3Igc3VyZVxuICAgKi9cbiAgaWYgKF8uaXNOdWxsKHByZUtleVNlcSkpIHtcbiAgICBwcmVLZXlTZXEgPSBbS2V5Q29kZS5VUCwgS2V5Q29kZS5VUCwgS2V5Q29kZS5ET1dOXTtcbiAgfVxuXG4gIGF3YWl0IHRoaXMub3BlblNldHRpbmdzQWN0aXZpdHkoc2V0dGluZyk7XG5cbiAgZm9yIChsZXQga2V5IG9mIHByZUtleVNlcSkge1xuICAgIGF3YWl0IHRoaXMuZG9LZXkoa2V5KTtcbiAgfVxuXG4gIGxldCB7YXBwUGFja2FnZSwgYXBwQWN0aXZpdHl9ID0gYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpO1xuXG4gIC8qXG4gICAqIENsaWNrIGFuZCBoYW5kbGUgcG90ZW50aWFsIEFEQiBkaXNjb25uZWN0IHRoYXQgb2NjdXJzIG9uIG9mZmljaWFsXG4gICAqIGVtdWxhdG9yIHdoZW4gdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBpcyBkaXNhYmxlZFxuICAgKi9cbiAgYXdhaXQgdGhpcy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdGhpcy5kb0tleShLZXlDb2RlLkNFTlRFUik7XG4gIH0pO1xuXG4gIC8qXG4gICAqIEluIG9uZSBwYXJ0aWN1bGFyIGNhc2UgKGVuYWJsZSBMb2NhdGlvbiBTZXJ2aWNlcyksIGEgcG9wLXVwIGlzXG4gICAqIGRpc3BsYXllZCBvbiBzb21lIHBsYXRmb3JtcyBzbyB0aGUgdXNlciBhY2NlcHRzIG9yIHJlZnVzZXMgdGhhdCBHb29nbGVcbiAgICogY29sbGVjdHMgbG9jYXRpb24gZGF0YS4gU28gd2Ugd2FpdCBmb3IgdGhhdCBwb3AtdXAgdG8gb3BlbiwgaWYgaXRcbiAgICogZG9lc24ndCB0aGVuIHByb2NlZWRcbiAgICovXG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5hZGIud2FpdEZvck5vdEFjdGl2aXR5KGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LCA1MDAwKTtcbiAgICBhd2FpdCB0aGlzLmRvS2V5KEtleUNvZGUuUklHSFQpO1xuICAgIGF3YWl0IHRoaXMuZG9LZXkoS2V5Q29kZS5DRU5URVIpO1xuICAgIGF3YWl0IHRoaXMuYWRiLndhaXRGb3JOb3RBY3Rpdml0eShhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSwgNTAwMCk7XG4gIH0gY2F0Y2ggKGlnbikge31cblxuICBhd2FpdCB0aGlzLmFkYi5iYWNrKCk7XG59O1xuXG5oZWxwZXJzLmRvS2V5ID0gYXN5bmMgZnVuY3Rpb24gZG9LZXkgKGtleSkge1xuICAvLyBUT0RPOiBDb25maXJtIHdlIG5lZWQgdGhpcyBkZWxheS4gU2VlbXMgdG8gd29yayB3aXRob3V0IGl0LlxuICBhd2FpdCBCLmRlbGF5KDIwMDApO1xuICBhd2FpdCB0aGlzLmFkYi5rZXlldmVudChrZXkpO1xufTtcblxuaGVscGVycy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdCA9IGFzeW5jIGZ1bmN0aW9uIHdyYXBCb290c3RyYXBEaXNjb25uZWN0ICh3cmFwcGVkKSB7XG4gIGlmICghdGhpcy5ib290c3RyYXApIHtcbiAgICByZXR1cm4gYXdhaXQgd3JhcHBlZCgpO1xuICB9XG5cbiAgdGhpcy5ib290c3RyYXAuaWdub3JlVW5leHBlY3RlZFNodXRkb3duID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3cmFwcGVkKCk7XG4gICAgYXdhaXQgdGhpcy5hZGIucmVzdGFydCgpO1xuICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnN0YXJ0KHRoaXMub3B0cy5hcHBQYWNrYWdlLCB0aGlzLm9wdHMuZGlzYWJsZUFuZHJvaWRXYXRjaGVycywgdGhpcy5vcHRzLmFjY2VwdFNzbENlcnRzKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLmJvb3RzdHJhcC5pZ25vcmVVbmV4cGVjdGVkU2h1dGRvd24gPSBmYWxzZTtcbiAgfVxufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL25ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -13,8 +13,6 @@ var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
14
  var _asyncbox = require("asyncbox");
15
15
 
16
- var _logger = _interopRequireDefault(require("../logger"));
17
-
18
16
  const commands = {},
19
17
  helpers = {},
20
18
  extensions = {};
@@ -125,7 +123,7 @@ helpers.getCPUInfo = async function getCPUInfo(packageName, retries = 2) {
125
123
  output = await this.adb.shell(['dumpsys', 'cpuinfo']);
126
124
  } catch (e) {
127
125
  if (e.stderr) {
128
- _logger.default.info(e.stderr);
126
+ this.log.info(e.stderr);
129
127
  }
130
128
 
131
129
  throw e;
@@ -135,8 +133,7 @@ helpers.getCPUInfo = async function getCPUInfo(packageName, retries = 2) {
135
133
  const match = usagesPattern.exec(output);
136
134
 
137
135
  if (!match) {
138
- _logger.default.debug(output);
139
-
136
+ this.log.debug(output);
140
137
  throw new Error(`Unable to parse cpu usage data for '${packageName}'. Check the server log for more details`);
141
138
  }
142
139
 
@@ -329,4 +326,4 @@ var _default = extensions;
329
326
  exports.default = _default;require('source-map-support').install();
330
327
 
331
328
 
332
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9wZXJmb3JtYW5jZS5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiTkVUV09SS19LRVlTIiwiQ1BVX0tFWVMiLCJCQVRURVJZX0tFWVMiLCJNRU1PUllfS0VZUyIsIlNVUFBPUlRFRF9QRVJGT1JNQU5DRV9EQVRBX1RZUEVTIiwiT2JqZWN0IiwiZnJlZXplIiwiY3B1aW5mbyIsIm1lbW9yeWluZm8iLCJiYXR0ZXJ5aW5mbyIsIm5ldHdvcmtpbmZvIiwiTUVNSU5GT19USVRMRVMiLCJOQVRJVkUiLCJEQUxWSUsiLCJFR0wiLCJHTCIsIk1UUkFDSyIsIlRPVEFMIiwiSEVBUCIsIlJFVFJZX1BBVVNFX01TIiwicGFyc2VNZW1pbmZvRm9yQXBpMTlUbzI5IiwiZW50cmllcyIsInZhbERpY3QiLCJ0eXBlIiwic3ViVHlwZSIsIm5hdGl2ZVBzcyIsIm5hdGl2ZVByaXZhdGVEaXJ0eSIsIm5hdGl2ZUhlYXBTaXplIiwibmF0aXZlSGVhcEFsbG9jYXRlZFNpemUiLCJkYWx2aWtQc3MiLCJkYWx2aWtQcml2YXRlRGlydHkiLCJlZ2xQc3MiLCJlZ2xQcml2YXRlRGlydHkiLCJnbFBzcyIsImdsUHJpdmF0ZURpcnR5IiwibGVuZ3RoIiwidG90YWxQc3MiLCJ0b3RhbFByaXZhdGVEaXJ0eSIsInBhcnNlTWVtaW5mb0ZvckFwaUJlbG93MTkiLCJwYXJzZU1lbWluZm9Gb3JBcGlBYm92ZTI5IiwibmF0aXZlUnNzIiwiZGFsdmlrUnNzIiwidG90YWxSc3MiLCJnZXRQZXJmb3JtYW5jZURhdGFUeXBlcyIsIl8iLCJrZXlzIiwiZ2V0UGVyZm9ybWFuY2VEYXRhIiwicGFja2FnZU5hbWUiLCJkYXRhVHlwZSIsInJldHJpZXMiLCJ0b0xvd2VyIiwiZ2V0QmF0dGVyeUluZm8iLCJnZXRDUFVJbmZvIiwiZ2V0TWVtb3J5SW5mbyIsImdldE5ldHdvcmtUcmFmZmljSW5mbyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsIm91dHB1dCIsImFkYiIsInNoZWxsIiwiZSIsInN0ZGVyciIsImxvZyIsImluZm8iLCJ1c2FnZXNQYXR0ZXJuIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwibWF0Y2giLCJleGVjIiwiZGVidWciLCJjbWQiLCJkYXRhIiwicG93ZXIiLCJwYXJzZUludCIsInNwbGl0IiwidHJpbSIsIk51bWJlciIsImlzTmFOIiwiY2xvbmUiLCJ0b1N0cmluZyIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJsaW5lIiwiZmlsdGVyIiwiQm9vbGVhbiIsImhlYWRlcnMiLCJ2YWx1ZXMiLCJtYXAiLCJoZWFkZXIiLCJyZXR1cm5WYWx1ZSIsImJ1Y2tldER1cmF0aW9uIiwiYnVja2V0U3RhcnQiLCJhY3RpdmVUaW1lIiwicnhCeXRlcyIsInJ4UGFja2V0cyIsInR4Qnl0ZXMiLCJ0eFBhY2tldHMiLCJvcGVyYXRpb25zIiwiaW5kZXgiLCJmcm9tWHRzdGF0cyIsImluZGV4T2YiLCJzdGFydCIsImRlbGltaXRlciIsImVuZCIsInBlbmRpbmdCeXRlcyIsInN1YnN0cmluZyIsImFycmF5TGlzdCIsImoiLCJrIiwicmV0dXJuSW5kZXgiLCJpIiwiaXNFcXVhbCIsImlzVW5kZWZpbmVkIiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjtBQUFBLE1BQXFCQyxPQUFPLEdBQUcsRUFBL0I7QUFBQSxNQUFtQ0MsVUFBVSxHQUFHLEVBQWhEOzs7QUFFQSxNQUFNQyxZQUFZLEdBQUcsQ0FDbkIsQ0FBQyxhQUFELEVBQWdCLFlBQWhCLEVBQThCLFNBQTlCLEVBQXlDLFdBQXpDLEVBQXNELFNBQXRELEVBQWlFLFdBQWpFLEVBQThFLFlBQTlFLEVBQTRGLGdCQUE1RixDQURtQixFQUVuQixDQUFDLElBQUQsRUFBTyxZQUFQLEVBQXFCLElBQXJCLEVBQTJCLElBQTNCLEVBQWlDLElBQWpDLEVBQXVDLElBQXZDLEVBQTZDLElBQTdDLEVBQW1ELGdC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Q0FBVywwQ0FBeUNpQixJQUFLLEdBQXpELENBQU47QUFDRDtBQUNGLEdBckpZLENBQWI7QUFzSkQsQ0F2SkQ7O0FBeUpBbkUsTUFBTSxDQUFDNkcsTUFBUCxDQUFjbkgsVUFBZCxFQUEwQkYsUUFBMUIsRUFBb0NDLE9BQXBDO2VBS2VDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbnN0IE5FVFdPUktfS0VZUyA9IFtcbiAgWydidWNrZXRTdGFydCcsICdhY3RpdmVUaW1lJywgJ3J4Qnl0ZXMnLCAncnhQYWNrZXRzJywgJ3R4Qnl0ZXMnLCAndHhQYWNrZXRzJywgJ29wZXJhdGlvbnMnLCAnYnVja2V0RHVyYXRpb24nXSxcbiAgWydzdCcsICdhY3RpdmVUaW1lJywgJ3JiJywgJ3JwJywgJ3RiJywgJ3RwJywgJ29wJywgJ2J1Y2tldER1cmF0aW9uJ11cbl07XG5jb25zdCBDUFVfS0VZUyA9IFsndXNlcicsICdrZXJuZWwnXTtcbmNvbnN0IEJBVFRFUllfS0VZUyA9IFsncG93ZXInXTtcbmNvbnN0IE1FTU9SWV9LRVlTID0gW1xuICAndG90YWxQcml2YXRlRGlydHknLCAnbmF0aXZlUHJpdmF0ZURpcnR5JywgJ2RhbHZpa1ByaXZhdGVEaXJ0eScsXG4gICdlZ2xQcml2YXRlRGlydHknLCAnZ2xQcml2YXRlRGlydHknLFxuICAndG90YWxQc3MnLCAnbmF0aXZlUHNzJywgJ2RhbHZpa1BzcycsICdlZ2xQc3MnLCAnZ2xQc3MnLFxuICAnbmF0aXZlSGVhcEFsbG9jYXRlZFNpemUnLCAnbmF0aXZlSGVhcFNpemUnLFxuICAnbmF0aXZlUnNzJywgJ2RhbHZpa1JzcycsICd0b3RhbFJzcydcbl07XG5jb25zdCBTVVBQT1JURURfUEVSRk9STUFOQ0VfREFUQV9UWVBFUyA9IE9iamVjdC5mcmVlemUoe1xuICBjcHVpbmZvOiAndGhlIGFtb3VudCBvZiBjcHUgYnkgdXNlciBhbmQga2VybmVsIHByb2Nlc3MgLSBjcHUgaW5mb3JtYXRpb24gZm9yIGFwcGxpY2F0aW9ucyBvbiByZWFsIGRldmljZXMgYW5kIHNpbXVsYXRvcnMnLFxuICBtZW1vcnlpbmZvOiAndGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSB0aGUgcHJvY2VzcyAtIG1lbW9yeSBpbmZvcm1hdGlvbiBmb3IgYXBwbGljYXRpb25zIG9uIHJlYWwgZGV2aWNlcyBhbmQgc2ltdWxhdG9ycycsXG4gIGJhdHRlcnlpbmZvOiAndGhlIHJlbWFpbmluZyBiYXR0ZXJ5IHBvd2VyIC0gYmF0dGVyeSBwb3dlciBpbmZvcm1hdGlvbiBmb3IgYXBwbGljYXRpb25zIG9uIHJlYWwgZGV2aWNlcyBhbmQgc2ltdWxhdG9ycycsXG4gIG5ldHdvcmtpbmZvOiAndGhlIG5ldHdvcmsgc3RhdGlzdGljcyAtIG5ldHdvcmsgcngvdHggaW5mb3JtYXRpb24gZm9yIGFwcGxpY2F0aW9ucyBvbiByZWFsIGRldmljZXMgYW5kIHNpbXVsYXRvcnMnXG59KTtcbmNvbnN0IE1FTUlORk9fVElUTEVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIE5BVElWRTogJ05hdGl2ZScsXG4gIERBTFZJSzogJ0RhbHZpaycsXG4gIEVHTDogJ0VHTCcsXG4gIEdMOiAnR0wnLFxuICBNVFJBQ0s6ICdtdHJhY2snLFxuICBUT1RBTDogJ1RPVEFMJyxcbiAgSEVBUDogJ0hlYXAnXG59KTtcbmNvbnN0IFJFVFJZX1BBVVNFX01TID0gMTAwMDtcblxuLyoqXG4gKiBBUEkgbGV2ZWwgYmV0d2VlbiAxOCBhbmQgMzBcbiAqIFsnPFN5c3RlbSBUeXBlPicsICc8TWVtb3J5IFR5cGU+JywgPHBzcyB0b3RhbD4sIDxwcml2YXRlIGRpcnR5PiwgPHByaXZhdGUgY2xlYW4+LCA8c3dhcFBzcyBkaXJ0eT4sIDxoZWFwIHNpemU+LCA8aGVhcCBhbGxvYz4sIDxoZWFwIGZyZWU+XVxuICogZXhjZXB0ICdUT1RBTCcsIHdoaWNoIHNraXBzIHRoZSBzZWNvbmQgdHlwZSBuYW1lXG4gKiAhISEgdmFsRGljdCBnZXRzIG11dGF0ZWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZW1pbmZvRm9yQXBpMTlUbzI5IChlbnRyaWVzLCB2YWxEaWN0KSB7XG4gIGNvbnN0IFt0eXBlLCBzdWJUeXBlXSA9IGVudHJpZXM7XG4gIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5OQVRJVkUgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuSEVBUCkge1xuICAgIFssLCB2YWxEaWN0Lm5hdGl2ZVBzcywgdmFsRGljdC5uYXRpdmVQcml2YXRlRGlydHksLCwgdmFsRGljdC5uYXRpdmVIZWFwU2l6ZSwgdmFsRGljdC5uYXRpdmVIZWFwQWxsb2NhdGVkU2l6ZV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLkRBTFZJSyAmJiBzdWJUeXBlID09PSBNRU1JTkZPX1RJVExFUy5IRUFQKSB7XG4gICAgWywsIHZhbERpY3QuZGFsdmlrUHNzLCB2YWxEaWN0LmRhbHZpa1ByaXZhdGVEaXJ0eV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLkVHTCAmJiBzdWJUeXBlID09PSBNRU1JTkZPX1RJVExFUy5NVFJBQ0spIHtcbiAgICBbLCwgdmFsRGljdC5lZ2xQc3MsIHZhbERpY3QuZWdsUHJpdmF0ZURpcnR5XSA9IGVudHJpZXM7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVNSU5GT19USVRMRVMuR0wgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuTVRSQUNLKSB7XG4gICAgWywsIHZhbERpY3QuZ2xQc3MsIHZhbERpY3QuZ2xQcml2YXRlRGlydHldID0gZW50cmllcztcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5UT1RBTCAmJiBlbnRyaWVzLmxlbmd0aCA9PT0gOCkge1xuICAgIC8vIHRoZXJlIGFyZSB0d28gdG90YWxzLCBhbmQgd2Ugb25seSB3YW50IHRoZSBmdWxsIGxpc3RpbmcsIHdoaWNoIGhhcyA4IGVudHJpZXNcbiAgICBbLCB2YWxEaWN0LnRvdGFsUHNzLCB2YWxEaWN0LnRvdGFsUHJpdmF0ZURpcnR5XSA9IGVudHJpZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBbJzxTeXN0ZW0gVHlwZScsICc8cHBzPicsICc8c2hhcmVkIGRpcnR5PicsICc8cHJpdmF0ZSBkaXJ0eT4nLCAnPGhlYXAgc2l6ZT4nLCAnPGhlYXAgYWxsb2M+JywgJzxoZWFwIGZyZWU+J11cbiAqICEhISB2YWxEaWN0IGdldHMgbXV0YXRlZFxuICovXG5mdW5jdGlvbiBwYXJzZU1lbWluZm9Gb3JBcGlCZWxvdzE5IChlbnRyaWVzLCB2YWxEaWN0KSB7XG4gIGNvbnN0IHR5cGUgPSBlbnRyaWVzWzBdO1xuICBpZiAodHlwZSA9PT0gTUVNSU5GT19USVRMRVMuTkFUSVZFKSB7XG4gICAgWywgdmFsRGljdC5uYXRpdmVQc3MsLCB2YWxEaWN0Lm5hdGl2ZVByaXZhdGVEaXJ0eSwgdmFsRGljdC5uYXRpdmVIZWFwU2l6ZSwgdmFsRGljdC5uYXRpdmVIZWFwQWxsb2NhdGVkU2l6ZV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLkRBTFZJSykge1xuICAgIFssIHZhbERpY3QuZGFsdmlrUHNzLCwgdmFsRGljdC5kYWx2aWtQcml2YXRlRGlydHldID0gZW50cmllcztcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5FR0wpIHtcbiAgICBbLCB2YWxEaWN0LmVnbFBzcywsIHZhbERpY3QuZWdsUHJpdmF0ZURpcnR5XSA9IGVudHJpZXM7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVNSU5GT19USVRMRVMuR0wpIHtcbiAgICBbLCB2YWxEaWN0LmdsUHNzLCwgdmFsRGljdC5nbFByaXZhdGVEaXJ0eV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLlRPVEFMKSB7XG4gICAgWywgdmFsRGljdC50b3RhbFBzcywsIHZhbERpY3QudG90YWxQcml2YXRlRGlydHldID0gZW50cmllcztcbiAgfVxufVxuXG4vKipcbiAqIEFQSSBsZXZlbCAzMCBhbmQgYWJvdmVcbiAqIFsnPFN5c3RlbSBUeXBlPicsICc8TWVtb3J5IFR5cGU+JywgPHBzcyB0b3RhbD4sIDxwcml2YXRlIGRpcnR5PiwgPHByaXZhdGUgY2xlYW4+LCA8c3dhcFBzcyBkaXJ0eT4sIDxyc3MgdG90YWw+LCA8aGVhcCBzaXplPiwgPGhlYXAgYWxsb2M+LCA8aGVhcCBmcmVlPl1cbiAqICEhISB2YWxEaWN0IGdldHMgbXV0YXRlZFxuICovXG5mdW5jdGlvbiBwYXJzZU1lbWluZm9Gb3JBcGlBYm92ZTI5IChlbnRyaWVzLCB2YWxEaWN0KSB7XG4gIGNvbnN0IFt0eXBlLCBzdWJUeXBlXSA9IGVudHJpZXM7XG4gIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5OQVRJVkUgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuSEVBUCkge1xuICAgIFssLCB2YWxEaWN0Lm5hdGl2ZVBzcywgdmFsRGljdC5uYXRpdmVQcml2YXRlRGlydHksLCwgdmFsRGljdC5uYXRpdmVSc3MsIHZhbERpY3QubmF0aXZlSGVhcFNpemUsIHZhbERpY3QubmF0aXZlSGVhcEFsbG9jYXRlZFNpemVdID0gZW50cmllcztcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5EQUxWSUsgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuSEVBUCkge1xuICAgIFssLCB2YWxEaWN0LmRhbHZpa1BzcywgdmFsRGljdC5kYWx2aWtQcml2YXRlRGlydHksLCwgdmFsRGljdC5kYWx2aWtSc3NdID0gZW50cmllcztcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5FR0wgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuTVRSQUNLKSB7XG4gICAgWywsIHZhbERpY3QuZWdsUHNzLCB2YWxEaWN0LmVnbFByaXZhdGVEaXJ0eV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLkdMICYmIHN1YlR5cGUgPT09IE1FTUlORk9fVElUTEVTLk1UUkFDSykge1xuICAgIFssLCB2YWxEaWN0LmdsUHNzLCB2YWxEaWN0LmdsUHJpdmF0ZURpcnR5XSA9IGVudHJpZXM7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVNSU5GT19USVRMRVMuVE9UQUwgJiYgZW50cmllcy5sZW5ndGggPT09IDkpIHtcbiAgICAvLyBoYXMgOSBlbnRyaWVzXG4gICAgWywgdmFsRGljdC50b3RhbFBzcywgdmFsRGljdC50b3RhbFByaXZhdGVEaXJ0eSwsLCB2YWxEaWN0LnRvdGFsUnNzXSA9IGVudHJpZXM7XG4gIH1cbn1cblxuLy9cbi8vIHJldHVybnMgdGhlIGluZm9ybWF0aW9uIHR5cGUgb2YgdGhlIHN5c3RlbSBzdGF0ZSB3aGljaCBpcyBzdXBwb3J0ZWQgdG8gcmVhZCBhcyBsaWtlIGNwdSwgbWVtb3J5LCBuZXR3b3JrIHRyYWZmaWMsIGFuZCBiYXR0ZXJ5LlxuLy8gb3V0cHV0IC0gYXJyYXkgbGlrZSBiZWxvd1xuLy8gW2NwdWluZm8sIGJhdHRlcnlpbmZvLCBuZXR3b3JraW5mbywgbWVtb3J5aW5mb11cbi8vXG5jb21tYW5kcy5nZXRQZXJmb3JtYW5jZURhdGFUeXBlcyA9IGZ1bmN0aW9uIGdldFBlcmZvcm1hbmNlRGF0YVR5cGVzICgpIHtcbiAgcmV0dXJuIF8ua2V5cyhTVVBQT1JURURfUEVSRk9STUFOQ0VfREFUQV9UWVBFUyk7XG59O1xuXG4vKipcbiAqIEByZXR1cm5zIFRoZSBpbmZvcm1hdGlvbiB0eXBlIG9mIHRoZSBzeXN0ZW0gc3RhdGUgd2hpY2ggaXMgc3VwcG9ydGVkIHRvIHJlYWQgYXMgbGlrZSBjcHUsIG1lbW9yeSwgbmV0d29yayB0cmFmZmljLCBhbmQgYmF0dGVyeS5cbiAqIGlucHV0IC0gKHBhY2thZ2VOYW1lKSB0aGUgcGFja2FnZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvblxuICogICAgICAgIChkYXRhVHlwZSkgdGhlIHR5cGUgb2Ygc3lzdGVtIHN0YXRlIHdoaWNoIHdhbnRzIHRvIHJlYWQuIEl0IHNob3VsZCBiZSBvbmUgb2YgdGhlIGtleXMgb2YgdGhlIFNVUFBPUlRFRF9QRVJGT1JNQU5DRV9EQVRBX1RZUEVTXG4gKiAgICAgICAgKGRhdGFSZWFkVGltZW91dCkgdGhlIG51bWJlciBvZiBhdHRlbXB0cyB0byByZWFkXG4gKiBvdXRwdXQgLSB0YWJsZSBvZiB0aGUgcGVyZm9ybWFuY2UgZGF0YSwgVGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRhYmxlIHJlcHJlc2VudHMgdGhlIHR5cGUgb2YgZGF0YS4gVGhlIHJlbWFpbmluZyBsaW5lcyByZXByZXNlbnQgdGhlIHZhbHVlcyBvZiB0aGUgZGF0YS5cbiAqXG4gKiBpbiBjYXNlIG9mIGJhdHRlcnkgaW5mbyA6IFtbcG93ZXJdLCBbMjNdXVxuICogaW4gY2FzZSBvZiBtZW1vcnkgaW5mbyA6ICBbW3RvdGFsUHJpdmF0ZURpcnR5LCBuYXRpdmVQcml2YXRlRGlydHksIGRhbHZpa1ByaXZhdGVEaXJ0eSwgZWdsUHJpdmF0ZURpcnR5LCBnbFByaXZhdGVEaXJ0eSwgdG90YWxQc3MsXG4gKiAgIG5hdGl2ZVBzcywgZGFsdmlrUHNzLCBlZ2xQc3MsIGdsUHNzLCBuYXRpdmVIZWFwQWxsb2NhdGVkU2l6ZSwgbmF0aXZlSGVhcFNpemVdLCBbMTgzNjAsIDgyOTYsIDYxMzIsIG51bGwsIG51bGwsIDQyNTg4LCA4NDA2LCA3MDI0LCBudWxsLCBudWxsLCAyNjUxOSwgMTAzNDRdXVxuICogaW4gY2FzZSBvZiBuZXR3b3JrIGluZm8gOiBbW2J1Y2tldFN0YXJ0LCBhY3RpdmVUaW1lLCByeEJ5dGVzLCByeFBhY2tldHMsIHR4Qnl0ZXMsIHR4UGFja2V0cywgb3BlcmF0aW9ucywgYnVja2V0RHVyYXRpb24sXSxcbiAqICAgWzE0NzgwOTE2MDAwMDAsIG51bGwsIDEwOTkwNzUsIDYxMDk0NywgOTI4LCAxMTQzNjIsIDc2OSwgMCwgMzYwMDAwMF0sIFsxNDc4MDk1MjAwMDAwLCBudWxsLCAxMzA2MzAwLCA0MDU5OTcsIDUwOSwgNDYzNTksIDM3MCwgMCwgMzYwMDAwMF1dXG4gKiBpbiBjYXNlIG9mIG5ldHdvcmsgaW5mbyA6IFtbc3QsIGFjdGl2ZVRpbWUsIHJiLCBycCwgdGIsIHRwLCBvcCwgYnVja2V0RHVyYXRpb25dLCBbMTQ3ODA4ODAwMCwgbnVsbCwgbnVsbCwgMzIxMTUyOTYsIDM0MjkxLCAyOTU2ODA1LCAyNTcwNSwgMCwgMzYwMF0sXG4gKiAgIFsxNDc4MDkxNjAwLCBudWxsLCBudWxsLCAyNzE0NjgzLCAxMTgyMSwgMTQyMDU2NCwgMTI2NTAsIDAsIDM2MDBdLCBbMTQ3ODA5NTIwMCwgbnVsbCwgbnVsbCwgMTAwNzkyMTMsIDE5OTYyLCAyNDg3NzA1LCAyMDAxNSwgMCwgMzYwMF0sXG4gKiAgIFsxNDc4MDk4ODAwLCBudWxsLCBudWxsLCA0NDQ0NDMzLCAxMDIyNywgMTQzMDM1NiwgMTA0OTMsIDAsIDM2MDBdXVxuICogaW4gY2FzZSBvZiBjcHUgaW5mbyA6IFtbdXNlciwga2VybmVsXSwgWzAuOSwgMS4zXV1cbiAqL1xuY29tbWFuZHMuZ2V0UGVyZm9ybWFuY2VEYXRhID0gYXN5bmMgZnVuY3Rpb24gZ2V0UGVyZm9ybWFuY2VEYXRhIChwYWNrYWdlTmFtZSwgZGF0YVR5cGUsIHJldHJpZXMgPSAyKSB7XG4gIHN3aXRjaCAoXy50b0xvd2VyKGRhdGFUeXBlKSkge1xuICAgIGNhc2UgJ2JhdHRlcnlpbmZvJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEJhdHRlcnlJbmZvKHJldHJpZXMpO1xuICAgIGNhc2UgJ2NwdWluZm8nOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0Q1BVSW5mbyhwYWNrYWdlTmFtZSwgcmV0cmllcyk7XG4gICAgY2FzZSAnbWVtb3J5aW5mbyc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRNZW1vcnlJbmZvKHBhY2thZ2VOYW1lLCByZXRyaWVzKTtcbiAgICBjYXNlICduZXR3b3JraW5mbyc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXROZXR3b3JrVHJhZmZpY0luZm8ocmV0cmllcyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcGVyZm9ybWFuY2UgZGF0YSBvZiB0eXBlICcke2RhdGFUeXBlfScgZm91bmQuIGAgK1xuICAgICAgICBgT25seSB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgc3VwcG9ydGVkOiAke0pTT04uc3RyaW5naWZ5KFNVUFBPUlRFRF9QRVJGT1JNQU5DRV9EQVRBX1RZUEVTLCAnICcsIDIpfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmdldENQVUluZm8gPSBhc3luYyBmdW5jdGlvbiBnZXRDUFVJbmZvIChwYWNrYWdlTmFtZSwgcmV0cmllcyA9IDIpIHtcbiAgLy8gVE9ETzogZmlndXJlIG91dCB3aHkgdGhpcyBpc1xuICAvLyBzb21ldGltZXMsIHRoZSBmdW5jdGlvbiBvZiAnYWRiLnNoZWxsJyBmYWlscy4gd2hlbiBJIHRlc3RlZCB0aGlzIGZ1bmN0aW9uIG9uIHRoZSB0YXJnZXQgb2YgJ0dhbGF4eSBOb3RlNScsXG4gIC8vIGFkYi5zaGVsbChkdW1wc3lzIGNwdWluZm8pIHJldHVybnMgY3B1IGRhdGFzIGZvciBvdGhlciBhcHBsaWNhdGlvbiBwYWNrYWdlcywgYnV0IEkgY2FuJ3QgZmluZCB0aGUgZGF0YSBmb3IgcGFja2FnZU5hbWUuXG4gIC8vIEl0IHVzdWFsbHkgZmFpbHMgMzAgdGltZXMgYW5kIHN1Y2Nlc3MgZm9yIHRoZSBuZXh0IHRpbWUsXG4gIC8vIFNpbmNlIHRoZW4sIGhlIGhhcyBjb250aW51ZWQgdG8gc3VjY2VlZC5cbiAgcmV0dXJuIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgUkVUUllfUEFVU0VfTVMsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgb3V0cHV0O1xuICAgIHRyeSB7XG4gICAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2R1bXBzeXMnLCAnY3B1aW5mbyddKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5zdGRlcnIpIHtcbiAgICAgICAgbG9nLmluZm8oZS5zdGRlcnIpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgLy8gYG91dHB1dGAgd2lsbCBiZSBzb21ldGhpbmcgbGlrZVxuICAgIC8vICAgICswJSAyMjA5L2lvLmFwcGl1bS5hbmRyb2lkLmFwaXM6IDAuMSUgdXNlciArIDAuMiUga2VybmVsIC8gZmF1bHRzOiA3MCBtaW5vclxuICAgIGNvbnN0IHVzYWdlc1BhdHRlcm4gPVxuICAgICAgbmV3IFJlZ0V4cChgXi4rXFxcXC8ke18uZXNjYXBlUmVnRXhwKHBhY2thZ2VOYW1lKX06XFxcXEQrKFtcXFxcZC5dKyklXFxcXHMrdXNlclxcXFxzK1xcXFwrXFxcXHMrKFtcXFxcZC5dKyklXFxcXHMra2VybmVsYCwgJ20nKTtcbiAgICBjb25zdCBtYXRjaCA9IHVzYWdlc1BhdHRlcm4uZXhlYyhvdXRwdXQpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGxvZy5kZWJ1ZyhvdXRwdXQpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgY3B1IHVzYWdlIGRhdGEgZm9yICcke3BhY2thZ2VOYW1lfScuIENoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHNgKTtcbiAgICB9XG4gICAgcmV0dXJuIFtDUFVfS0VZUywgW21hdGNoWzFdLCBtYXRjaFsyXV1dO1xuICB9KTtcbn07XG5cbmhlbHBlcnMuZ2V0QmF0dGVyeUluZm8gPSBhc3luYyBmdW5jdGlvbiBnZXRCYXR0ZXJ5SW5mbyAocmV0cmllcyA9IDIpIHtcbiAgcmV0dXJuIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgUkVUUllfUEFVU0VfTVMsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgY21kID0gWydkdW1wc3lzJywgJ2JhdHRlcnknLCAnfCcsICdncmVwJywgJ2xldmVsJ107XG4gICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChjbWQpO1xuICAgIGlmICghZGF0YSkgdGhyb3cgbmV3IEVycm9yKCdObyBkYXRhIGZyb20gZHVtcHN5cycpOyAvL2VzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcblxuICAgIGxldCBwb3dlciA9IHBhcnNlSW50KChkYXRhLnNwbGl0KCc6JylbMV0gfHwgJycpLnRyaW0oKSwgMTApO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNOYU4ocG93ZXIpKSB7XG4gICAgICByZXR1cm4gW18uY2xvbmUoQkFUVEVSWV9LRVlTKSwgW3Bvd2VyLnRvU3RyaW5nKCldXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgYmF0dGVyeSBkYXRhOiAnJHtkYXRhfSdgKTtcbiAgICB9XG4gIH0pO1xufTtcblxuaGVscGVycy5nZXRNZW1vcnlJbmZvID0gYXN5bmMgZnVuY3Rpb24gZ2V0TWVtb3J5SW5mbyAocGFja2FnZU5hbWUsIHJldHJpZXMgPSAyKSB7XG4gIHJldHVybiBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIFJFVFJZX1BBVVNFX01TLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY21kID0gW1xuICAgICAgJ2R1bXBzeXMnLCAnbWVtaW5mbycsIGAnJHtwYWNrYWdlTmFtZX0nYCxcbiAgICAgICd8JywgJ2dyZXAnLCAnLUUnLFxuICAgICAgYCcke01FTUlORk9fVElUTEVTLk5BVElWRX18JHtNRU1JTkZPX1RJVExFUy5EQUxWSUt9fCR7TUVNSU5GT19USVRMRVMuRUdMfWAgK1xuICAgICAgYHwke01FTUlORk9fVElUTEVTLkdMfXwke01FTUlORk9fVElUTEVTLlRPVEFMfSdgXG4gICAgXTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoY21kKTtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZGF0YSBmcm9tIGR1bXBzeXMnKTtcbiAgICB9XG4gICAgY29uc3QgdmFsRGljdCA9IHt0b3RhbFByaXZhdGVEaXJ0eTogJyd9O1xuICAgIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZGF0YS5zcGxpdCgnXFxuJykpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBsaW5lLnRyaW0oKS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGlmIChhcGlMZXZlbCA+PSAzMCkge1xuICAgICAgICBwYXJzZU1lbWluZm9Gb3JBcGlBYm92ZTI5KGVudHJpZXMsIHZhbERpY3QpO1xuICAgICAgfSBlbHNlIGlmIChhcGlMZXZlbCA+IDE4ICYmIGFwaUxldmVsIDwgMzApIHtcbiAgICAgICAgcGFyc2VNZW1pbmZvRm9yQXBpMTlUbzI5KGVudHJpZXMsIHZhbERpY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VNZW1pbmZvRm9yQXBpQmVsb3cxOShlbnRyaWVzLCB2YWxEaWN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZhbERpY3QudG90YWxQcml2YXRlRGlydHkgJiYgdmFsRGljdC50b3RhbFByaXZhdGVEaXJ0eSAhPT0gJ25vZGV4Jykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IF8uY2xvbmUoTUVNT1JZX0tFWVMpO1xuICAgICAgY29uc3QgdmFsdWVzID0gaGVhZGVycy5tYXAoKGhlYWRlcikgPT4gdmFsRGljdFtoZWFkZXJdKTtcbiAgICAgIHJldHVybiBbaGVhZGVycywgdmFsdWVzXTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBtZW1vcnkgZGF0YTogJyR7ZGF0YX0nYCk7XG4gIH0pO1xufTtcblxuaGVscGVycy5nZXROZXR3b3JrVHJhZmZpY0luZm8gPSBhc3luYyBmdW5jdGlvbiBnZXROZXR3b3JrVHJhZmZpY0luZm8gKHJldHJpZXMgPSAyKSB7XG4gIHJldHVybiBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIFJFVFJZX1BBVVNFX01TLCBhc3luYyAoKSA9PiB7XG4gICAgbGV0IHJldHVyblZhbHVlID0gW107XG4gICAgbGV0IGJ1Y2tldER1cmF0aW9uLCBidWNrZXRTdGFydCwgYWN0aXZlVGltZSwgcnhCeXRlcywgcnhQYWNrZXRzLCB0eEJ5dGVzLCB0eFBhY2tldHMsIG9wZXJhdGlvbnM7XG5cbiAgICBsZXQgY21kID0gWydkdW1wc3lzJywgJ25ldHN0YXRzJ107XG4gICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChjbWQpO1xuICAgIGlmICghZGF0YSkgdGhyb3cgbmV3IEVycm9yKCdObyBkYXRhIGZyb20gZHVtcHN5cycpOyAvL2VzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcblxuICAgIC8vIEluIGNhc2Ugb2YgbmV0d29yayB0cmFmZmljIGluZm9ybWF0aW9uLCBpdCBpcyBkaWZmZXJlbnQgZm9yIHRoZSByZXR1cm4gZGF0YSBiZXR3ZWVuIGVtdWxhdG9yIGFuZCByZWFsIGRldmljZS5cbiAgICAvLyB0aGUgcmV0dXJuIGRhdGEgb2YgZW11bGF0b3JcbiAgICAvLyAgIFh0IHN0YXRzOlxuICAgIC8vICAgUGVuZGluZyBieXRlczogMzkyNTBcbiAgICAvLyAgIEhpc3Rvcnkgc2luY2UgYm9vdDpcbiAgICAvLyAgIGlkZW50PVtbdHlwZT1XSUZJLCBzdWJUeXBlPUNPTUJJTkVELCBuZXR3b3JrSWQ9XCJXaXJlZFNTSURcIl1dIHVpZD0tMSBzZXQ9QUxMIHRhZz0weDBcbiAgICAvLyAgIE5ldHdvcmtTdGF0c0hpc3Rvcnk6IGJ1Y2tldER1cmF0aW9uPTM2MDAwMDBcbiAgICAvLyAgIGJ1Y2tldFN0YXJ0PTE0NzgwOTg4MDAwMDAgYWN0aXZlVGltZT0zMTgyNCByeEJ5dGVzPTIxNTAyIHJ4UGFja2V0cz03OCB0eEJ5dGVzPTE3NzQ4IHR4UGFja2V0cz05MCBvcGVyYXRpb25zPTBcbiAgICAvL1xuICAgIC8vIDcuMVxuICAgIC8vICAgWHQgc3RhdHM6XG4gICAgLy8gICBQZW5kaW5nIGJ5dGVzOiA0ODE0ODdcbiAgICAvLyAgIEhpc3Rvcnkgc2luY2UgYm9vdDpcbiAgICAvLyAgIGlkZW50PVt7dHlwZT1NT0JJTEUsIHN1YlR5cGU9Q09NQklORUQsIHN1YnNjcmliZXJJZD0zMTAyNjAuLi4sIG1ldGVyZWQ9dHJ1ZX1dIHVpZD0tMSBzZXQ9QUxMIHRhZz0weDBcbiAgICAvLyAgICAgTmV0d29ya1N0YXRzSGlzdG9yeTogYnVja2V0RHVyYXRpb249MzYwMFxuICAgIC8vICAgICAgIHN0PTE0ODM5ODQ4MDAgcmI9MCBycD0wIHRiPTEyMDMxIHRwPTE4NCBvcD0wXG4gICAgLy8gICAgICAgc3Q9MTQ4Mzk4ODQwMCByYj0wIHJwPTAgdGI9Mzg0NzYgdHA9NTg3IG9wPTBcbiAgICAvLyAgICAgICBzdD0xNDgzOTk5MjAwIHJiPTMxNTYxNiBycD00MDAgdGI9OTQ4MDAgdHA9MzYyIG9wPTBcbiAgICAvLyAgICAgICBzdD0xNDg0MDAyODAwIHJiPTE1ODI2IHJwPTIwIHRiPTQ3MzggdHA9MTYgb3A9MFxuICAgIC8vXG4gICAgLy8gdGhlIHJldHVybiBkYXRhIG9mIHJlYWwgZGV2aWNlXG4gICAgLy8gICBYdCBzdGF0czpcbiAgICAvLyAgIFBlbmRpbmcgYnl0ZXM6IDBcbiAgICAvLyAgIEhpc3Rvcnkgc2luY2UgYm9vdDpcbiAgICAvLyAgIGlkZW50PVt7dHlwZT1NT0JJTEUsIHN1YlR5cGU9Q09NQklORUQsIHN1YnNjcmliZXJJZD00NTAwNTAuLi59XSB1aWQ9LTEgc2V0PUFMTCB0YWc9MHgwXG4gICAgLy8gICBOZXR3b3JrU3RhdHNIaXN0b3J5OiBidWNrZXREdXJhdGlvbj0zNjAwXG4gICAgLy8gICBzdD0xNDc4MDg4MDAwIHJiPTMyMTE1Mjk2IHJwPTM0MjkxIHRiPTI5NTY4MDUgdHA9MjU3MDUgb3A9MFxuICAgIC8vICAgc3Q9MTQ3ODA5MTYwMCByYj0yNzE0NjgzIHJwPTExODIxIHRiPTE0MjA1NjQgdHA9MTI2NTAgb3A9MFxuICAgIC8vICAgc3Q9MTQ3ODA5NTIwMCByYj0xMDA3OTIxMyBycD0xOTk2MiB0Yj0yNDg3NzA1IHRwPTIwMDE1IG9wPTBcbiAgICAvLyAgIHN0PTE0NzgwOTg4MDAgcmI9NDQ0NDQzMyBycD0xMDIyNyB0Yj0xNDMwMzU2IHRwPTEwNDkzIG9wPTBcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBmcm9tWHRzdGF0cyA9IGRhdGEuaW5kZXhPZignWHQgc3RhdHM6Jyk7XG5cbiAgICBsZXQgc3RhcnQgPSBkYXRhLmluZGV4T2YoJ1BlbmRpbmcgYnl0ZXM6JywgZnJvbVh0c3RhdHMpO1xuICAgIGxldCBkZWxpbWl0ZXIgPSBkYXRhLmluZGV4T2YoJzonLCBzdGFydCArIDEpO1xuICAgIGxldCBlbmQgPSBkYXRhLmluZGV4T2YoJ1xcbicsIGRlbGltaXRlciArIDEpO1xuICAgIGxldCBwZW5kaW5nQnl0ZXMgPSBkYXRhLnN1YnN0cmluZyhkZWxpbWl0ZXIgKyAxLCBlbmQpLnRyaW0oKTtcblxuICAgIGlmIChlbmQgPiBkZWxpbWl0ZXIpIHtcbiAgICAgIHN0YXJ0ID0gZGF0YS5pbmRleE9mKCdidWNrZXREdXJhdGlvbicsIGVuZCArIDEpO1xuICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgIGVuZCA9IGRhdGEuaW5kZXhPZignXFxuJywgZGVsaW1pdGVyICsgMSk7XG4gICAgICBidWNrZXREdXJhdGlvbiA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICBkYXRhID0gZGF0YS5zdWJzdHJpbmcoZW5kICsgMSwgZGF0YS5sZW5ndGgpO1xuICAgICAgbGV0IGFycmF5TGlzdCA9IGRhdGEuc3BsaXQoJ1xcbicpO1xuXG4gICAgICBpZiAoYXJyYXlMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RhcnQgPSAtMTtcblxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IE5FVFdPUktfS0VZUy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIHN0YXJ0ID0gYXJyYXlMaXN0WzBdLmluZGV4T2YoTkVUV09SS19LRVlTW2pdWzBdKTtcblxuICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICBpbmRleCA9IGo7XG4gICAgICAgICAgICByZXR1cm5WYWx1ZVswXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IE5FVFdPUktfS0VZU1tqXS5sZW5ndGg7ICsraykge1xuICAgICAgICAgICAgICByZXR1cm5WYWx1ZVswXVtrXSA9IE5FVFdPUktfS0VZU1tqXVtrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXR1cm5JbmRleCA9IDE7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXlMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZGF0YSA9IGFycmF5TGlzdFtpXTtcbiAgICAgICAgICBzdGFydCA9IGRhdGEuaW5kZXhPZihORVRXT1JLX0tFWVNbaW5kZXhdWzBdKTtcblxuICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICBkZWxpbWl0ZXIgPSBkYXRhLmluZGV4T2YoJz0nLCBzdGFydCArIDEpO1xuICAgICAgICAgICAgZW5kID0gZGF0YS5pbmRleE9mKCcgJywgZGVsaW1pdGVyICsgMSk7XG4gICAgICAgICAgICBidWNrZXRTdGFydCA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuXG4gICAgICAgICAgICBpZiAoZW5kID4gZGVsaW1pdGVyKSB7XG4gICAgICAgICAgICAgIHN0YXJ0ID0gZGF0YS5pbmRleE9mKE5FVFdPUktfS0VZU1tpbmRleF1bMV0sIGVuZCArIDEpO1xuICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgICAgIGRlbGltaXRlciA9IGRhdGEuaW5kZXhPZignPScsIHN0YXJ0ICsgMSk7XG4gICAgICAgICAgICAgICAgZW5kID0gZGF0YS5pbmRleE9mKCcgJywgZGVsaW1pdGVyICsgMSk7XG4gICAgICAgICAgICAgICAgYWN0aXZlVGltZSA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbmQgPiBkZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBkYXRhLmluZGV4T2YoTkVUV09SS19LRVlTW2luZGV4XVsyXSwgZW5kICsgMSk7XG4gICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLmluZGV4T2YoJyAnLCBkZWxpbWl0ZXIgKyAxKTtcbiAgICAgICAgICAgICAgICByeEJ5dGVzID0gZGF0YS5zdWJzdHJpbmcoZGVsaW1pdGVyICsgMSwgZW5kKS50cmltKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVuZCA+IGRlbGltaXRlcikge1xuICAgICAgICAgICAgICBzdGFydCA9IGRhdGEuaW5kZXhPZihORVRXT1JLX0tFWVNbaW5kZXhdWzNdLCBlbmQgKyAxKTtcbiAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IDApIHtcbiAgICAgICAgICAgICAgICBkZWxpbWl0ZXIgPSBkYXRhLmluZGV4T2YoJz0nLCBzdGFydCArIDEpO1xuICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEuaW5kZXhPZignICcsIGRlbGltaXRlciArIDEpO1xuICAgICAgICAgICAgICAgIHJ4UGFja2V0cyA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbmQgPiBkZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBkYXRhLmluZGV4T2YoTkVUV09SS19LRVlTW2luZGV4XVs0XSwgZW5kICsgMSk7XG4gICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLmluZGV4T2YoJyAnLCBkZWxpbWl0ZXIgKyAxKTtcbiAgICAgICAgICAgICAgICB0eEJ5dGVzID0gZGF0YS5zdWJzdHJpbmcoZGVsaW1pdGVyICsgMSwgZW5kKS50cmltKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVuZCA+IGRlbGltaXRlcikge1xuICAgICAgICAgICAgICBzdGFydCA9IGRhdGEuaW5kZXhPZihORVRXT1JLX0tFWVNbaW5kZXhdWzVdLCBlbmQgKyAxKTtcbiAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IDApIHtcbiAgICAgICAgICAgICAgICBkZWxpbWl0ZXIgPSBkYXRhLmluZGV4T2YoJz0nLCBzdGFydCArIDEpO1xuICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEuaW5kZXhPZignICcsIGRlbGltaXRlciArIDEpO1xuICAgICAgICAgICAgICAgIHR4UGFja2V0cyA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbmQgPiBkZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBkYXRhLmluZGV4T2YoTkVUV09SS19LRVlTW2luZGV4XVs2XSwgZW5kICsgMSk7XG4gICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25zID0gZGF0YS5zdWJzdHJpbmcoZGVsaW1pdGVyICsgMSwgZW5kKS50cmltKCk7XG5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuVmFsdWVbcmV0dXJuSW5kZXgrK10gPSBbYnVja2V0U3RhcnQsIGFjdGl2ZVRpbWUsIHJ4Qnl0ZXMsIHJ4UGFja2V0cywgdHhCeXRlcywgdHhQYWNrZXRzLCBvcGVyYXRpb25zLCBidWNrZXREdXJhdGlvbl07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRXF1YWwocGVuZGluZ0J5dGVzLCAnJykgJiYgIV8uaXNVbmRlZmluZWQocGVuZGluZ0J5dGVzKSAmJiAhXy5pc0VxdWFsKHBlbmRpbmdCeXRlcywgJ25vZGV4JykpIHtcbiAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgbmV0d29yayB0cmFmZmljIGRhdGE6ICcke2RhdGF9J2ApO1xuICAgIH1cbiAgfSk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7XG4gIGNvbW1hbmRzLCBoZWxwZXJzLCBTVVBQT1JURURfUEVSRk9STUFOQ0VfREFUQV9UWVBFUywgQ1BVX0tFWVMsIE1FTU9SWV9LRVlTLFxuICBCQVRURVJZX0tFWVMsIE5FVFdPUktfS0VZUyxcbn07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuXG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9wZXJmb3JtYW5jZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
329
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9wZXJmb3JtYW5jZS5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiTkVUV09SS19LRVlTIiwiQ1BVX0tFWVMiLCJCQVRURVJZX0tFWVMiLCJNRU1PUllfS0VZUyIsIlNVUFBPUlRFRF9QRVJGT1JNQU5DRV9EQVRBX1RZUEVTIiwiT2JqZWN0IiwiZnJlZXplIiwiY3B1aW5mbyIsIm1lbW9yeWluZm8iLCJiYXR0ZXJ5aW5mbyIsIm5ldHdvcmtpbmZvIiwiTUVNSU5GT19USVRMRVMiLCJOQVRJVkUiLCJEQUxWSUsiLCJFR0wiLCJHTCIsIk1UUkFDSyIsIlRPVEFMIiwiSEVBUCIsIlJFVFJZX1BBVVNFX01TIiwicGFyc2VNZW1pbmZvRm9yQXBpMTlUbzI5IiwiZW50cmllcyIsInZhbERpY3QiLCJ0eXBlIiwic3ViVHlwZSIsIm5hdGl2ZVBzcyIsIm5hdGl2ZVByaXZhdGVEaXJ0eSIsIm5hdGl2ZUhlYXBTaXplIiwibmF0aXZlSGVhcEFsbG9jYXRlZFNpemUiLCJkYWx2aWtQc3MiLCJkYWx2aWtQcml2YXRlRGlydHkiLCJlZ2xQc3MiLCJlZ2xQcml2YXRlRGlydHkiLCJnbFBzcyIsImdsUHJpdmF0ZURpcnR5IiwibGVuZ3RoIiwidG90YWxQc3MiLCJ0b3RhbFByaXZhdGVEaXJ0eSIsInBhcnNlTWVtaW5mb0ZvckFwaUJlbG93MTkiLCJwYXJzZU1lbWluZm9Gb3JBcGlBYm92ZTI5IiwibmF0aXZlUnNzIiwiZGFsdmlrUnNzIiwidG90YWxSc3MiLCJnZXRQZXJmb3JtYW5jZURhdGFUeXBlcyIsIl8iLCJrZXlzIiwiZ2V0UGVyZm9ybWFuY2VEYXRhIiwicGFja2FnZU5hbWUiLCJkYXRhVHlwZSIsInJldHJpZXMiLCJ0b0xvd2VyIiwiZ2V0QmF0dGVyeUluZm8iLCJnZXRDUFVJbmZvIiwiZ2V0TWVtb3J5SW5mbyIsImdldE5ldHdvcmtUcmFmZmljSW5mbyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsIm91dHB1dCIsImFkYiIsInNoZWxsIiwiZSIsInN0ZGVyciIsImxvZyIsImluZm8iLCJ1c2FnZXNQYXR0ZXJuIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwibWF0Y2giLCJleGVjIiwiZGVidWciLCJjbWQiLCJkYXRhIiwicG93ZXIiLCJwYXJzZUludCIsInNwbGl0IiwidHJpbSIsIk51bWJlciIsImlzTmFOIiwiY2xvbmUiLCJ0b1N0cmluZyIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJsaW5lIiwiZmlsdGVyIiwiQm9vbGVhbiIsImhlYWRlcnMiLCJ2YWx1ZXMiLCJtYXAiLCJoZWFkZXIiLCJyZXR1cm5WYWx1ZSIsImJ1Y2tldER1cmF0aW9uIiwiYnVja2V0U3RhcnQiLCJhY3RpdmVUaW1lIiwicnhCeXRlcyIsInJ4UGFja2V0cyIsInR4Qnl0ZXMiLCJ0eFBhY2tldHMiLCJvcGVyYXRpb25zIiwiaW5kZXgiLCJmcm9tWHRzdGF0cyIsImluZGV4T2YiLCJzdGFydCIsImRlbGltaXRlciIsImVuZCIsInBlbmRpbmdCeXRlcyIsInN1YnN0cmluZyIsImFycmF5TGlzdCIsImoiLCJrIiwicmV0dXJuSW5kZXgiLCJpIiwiaXNFcXVhbCIsImlzVW5kZWZpbmVkIiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjtBQUFBLE1BQXFCQyxPQUFPLEdBQUcsRUFBL0I7QUFBQSxNQUFtQ0MsVUFBVSxHQUFHLEVBQWhEOzs7QUFFQSxNQUFNQyxZQUFZLEdBQUcsQ0FDbkIsQ0FBQyxhQUFELEVBQWdCLFlBQWhCLEVBQThCLFNBQTlCLEVBQXlDLFdBQXpDLEVBQXNELFNBQXRELEVBQWlFLFdBQWpFLEVBQThFLFlBQTlFLEVBQTRGLGdCQUE1RixDQURtQixFQUVuQixDQUFDLElBQUQsRUFBTyxZQUFQLEVBQXFCLElBQXJCLEVBQTJCLElBQTNCLEVBQWlDLElBQWpDLEVBQXVDLElBQXZDLEVBQTZDLElBQTdDLEVBQW1ELGdCQUFuRCxD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SUFBSW5DLEtBQUosQ0FBVywwQ0FBeUNpQixJQUFLLEdBQXpELENBQU47QUFDRDtBQUNGLEdBckpZLENBQWI7QUFzSkQsQ0F2SkQ7O0FBeUpBbkUsTUFBTSxDQUFDNkcsTUFBUCxDQUFjbkgsVUFBZCxFQUEwQkYsUUFBMUIsRUFBb0NDLE9BQXBDO2VBS2VDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmNvbnN0IE5FVFdPUktfS0VZUyA9IFtcbiAgWydidWNrZXRTdGFydCcsICdhY3RpdmVUaW1lJywgJ3J4Qnl0ZXMnLCAncnhQYWNrZXRzJywgJ3R4Qnl0ZXMnLCAndHhQYWNrZXRzJywgJ29wZXJhdGlvbnMnLCAnYnVja2V0RHVyYXRpb24nXSxcbiAgWydzdCcsICdhY3RpdmVUaW1lJywgJ3JiJywgJ3JwJywgJ3RiJywgJ3RwJywgJ29wJywgJ2J1Y2tldER1cmF0aW9uJ11cbl07XG5jb25zdCBDUFVfS0VZUyA9IFsndXNlcicsICdrZXJuZWwnXTtcbmNvbnN0IEJBVFRFUllfS0VZUyA9IFsncG93ZXInXTtcbmNvbnN0IE1FTU9SWV9LRVlTID0gW1xuICAndG90YWxQcml2YXRlRGlydHknLCAnbmF0aXZlUHJpdmF0ZURpcnR5JywgJ2RhbHZpa1ByaXZhdGVEaXJ0eScsXG4gICdlZ2xQcml2YXRlRGlydHknLCAnZ2xQcml2YXRlRGlydHknLFxuICAndG90YWxQc3MnLCAnbmF0aXZlUHNzJywgJ2RhbHZpa1BzcycsICdlZ2xQc3MnLCAnZ2xQc3MnLFxuICAnbmF0aXZlSGVhcEFsbG9jYXRlZFNpemUnLCAnbmF0aXZlSGVhcFNpemUnLFxuICAnbmF0aXZlUnNzJywgJ2RhbHZpa1JzcycsICd0b3RhbFJzcydcbl07XG5jb25zdCBTVVBQT1JURURfUEVSRk9STUFOQ0VfREFUQV9UWVBFUyA9IE9iamVjdC5mcmVlemUoe1xuICBjcHVpbmZvOiAndGhlIGFtb3VudCBvZiBjcHUgYnkgdXNlciBhbmQga2VybmVsIHByb2Nlc3MgLSBjcHUgaW5mb3JtYXRpb24gZm9yIGFwcGxpY2F0aW9ucyBvbiByZWFsIGRldmljZXMgYW5kIHNpbXVsYXRvcnMnLFxuICBtZW1vcnlpbmZvOiAndGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSB0aGUgcHJvY2VzcyAtIG1lbW9yeSBpbmZvcm1hdGlvbiBmb3IgYXBwbGljYXRpb25zIG9uIHJlYWwgZGV2aWNlcyBhbmQgc2ltdWxhdG9ycycsXG4gIGJhdHRlcnlpbmZvOiAndGhlIHJlbWFpbmluZyBiYXR0ZXJ5IHBvd2VyIC0gYmF0dGVyeSBwb3dlciBpbmZvcm1hdGlvbiBmb3IgYXBwbGljYXRpb25zIG9uIHJlYWwgZGV2aWNlcyBhbmQgc2ltdWxhdG9ycycsXG4gIG5ldHdvcmtpbmZvOiAndGhlIG5ldHdvcmsgc3RhdGlzdGljcyAtIG5ldHdvcmsgcngvdHggaW5mb3JtYXRpb24gZm9yIGFwcGxpY2F0aW9ucyBvbiByZWFsIGRldmljZXMgYW5kIHNpbXVsYXRvcnMnXG59KTtcbmNvbnN0IE1FTUlORk9fVElUTEVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIE5BVElWRTogJ05hdGl2ZScsXG4gIERBTFZJSzogJ0RhbHZpaycsXG4gIEVHTDogJ0VHTCcsXG4gIEdMOiAnR0wnLFxuICBNVFJBQ0s6ICdtdHJhY2snLFxuICBUT1RBTDogJ1RPVEFMJyxcbiAgSEVBUDogJ0hlYXAnXG59KTtcbmNvbnN0IFJFVFJZX1BBVVNFX01TID0gMTAwMDtcblxuLyoqXG4gKiBBUEkgbGV2ZWwgYmV0d2VlbiAxOCBhbmQgMzBcbiAqIFsnPFN5c3RlbSBUeXBlPicsICc8TWVtb3J5IFR5cGU+JywgPHBzcyB0b3RhbD4sIDxwcml2YXRlIGRpcnR5PiwgPHByaXZhdGUgY2xlYW4+LCA8c3dhcFBzcyBkaXJ0eT4sIDxoZWFwIHNpemU+LCA8aGVhcCBhbGxvYz4sIDxoZWFwIGZyZWU+XVxuICogZXhjZXB0ICdUT1RBTCcsIHdoaWNoIHNraXBzIHRoZSBzZWNvbmQgdHlwZSBuYW1lXG4gKiAhISEgdmFsRGljdCBnZXRzIG11dGF0ZWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZW1pbmZvRm9yQXBpMTlUbzI5IChlbnRyaWVzLCB2YWxEaWN0KSB7XG4gIGNvbnN0IFt0eXBlLCBzdWJUeXBlXSA9IGVudHJpZXM7XG4gIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5OQVRJVkUgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuSEVBUCkge1xuICAgIFssLCB2YWxEaWN0Lm5hdGl2ZVBzcywgdmFsRGljdC5uYXRpdmVQcml2YXRlRGlydHksLCwgdmFsRGljdC5uYXRpdmVIZWFwU2l6ZSwgdmFsRGljdC5uYXRpdmVIZWFwQWxsb2NhdGVkU2l6ZV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLkRBTFZJSyAmJiBzdWJUeXBlID09PSBNRU1JTkZPX1RJVExFUy5IRUFQKSB7XG4gICAgWywsIHZhbERpY3QuZGFsdmlrUHNzLCB2YWxEaWN0LmRhbHZpa1ByaXZhdGVEaXJ0eV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLkVHTCAmJiBzdWJUeXBlID09PSBNRU1JTkZPX1RJVExFUy5NVFJBQ0spIHtcbiAgICBbLCwgdmFsRGljdC5lZ2xQc3MsIHZhbERpY3QuZWdsUHJpdmF0ZURpcnR5XSA9IGVudHJpZXM7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVNSU5GT19USVRMRVMuR0wgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuTVRSQUNLKSB7XG4gICAgWywsIHZhbERpY3QuZ2xQc3MsIHZhbERpY3QuZ2xQcml2YXRlRGlydHldID0gZW50cmllcztcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5UT1RBTCAmJiBlbnRyaWVzLmxlbmd0aCA9PT0gOCkge1xuICAgIC8vIHRoZXJlIGFyZSB0d28gdG90YWxzLCBhbmQgd2Ugb25seSB3YW50IHRoZSBmdWxsIGxpc3RpbmcsIHdoaWNoIGhhcyA4IGVudHJpZXNcbiAgICBbLCB2YWxEaWN0LnRvdGFsUHNzLCB2YWxEaWN0LnRvdGFsUHJpdmF0ZURpcnR5XSA9IGVudHJpZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBbJzxTeXN0ZW0gVHlwZScsICc8cHBzPicsICc8c2hhcmVkIGRpcnR5PicsICc8cHJpdmF0ZSBkaXJ0eT4nLCAnPGhlYXAgc2l6ZT4nLCAnPGhlYXAgYWxsb2M+JywgJzxoZWFwIGZyZWU+J11cbiAqICEhISB2YWxEaWN0IGdldHMgbXV0YXRlZFxuICovXG5mdW5jdGlvbiBwYXJzZU1lbWluZm9Gb3JBcGlCZWxvdzE5IChlbnRyaWVzLCB2YWxEaWN0KSB7XG4gIGNvbnN0IHR5cGUgPSBlbnRyaWVzWzBdO1xuICBpZiAodHlwZSA9PT0gTUVNSU5GT19USVRMRVMuTkFUSVZFKSB7XG4gICAgWywgdmFsRGljdC5uYXRpdmVQc3MsLCB2YWxEaWN0Lm5hdGl2ZVByaXZhdGVEaXJ0eSwgdmFsRGljdC5uYXRpdmVIZWFwU2l6ZSwgdmFsRGljdC5uYXRpdmVIZWFwQWxsb2NhdGVkU2l6ZV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLkRBTFZJSykge1xuICAgIFssIHZhbERpY3QuZGFsdmlrUHNzLCwgdmFsRGljdC5kYWx2aWtQcml2YXRlRGlydHldID0gZW50cmllcztcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5FR0wpIHtcbiAgICBbLCB2YWxEaWN0LmVnbFBzcywsIHZhbERpY3QuZWdsUHJpdmF0ZURpcnR5XSA9IGVudHJpZXM7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVNSU5GT19USVRMRVMuR0wpIHtcbiAgICBbLCB2YWxEaWN0LmdsUHNzLCwgdmFsRGljdC5nbFByaXZhdGVEaXJ0eV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLlRPVEFMKSB7XG4gICAgWywgdmFsRGljdC50b3RhbFBzcywsIHZhbERpY3QudG90YWxQcml2YXRlRGlydHldID0gZW50cmllcztcbiAgfVxufVxuXG4vKipcbiAqIEFQSSBsZXZlbCAzMCBhbmQgYWJvdmVcbiAqIFsnPFN5c3RlbSBUeXBlPicsICc8TWVtb3J5IFR5cGU+JywgPHBzcyB0b3RhbD4sIDxwcml2YXRlIGRpcnR5PiwgPHByaXZhdGUgY2xlYW4+LCA8c3dhcFBzcyBkaXJ0eT4sIDxyc3MgdG90YWw+LCA8aGVhcCBzaXplPiwgPGhlYXAgYWxsb2M+LCA8aGVhcCBmcmVlPl1cbiAqICEhISB2YWxEaWN0IGdldHMgbXV0YXRlZFxuICovXG5mdW5jdGlvbiBwYXJzZU1lbWluZm9Gb3JBcGlBYm92ZTI5IChlbnRyaWVzLCB2YWxEaWN0KSB7XG4gIGNvbnN0IFt0eXBlLCBzdWJUeXBlXSA9IGVudHJpZXM7XG4gIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5OQVRJVkUgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuSEVBUCkge1xuICAgIFssLCB2YWxEaWN0Lm5hdGl2ZVBzcywgdmFsRGljdC5uYXRpdmVQcml2YXRlRGlydHksLCwgdmFsRGljdC5uYXRpdmVSc3MsIHZhbERpY3QubmF0aXZlSGVhcFNpemUsIHZhbERpY3QubmF0aXZlSGVhcEFsbG9jYXRlZFNpemVdID0gZW50cmllcztcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5EQUxWSUsgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuSEVBUCkge1xuICAgIFssLCB2YWxEaWN0LmRhbHZpa1BzcywgdmFsRGljdC5kYWx2aWtQcml2YXRlRGlydHksLCwgdmFsRGljdC5kYWx2aWtSc3NdID0gZW50cmllcztcbiAgfSBlbHNlIGlmICh0eXBlID09PSBNRU1JTkZPX1RJVExFUy5FR0wgJiYgc3ViVHlwZSA9PT0gTUVNSU5GT19USVRMRVMuTVRSQUNLKSB7XG4gICAgWywsIHZhbERpY3QuZWdsUHNzLCB2YWxEaWN0LmVnbFByaXZhdGVEaXJ0eV0gPSBlbnRyaWVzO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IE1FTUlORk9fVElUTEVTLkdMICYmIHN1YlR5cGUgPT09IE1FTUlORk9fVElUTEVTLk1UUkFDSykge1xuICAgIFssLCB2YWxEaWN0LmdsUHNzLCB2YWxEaWN0LmdsUHJpdmF0ZURpcnR5XSA9IGVudHJpZXM7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTUVNSU5GT19USVRMRVMuVE9UQUwgJiYgZW50cmllcy5sZW5ndGggPT09IDkpIHtcbiAgICAvLyBoYXMgOSBlbnRyaWVzXG4gICAgWywgdmFsRGljdC50b3RhbFBzcywgdmFsRGljdC50b3RhbFByaXZhdGVEaXJ0eSwsLCB2YWxEaWN0LnRvdGFsUnNzXSA9IGVudHJpZXM7XG4gIH1cbn1cblxuLy9cbi8vIHJldHVybnMgdGhlIGluZm9ybWF0aW9uIHR5cGUgb2YgdGhlIHN5c3RlbSBzdGF0ZSB3aGljaCBpcyBzdXBwb3J0ZWQgdG8gcmVhZCBhcyBsaWtlIGNwdSwgbWVtb3J5LCBuZXR3b3JrIHRyYWZmaWMsIGFuZCBiYXR0ZXJ5LlxuLy8gb3V0cHV0IC0gYXJyYXkgbGlrZSBiZWxvd1xuLy8gW2NwdWluZm8sIGJhdHRlcnlpbmZvLCBuZXR3b3JraW5mbywgbWVtb3J5aW5mb11cbi8vXG5jb21tYW5kcy5nZXRQZXJmb3JtYW5jZURhdGFUeXBlcyA9IGZ1bmN0aW9uIGdldFBlcmZvcm1hbmNlRGF0YVR5cGVzICgpIHtcbiAgcmV0dXJuIF8ua2V5cyhTVVBQT1JURURfUEVSRk9STUFOQ0VfREFUQV9UWVBFUyk7XG59O1xuXG4vKipcbiAqIEByZXR1cm5zIFRoZSBpbmZvcm1hdGlvbiB0eXBlIG9mIHRoZSBzeXN0ZW0gc3RhdGUgd2hpY2ggaXMgc3VwcG9ydGVkIHRvIHJlYWQgYXMgbGlrZSBjcHUsIG1lbW9yeSwgbmV0d29yayB0cmFmZmljLCBhbmQgYmF0dGVyeS5cbiAqIGlucHV0IC0gKHBhY2thZ2VOYW1lKSB0aGUgcGFja2FnZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvblxuICogICAgICAgIChkYXRhVHlwZSkgdGhlIHR5cGUgb2Ygc3lzdGVtIHN0YXRlIHdoaWNoIHdhbnRzIHRvIHJlYWQuIEl0IHNob3VsZCBiZSBvbmUgb2YgdGhlIGtleXMgb2YgdGhlIFNVUFBPUlRFRF9QRVJGT1JNQU5DRV9EQVRBX1RZUEVTXG4gKiAgICAgICAgKGRhdGFSZWFkVGltZW91dCkgdGhlIG51bWJlciBvZiBhdHRlbXB0cyB0byByZWFkXG4gKiBvdXRwdXQgLSB0YWJsZSBvZiB0aGUgcGVyZm9ybWFuY2UgZGF0YSwgVGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRhYmxlIHJlcHJlc2VudHMgdGhlIHR5cGUgb2YgZGF0YS4gVGhlIHJlbWFpbmluZyBsaW5lcyByZXByZXNlbnQgdGhlIHZhbHVlcyBvZiB0aGUgZGF0YS5cbiAqXG4gKiBpbiBjYXNlIG9mIGJhdHRlcnkgaW5mbyA6IFtbcG93ZXJdLCBbMjNdXVxuICogaW4gY2FzZSBvZiBtZW1vcnkgaW5mbyA6ICBbW3RvdGFsUHJpdmF0ZURpcnR5LCBuYXRpdmVQcml2YXRlRGlydHksIGRhbHZpa1ByaXZhdGVEaXJ0eSwgZWdsUHJpdmF0ZURpcnR5LCBnbFByaXZhdGVEaXJ0eSwgdG90YWxQc3MsXG4gKiAgIG5hdGl2ZVBzcywgZGFsdmlrUHNzLCBlZ2xQc3MsIGdsUHNzLCBuYXRpdmVIZWFwQWxsb2NhdGVkU2l6ZSwgbmF0aXZlSGVhcFNpemVdLCBbMTgzNjAsIDgyOTYsIDYxMzIsIG51bGwsIG51bGwsIDQyNTg4LCA4NDA2LCA3MDI0LCBudWxsLCBudWxsLCAyNjUxOSwgMTAzNDRdXVxuICogaW4gY2FzZSBvZiBuZXR3b3JrIGluZm8gOiBbW2J1Y2tldFN0YXJ0LCBhY3RpdmVUaW1lLCByeEJ5dGVzLCByeFBhY2tldHMsIHR4Qnl0ZXMsIHR4UGFja2V0cywgb3BlcmF0aW9ucywgYnVja2V0RHVyYXRpb24sXSxcbiAqICAgWzE0NzgwOTE2MDAwMDAsIG51bGwsIDEwOTkwNzUsIDYxMDk0NywgOTI4LCAxMTQzNjIsIDc2OSwgMCwgMzYwMDAwMF0sIFsxNDc4MDk1MjAwMDAwLCBudWxsLCAxMzA2MzAwLCA0MDU5OTcsIDUwOSwgNDYzNTksIDM3MCwgMCwgMzYwMDAwMF1dXG4gKiBpbiBjYXNlIG9mIG5ldHdvcmsgaW5mbyA6IFtbc3QsIGFjdGl2ZVRpbWUsIHJiLCBycCwgdGIsIHRwLCBvcCwgYnVja2V0RHVyYXRpb25dLCBbMTQ3ODA4ODAwMCwgbnVsbCwgbnVsbCwgMzIxMTUyOTYsIDM0MjkxLCAyOTU2ODA1LCAyNTcwNSwgMCwgMzYwMF0sXG4gKiAgIFsxNDc4MDkxNjAwLCBudWxsLCBudWxsLCAyNzE0NjgzLCAxMTgyMSwgMTQyMDU2NCwgMTI2NTAsIDAsIDM2MDBdLCBbMTQ3ODA5NTIwMCwgbnVsbCwgbnVsbCwgMTAwNzkyMTMsIDE5OTYyLCAyNDg3NzA1LCAyMDAxNSwgMCwgMzYwMF0sXG4gKiAgIFsxNDc4MDk4ODAwLCBudWxsLCBudWxsLCA0NDQ0NDMzLCAxMDIyNywgMTQzMDM1NiwgMTA0OTMsIDAsIDM2MDBdXVxuICogaW4gY2FzZSBvZiBjcHUgaW5mbyA6IFtbdXNlciwga2VybmVsXSwgWzAuOSwgMS4zXV1cbiAqL1xuY29tbWFuZHMuZ2V0UGVyZm9ybWFuY2VEYXRhID0gYXN5bmMgZnVuY3Rpb24gZ2V0UGVyZm9ybWFuY2VEYXRhIChwYWNrYWdlTmFtZSwgZGF0YVR5cGUsIHJldHJpZXMgPSAyKSB7XG4gIHN3aXRjaCAoXy50b0xvd2VyKGRhdGFUeXBlKSkge1xuICAgIGNhc2UgJ2JhdHRlcnlpbmZvJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEJhdHRlcnlJbmZvKHJldHJpZXMpO1xuICAgIGNhc2UgJ2NwdWluZm8nOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0Q1BVSW5mbyhwYWNrYWdlTmFtZSwgcmV0cmllcyk7XG4gICAgY2FzZSAnbWVtb3J5aW5mbyc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRNZW1vcnlJbmZvKHBhY2thZ2VOYW1lLCByZXRyaWVzKTtcbiAgICBjYXNlICduZXR3b3JraW5mbyc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXROZXR3b3JrVHJhZmZpY0luZm8ocmV0cmllcyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcGVyZm9ybWFuY2UgZGF0YSBvZiB0eXBlICcke2RhdGFUeXBlfScgZm91bmQuIGAgK1xuICAgICAgICBgT25seSB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgc3VwcG9ydGVkOiAke0pTT04uc3RyaW5naWZ5KFNVUFBPUlRFRF9QRVJGT1JNQU5DRV9EQVRBX1RZUEVTLCAnICcsIDIpfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmdldENQVUluZm8gPSBhc3luYyBmdW5jdGlvbiBnZXRDUFVJbmZvIChwYWNrYWdlTmFtZSwgcmV0cmllcyA9IDIpIHtcbiAgLy8gVE9ETzogZmlndXJlIG91dCB3aHkgdGhpcyBpc1xuICAvLyBzb21ldGltZXMsIHRoZSBmdW5jdGlvbiBvZiAnYWRiLnNoZWxsJyBmYWlscy4gd2hlbiBJIHRlc3RlZCB0aGlzIGZ1bmN0aW9uIG9uIHRoZSB0YXJnZXQgb2YgJ0dhbGF4eSBOb3RlNScsXG4gIC8vIGFkYi5zaGVsbChkdW1wc3lzIGNwdWluZm8pIHJldHVybnMgY3B1IGRhdGFzIGZvciBvdGhlciBhcHBsaWNhdGlvbiBwYWNrYWdlcywgYnV0IEkgY2FuJ3QgZmluZCB0aGUgZGF0YSBmb3IgcGFja2FnZU5hbWUuXG4gIC8vIEl0IHVzdWFsbHkgZmFpbHMgMzAgdGltZXMgYW5kIHN1Y2Nlc3MgZm9yIHRoZSBuZXh0IHRpbWUsXG4gIC8vIFNpbmNlIHRoZW4sIGhlIGhhcyBjb250aW51ZWQgdG8gc3VjY2VlZC5cbiAgcmV0dXJuIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgUkVUUllfUEFVU0VfTVMsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgb3V0cHV0O1xuICAgIHRyeSB7XG4gICAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2R1bXBzeXMnLCAnY3B1aW5mbyddKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5zdGRlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhlLnN0ZGVycik7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICAvLyBgb3V0cHV0YCB3aWxsIGJlIHNvbWV0aGluZyBsaWtlXG4gICAgLy8gICAgKzAlIDIyMDkvaW8uYXBwaXVtLmFuZHJvaWQuYXBpczogMC4xJSB1c2VyICsgMC4yJSBrZXJuZWwgLyBmYXVsdHM6IDcwIG1pbm9yXG4gICAgY29uc3QgdXNhZ2VzUGF0dGVybiA9XG4gICAgICBuZXcgUmVnRXhwKGBeLitcXFxcLyR7Xy5lc2NhcGVSZWdFeHAocGFja2FnZU5hbWUpfTpcXFxcRCsoW1xcXFxkLl0rKSVcXFxccyt1c2VyXFxcXHMrXFxcXCtcXFxccysoW1xcXFxkLl0rKSVcXFxccytrZXJuZWxgLCAnbScpO1xuICAgIGNvbnN0IG1hdGNoID0gdXNhZ2VzUGF0dGVybi5leGVjKG91dHB1dCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcob3V0cHV0KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIGNwdSB1c2FnZSBkYXRhIGZvciAnJHtwYWNrYWdlTmFtZX0nLiBDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgfVxuICAgIHJldHVybiBbQ1BVX0tFWVMsIFttYXRjaFsxXSwgbWF0Y2hbMl1dXTtcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmdldEJhdHRlcnlJbmZvID0gYXN5bmMgZnVuY3Rpb24gZ2V0QmF0dGVyeUluZm8gKHJldHJpZXMgPSAyKSB7XG4gIHJldHVybiBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIFJFVFJZX1BBVVNFX01TLCBhc3luYyAoKSA9PiB7XG4gICAgbGV0IGNtZCA9IFsnZHVtcHN5cycsICdiYXR0ZXJ5JywgJ3wnLCAnZ3JlcCcsICdsZXZlbCddO1xuICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoY21kKTtcbiAgICBpZiAoIWRhdGEpIHRocm93IG5ldyBFcnJvcignTm8gZGF0YSBmcm9tIGR1bXBzeXMnKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgICBsZXQgcG93ZXIgPSBwYXJzZUludCgoZGF0YS5zcGxpdCgnOicpWzFdIHx8ICcnKS50cmltKCksIDEwKTtcblxuICAgIGlmICghTnVtYmVyLmlzTmFOKHBvd2VyKSkge1xuICAgICAgcmV0dXJuIFtfLmNsb25lKEJBVFRFUllfS0VZUyksIFtwb3dlci50b1N0cmluZygpXV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIGJhdHRlcnkgZGF0YTogJyR7ZGF0YX0nYCk7XG4gICAgfVxuICB9KTtcbn07XG5cbmhlbHBlcnMuZ2V0TWVtb3J5SW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldE1lbW9yeUluZm8gKHBhY2thZ2VOYW1lLCByZXRyaWVzID0gMikge1xuICByZXR1cm4gYXdhaXQgcmV0cnlJbnRlcnZhbChyZXRyaWVzLCBSRVRSWV9QQVVTRV9NUywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNtZCA9IFtcbiAgICAgICdkdW1wc3lzJywgJ21lbWluZm8nLCBgJyR7cGFja2FnZU5hbWV9J2AsXG4gICAgICAnfCcsICdncmVwJywgJy1FJyxcbiAgICAgIGAnJHtNRU1JTkZPX1RJVExFUy5OQVRJVkV9fCR7TUVNSU5GT19USVRMRVMuREFMVklLfXwke01FTUlORk9fVElUTEVTLkVHTH1gICtcbiAgICAgIGB8JHtNRU1JTkZPX1RJVExFUy5HTH18JHtNRU1JTkZPX1RJVExFUy5UT1RBTH0nYFxuICAgIF07XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGRhdGEgZnJvbSBkdW1wc3lzJyk7XG4gICAgfVxuICAgIGNvbnN0IHZhbERpY3QgPSB7dG90YWxQcml2YXRlRGlydHk6ICcnfTtcbiAgICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGRhdGEuc3BsaXQoJ1xcbicpKSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gbGluZS50cmltKCkuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICBpZiAoYXBpTGV2ZWwgPj0gMzApIHtcbiAgICAgICAgcGFyc2VNZW1pbmZvRm9yQXBpQWJvdmUyOShlbnRyaWVzLCB2YWxEaWN0KTtcbiAgICAgIH0gZWxzZSBpZiAoYXBpTGV2ZWwgPiAxOCAmJiBhcGlMZXZlbCA8IDMwKSB7XG4gICAgICAgIHBhcnNlTWVtaW5mb0ZvckFwaTE5VG8yOShlbnRyaWVzLCB2YWxEaWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlTWVtaW5mb0ZvckFwaUJlbG93MTkoZW50cmllcywgdmFsRGljdCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2YWxEaWN0LnRvdGFsUHJpdmF0ZURpcnR5ICYmIHZhbERpY3QudG90YWxQcml2YXRlRGlydHkgIT09ICdub2RleCcpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBfLmNsb25lKE1FTU9SWV9LRVlTKTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGhlYWRlcnMubWFwKChoZWFkZXIpID0+IHZhbERpY3RbaGVhZGVyXSk7XG4gICAgICByZXR1cm4gW2hlYWRlcnMsIHZhbHVlc107XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcGFyc2UgbWVtb3J5IGRhdGE6ICcke2RhdGF9J2ApO1xuICB9KTtcbn07XG5cbmhlbHBlcnMuZ2V0TmV0d29ya1RyYWZmaWNJbmZvID0gYXN5bmMgZnVuY3Rpb24gZ2V0TmV0d29ya1RyYWZmaWNJbmZvIChyZXRyaWVzID0gMikge1xuICByZXR1cm4gYXdhaXQgcmV0cnlJbnRlcnZhbChyZXRyaWVzLCBSRVRSWV9QQVVTRV9NUywgYXN5bmMgKCkgPT4ge1xuICAgIGxldCByZXR1cm5WYWx1ZSA9IFtdO1xuICAgIGxldCBidWNrZXREdXJhdGlvbiwgYnVja2V0U3RhcnQsIGFjdGl2ZVRpbWUsIHJ4Qnl0ZXMsIHJ4UGFja2V0cywgdHhCeXRlcywgdHhQYWNrZXRzLCBvcGVyYXRpb25zO1xuXG4gICAgbGV0IGNtZCA9IFsnZHVtcHN5cycsICduZXRzdGF0cyddO1xuICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoY21kKTtcbiAgICBpZiAoIWRhdGEpIHRocm93IG5ldyBFcnJvcignTm8gZGF0YSBmcm9tIGR1bXBzeXMnKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgICAvLyBJbiBjYXNlIG9mIG5ldHdvcmsgdHJhZmZpYyBpbmZvcm1hdGlvbiwgaXQgaXMgZGlmZmVyZW50IGZvciB0aGUgcmV0dXJuIGRhdGEgYmV0d2VlbiBlbXVsYXRvciBhbmQgcmVhbCBkZXZpY2UuXG4gICAgLy8gdGhlIHJldHVybiBkYXRhIG9mIGVtdWxhdG9yXG4gICAgLy8gICBYdCBzdGF0czpcbiAgICAvLyAgIFBlbmRpbmcgYnl0ZXM6IDM5MjUwXG4gICAgLy8gICBIaXN0b3J5IHNpbmNlIGJvb3Q6XG4gICAgLy8gICBpZGVudD1bW3R5cGU9V0lGSSwgc3ViVHlwZT1DT01CSU5FRCwgbmV0d29ya0lkPVwiV2lyZWRTU0lEXCJdXSB1aWQ9LTEgc2V0PUFMTCB0YWc9MHgwXG4gICAgLy8gICBOZXR3b3JrU3RhdHNIaXN0b3J5OiBidWNrZXREdXJhdGlvbj0zNjAwMDAwXG4gICAgLy8gICBidWNrZXRTdGFydD0xNDc4MDk4ODAwMDAwIGFjdGl2ZVRpbWU9MzE4MjQgcnhCeXRlcz0yMTUwMiByeFBhY2tldHM9NzggdHhCeXRlcz0xNzc0OCB0eFBhY2tldHM9OTAgb3BlcmF0aW9ucz0wXG4gICAgLy9cbiAgICAvLyA3LjFcbiAgICAvLyAgIFh0IHN0YXRzOlxuICAgIC8vICAgUGVuZGluZyBieXRlczogNDgxNDg3XG4gICAgLy8gICBIaXN0b3J5IHNpbmNlIGJvb3Q6XG4gICAgLy8gICBpZGVudD1be3R5cGU9TU9CSUxFLCBzdWJUeXBlPUNPTUJJTkVELCBzdWJzY3JpYmVySWQ9MzEwMjYwLi4uLCBtZXRlcmVkPXRydWV9XSB1aWQ9LTEgc2V0PUFMTCB0YWc9MHgwXG4gICAgLy8gICAgIE5ldHdvcmtTdGF0c0hpc3Rvcnk6IGJ1Y2tldER1cmF0aW9uPTM2MDBcbiAgICAvLyAgICAgICBzdD0xNDgzOTg0ODAwIHJiPTAgcnA9MCB0Yj0xMjAzMSB0cD0xODQgb3A9MFxuICAgIC8vICAgICAgIHN0PTE0ODM5ODg0MDAgcmI9MCBycD0wIHRiPTM4NDc2IHRwPTU4NyBvcD0wXG4gICAgLy8gICAgICAgc3Q9MTQ4Mzk5OTIwMCByYj0zMTU2MTYgcnA9NDAwIHRiPTk0ODAwIHRwPTM2MiBvcD0wXG4gICAgLy8gICAgICAgc3Q9MTQ4NDAwMjgwMCByYj0xNTgyNiBycD0yMCB0Yj00NzM4IHRwPTE2IG9wPTBcbiAgICAvL1xuICAgIC8vIHRoZSByZXR1cm4gZGF0YSBvZiByZWFsIGRldmljZVxuICAgIC8vICAgWHQgc3RhdHM6XG4gICAgLy8gICBQZW5kaW5nIGJ5dGVzOiAwXG4gICAgLy8gICBIaXN0b3J5IHNpbmNlIGJvb3Q6XG4gICAgLy8gICBpZGVudD1be3R5cGU9TU9CSUxFLCBzdWJUeXBlPUNPTUJJTkVELCBzdWJzY3JpYmVySWQ9NDUwMDUwLi4ufV0gdWlkPS0xIHNldD1BTEwgdGFnPTB4MFxuICAgIC8vICAgTmV0d29ya1N0YXRzSGlzdG9yeTogYnVja2V0RHVyYXRpb249MzYwMFxuICAgIC8vICAgc3Q9MTQ3ODA4ODAwMCByYj0zMjExNTI5NiBycD0zNDI5MSB0Yj0yOTU2ODA1IHRwPTI1NzA1IG9wPTBcbiAgICAvLyAgIHN0PTE0NzgwOTE2MDAgcmI9MjcxNDY4MyBycD0xMTgyMSB0Yj0xNDIwNTY0IHRwPTEyNjUwIG9wPTBcbiAgICAvLyAgIHN0PTE0NzgwOTUyMDAgcmI9MTAwNzkyMTMgcnA9MTk5NjIgdGI9MjQ4NzcwNSB0cD0yMDAxNSBvcD0wXG4gICAgLy8gICBzdD0xNDc4MDk4ODAwIHJiPTQ0NDQ0MzMgcnA9MTAyMjcgdGI9MTQzMDM1NiB0cD0xMDQ5MyBvcD0wXG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBsZXQgZnJvbVh0c3RhdHMgPSBkYXRhLmluZGV4T2YoJ1h0IHN0YXRzOicpO1xuXG4gICAgbGV0IHN0YXJ0ID0gZGF0YS5pbmRleE9mKCdQZW5kaW5nIGJ5dGVzOicsIGZyb21YdHN0YXRzKTtcbiAgICBsZXQgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc6Jywgc3RhcnQgKyAxKTtcbiAgICBsZXQgZW5kID0gZGF0YS5pbmRleE9mKCdcXG4nLCBkZWxpbWl0ZXIgKyAxKTtcbiAgICBsZXQgcGVuZGluZ0J5dGVzID0gZGF0YS5zdWJzdHJpbmcoZGVsaW1pdGVyICsgMSwgZW5kKS50cmltKCk7XG5cbiAgICBpZiAoZW5kID4gZGVsaW1pdGVyKSB7XG4gICAgICBzdGFydCA9IGRhdGEuaW5kZXhPZignYnVja2V0RHVyYXRpb24nLCBlbmQgKyAxKTtcbiAgICAgIGRlbGltaXRlciA9IGRhdGEuaW5kZXhPZignPScsIHN0YXJ0ICsgMSk7XG4gICAgICBlbmQgPSBkYXRhLmluZGV4T2YoJ1xcbicsIGRlbGltaXRlciArIDEpO1xuICAgICAgYnVja2V0RHVyYXRpb24gPSBkYXRhLnN1YnN0cmluZyhkZWxpbWl0ZXIgKyAxLCBlbmQpLnRyaW0oKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgZGF0YSA9IGRhdGEuc3Vic3RyaW5nKGVuZCArIDEsIGRhdGEubGVuZ3RoKTtcbiAgICAgIGxldCBhcnJheUxpc3QgPSBkYXRhLnNwbGl0KCdcXG4nKTtcblxuICAgICAgaWYgKGFycmF5TGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0YXJ0ID0gLTE7XG5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBORVRXT1JLX0tFWVMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICBzdGFydCA9IGFycmF5TGlzdFswXS5pbmRleE9mKE5FVFdPUktfS0VZU1tqXVswXSk7XG5cbiAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgaW5kZXggPSBqO1xuICAgICAgICAgICAgcmV0dXJuVmFsdWVbMF0gPSBbXTtcblxuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBORVRXT1JLX0tFWVNbal0ubGVuZ3RoOyArK2spIHtcbiAgICAgICAgICAgICAgcmV0dXJuVmFsdWVbMF1ba10gPSBORVRXT1JLX0tFWVNbal1ba107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmV0dXJuSW5kZXggPSAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGRhdGEgPSBhcnJheUxpc3RbaV07XG4gICAgICAgICAgc3RhcnQgPSBkYXRhLmluZGV4T2YoTkVUV09SS19LRVlTW2luZGV4XVswXSk7XG5cbiAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgICAgICAgIGVuZCA9IGRhdGEuaW5kZXhPZignICcsIGRlbGltaXRlciArIDEpO1xuICAgICAgICAgICAgYnVja2V0U3RhcnQgPSBkYXRhLnN1YnN0cmluZyhkZWxpbWl0ZXIgKyAxLCBlbmQpLnRyaW0oKTtcblxuICAgICAgICAgICAgaWYgKGVuZCA+IGRlbGltaXRlcikge1xuICAgICAgICAgICAgICBzdGFydCA9IGRhdGEuaW5kZXhPZihORVRXT1JLX0tFWVNbaW5kZXhdWzFdLCBlbmQgKyAxKTtcbiAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IDApIHtcbiAgICAgICAgICAgICAgICBkZWxpbWl0ZXIgPSBkYXRhLmluZGV4T2YoJz0nLCBzdGFydCArIDEpO1xuICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEuaW5kZXhPZignICcsIGRlbGltaXRlciArIDEpO1xuICAgICAgICAgICAgICAgIGFjdGl2ZVRpbWUgPSBkYXRhLnN1YnN0cmluZyhkZWxpbWl0ZXIgKyAxLCBlbmQpLnRyaW0oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZW5kID4gZGVsaW1pdGVyKSB7XG4gICAgICAgICAgICAgIHN0YXJ0ID0gZGF0YS5pbmRleE9mKE5FVFdPUktfS0VZU1tpbmRleF1bMl0sIGVuZCArIDEpO1xuICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgICAgIGRlbGltaXRlciA9IGRhdGEuaW5kZXhPZignPScsIHN0YXJ0ICsgMSk7XG4gICAgICAgICAgICAgICAgZW5kID0gZGF0YS5pbmRleE9mKCcgJywgZGVsaW1pdGVyICsgMSk7XG4gICAgICAgICAgICAgICAgcnhCeXRlcyA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbmQgPiBkZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBkYXRhLmluZGV4T2YoTkVUV09SS19LRVlTW2luZGV4XVszXSwgZW5kICsgMSk7XG4gICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLmluZGV4T2YoJyAnLCBkZWxpbWl0ZXIgKyAxKTtcbiAgICAgICAgICAgICAgICByeFBhY2tldHMgPSBkYXRhLnN1YnN0cmluZyhkZWxpbWl0ZXIgKyAxLCBlbmQpLnRyaW0oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZW5kID4gZGVsaW1pdGVyKSB7XG4gICAgICAgICAgICAgIHN0YXJ0ID0gZGF0YS5pbmRleE9mKE5FVFdPUktfS0VZU1tpbmRleF1bNF0sIGVuZCArIDEpO1xuICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgICAgIGRlbGltaXRlciA9IGRhdGEuaW5kZXhPZignPScsIHN0YXJ0ICsgMSk7XG4gICAgICAgICAgICAgICAgZW5kID0gZGF0YS5pbmRleE9mKCcgJywgZGVsaW1pdGVyICsgMSk7XG4gICAgICAgICAgICAgICAgdHhCeXRlcyA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbmQgPiBkZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBkYXRhLmluZGV4T2YoTkVUV09SS19LRVlTW2luZGV4XVs1XSwgZW5kICsgMSk7XG4gICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyID0gZGF0YS5pbmRleE9mKCc9Jywgc3RhcnQgKyAxKTtcbiAgICAgICAgICAgICAgICBlbmQgPSBkYXRhLmluZGV4T2YoJyAnLCBkZWxpbWl0ZXIgKyAxKTtcbiAgICAgICAgICAgICAgICB0eFBhY2tldHMgPSBkYXRhLnN1YnN0cmluZyhkZWxpbWl0ZXIgKyAxLCBlbmQpLnRyaW0oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZW5kID4gZGVsaW1pdGVyKSB7XG4gICAgICAgICAgICAgIHN0YXJ0ID0gZGF0YS5pbmRleE9mKE5FVFdPUktfS0VZU1tpbmRleF1bNl0sIGVuZCArIDEpO1xuICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgICAgIGRlbGltaXRlciA9IGRhdGEuaW5kZXhPZignPScsIHN0YXJ0ICsgMSk7XG4gICAgICAgICAgICAgICAgZW5kID0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgb3BlcmF0aW9ucyA9IGRhdGEuc3Vic3RyaW5nKGRlbGltaXRlciArIDEsIGVuZCkudHJpbSgpO1xuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVyblZhbHVlW3JldHVybkluZGV4KytdID0gW2J1Y2tldFN0YXJ0LCBhY3RpdmVUaW1lLCByeEJ5dGVzLCByeFBhY2tldHMsIHR4Qnl0ZXMsIHR4UGFja2V0cywgb3BlcmF0aW9ucywgYnVja2V0RHVyYXRpb25dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghXy5pc0VxdWFsKHBlbmRpbmdCeXRlcywgJycpICYmICFfLmlzVW5kZWZpbmVkKHBlbmRpbmdCeXRlcykgJiYgIV8uaXNFcXVhbChwZW5kaW5nQnl0ZXMsICdub2RleCcpKSB7XG4gICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIG5ldHdvcmsgdHJhZmZpYyBkYXRhOiAnJHtkYXRhfSdgKTtcbiAgICB9XG4gIH0pO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQge1xuICBjb21tYW5kcywgaGVscGVycywgU1VQUE9SVEVEX1BFUkZPUk1BTkNFX0RBVEFfVFlQRVMsIENQVV9LRVlTLCBNRU1PUllfS0VZUyxcbiAgQkFUVEVSWV9LRVlTLCBORVRXT1JLX0tFWVMsXG59O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcblxuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvcGVyZm9ybWFuY2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==