appium-uiautomator2-driver 1.72.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -29,7 +29,7 @@ platformName | Could be set to `android`. Appium itself is not strict about this
29
29
  appium:automationName | Must always be set to `uiautomator2`. Values of `automationName` are compared case-insensitively.
30
30
  appium:deviceName | The name of the device under test (actually, it is not used to select a device under test). Consider setting `udid` for real devices and `avd` for emulators instead
31
31
  appium:platformVersion | The platform version of an emulator or a real device. This capability is used for device autodetection if `udid` is not provided
32
- appium:udid | UDID of the device to be tested. Could ve retrieved from `adb devices -l` output. If unset then the driver will try to use the first connected device. Always set this capability if you run parallel tests.
32
+ appium:udid | UDID of the device to be tested. Could be retrieved from `adb devices -l` output. If unset then the driver will try to use the first connected device. Always set this capability if you run parallel tests.
33
33
  appium:noReset | Prevents the device to be reset before the session startup if set to `true`. This means that the application under test is not going to be terminated neither its data cleaned. `false` by default
34
34
  appium:fullReset | Being set to `true` always enforces the application under test to be fully uninstalled before starting a new session. `false` by default
35
35
  appium:printPageSourceOnFindFailure | Enforces the server to dump the actual XML page source into the log if any error happens. `false` by default.
@@ -210,7 +210,7 @@ Name | Description | Example
210
210
  id | This strategy is mapped to the native UiAutomator's `By.res` [locator](https://developer.android.com/reference/androidx/test/uiautomator/BySelector#res(java.lang.String)) (exact match of element's resource name). Package identifier prefix is added automatically if unset and is equal to the identifier of the current application under test. | 'com.mycompany:id/resourceId'
211
211
  accessibilityId | This strategy is mapped to the native UiAutomator's `By.desc` [locator](https://developer.android.com/reference/androidx/test/uiautomator/BySelector#desc(java.lang.String)) (exact match of element's content description). | 'my description'
212
212
  className | This strategy is mapped to the native UiAutomator's `By.clazz` [locator](https://developer.android.com/reference/androidx/test/uiautomator/BySelector#clazz(java.lang.String)) (exact match of element's class). | 'android.view.View'
213
- android uiautomator | This strategy is mapped to the native UiAutomator's `UiSelector` [locator](https://developer.android.com/reference/androidx/test/uiautomator/UiSelector)). It is even possible to perform some advanced operations, like scrolling, with this locator type | `new UiScrollable(new UiSelector().resourceId(\"android:id/list\")).scrollIntoView(new UiSelector().text(\"Radio Group\"))`
213
+ `-android uiautomator` | This strategy is mapped to the native UiAutomator's `UiSelector` [locator](https://developer.android.com/reference/androidx/test/uiautomator/UiSelector)). It is even possible to perform some advanced operations, like scrolling, with this locator type | `new UiScrollable(new UiSelector().resourceId(\"android:id/list\")).scrollIntoView(new UiSelector().text(\"Radio Group\"))`
214
214
  xpath | For elements lookup Xpath strategy the driver uses the same XML tree that is generated by page source API. Only Xpath 1.0 is supported for appium-uiatomator2-server versions below 4.25.0. All server versions starting from 4.25.0 support both Xpath 1.0 and 2.0 | `By.xpath("//android.view.View[@text=\"Regular\" and @checkable=\"true\"]")`
215
215
 
216
216
 
@@ -269,6 +269,7 @@ mjpegScalingFactor | int | The percentage value used to apply downscaling on the
269
269
  mjpegServerScreenshotQuality | int | The percentage value used to apply lossy JPEG compression on the screenshots generated by the MJPEG screenshots broadcaster. Must be in range 1..100. `50` is by default, which means that screenshots are compressed to the half of their original quality.
270
270
  mjpegBilinearFiltering | boolean | Controls whether (`true`) or not (`false`, the default value) to apply bilinear filtering to MJPEG screenshots broadcaster resize algorithm. Enabling this flag may improve the quality of the resulting scaled bitmap, but may introduce a small performance hit.
271
271
  useResourcesForOrientationDetection | boolean | Defines the strategy used by UiAutomator2 server to detect the original device orientation. By default (`false` value) the server uses device rotation value for this purpose. Although, this approach may not work for some devices and a portrait orientation may erroneously be detected as the landscape one (and vice versa). In such case it makes sense to play with this setting.
272
+ enforceXPath1 | boolean | Since UiAutomator2 driver version `4.25.0` XPath2 is set as the default and the recommended interpreter for the corresponding element locators. This interpreter is based on [Psychopath XPath2](https://wiki.eclipse.org/PsychoPathXPathProcessor) implementation, which is now a part of the Eclipse foundation. In most of the cases XPath1 locators are also valid XPath2 locators, so there should be no issues while locating elements. Although, since the XPath2 standard is much more advanced in comparison to the previous version, some [issues](https://github.com/appium/appium/issues/16142) are possible for more sophisticated locators, which cannot be fixed easily, as we depend on the third-party library mentioned above. Then try to workaround such issues by enforcing XPath1 usage (whose implementation is a part of the Android platform itself) and assigning this setting to `true`. Note, this setting is actually applied at the time when the element lookup by XPath is executed, so you could switch it on or off whenever needed throughout your automated testing session.
272
273
 
273
274
 
274
275
  ## Platform-Specific Extensions
@@ -564,14 +565,15 @@ text | string | yes | The text to type | testing
564
565
 
565
566
  ### mobile: sensorSet
566
567
 
567
- Emulate sensors values on the connected emulator.
568
+ Emulate changing of sensor values on the connected emulator.
569
+ This extension does not work on real devices.
568
570
 
569
571
  #### Arguments
570
572
 
571
573
  Name | Type | Required | Description | Example
572
574
  --- | --- | --- | --- | ---
573
- sensorType | string | yes | Supported sensor types are: `acceleration`, `light`, `proximity`, `temperature`, `pressure` and `humidity` | light
574
- value | string | yes | value to set to the sensor | 50
575
+ sensorType | string | yes | The set of all supported sensor types could be found in [adb-emu-commands.js](https://github.com/appium/appium-adb/blob/master/lib/tools/adb-emu-commands.js) (look for *SENSORS* object values). Check the output of `sensor status` command in the [emulator console](https://developer.android.com/studio/run/emulator-console) to see more details on the available sensor types | light
576
+ value | string | yes | Check the output of `sensor get <sensorType>` command in the [emulator console](https://developer.android.com/studio/run/emulator-console) to see the acceptable value format for the given sensor type | 50
575
577
 
576
578
  ### mobile: deleteFile
577
579
 
@@ -761,6 +763,24 @@ type | string | yes | The unlock type. See the documentation on [appium:unlockTy
761
763
  strategy | string | no | Unlock strategy. See the documentation on [appium:unlockStrategy](#device-locking) capability for more details | uiautomator
762
764
  timeoutMs | number | no | Unlock timeout. See the documentation on [appium:unlockSuccessTimeout](#device-locking) capability for more details | 5000
763
765
 
766
+ ### mobile: refreshGpsCache
767
+
768
+ Sends a request to refresh the GPS cache on the device under test.
769
+ By default the location tracking is configured for
770
+ [low battery consumption](https://github.com/appium/io.appium.settings/blob/master/app/src/main/java/io/appium/settings/LocationTracker.java),
771
+ so you might need to call this extension periodically to get the updated geo
772
+ location if the actual (or mocked) device location is changed too frequently.
773
+ The feature only works if the device under test has Google Play Services installed.
774
+ In case the vanilla
775
+ [LocationManager](https://developer.android.com/reference/android/location/LocationManager)
776
+ is used the device API level must be at version 30 (Android R) or higher.
777
+
778
+ #### Arguments
779
+
780
+ Name | Type | Required | Description | Example
781
+ --- | --- | --- | --- | ---
782
+ timeoutMs | number | no | The maximum number of milliseconds to block until GPS cache is refreshed. If the API call does not receive a confirmation about successful cache refresh within this timeout then an error is thrown. Providing zero or a negative value to it skips waiting completely and does not check for any errors. 20000 ms by default. | 60000
783
+
764
784
  ## Applications Management
765
785
 
766
786
  UiAutomator2 driver supports Appium endpoints for applications management:
package/build/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.startServer = exports.AndroidUiautomator2Driver = exports.DEFAULT_PORT = exports.DEFAULT_HOST = void 0;
6
+ exports.startServer = exports.default = exports.DEFAULT_PORT = exports.DEFAULT_HOST = exports.AndroidUiautomator2Driver = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.helpers = exports.commands = void 0;
6
+ exports.helpers = exports.default = exports.commands = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.helpers = exports.commands = void 0;
6
+ exports.helpers = exports.default = exports.commands = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.helpers = exports.commands = void 0;
8
+ exports.helpers = exports.default = exports.commands = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -13,9 +13,9 @@ var _logger = _interopRequireDefault(require("../logger"));
13
13
 
14
14
  var _lodash = _interopRequireDefault(require("lodash"));
15
15
 
16
- var _appiumSupport = require("appium-support");
16
+ var _support = require("@appium/support");
17
17
 
18
- var _appiumBaseDriver = require("appium-base-driver");
18
+ var _baseDriver = require("@appium/base-driver");
19
19
 
20
20
  let commands = {},
21
21
  helpers = {},
@@ -134,20 +134,20 @@ commands.getElementScreenshot = async function (element) {
134
134
  };
135
135
 
136
136
  commands.tap = async function (elementId = null, x = null, y = null, count = 1) {
137
- const areCoordinatesDefined = _appiumSupport.util.hasValue(x) && _appiumSupport.util.hasValue(y);
137
+ const areCoordinatesDefined = _support.util.hasValue(x) && _support.util.hasValue(y);
138
138
 
139
- if (!_appiumSupport.util.hasValue(elementId) && !areCoordinatesDefined) {
139
+ if (!_support.util.hasValue(elementId) && !areCoordinatesDefined) {
140
140
  throw new Error(`Either element id to tap or both absolute coordinates should be defined`);
141
141
  }
142
142
 
143
143
  for (let i = 0; i < count; i++) {
144
- if (_appiumSupport.util.hasValue(elementId) && !areCoordinatesDefined) {
144
+ if (_support.util.hasValue(elementId) && !areCoordinatesDefined) {
145
145
  await this.uiautomator2.jwproxy.command(`/element/${elementId}/click`, 'POST');
146
146
  } else {
147
147
  await this.uiautomator2.jwproxy.command(`/appium/tap`, 'POST', {
148
148
  x,
149
149
  y,
150
- [_appiumBaseDriver.W3C_ELEMENT_KEY]: elementId
150
+ [_baseDriver.W3C_ELEMENT_KEY]: elementId
151
151
  });
152
152
  }
153
153
  }
@@ -163,7 +163,7 @@ commands.getElementRect = async function (elementId) {
163
163
  if (this.isWebContext()) {
164
164
  _logger.default.debug(`Detected downstream chromedriver protocol: ${this.chromedriver.jwproxy.downstreamProtocol}`);
165
165
 
166
- if (this.chromedriver.jwproxy.downstreamProtocol === _appiumBaseDriver.PROTOCOLS.MJSONWP) {
166
+ if (this.chromedriver.jwproxy.downstreamProtocol === _baseDriver.PROTOCOLS.MJSONWP) {
167
167
  const {
168
168
  x,
169
169
  y
@@ -191,4 +191,4 @@ var _default = extensions;
191
191
  exports.default = _default;require('source-map-support').install();
192
192
 
193
193
 
194
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9lbGVtZW50LmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJ0b0Jvb2wiLCJzIiwiXyIsImlzU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJhY3RpdmUiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsImdldEF0dHJpYnV0ZSIsImF0dHJpYnV0ZSIsImVsZW1lbnRJZCIsImVsZW1lbnREaXNwbGF5ZWQiLCJlbGVtZW50RW5hYmxlZCIsImVsZW1lbnRTZWxlY3RlZCIsImdldE5hbWUiLCJnZXRMb2NhdGlvbiIsImxvZyIsImluZm8iLCJnZXRTaXplIiwidG91Y2hMb25nQ2xpY2siLCJlbGVtZW50IiwieCIsInkiLCJkdXJhdGlvbiIsInBhcmFtcyIsInRvdWNoRG93biIsInRvdWNoVXAiLCJ0b3VjaE1vdmUiLCJkb1NldEVsZW1lbnRWYWx1ZSIsInNldFZhbHVlSW1tZWRpYXRlIiwia2V5cyIsInRleHQiLCJpc0FycmF5Iiwiam9pbiIsInJlcGxhY2UiLCJ1bmljb2RlS2V5Ym9hcmQiLCJvcHRzIiwiZ2V0VGV4dCIsImNsaWNrIiwiZ2V0RWxlbWVudFNjcmVlbnNob3QiLCJ0YXAiLCJjb3VudCIsImFyZUNvb3JkaW5hdGVzRGVmaW5lZCIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiaSIsIlczQ19FTEVNRU5UX0tFWSIsImNsZWFyIiwiZ2V0RWxlbWVudFJlY3QiLCJpc1dlYkNvbnRleHQiLCJkZWJ1ZyIsImNocm9tZWRyaXZlciIsImRvd25zdHJlYW1Qcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJ3aWR0aCIsImhlaWdodCIsIk9iamVjdCIsImFzc2lnbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFJQSxRQUFRLEdBQUcsRUFBZjtBQUFBLElBQW1CQyxPQUFPLEdBQUcsRUFBN0I7QUFBQSxJQUFpQ0MsVUFB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Q0FBYzdELFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyBQUk9UT0NPTFMsIFczQ19FTEVNRU5UX0tFWSB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gdG9Cb29sIChzKSB7XG4gIHJldHVybiBfLmlzU3RyaW5nKHMpID8gKHMudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKSA6ICEhcztcbn1cblxuY29tbWFuZHMuYWN0aXZlID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZlICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2VsZW1lbnQvYWN0aXZlJywgJ0dFVCcpO1xufTtcblxuY29tbWFuZHMuZ2V0QXR0cmlidXRlID0gYXN5bmMgZnVuY3Rpb24gKGF0dHJpYnV0ZSwgZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9hdHRyaWJ1dGUvJHthdHRyaWJ1dGV9YCwgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLmVsZW1lbnREaXNwbGF5ZWQgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiB0b0Jvb2woYXdhaXQgdGhpcy5nZXRBdHRyaWJ1dGUoJ2Rpc3BsYXllZCcsIGVsZW1lbnRJZCkpO1xufTtcblxuY29tbWFuZHMuZWxlbWVudEVuYWJsZWQgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiB0b0Jvb2woYXdhaXQgdGhpcy5nZXRBdHRyaWJ1dGUoJ2VuYWJsZWQnLCBlbGVtZW50SWQpKTtcbn07XG5cbmNvbW1hbmRzLmVsZW1lbnRTZWxlY3RlZCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIHRvQm9vbChhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnLCBlbGVtZW50SWQpKTtcbn07XG5cbmNvbW1hbmRzLmdldE5hbWUgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9uYW1lYCwgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLmdldExvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICBsb2cuaW5mbyhgY2FsbGluZyBnZXQgbG9jYXRpb246ICR7ZWxlbWVudElkfWApO1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vbG9jYXRpb25gLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L3NpemVgLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMudG91Y2hMb25nQ2xpY2sgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCwgeCwgeSwgZHVyYXRpb24pIHtcbiAgbGV0IHBhcmFtcyA9IHtlbGVtZW50LCB4LCB5LCBkdXJhdGlvbn07XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC90b3VjaC9sb25nY2xpY2tgLCAnUE9TVCcsIHtwYXJhbXN9KTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoRG93biA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50LCB4LCB5KSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudCwgeCwgeX07XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC90b3VjaC9kb3duYCwgJ1BPU1QnLCB7cGFyYW1zfSk7XG59O1xuXG5jb21tYW5kcy50b3VjaFVwID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQsIHgsIHkpIHtcbiAgbGV0IHBhcmFtcyA9IHtlbGVtZW50LCB4LCB5fTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL3RvdWNoL3VwYCwgJ1BPU1QnLCB7cGFyYW1zfSk7XG59O1xuXG5jb21tYW5kcy50b3VjaE1vdmUgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCwgeCwgeSkge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnQsIHgsIHl9O1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvdG91Y2gvbW92ZWAsICdQT1NUJywge3BhcmFtc30pO1xufTtcblxuaGVscGVycy5kb1NldEVsZW1lbnRWYWx1ZSA9IGFzeW5jIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtwYXJhbXMuZWxlbWVudElkfS92YWx1ZWAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLnNldFZhbHVlSW1tZWRpYXRlID0gYXN5bmMgZnVuY3Rpb24gKGtleXMsIGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vdmFsdWVgLCAnUE9TVCcsIHtcbiAgICBlbGVtZW50SWQsXG4gICAgdGV4dDogXy5pc0FycmF5KGtleXMpID8ga2V5cy5qb2luKCcnKSA6IGtleXMsXG4gICAgcmVwbGFjZTogZmFsc2UsXG4gICAgdW5pY29kZUtleWJvYXJkOiB0aGlzLm9wdHMudW5pY29kZUtleWJvYXJkLFxuICB9KTtcbn07XG5cbmNvbW1hbmRzLmdldFRleHQgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS90ZXh0YCwgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLmNsaWNrID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50fS9jbGlja2AsICdQT1NUJywge2VsZW1lbnR9KTtcbn07XG5cbmNvbW1hbmRzLmdldEVsZW1lbnRTY3JlZW5zaG90ID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50fS9zY3JlZW5zaG90YCwgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLnRhcCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQgPSBudWxsLCB4ID0gbnVsbCwgeSA9IG51bGwsIGNvdW50ID0gMSkge1xuICBjb25zdCBhcmVDb29yZGluYXRlc0RlZmluZWQgPSB1dGlsLmhhc1ZhbHVlKHgpICYmIHV0aWwuaGFzVmFsdWUoeSk7XG4gIGlmICghdXRpbC5oYXNWYWx1ZShlbGVtZW50SWQpICYmICFhcmVDb29yZGluYXRlc0RlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVpdGhlciBlbGVtZW50IGlkIHRvIHRhcCBvciBib3RoIGFic29sdXRlIGNvb3JkaW5hdGVzIHNob3VsZCBiZSBkZWZpbmVkYCk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShlbGVtZW50SWQpICYmICFhcmVDb29yZGluYXRlc0RlZmluZWQpIHtcbiAgICAgIC8vIHdlIGFyZSBlaXRoZXIgdGFwcGluZyBvbiB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgZWxlbWVudFxuICAgICAgLy8gb3IgYW4gb2Zmc2V0IGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lclxuICAgICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vY2xpY2tgLCAnUE9TVCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vdGFwYCwgJ1BPU1QnLCB7XG4gICAgICAgIHgsIHksXG4gICAgICAgIFtXM0NfRUxFTUVOVF9LRVldOiBlbGVtZW50SWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbW1hbmRzLmNsZWFyID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vY2xlYXJgLCAnUE9TVCcsIHtlbGVtZW50SWR9KTtcbn07XG5cbmNvbW1hbmRzLmdldEVsZW1lbnRSZWN0ID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIGxvZy5kZWJ1ZyhgRGV0ZWN0ZWQgZG93bnN0cmVhbSBjaHJvbWVkcml2ZXIgcHJvdG9jb2w6ICR7dGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5kb3duc3RyZWFtUHJvdG9jb2x9YCk7XG4gICAgaWYgKHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuZG93bnN0cmVhbVByb3RvY29sID09PSBQUk9UT0NPTFMuTUpTT05XUCkge1xuICAgICAgY29uc3Qge3gsIHl9ID0gYXdhaXQgdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vbG9jYXRpb25gLCAnR0VUJyk7XG4gICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9zaXplYCwgJ0dFVCcpO1xuICAgICAgcmV0dXJuIHt4LCB5LCB3aWR0aCwgaGVpZ2h0fTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L3JlY3RgLCAnR0VUJyk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L3JlY3RgLCAnR0VUJyk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
194
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9lbGVtZW50LmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJ0b0Jvb2wiLCJzIiwiXyIsImlzU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJhY3RpdmUiLCJ1aWF1dG9tYXRvcjIiLCJqd3Byb3h5IiwiY29tbWFuZCIsImdldEF0dHJpYnV0ZSIsImF0dHJpYnV0ZSIsImVsZW1lbnRJZCIsImVsZW1lbnREaXNwbGF5ZWQiLCJlbGVtZW50RW5hYmxlZCIsImVsZW1lbnRTZWxlY3RlZCIsImdldE5hbWUiLCJnZXRMb2NhdGlvbiIsImxvZyIsImluZm8iLCJnZXRTaXplIiwidG91Y2hMb25nQ2xpY2siLCJlbGVtZW50IiwieCIsInkiLCJkdXJhdGlvbiIsInBhcmFtcyIsInRvdWNoRG93biIsInRvdWNoVXAiLCJ0b3VjaE1vdmUiLCJkb1NldEVsZW1lbnRWYWx1ZSIsInNldFZhbHVlSW1tZWRpYXRlIiwia2V5cyIsInRleHQiLCJpc0FycmF5Iiwiam9pbiIsInJlcGxhY2UiLCJ1bmljb2RlS2V5Ym9hcmQiLCJvcHRzIiwiZ2V0VGV4dCIsImNsaWNrIiwiZ2V0RWxlbWVudFNjcmVlbnNob3QiLCJ0YXAiLCJjb3VudCIsImFyZUNvb3JkaW5hdGVzRGVmaW5lZCIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiaSIsIlczQ19FTEVNRU5UX0tFWSIsImNsZWFyIiwiZ2V0RWxlbWVudFJlY3QiLCJpc1dlYkNvbnRleHQiLCJkZWJ1ZyIsImNocm9tZWRyaXZlciIsImRvd25zdHJlYW1Qcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJ3aWR0aCIsImhlaWdodCIsIk9iamVjdCIsImFzc2lnbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFJQSxRQUFRLEdBQUcsRUFBZjtBQUFBLElBQW1CQyxPQUFPLEdBQUcsRUFBN0I7QUFBQSxJQUFpQ0MsVUFB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N0QsVUFBZCxFQUEwQkYsUUFBMUIsRUFBb0NDLE9BQXBDO2VBRWVDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBQUk9UT0NPTFMsIFczQ19FTEVNRU5UX0tFWSB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmZ1bmN0aW9uIHRvQm9vbCAocykge1xuICByZXR1cm4gXy5pc1N0cmluZyhzKSA/IChzLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykgOiAhIXM7XG59XG5cbmNvbW1hbmRzLmFjdGl2ZSA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2ZSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9lbGVtZW50L2FjdGl2ZScsICdHRVQnKTtcbn07XG5cbmNvbW1hbmRzLmdldEF0dHJpYnV0ZSA9IGFzeW5jIGZ1bmN0aW9uIChhdHRyaWJ1dGUsIGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vYXR0cmlidXRlLyR7YXR0cmlidXRlfWAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5lbGVtZW50RGlzcGxheWVkID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gdG9Cb29sKGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdkaXNwbGF5ZWQnLCBlbGVtZW50SWQpKTtcbn07XG5cbmNvbW1hbmRzLmVsZW1lbnRFbmFibGVkID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gdG9Cb29sKGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdlbmFibGVkJywgZWxlbWVudElkKSk7XG59O1xuXG5jb21tYW5kcy5lbGVtZW50U2VsZWN0ZWQgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiB0b0Jvb2woYXdhaXQgdGhpcy5nZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJywgZWxlbWVudElkKSk7XG59O1xuXG5jb21tYW5kcy5nZXROYW1lID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vbmFtZWAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRMb2NhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgbG9nLmluZm8oYGNhbGxpbmcgZ2V0IGxvY2F0aW9uOiAke2VsZW1lbnRJZH1gKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L2xvY2F0aW9uYCwgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLmdldFNpemUgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9zaXplYCwgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoTG9uZ0NsaWNrID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQsIHgsIHksIGR1cmF0aW9uKSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudCwgeCwgeSwgZHVyYXRpb259O1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvdG91Y2gvbG9uZ2NsaWNrYCwgJ1BPU1QnLCB7cGFyYW1zfSk7XG59O1xuXG5jb21tYW5kcy50b3VjaERvd24gPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCwgeCwgeSkge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnQsIHgsIHl9O1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvdG91Y2gvZG93bmAsICdQT1NUJywge3BhcmFtc30pO1xufTtcblxuY29tbWFuZHMudG91Y2hVcCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50LCB4LCB5KSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudCwgeCwgeX07XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC90b3VjaC91cGAsICdQT1NUJywge3BhcmFtc30pO1xufTtcblxuY29tbWFuZHMudG91Y2hNb3ZlID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQsIHgsIHkpIHtcbiAgbGV0IHBhcmFtcyA9IHtlbGVtZW50LCB4LCB5fTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL3RvdWNoL21vdmVgLCAnUE9TVCcsIHtwYXJhbXN9KTtcbn07XG5cbmhlbHBlcnMuZG9TZXRFbGVtZW50VmFsdWUgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7cGFyYW1zLmVsZW1lbnRJZH0vdmFsdWVgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy5zZXRWYWx1ZUltbWVkaWF0ZSA9IGFzeW5jIGZ1bmN0aW9uIChrZXlzLCBlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L3ZhbHVlYCwgJ1BPU1QnLCB7XG4gICAgZWxlbWVudElkLFxuICAgIHRleHQ6IF8uaXNBcnJheShrZXlzKSA/IGtleXMuam9pbignJykgOiBrZXlzLFxuICAgIHJlcGxhY2U6IGZhbHNlLFxuICAgIHVuaWNvZGVLZXlib2FyZDogdGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5nZXRUZXh0ID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vdGV4dGAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5jbGljayA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudH0vY2xpY2tgLCAnUE9TVCcsIHtlbGVtZW50fSk7XG59O1xuXG5jb21tYW5kcy5nZXRFbGVtZW50U2NyZWVuc2hvdCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudH0vc2NyZWVuc2hvdGAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy50YXAgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkID0gbnVsbCwgeCA9IG51bGwsIHkgPSBudWxsLCBjb3VudCA9IDEpIHtcbiAgY29uc3QgYXJlQ29vcmRpbmF0ZXNEZWZpbmVkID0gdXRpbC5oYXNWYWx1ZSh4KSAmJiB1dGlsLmhhc1ZhbHVlKHkpO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUoZWxlbWVudElkKSAmJiAhYXJlQ29vcmRpbmF0ZXNEZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFaXRoZXIgZWxlbWVudCBpZCB0byB0YXAgb3IgYm90aCBhYnNvbHV0ZSBjb29yZGluYXRlcyBzaG91bGQgYmUgZGVmaW5lZGApO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUoZWxlbWVudElkKSAmJiAhYXJlQ29vcmRpbmF0ZXNEZWZpbmVkKSB7XG4gICAgICAvLyB3ZSBhcmUgZWl0aGVyIHRhcHBpbmcgb24gdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGVsZW1lbnRcbiAgICAgIC8vIG9yIGFuIG9mZnNldCBmcm9tIHRoZSB0b3AgbGVmdCBjb3JuZXJcbiAgICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L2NsaWNrYCwgJ1BPU1QnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvYXBwaXVtL3RhcGAsICdQT1NUJywge1xuICAgICAgICB4LCB5LFxuICAgICAgICBbVzNDX0VMRU1FTlRfS0VZXTogZWxlbWVudElkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59O1xuXG5jb21tYW5kcy5jbGVhciA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L2NsZWFyYCwgJ1BPU1QnLCB7ZWxlbWVudElkfSk7XG59O1xuXG5jb21tYW5kcy5nZXRFbGVtZW50UmVjdCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICBsb2cuZGVidWcoYERldGVjdGVkIGRvd25zdHJlYW0gY2hyb21lZHJpdmVyIHByb3RvY29sOiAke3RoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuZG93bnN0cmVhbVByb3RvY29sfWApO1xuICAgIGlmICh0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmRvd25zdHJlYW1Qcm90b2NvbCA9PT0gUFJPVE9DT0xTLk1KU09OV1ApIHtcbiAgICAgIGNvbnN0IHt4LCB5fSA9IGF3YWl0IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L2xvY2F0aW9uYCwgJ0dFVCcpO1xuICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2l6ZWAsICdHRVQnKTtcbiAgICAgIHJldHVybiB7eCwgeSwgd2lkdGgsIGhlaWdodH07XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9yZWN0YCwgJ0dFVCcpO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9yZWN0YCwgJ0dFVCcpO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2VsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -5,14 +5,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.helpers = void 0;
8
+ exports.helpers = exports.default = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
12
12
  var _cssConverter = _interopRequireDefault(require("../css-converter"));
13
13
 
14
- let helpers = {},
15
- extensions = {};
14
+ const helpers = {};
16
15
  exports.helpers = helpers;
17
16
  const MAGIC_FIRST_VIS_CHILD_SEL = /\/\*\[@firstVisible ?= ?('|")true\1\]/;
18
17
  const MAGIC_SCROLLABLE_SEL = /\/\/\*\[@scrollable ?= ?('|")true\1\]/;
@@ -31,19 +30,14 @@ helpers.doFindElementOrEls = async function (params) {
31
30
 
32
31
  if (params.strategy === 'css selector') {
33
32
  params.strategy = '-android uiautomator';
34
- params.selector = _cssConverter.default.toUiAutomatorSelector(params.selector);
33
+ params.selector = new _cssConverter.default(params.selector, this.opts.appPackage).toUiAutomatorSelector();
35
34
  }
36
35
 
37
- if (params.multiple) {
38
- return await this.uiautomator2.jwproxy.command(`/elements`, 'POST', params);
39
- } else {
40
- return await this.uiautomator2.jwproxy.command(`/element`, 'POST', params);
41
- }
36
+ return await this.uiautomator2.jwproxy.command(`/element${params.multiple ? 's' : ''}`, 'POST', params);
42
37
  };
43
38
 
44
- Object.assign(extensions, helpers);
45
- var _default = extensions;
39
+ var _default = helpers;
46
40
  exports.default = _default;require('source-map-support').install();
47
41
 
48
42
 
49
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9maW5kLmpzIl0sIm5hbWVzIjpbImhlbHBlcnMiLCJleHRlbnNpb25zIiwiTUFHSUNfRklSU1RfVklTX0NISUxEX1NFTCIsIk1BR0lDX1NDUk9MTEFCTEVfU0VMIiwiTUFHSUNfU0NST0xMQUJMRV9CWSIsImRvRmluZEVsZW1lbnRPckVscyIsInBhcmFtcyIsInN0cmF0ZWd5IiwidGVzdCIsInNlbGVjdG9yIiwiZWxlbWVudElkIiwiY29udGV4dCIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiQ3NzQ29udmVydGVyIiwidG9VaUF1dG9tYXRvclNlbGVjdG9yIiwibXVsdGlwbGUiLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUEsSUFBSUEsT0FBTyxHQUFHLEVBQWQ7QUFBQSxJQUFrQkMsVUFBVSxHQUFHLEVBQS9COztBQUlBLE1BQU1DLHlCQUF5QixHQUFHLHVDQUFsQztBQUVBLE1BQU1DLG9CQUFvQixHQUFHLHVDQUE3QjtBQUNBLE1BQU1DLG1CQUFtQixHQUFHLG1DQUE1Qjs7QUFNQUosT0FBTyxDQUFDSyxrQkFBUixHQUE2QixnQkFBZ0JDLE1BQWhCLEVBQXdCO0FBQ25ELE1BQUlBLE1BQU0sQ0FBQ0MsUUFBUCxLQUFvQixPQUFwQixJQUErQkwseUJBQXlCLENBQUNNLElBQTFCLENBQStCRixNQUFNLENBQUNHLFFBQXRDLENBQW5DLEVBQW9GO0FBQ2xGLFFBQUlDLFNBQVMsR0FBR0osTUFBTSxDQUFDSyxPQUF2QjtBQUNBLFdBQU8sTUFBTSxLQUFLQyxZQUFMLENBQWtCQyxPQUFsQixDQUEwQkMsT0FBMUIsQ0FBbUMsbUJBQWtCSixTQUFVLGdCQUEvRCxFQUFnRixLQUFoRixFQUF1RixFQUF2RixDQUFiO0FBQ0Q7O0FBQ0QsTUFBSUosTUFBTSxDQUFDQyxRQUFQLEtBQW9CLE9BQXBCLElBQStCSixvQkFBb0IsQ0FBQ0ssSUFBckIsQ0FBMEJGLE1BQU0sQ0FBQ0csUUFBakMsQ0FBbkMsRUFBK0U7QUFDN0VILElBQUFBLE1BQU0sQ0FBQ0MsUUFBUCxHQUFrQixzQkFBbEI7QUFDQUQsSUFBQUEsTUFBTSxDQUFDRyxRQUFQLEdBQWtCTCxtQkFBbEI7QUFDRDs7QUFDRCxNQUFJRSxNQUFNLENBQUNDLFFBQVAsS0FBb0IsY0FBeEIsRUFBd0M7QUFDdENELElBQUFBLE1BQU0sQ0FBQ0MsUUFBUCxHQUFrQixzQkFBbEI7QUFDQUQsSUFBQUEsTUFBTSxDQUFDRyxRQUFQLEdBQWtCTSxzQkFBYUMscUJBQWIsQ0FBbUNWLE1BQU0sQ0FBQ0csUUFBMUMsQ0FBbEI7QUFDRDs7QUFDRCxNQUFJSCxNQUFNLENBQUNXLFFBQVgsRUFBcUI7QUFDbkIsV0FBTyxNQUFNLEtBQUtMLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFtQyxXQUFuQyxFQUErQyxNQUEvQyxFQUF1RFIsTUFBdkQsQ0FBYjtBQUNELEdBRkQsTUFFTztBQUNMLFdBQU8sTUFBTSxLQUFLTSxZQUFMLENBQWtCQyxPQUFsQixDQUEwQkMsT0FBMUIsQ0FBbUMsVUFBbkMsRUFBOEMsTUFBOUMsRUFBc0RSLE1BQXRELENBQWI7QUFDRDtBQUNGLENBbEJEOztBQW9CQVksTUFBTSxDQUFDQyxNQUFQLENBQWNsQixVQUFkLEVBQTBCRCxPQUExQjtlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENzc0NvbnZlcnRlciBmcm9tICcuLi9jc3MtY29udmVydGVyJztcblxubGV0IGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG4vLyB3ZSBvdmVycmlkZSB0aGUgeHBhdGggc2VhcmNoIGZvciB0aGlzIGZpcnN0LXZpc2libGUtY2hpbGQgc2VsZWN0b3IsIHdoaWNoXG4vLyBsb29rcyBsaWtlIC8qW0BmaXJzdFZpc2libGU9XCJ0cnVlXCJdXG5jb25zdCBNQUdJQ19GSVJTVF9WSVNfQ0hJTERfU0VMID0gL1xcL1xcKlxcW0BmaXJzdFZpc2libGUgPz0gPygnfFwiKXRydWVcXDFcXF0vO1xuXG5jb25zdCBNQUdJQ19TQ1JPTExBQkxFX1NFTCA9IC9cXC9cXC9cXCpcXFtAc2Nyb2xsYWJsZSA/PSA/KCd8XCIpdHJ1ZVxcMVxcXS87XG5jb25zdCBNQUdJQ19TQ1JPTExBQkxFX0JZID0gJ25ldyBVaVNlbGVjdG9yKCkuc2Nyb2xsYWJsZSh0cnVlKSc7XG5cbi8qKlxuICogT3ZlcnJpZGluZyBoZWxwZXJzLmRvRmluZEVsZW1lbnRPckVscyBmdW5jdGlvbmFsaXR5IG9mIGFwcGl1bS1hbmRyb2lkLWRyaXZlcixcbiAqIHRoaXMuZWxlbWVudCBpbml0aWFsaXplZCBpbiBmaW5kLmpzIG9mIGFwcGl1bS1hbmRyb2lkLWRyaXZlLlxuICovXG5oZWxwZXJzLmRvRmluZEVsZW1lbnRPckVscyA9IGFzeW5jIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgaWYgKHBhcmFtcy5zdHJhdGVneSA9PT0gJ3hwYXRoJyAmJiBNQUdJQ19GSVJTVF9WSVNfQ0hJTERfU0VMLnRlc3QocGFyYW1zLnNlbGVjdG9yKSkge1xuICAgIGxldCBlbGVtZW50SWQgPSBwYXJhbXMuY29udGV4dDtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2VsZW1lbnQvJHtlbGVtZW50SWR9L2ZpcnN0X3Zpc2libGVgLCAnR0VUJywge30pO1xuICB9XG4gIGlmIChwYXJhbXMuc3RyYXRlZ3kgPT09ICd4cGF0aCcgJiYgTUFHSUNfU0NST0xMQUJMRV9TRUwudGVzdChwYXJhbXMuc2VsZWN0b3IpKSB7XG4gICAgcGFyYW1zLnN0cmF0ZWd5ID0gJy1hbmRyb2lkIHVpYXV0b21hdG9yJztcbiAgICBwYXJhbXMuc2VsZWN0b3IgPSBNQUdJQ19TQ1JPTExBQkxFX0JZO1xuICB9XG4gIGlmIChwYXJhbXMuc3RyYXRlZ3kgPT09ICdjc3Mgc2VsZWN0b3InKSB7XG4gICAgcGFyYW1zLnN0cmF0ZWd5ID0gJy1hbmRyb2lkIHVpYXV0b21hdG9yJztcbiAgICBwYXJhbXMuc2VsZWN0b3IgPSBDc3NDb252ZXJ0ZXIudG9VaUF1dG9tYXRvclNlbGVjdG9yKHBhcmFtcy5zZWxlY3Rvcik7XG4gIH1cbiAgaWYgKHBhcmFtcy5tdWx0aXBsZSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50c2AsICdQT1NUJywgcGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudGAsICdQT1NUJywgcGFyYW1zKTtcbiAgfVxufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9maW5kLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
43
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9maW5kLmpzIl0sIm5hbWVzIjpbImhlbHBlcnMiLCJNQUdJQ19GSVJTVF9WSVNfQ0hJTERfU0VMIiwiTUFHSUNfU0NST0xMQUJMRV9TRUwiLCJNQUdJQ19TQ1JPTExBQkxFX0JZIiwiZG9GaW5kRWxlbWVudE9yRWxzIiwicGFyYW1zIiwic3RyYXRlZ3kiLCJ0ZXN0Iiwic2VsZWN0b3IiLCJlbGVtZW50SWQiLCJjb250ZXh0IiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJDc3NDb252ZXJ0ZXIiLCJvcHRzIiwiYXBwUGFja2FnZSIsInRvVWlBdXRvbWF0b3JTZWxlY3RvciIsIm11bHRpcGxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUVBLE1BQU1BLE9BQU8sR0FBRyxFQUFoQjs7QUFJQSxNQUFNQyx5QkFBeUIsR0FBRyx1Q0FBbEM7QUFFQSxNQUFNQyxvQkFBb0IsR0FBRyx1Q0FBN0I7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxtQ0FBNUI7O0FBTUFILE9BQU8sQ0FBQ0ksa0JBQVIsR0FBNkIsZ0JBQWdCQyxNQUFoQixFQUF3QjtBQUNuRCxNQUFJQSxNQUFNLENBQUNDLFFBQVAsS0FBb0IsT0FBcEIsSUFBK0JMLHlCQUF5QixDQUFDTSxJQUExQixDQUErQkYsTUFBTSxDQUFDRyxRQUF0QyxDQUFuQyxFQUFvRjtBQUNsRixRQUFJQyxTQUFTLEdBQUdKLE1BQU0sQ0FBQ0ssT0FBdkI7QUFDQSxXQUFPLE1BQU0sS0FBS0MsWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLE9BQTFCLENBQW1DLG1CQUFrQkosU0FBVSxnQkFBL0QsRUFBZ0YsS0FBaEYsRUFBdUYsRUFBdkYsQ0FBYjtBQUNEOztBQUNELE1BQUlKLE1BQU0sQ0FBQ0MsUUFBUCxLQUFvQixPQUFwQixJQUErQkosb0JBQW9CLENBQUNLLElBQXJCLENBQTBCRixNQUFNLENBQUNHLFFBQWpDLENBQW5DLEVBQStFO0FBQzdFSCxJQUFBQSxNQUFNLENBQUNDLFFBQVAsR0FBa0Isc0JBQWxCO0FBQ0FELElBQUFBLE1BQU0sQ0FBQ0csUUFBUCxHQUFrQkwsbUJBQWxCO0FBQ0Q7O0FBQ0QsTUFBSUUsTUFBTSxDQUFDQyxRQUFQLEtBQW9CLGNBQXhCLEVBQXdDO0FBQ3RDRCxJQUFBQSxNQUFNLENBQUNDLFFBQVAsR0FBa0Isc0JBQWxCO0FBQ0FELElBQUFBLE1BQU0sQ0FBQ0csUUFBUCxHQUFrQixJQUFJTSxxQkFBSixDQUFpQlQsTUFBTSxDQUFDRyxRQUF4QixFQUFrQyxLQUFLTyxJQUFMLENBQVVDLFVBQTVDLEVBQ2ZDLHFCQURlLEVBQWxCO0FBRUQ7O0FBQ0QsU0FBTyxNQUFNLEtBQUtOLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFtQyxXQUFVUixNQUFNLENBQUNhLFFBQVAsR0FBa0IsR0FBbEIsR0FBd0IsRUFBRyxFQUF4RSxFQUEyRSxNQUEzRSxFQUFtRmIsTUFBbkYsQ0FBYjtBQUNELENBZkQ7O2VBa0JlTCxPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENzc0NvbnZlcnRlciBmcm9tICcuLi9jc3MtY29udmVydGVyJztcblxuY29uc3QgaGVscGVycyA9IHt9O1xuXG4vLyB3ZSBvdmVycmlkZSB0aGUgeHBhdGggc2VhcmNoIGZvciB0aGlzIGZpcnN0LXZpc2libGUtY2hpbGQgc2VsZWN0b3IsIHdoaWNoXG4vLyBsb29rcyBsaWtlIC8qW0BmaXJzdFZpc2libGU9XCJ0cnVlXCJdXG5jb25zdCBNQUdJQ19GSVJTVF9WSVNfQ0hJTERfU0VMID0gL1xcL1xcKlxcW0BmaXJzdFZpc2libGUgPz0gPygnfFwiKXRydWVcXDFcXF0vO1xuXG5jb25zdCBNQUdJQ19TQ1JPTExBQkxFX1NFTCA9IC9cXC9cXC9cXCpcXFtAc2Nyb2xsYWJsZSA/PSA/KCd8XCIpdHJ1ZVxcMVxcXS87XG5jb25zdCBNQUdJQ19TQ1JPTExBQkxFX0JZID0gJ25ldyBVaVNlbGVjdG9yKCkuc2Nyb2xsYWJsZSh0cnVlKSc7XG5cbi8qKlxuICogT3ZlcnJpZGluZyBoZWxwZXJzLmRvRmluZEVsZW1lbnRPckVscyBmdW5jdGlvbmFsaXR5IG9mIGFwcGl1bS1hbmRyb2lkLWRyaXZlcixcbiAqIHRoaXMuZWxlbWVudCBpbml0aWFsaXplZCBpbiBmaW5kLmpzIG9mIGFwcGl1bS1hbmRyb2lkLWRyaXZlLlxuICovXG5oZWxwZXJzLmRvRmluZEVsZW1lbnRPckVscyA9IGFzeW5jIGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgaWYgKHBhcmFtcy5zdHJhdGVneSA9PT0gJ3hwYXRoJyAmJiBNQUdJQ19GSVJTVF9WSVNfQ0hJTERfU0VMLnRlc3QocGFyYW1zLnNlbGVjdG9yKSkge1xuICAgIGxldCBlbGVtZW50SWQgPSBwYXJhbXMuY29udGV4dDtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2VsZW1lbnQvJHtlbGVtZW50SWR9L2ZpcnN0X3Zpc2libGVgLCAnR0VUJywge30pO1xuICB9XG4gIGlmIChwYXJhbXMuc3RyYXRlZ3kgPT09ICd4cGF0aCcgJiYgTUFHSUNfU0NST0xMQUJMRV9TRUwudGVzdChwYXJhbXMuc2VsZWN0b3IpKSB7XG4gICAgcGFyYW1zLnN0cmF0ZWd5ID0gJy1hbmRyb2lkIHVpYXV0b21hdG9yJztcbiAgICBwYXJhbXMuc2VsZWN0b3IgPSBNQUdJQ19TQ1JPTExBQkxFX0JZO1xuICB9XG4gIGlmIChwYXJhbXMuc3RyYXRlZ3kgPT09ICdjc3Mgc2VsZWN0b3InKSB7XG4gICAgcGFyYW1zLnN0cmF0ZWd5ID0gJy1hbmRyb2lkIHVpYXV0b21hdG9yJztcbiAgICBwYXJhbXMuc2VsZWN0b3IgPSBuZXcgQ3NzQ29udmVydGVyKHBhcmFtcy5zZWxlY3RvciwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpXG4gICAgICAudG9VaUF1dG9tYXRvclNlbGVjdG9yKCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQke3BhcmFtcy5tdWx0aXBsZSA/ICdzJyA6ICcnfWAsICdQT1NUJywgcGFyYW1zKTtcbn07XG5cbmV4cG9ydCB7IGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGhlbHBlcnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9maW5kLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -15,9 +15,9 @@ var _logger = _interopRequireDefault(require("../logger"));
15
15
 
16
16
  var _bluebird = _interopRequireDefault(require("bluebird"));
17
17
 
18
- var _appiumBaseDriver = require("appium-base-driver");
18
+ var _baseDriver = require("@appium/base-driver");
19
19
 
20
- var _appiumSupport = require("appium-support");
20
+ var _support = require("@appium/support");
21
21
 
22
22
  var _extensions = require("../extensions");
23
23
 
@@ -73,7 +73,7 @@ commands.getStrings = async function (language) {
73
73
  }
74
74
 
75
75
  let app = this.opts.app;
76
- const tmpRoot = await _appiumSupport.tempDir.openDir();
76
+ const tmpRoot = await _support.tempDir.openDir();
77
77
 
78
78
  try {
79
79
  if (!app) {
@@ -84,7 +84,7 @@ commands.getStrings = async function (language) {
84
84
  }
85
85
  }
86
86
 
87
- if (!(await _appiumSupport.fs.exists(app))) {
87
+ if (!(await _support.fs.exists(app))) {
88
88
  _logger.default.errorAndThrow(`The app at '${app}' does not exist`);
89
89
  }
90
90
 
@@ -98,7 +98,7 @@ commands.getStrings = async function (language) {
98
98
  _logger.default.errorAndThrow(`Cannot extract strings from '${app}'. Original error: ${err.message}`);
99
99
  }
100
100
  } finally {
101
- await _appiumSupport.fs.rimraf(tmpRoot);
101
+ await _support.fs.rimraf(tmpRoot);
102
102
  }
103
103
  };
104
104
 
@@ -165,11 +165,12 @@ extensions.executeMobile = async function (mobileCommand, opts = {}) {
165
165
  broadcast: 'mobileBroadcast',
166
166
  getContexts: 'mobileGetContexts',
167
167
  installMultipleApks: 'mobileInstallMultipleApks',
168
- unlock: 'mobileUnlock'
168
+ unlock: 'mobileUnlock',
169
+ refreshGpsCache: 'mobileRefreshGpsCache'
169
170
  };
170
171
 
171
172
  if (!_lodash.default.has(mobileCommandsMapping, mobileCommand)) {
172
- throw new _appiumBaseDriver.errors.UnknownCommandError(`Unknown mobile command "${mobileCommand}". ` + `Only ${_lodash.default.keys(mobileCommandsMapping)} commands are supported.`);
173
+ throw new _baseDriver.errors.UnknownCommandError(`Unknown mobile command "${mobileCommand}". ` + `Only ${_lodash.default.keys(mobileCommandsMapping)} commands are supported.`);
173
174
  }
174
175
 
175
176
  return await this[mobileCommandsMapping[mobileCommand]](opts);
@@ -207,7 +208,7 @@ commands.updateSettings = async function (settings) {
207
208
  let serverSettings = {};
208
209
 
209
210
  for (let [setting, value] of _lodash.default.toPairs(settings)) {
210
- if (_appiumBaseDriver.BASEDRIVER_HANDLED_SETTINGS.includes(setting)) {
211
+ if (_baseDriver.BASEDRIVER_HANDLED_SETTINGS.includes(setting)) {
211
212
  driverOnlySettings[setting] = value;
212
213
  } else {
213
214
  serverSettings[setting] = value;
@@ -266,7 +267,7 @@ commands.mobileType = async function mobileType(opts = {}) {
266
267
 
267
268
  commands.mobileInstallMultipleApks = async function (opts = {}) {
268
269
  if (!_lodash.default.isArray(opts.apks) || _lodash.default.isEmpty(opts.apks)) {
269
- throw new _appiumBaseDriver.errors.InvalidArgumentError('No apks are given to install');
270
+ throw new _baseDriver.errors.InvalidArgumentError('No apks are given to install');
270
271
  }
271
272
 
272
273
  const apks = await _bluebird.default.all(opts.apks.map(app => this.helpers.configureApp(app, [_extensions.APK_EXTENSION])));
@@ -278,4 +279,4 @@ var _default = extensions;
278
279
  exports.default = _default;require('source-map-support').install();
279
280
 
280
281
 
281
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIl0sIm5hbWVzIjpbImV4dGVuc2lvbnMiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJnZXRQYWdlU291cmNlIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJnZXRDbGlwYm9hcmQiLCJhZGIiLCJnZXRBcGlMZXZlbCIsImRvU2VuZEtleXMiLCJwYXJhbXMiLCJrZXlldmVudCIsImtleWNvZGUiLCJtZXRhc3RhdGUiLCJsb2ciLCJkZWJ1ZyIsImJhY2siLCJnZXRTdHJpbmdzIiwibGFuZ3VhZ2UiLCJnZXREZXZpY2VMYW5ndWFnZSIsImluZm8iLCJwcmVwcm9jZXNzU3RyaW5nc01hcCIsIm1hcHBpbmciLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsIl8iLCJ0b1BhaXJzIiwiaXNTdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiYXBrU3RyaW5ncyIsIm9wdHMiLCJhcHAiLCJhcHBQYWNrYWdlIiwiZXJyb3JBbmRUaHJvdyIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInB1bGxBcGsiLCJlcnIiLCJtZXNzYWdlIiwiZnMiLCJleGlzdHMiLCJleHRyYWN0U3RyaW5nc0Zyb21BcGsiLCJyaW1yYWYiLCJnZXREaXNwbGF5RGVuc2l0eSIsImdldFdpbmRvd1NpemUiLCJnZXRXaW5kb3dSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJ4IiwieSIsImV4ZWN1dGVNb2JpbGUiLCJtb2JpbGVDb21tYW5kIiwibW9iaWxlQ29tbWFuZHNNYXBwaW5nIiwic2hlbGwiLCJleGVjRW11Q29uc29sZUNvbW1hbmQiLCJkcmFnR2VzdHVyZSIsImZsaW5nR2VzdHVyZSIsImRvdWJsZUNsaWNrR2VzdHVyZSIsImNsaWNrR2VzdHVyZSIsImxvbmdDbGlja0dlc3R1cmUiLCJwaW5jaENsb3NlR2VzdHVyZSIsInBpbmNoT3Blbkdlc3R1cmUiLCJzd2lwZUdlc3R1cmUiLCJzY3JvbGxHZXN0dXJlIiwic2Nyb2xsQmFja1RvIiwic2Nyb2xsIiwidmlld3BvcnRTY3JlZW5zaG90Iiwidmlld3BvcnRSZWN0IiwiZGVlcExpbmsiLCJzdGFydExvZ3NCcm9hZGNhc3QiLCJzdG9wTG9nc0Jyb2FkY2FzdCIsImFjY2VwdEFsZXJ0IiwiZGlzbWlzc0FsZXJ0IiwiYmF0dGVyeUluZm8iLCJkZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVGltZSIsImNoYW5nZVBlcm1pc3Npb25zIiwiZ2V0UGVybWlzc2lvbnMiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwic3RhcnRTY3JlZW5TdHJlYW1pbmciLCJzdG9wU2NyZWVuU3RyZWFtaW5nIiwiZ2V0Tm90aWZpY2F0aW9ucyIsImxpc3RTbXMiLCJ0eXBlIiwic2Vuc29yU2V0IiwiZGVsZXRlRmlsZSIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsTXVsdGlwbGVBcGtzIiwidW5sb2NrIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QiLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJtb2JpbGVWaWV3UG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJzZXRVcmwiLCJ1cmwiLCJzdGFydFVyaSIsIm1vYmlsZURlZXBMaW5rIiwicGFja2FnZSIsInBrZyIsIndhaXRGb3JMYXVuY2giLCJvcGVuTm90aWZpY2F0aW9ucyIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJkcml2ZXJPbmx5U2V0dGluZ3MiLCJzZXJ2ZXJTZXR0aW5ncyIsInNldHRpbmciLCJCQVNFRFJJVkVSX0hBTkRMRURfU0VUVElOR1MiLCJpbmNsdWRlcyIsImlzRW1wdHkiLCJ1cGRhdGUiLCJnZXRTZXR0aW5ncyIsIndyYXBCb290c3RyYXBEaXNjb25uZWN0Iiwid3JhcHBlZCIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwiYmluZCIsInByb3h5Q29tbWFuZCIsImp3cFByb3h5QWN0aXZlIiwibW9iaWxlR2V0RGV2aWNlSW5mbyIsIm1vYmlsZVR5cGUiLCJ0ZXh0IiwiaXNVbmRlZmluZWQiLCJ0eXBlVW5pY29kZSIsIm1vYmlsZUluc3RhbGxNdWx0aXBsZUFwa3MiLCJpc0FycmF5IiwiYXBrcyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiQiIsImFsbCIsIm1hcCIsImNvbmZpZ3VyZUFwcCIsIkFQS19FWFRFTlNJT04iLCJvcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFVBQVUsR0FBRyxFQUFqQjtBQUFBLElBQ0lDLFFBQVEsR0FBRyxFQURmO0FBQUEsSUFFSUMsT0FBTyxHQUFHLEVBRmQ7O0FBSUFELFFBQVEsQ0FBQ0UsYUFBVCxHQUF5QixrQkFBa0I7QUFDekMsU0FBTyxNQUFNLEtBQUtDLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxTQUFsQyxFQUE2QyxLQUE3QyxFQUFvRCxFQUFwRCxDQUFiO0FBQ0QsQ0FGRDs7QUFJQUwsUUFBUSxDQUFDTSxZQUFULEdBQXdCLGtCQUFrQjtBQUN4QyxTQUFRLE9BQU0sS0FBS0MsR0FBTCxDQUFTQyxXQUFULEVBQU4sSUFBK0IsRUFBaEMsR0FDRixNQUFNLEtBQUtMLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyw4QkFBbEMsRUFBa0UsTUFBbEUsRUFBMEUsRUFBMUUsQ0FESixHQUVGLE1BQU0sS0FBS0UsR0FBTCxDQUFTRCxZQUFULEVBRlg7QUFHRCxDQUpEOztBQU9BTixRQUFRLENBQUNTLFVBQVQsR0FBc0IsZ0JBQWdCQyxNQUFoQixFQUF3QjtBQUM1QyxRQUFNLEtBQUtQLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxPQUFsQyxFQUEyQyxNQUEzQyxFQUFt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Y2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzLCBCQVNFRFJJVkVSX0hBTkRMRURfU0VUVElOR1MgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyBBUEtfRVhURU5TSU9OIH0gZnJvbSAnLi4vZXh0ZW5zaW9ucyc7XG5cbmxldCBleHRlbnNpb25zID0ge30sXG4gICAgY29tbWFuZHMgPSB7fSxcbiAgICBoZWxwZXJzID0ge307XG5cbmNvbW1hbmRzLmdldFBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9zb3VyY2UnLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCAyOSlcbiAgICA/IChhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnLCAnUE9TVCcsIHt9KSlcbiAgICA6IChhd2FpdCB0aGlzLmFkYi5nZXRDbGlwYm9hcmQoKSk7XG59O1xuXG4vLyBOZWVkIHRvIG92ZXJyaWRlIHRoaXMgZm9yIGNvcnJlY3QgdW5pY29kZSBzdXBwb3J0XG5jb21tYW5kcy5kb1NlbmRLZXlzID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9rZXlzJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuLy8gdWlhdXRvbWF0b3IyIGRvZXNuJ3Qgc3VwcG9ydCBtZXRhc3RhdGUgZm9yIGtleWV2ZW50c1xuY29tbWFuZHMua2V5ZXZlbnQgPSBhc3luYyBmdW5jdGlvbiAoa2V5Y29kZSwgbWV0YXN0YXRlKSB7XG4gIGxvZy5kZWJ1ZyhgSWdub3JpbmcgbWV0YXN0YXRlICR7bWV0YXN0YXRlfWApO1xuICBhd2FpdCB0aGlzLmFkYi5rZXlldmVudChrZXljb2RlKTtcbn07XG5cbi8vIFVzZSBBREIgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBVaUF1dG9tYXRvclxuY29tbWFuZHMuYmFjayA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoNCk7XG59O1xuXG5jb21tYW5kcy5nZXRTdHJpbmdzID0gYXN5bmMgZnVuY3Rpb24gKGxhbmd1YWdlKSB7XG4gIGlmICghbGFuZ3VhZ2UpIHtcbiAgICBsYW5ndWFnZSA9IGF3YWl0IHRoaXMuYWRiLmdldERldmljZUxhbmd1YWdlKCk7XG4gICAgbG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIGlmICghdGhpcy5vcHRzLmFwcCAmJiAhdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhcIk9uZSBvZiAnYXBwJyBvciAnYXBwUGFja2FnZScgY2FwYWJpbGl0aWVzIHNob3VsZCBtdXN0IGJlIHNwZWNpZmllZFwiKTtcbiAgfVxuXG4gIGxldCBhcHAgPSB0aGlzLm9wdHMuYXBwO1xuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIHRyeSB7XG4gICAgaWYgKCFhcHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFwcCA9IGF3YWl0IHRoaXMuYWRiLnB1bGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UsIHRtcFJvb3QpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBGYWlsZWQgdG8gcHVsbCBhbiBhcGsgZnJvbSAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhhcHApKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcCBhdCAnJHthcHB9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7YXBrU3RyaW5nc30gPSBhd2FpdCB0aGlzLmFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgdG1wUm9vdCk7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdID0gYXBrU3RyaW5ncztcbiAgICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcChhcGtTdHJpbmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZXh0cmFjdCBzdHJpbmdzIGZyb20gJyR7YXBwfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknLCAnR0VUJywge30pO1xufTtcblxuLy8gbWVtb2l6ZWQgaW4gY29uc3RydWN0b3JcbmNvbW1hbmRzLmdldFdpbmRvd1NpemUgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy93aW5kb3cvY3VycmVudC9zaXplJywgJ0dFVCcsIHt9KTtcbn07XG5cbi8vIEZvciBXM0NcbmNvbW1hbmRzLmdldFdpbmRvd1JlY3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gIH07XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG1vYmlsZUNvbW1hbmRzTWFwcGluZyA9IHtcbiAgICBzaGVsbDogJ21vYmlsZVNoZWxsJyxcblxuICAgIGV4ZWNFbXVDb25zb2xlQ29tbWFuZDogJ21vYmlsZUV4ZWNFbXVDb25zb2xlQ29tbWFuZCcsXG5cbiAgICBkcmFnR2VzdHVyZTogJ21vYmlsZURyYWdHZXN0dXJlJyxcbiAgICBmbGluZ0dlc3R1cmU6ICdtb2JpbGVGbGluZ0dlc3R1cmUnLFxuICAgIGRvdWJsZUNsaWNrR2VzdHVyZTogJ21vYmlsZURvdWJsZUNsaWNrR2VzdHVyZScsXG4gICAgY2xpY2tHZXN0dXJlOiAnbW9iaWxlQ2xpY2tHZXN0dXJlJyxcbiAgICBsb25nQ2xpY2tHZXN0dXJlOiAnbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZScsXG4gICAgcGluY2hDbG9zZUdlc3R1cmU6ICdtb2JpbGVQaW5jaENsb3NlR2VzdHVyZScsXG4gICAgcGluY2hPcGVuR2VzdHVyZTogJ21vYmlsZVBpbmNoT3Blbkdlc3R1cmUnLFxuICAgIHN3aXBlR2VzdHVyZTogJ21vYmlsZVN3aXBlR2VzdHVyZScsXG4gICAgc2Nyb2xsR2VzdHVyZTogJ21vYmlsZVNjcm9sbEdlc3R1cmUnLFxuICAgIHNjcm9sbEJhY2tUbzogJ21vYmlsZVNjcm9sbEJhY2tUbycsXG4gICAgc2Nyb2xsOiAnbW9iaWxlU2Nyb2xsJyxcbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ21vYmlsZVZpZXdQb3J0UmVjdCcsXG5cbiAgICBkZWVwTGluazogJ21vYmlsZURlZXBMaW5rJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBhY2NlcHRBbGVydDogJ21vYmlsZUFjY2VwdEFsZXJ0JyxcbiAgICBkaXNtaXNzQWxlcnQ6ICdtb2JpbGVEaXNtaXNzQWxlcnQnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG5cbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBjaGFuZ2VQZXJtaXNzaW9uczogJ21vYmlsZUNoYW5nZVBlcm1pc3Npb25zJyxcbiAgICBnZXRQZXJtaXNzaW9uczogJ21vYmlsZUdldFBlcm1pc3Npb25zJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIHR5cGU6ICdtb2JpbGVUeXBlJyxcbiAgICBzZW5zb3JTZXQ6ICdzZW5zb3JTZXQnLFxuXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWN0YW5nbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIFJlY3RhbmdsZS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICogQHJldHVybnMge1JlY3RhbmdsZX0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVWaWV3UG9ydFJlY3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbn07XG5cbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJsLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlZXBMaW5rT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSB1cmwgLSBUaGUgbmFtZSBvZiBVUkwgdG8gc3RhcnQuXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdGFydCB0aGUgVVJJIHdpdGguXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgVVJMIHRoYXQgdGFrZSB1c2VycyBkaXJlY3RseSB0byBzcGVjaWZpYyBjb250ZW50IGluIHRoZSBhcHBcbiAqIEBwYXJhbSB7RGVlcExpbmtPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlZXBMaW5rID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIHBhY2thZ2U6IHBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgcGtnLCB7IHdhaXRGb3JMYXVuY2ggfSk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJywgJ1BPU1QnLCB7fSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICAvLyB3ZSBoYXZlIHNvbWUgc2V0dGluZ3MgdGhhdCBhcmUgc2V0IG9uIHRoZSBzZXR0aW5ncyBvYmplY3QgaW4gdGhlIGRyaXZlclxuICAvLyBvbmx5LCBmb3IgZXhhbXBsZSBpbWFnZSBmaW5kaW5nIHNldHRpbmdzLiBUaGUgdWlhdXRvMiBzZXJ2ZXIgZG9lcyBub3Qga25vd1xuICAvLyB3aGF0IHRvIGRvIHdpdGggdGhlbSwgc28ganVzdCBzZXQgdGhlbSBvbiB0aGlzIGRyaXZlcidzIHNldHRpbmdzIGluc3RhbmNlLFxuICAvLyBhbmQgZG9uJ3QgZm9yd2FyZCB0aGVtIHRvIHRoZSBzZXJ2ZXJcbiAgbGV0IGRyaXZlck9ubHlTZXR0aW5ncyA9IHt9O1xuICBsZXQgc2VydmVyU2V0dGluZ3MgPSB7fTtcbiAgZm9yIChsZXQgW3NldHRpbmcsIHZhbHVlXSBvZiBfLnRvUGFpcnMoc2V0dGluZ3MpKSB7XG4gICAgaWYgKEJBU0VEUklWRVJfSEFORExFRF9TRVRUSU5HUy5pbmNsdWRlcyhzZXR0aW5nKSkge1xuICAgICAgZHJpdmVyT25seVNldHRpbmdzW3NldHRpbmddID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlcnZlclNldHRpbmdzW3NldHRpbmddID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIGlmICghXy5pc0VtcHR5KGRyaXZlck9ubHlTZXR0aW5ncykpIHtcbiAgICBsb2cuaW5mbyhgRm91bmQgc29tZSBzZXR0aW5ncyBkZXNpZ25lZCB0byBiZSBoYW5kbGVkIGJ5IEJhc2VEcml2ZXI6IGAgK1xuICAgICAgICAgICAgIGAke0pTT04uc3RyaW5naWZ5KF8ua2V5cyhkcml2ZXJPbmx5U2V0dGluZ3MpKX0uIE5vdCBgICtcbiAgICAgICAgICAgICBgc2VuZGluZyB0aGVzZSBvbiB0byB0aGUgVWlBdXRvbWF0b3IyIHNlcnZlciBhbmQgaW5zdGVhZCBgICtcbiAgICAgICAgICAgICBgc2V0dGluZyBkaXJlY3RseSBvbiB0aGUgZHJpdmVyYCk7XG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy51cGRhdGUoZHJpdmVyT25seVNldHRpbmdzKTtcbiAgfVxuICBpZiAoIV8uaXNFbXB0eShzZXJ2ZXJTZXR0aW5ncykpIHtcbiAgICBsb2cuaW5mbygnRm9yd2FyZGluZyB0aGUgZm9sbG93aW5nIHNldHRpbmdzIHRvIHRoZSBVaUF1dG9tYXRvcjIgc2VydmVyOiAnICtcbiAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShfLmtleXMoc2VydmVyU2V0dGluZ3MpKSk7XG4gICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ1BPU1QnLFxuICAgICAge3NldHRpbmdzOiBzZXJ2ZXJTZXR0aW5nc30pO1xuICB9XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgLy8gYXMgYWJvdmUsIHdlIG1pZ2h0IGhhdmUgc29tZSBkcml2ZXItb25seSBzZXR0aW5ncyB0byByZXR1cm4gYXMgd2VsbFxuICBjb25zdCBkcml2ZXJPbmx5U2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IHNlcnZlclNldHRpbmdzID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICByZXR1cm4gey4uLmRyaXZlck9ubHlTZXR0aW5ncywgLi4uc2VydmVyU2V0dGluZ3N9O1xufTtcblxuLyoqXG4gKiBPdmVycmlkaW5nIGFwcGl1bS1hbmRyb2lkLWRyaXZlcidzIHdyYXBCb290c3RyYXBEaXNjb25uZWN0LFxuICogdW5saWtlIGluIGFwcGl1bS1hbmRyb2lkLWRyaXZlciBhdm9pZGluZyBhZGIgcmVzdGFydGluZyBhcyBpdCBpbnRlcm5cbiAqIGtpbGxzIFVpQXV0b21hdG9yMiBzZXJ2ZXIgcnVubmluZyBpbiB0aGUgZGV2aWNlLlxuICoqL1xuaGVscGVycy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdCA9IGFzeW5jIGZ1bmN0aW9uICh3cmFwcGVkKSB7XG4gIGF3YWl0IHdyYXBwZWQoKTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlciBhbmQgcmVkaXJlY3QgdG8gdWlhdXRvbWF0b3IyXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlSZXFSZXMuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlDb21tYW5kLmJpbmQodGhpcy51aWF1dG9tYXRvcjIpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGluZm8gZW50cmllcyBjYW4gYmUgZm91bmQgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLXVpYXV0b21hdG9yMi1zZXJ2ZXIvYmxvYi9tYXN0ZXIvYXBwL3NyYy9tYWluL2phdmEvaW8vYXBwaXVtL3VpYXV0b21hdG9yMi9oYW5kbGVyL0dldERldmljZUluZm8uamF2YVxuICovXG5jb21tYW5kcy5tb2JpbGVHZXREZXZpY2VJbmZvID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9pbmZvJywgJ0dFVCcpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUeXBpbmdPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd8bnVtYmVyfGJvb2xlYW59IHRleHQgLSBUaGUgdGV4dCB0byB0eXBlXG4gKi9cblxuLyoqXG4gKiBUeXBlcyB0aGUgZ2l2ZW4gVW5pY29kZSBzdHJpbmcuXG4gKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBmb2N1cyBpcyBhbHJlYWR5IHB1dFxuICogdG8gdGhlIGRlc3RpbmF0aW9uIGlucHV0IGZpZWxkIGJlZm9yZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuXG4gKlxuICogQHBhcmFtIHtUeXBpbmdPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnB1dCB0ZXh0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZW50IHRvIGFkYlxuICogQHRocm93cyB7RXJyb3J9IGlmIGB0ZXh0YCBwcm9wZXJ0eSBoYXMgbm90IGJlZW4gcHJvdmlkZWRcbiAqL1xuY29tbWFuZHMubW9iaWxlVHlwZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVR5cGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGV4dCxcbiAgfSA9IG9wdHM7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHRleHQpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYFRoZSAndGV4dCcgYXJndW1lbnQgaXMgbWFuZGF0b3J5YCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnR5cGVVbmljb2RlKHRleHQpO1xufTtcblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwbGFjZSBbdHJ1ZV0gLSBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gYmUgdXBncmFkZWQvcmVpbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGRldmljZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFydGlhbEluc3RhbGwgW2ZhbHNlXSAtIEluc3RhbGwgYXBrcyBwYXJ0aWFsbHkuIEl0IGlzIHVzZWQgZm9yICdpbnN0YWxsLW11bHRpcGxlJy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9hbmRyb2lkLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xMTEwNjQvd2hhdC1pcy1hLXBhcnRpYWwtYXBwbGljYXRpb24taW5zdGFsbC12aWEtYWRiXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsTXVsdGlwbGVBcGtzT3B0aW9uc1xuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSBhcGtzIC0gVGhlIGxpc3Qgb2YgQVBLcyB0byBpbnN0YWxsLiBFYWNoIEFQSyBzaG91bGQgYmUgYSBwYXRoIHRvIGEgYXBrXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBkb3dubG9hZGFibGUgVVJMIGFzIEhUVFAvSFRUUFMuXG4gKiBAcHJvcGVydHkge0luc3RhbGxPcHRpb25zfSBvcHRpb25zXG4gKi9cblxuLyoqXG4gKiBJbnN0YWxsIG11bHRpcGxlIEFQS3Mgd2l0aCBgaW5zdGFsbC1tdWx0aXBsZWAgb3B0aW9uLlxuICpcbiAqIEBwYXJhbSB7SW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBhbiBlcnJvciBvY2N1cmVkIHdoaWxlIGluc3RhbGxpbmcgdGhlIGdpdmVuIEFQS3MuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUluc3RhbGxNdWx0aXBsZUFwa3MgPSBhc3luYyBmdW5jdGlvbiAob3B0cyA9IHt9KSB7XG4gIGlmICghXy5pc0FycmF5KG9wdHMuYXBrcykgfHwgXy5pc0VtcHR5KG9wdHMuYXBrcykpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdObyBhcGtzIGFyZSBnaXZlbiB0byBpbnN0YWxsJyk7XG4gIH1cbiAgY29uc3QgYXBrcyA9IGF3YWl0IEIuYWxsKG9wdHMuYXBrc1xuICAgIC5tYXAoKGFwcCkgPT4gdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHAsIFtBUEtfRVhURU5TSU9OXSkpKTtcbiAgYXdhaXQgdGhpcy5hZGIuaW5zdGFsbE11bHRpcGxlQXBrcyhhcGtzLCBvcHRzLm9wdGlvbnMpO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
282
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIl0sIm5hbWVzIjpbImV4dGVuc2lvbnMiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJnZXRQYWdlU291cmNlIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJnZXRDbGlwYm9hcmQiLCJhZGIiLCJnZXRBcGlMZXZlbCIsImRvU2VuZEtleXMiLCJwYXJhbXMiLCJrZXlldmVudCIsImtleWNvZGUiLCJtZXRhc3RhdGUiLCJsb2ciLCJkZWJ1ZyIsImJhY2siLCJnZXRTdHJpbmdzIiwibGFuZ3VhZ2UiLCJnZXREZXZpY2VMYW5ndWFnZSIsImluZm8iLCJwcmVwcm9jZXNzU3RyaW5nc01hcCIsIm1hcHBpbmciLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsIl8iLCJ0b1BhaXJzIiwiaXNTdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiYXBrU3RyaW5ncyIsIm9wdHMiLCJhcHAiLCJhcHBQYWNrYWdlIiwiZXJyb3JBbmRUaHJvdyIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInB1bGxBcGsiLCJlcnIiLCJtZXNzYWdlIiwiZnMiLCJleGlzdHMiLCJleHRyYWN0U3RyaW5nc0Zyb21BcGsiLCJyaW1yYWYiLCJnZXREaXNwbGF5RGVuc2l0eSIsImdldFdpbmRvd1NpemUiLCJnZXRXaW5kb3dSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJ4IiwieSIsImV4ZWN1dGVNb2JpbGUiLCJtb2JpbGVDb21tYW5kIiwibW9iaWxlQ29tbWFuZHNNYXBwaW5nIiwic2hlbGwiLCJleGVjRW11Q29uc29sZUNvbW1hbmQiLCJkcmFnR2VzdHVyZSIsImZsaW5nR2VzdHVyZSIsImRvdWJsZUNsaWNrR2VzdHVyZSIsImNsaWNrR2VzdHVyZSIsImxvbmdDbGlja0dlc3R1cmUiLCJwaW5jaENsb3NlR2VzdHVyZSIsInBpbmNoT3Blbkdlc3R1cmUiLCJzd2lwZUdlc3R1cmUiLCJzY3JvbGxHZXN0dXJlIiwic2Nyb2xsQmFja1RvIiwic2Nyb2xsIiwidmlld3BvcnRTY3JlZW5zaG90Iiwidmlld3BvcnRSZWN0IiwiZGVlcExpbmsiLCJzdGFydExvZ3NCcm9hZGNhc3QiLCJzdG9wTG9nc0Jyb2FkY2FzdCIsImFjY2VwdEFsZXJ0IiwiZGlzbWlzc0FsZXJ0IiwiYmF0dGVyeUluZm8iLCJkZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVGltZSIsImNoYW5nZVBlcm1pc3Npb25zIiwiZ2V0UGVybWlzc2lvbnMiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwic3RhcnRTY3JlZW5TdHJlYW1pbmciLCJzdG9wU2NyZWVuU3RyZWFtaW5nIiwiZ2V0Tm90aWZpY2F0aW9ucyIsImxpc3RTbXMiLCJ0eXBlIiwic2Vuc29yU2V0IiwiZGVsZXRlRmlsZSIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsTXVsdGlwbGVBcGtzIiwidW5sb2NrIiwicmVmcmVzaEdwc0NhY2hlIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QiLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJtb2JpbGVWaWV3UG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJzZXRVcmwiLCJ1cmwiLCJzdGFydFVyaSIsIm1vYmlsZURlZXBMaW5rIiwicGFja2FnZSIsInBrZyIsIndhaXRGb3JMYXVuY2giLCJvcGVuTm90aWZpY2F0aW9ucyIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJkcml2ZXJPbmx5U2V0dGluZ3MiLCJzZXJ2ZXJTZXR0aW5ncyIsInNldHRpbmciLCJCQVNFRFJJVkVSX0hBTkRMRURfU0VUVElOR1MiLCJpbmNsdWRlcyIsImlzRW1wdHkiLCJ1cGRhdGUiLCJnZXRTZXR0aW5ncyIsIndyYXBCb290c3RyYXBEaXNjb25uZWN0Iiwid3JhcHBlZCIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwiYmluZCIsInByb3h5Q29tbWFuZCIsImp3cFByb3h5QWN0aXZlIiwibW9iaWxlR2V0RGV2aWNlSW5mbyIsIm1vYmlsZVR5cGUiLCJ0ZXh0IiwiaXNVbmRlZmluZWQiLCJ0eXBlVW5pY29kZSIsIm1vYmlsZUluc3RhbGxNdWx0aXBsZUFwa3MiLCJpc0FycmF5IiwiYXBrcyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiQiIsImFsbCIsIm1hcCIsImNvbmZpZ3VyZUFwcCIsIkFQS19FWFRFTlNJT04iLCJvcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFVBQVUsR0FBRyxFQUFqQjtBQUFBLElBQ0lDLFFBQVEsR0FBRyxFQURmO0FBQUEsSUFFSUMsT0FBTyxHQUFHLEVBRmQ7O0FBSUFELFFBQVEsQ0FBQ0UsYUFBVCxHQUF5QixrQkFBa0I7QUFDekMsU0FBTyxNQUFNLEtBQUtDLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxTQUFsQyxFQUE2QyxLQUE3QyxFQUFvRCxFQUFwRCxDQUFiO0FBQ0QsQ0FGRDs7QUFJQUwsUUFBUSxDQUFDTSxZQUFULEdBQXdCLGtCQUFrQjtBQUN4QyxTQUFRLE9BQU0sS0FBS0MsR0FBTCxDQUFTQyxXQUFULEVBQU4sSUFBK0IsRUFBaEMsR0FDRixNQUFNLEtBQUtMLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyw4QkFBbEMsRUFBa0UsTUFBbEUsRUFBMEUsRUFBMUUsQ0FESixHQUVGLE1BQU0sS0FBS0UsR0FBTCxDQUFTRCxZQUFULEVBRlg7QUFHRCxDQUpEOztBQU9BTixRQUFRLENBQUNTLFVBQVQsR0FBc0IsZ0JBQWdCQyxNQUFoQixFQUF3QjtBQUM1QyxRQUFNLEtBQUtQLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxPQUFs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LFVBQWQsRUFBMEJDLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlRixVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGVycm9ycywgQkFTRURSSVZFUl9IQU5ETEVEX1NFVFRJTkdTIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgdGVtcERpciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBBUEtfRVhURU5TSU9OIH0gZnJvbSAnLi4vZXh0ZW5zaW9ucyc7XG5cbmxldCBleHRlbnNpb25zID0ge30sXG4gICAgY29tbWFuZHMgPSB7fSxcbiAgICBoZWxwZXJzID0ge307XG5cbmNvbW1hbmRzLmdldFBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9zb3VyY2UnLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCAyOSlcbiAgICA/IChhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnLCAnUE9TVCcsIHt9KSlcbiAgICA6IChhd2FpdCB0aGlzLmFkYi5nZXRDbGlwYm9hcmQoKSk7XG59O1xuXG4vLyBOZWVkIHRvIG92ZXJyaWRlIHRoaXMgZm9yIGNvcnJlY3QgdW5pY29kZSBzdXBwb3J0XG5jb21tYW5kcy5kb1NlbmRLZXlzID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9rZXlzJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuLy8gdWlhdXRvbWF0b3IyIGRvZXNuJ3Qgc3VwcG9ydCBtZXRhc3RhdGUgZm9yIGtleWV2ZW50c1xuY29tbWFuZHMua2V5ZXZlbnQgPSBhc3luYyBmdW5jdGlvbiAoa2V5Y29kZSwgbWV0YXN0YXRlKSB7XG4gIGxvZy5kZWJ1ZyhgSWdub3JpbmcgbWV0YXN0YXRlICR7bWV0YXN0YXRlfWApO1xuICBhd2FpdCB0aGlzLmFkYi5rZXlldmVudChrZXljb2RlKTtcbn07XG5cbi8vIFVzZSBBREIgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBVaUF1dG9tYXRvclxuY29tbWFuZHMuYmFjayA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoNCk7XG59O1xuXG5jb21tYW5kcy5nZXRTdHJpbmdzID0gYXN5bmMgZnVuY3Rpb24gKGxhbmd1YWdlKSB7XG4gIGlmICghbGFuZ3VhZ2UpIHtcbiAgICBsYW5ndWFnZSA9IGF3YWl0IHRoaXMuYWRiLmdldERldmljZUxhbmd1YWdlKCk7XG4gICAgbG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIGlmICghdGhpcy5vcHRzLmFwcCAmJiAhdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhcIk9uZSBvZiAnYXBwJyBvciAnYXBwUGFja2FnZScgY2FwYWJpbGl0aWVzIHNob3VsZCBtdXN0IGJlIHNwZWNpZmllZFwiKTtcbiAgfVxuXG4gIGxldCBhcHAgPSB0aGlzLm9wdHMuYXBwO1xuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIHRyeSB7XG4gICAgaWYgKCFhcHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFwcCA9IGF3YWl0IHRoaXMuYWRiLnB1bGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UsIHRtcFJvb3QpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBGYWlsZWQgdG8gcHVsbCBhbiBhcGsgZnJvbSAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhhcHApKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcCBhdCAnJHthcHB9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7YXBrU3RyaW5nc30gPSBhd2FpdCB0aGlzLmFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgdG1wUm9vdCk7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdID0gYXBrU3RyaW5ncztcbiAgICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcChhcGtTdHJpbmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZXh0cmFjdCBzdHJpbmdzIGZyb20gJyR7YXBwfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknLCAnR0VUJywge30pO1xufTtcblxuLy8gbWVtb2l6ZWQgaW4gY29uc3RydWN0b3JcbmNvbW1hbmRzLmdldFdpbmRvd1NpemUgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy93aW5kb3cvY3VycmVudC9zaXplJywgJ0dFVCcsIHt9KTtcbn07XG5cbi8vIEZvciBXM0NcbmNvbW1hbmRzLmdldFdpbmRvd1JlY3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gIH07XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG1vYmlsZUNvbW1hbmRzTWFwcGluZyA9IHtcbiAgICBzaGVsbDogJ21vYmlsZVNoZWxsJyxcblxuICAgIGV4ZWNFbXVDb25zb2xlQ29tbWFuZDogJ21vYmlsZUV4ZWNFbXVDb25zb2xlQ29tbWFuZCcsXG5cbiAgICBkcmFnR2VzdHVyZTogJ21vYmlsZURyYWdHZXN0dXJlJyxcbiAgICBmbGluZ0dlc3R1cmU6ICdtb2JpbGVGbGluZ0dlc3R1cmUnLFxuICAgIGRvdWJsZUNsaWNrR2VzdHVyZTogJ21vYmlsZURvdWJsZUNsaWNrR2VzdHVyZScsXG4gICAgY2xpY2tHZXN0dXJlOiAnbW9iaWxlQ2xpY2tHZXN0dXJlJyxcbiAgICBsb25nQ2xpY2tHZXN0dXJlOiAnbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZScsXG4gICAgcGluY2hDbG9zZUdlc3R1cmU6ICdtb2JpbGVQaW5jaENsb3NlR2VzdHVyZScsXG4gICAgcGluY2hPcGVuR2VzdHVyZTogJ21vYmlsZVBpbmNoT3Blbkdlc3R1cmUnLFxuICAgIHN3aXBlR2VzdHVyZTogJ21vYmlsZVN3aXBlR2VzdHVyZScsXG4gICAgc2Nyb2xsR2VzdHVyZTogJ21vYmlsZVNjcm9sbEdlc3R1cmUnLFxuICAgIHNjcm9sbEJhY2tUbzogJ21vYmlsZVNjcm9sbEJhY2tUbycsXG4gICAgc2Nyb2xsOiAnbW9iaWxlU2Nyb2xsJyxcbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ21vYmlsZVZpZXdQb3J0UmVjdCcsXG5cbiAgICBkZWVwTGluazogJ21vYmlsZURlZXBMaW5rJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBhY2NlcHRBbGVydDogJ21vYmlsZUFjY2VwdEFsZXJ0JyxcbiAgICBkaXNtaXNzQWxlcnQ6ICdtb2JpbGVEaXNtaXNzQWxlcnQnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG5cbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBjaGFuZ2VQZXJtaXNzaW9uczogJ21vYmlsZUNoYW5nZVBlcm1pc3Npb25zJyxcbiAgICBnZXRQZXJtaXNzaW9uczogJ21vYmlsZUdldFBlcm1pc3Npb25zJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIHR5cGU6ICdtb2JpbGVUeXBlJyxcbiAgICBzZW5zb3JTZXQ6ICdzZW5zb3JTZXQnLFxuXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuXG4gICAgcmVmcmVzaEdwc0NhY2hlOiAnbW9iaWxlUmVmcmVzaEdwc0NhY2hlJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKG1vYmlsZUNvbW1hbmRzTWFwcGluZywgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgXCIke21vYmlsZUNvbW1hbmR9XCIuIGAgK1xuICAgICAgYE9ubHkgJHtfLmtleXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1ttb2JpbGVDb21tYW5kc01hcHBpbmdbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuY29tbWFuZHMubW9iaWxlVmlld3BvcnRTY3JlZW5zaG90ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3cG9ydFNjcmVlbnNob3QoKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUmVjdGFuZ2xlXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgLSBUaGUgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiBSZWN0YW5nbGUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiBSZWN0YW5nbGUuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2aWV3cG9ydCBjb29yZGluYXRlcy5cbiAqIEByZXR1cm5zIHtSZWN0YW5nbGV9IFRoZSB2aWV3cG9ydCBjb29yZGluYXRlcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlVmlld1BvcnRSZWN0ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVmlld1BvcnRSZWN0ICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0Vmlld1BvcnRSZWN0KCk7XG59O1xuXG5jb21tYW5kcy5zZXRVcmwgPSBhc3luYyBmdW5jdGlvbiAodXJsKSB7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEZWVwTGlua09wdHNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gdXJsIC0gVGhlIG5hbWUgb2YgVVJMIHRvIHN0YXJ0LlxuICogQHByb3BlcnR5IHshc3RyaW5nfSBwYWNrYWdlIC0gVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdG8gc3RhcnQgdGhlIFVSSSB3aXRoLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gd2FpdEZvckxhdW5jaCBbdHJ1ZV0gLSBpZiBgZmFsc2VgIHRoZW4gYWRiIHdvbid0IHdhaXRcbiAqIGZvciB0aGUgc3RhcnRlZCBhY3Rpdml0eSB0byByZXR1cm4gdGhlIGNvbnRyb2xcbiAqL1xuXG4vKipcbiAqIFN0YXJ0IFVSTCB0aGF0IHRha2UgdXNlcnMgZGlyZWN0bHkgdG8gc3BlY2lmaWMgY29udGVudCBpbiB0aGUgYXBwXG4gKiBAcGFyYW0ge0RlZXBMaW5rT3B0c30gb3B0c1xuICovXG5jb21tYW5kcy5tb2JpbGVEZWVwTGluayA9IGFzeW5jIGZ1bmN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHVybCxcbiAgICBwYWNrYWdlOiBwa2csXG4gICAgd2FpdEZvckxhdW5jaCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5zdGFydFVyaSh1cmwsIHBrZywgeyB3YWl0Rm9yTGF1bmNoIH0pO1xufTtcblxuY29tbWFuZHMub3Blbk5vdGlmaWNhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL29wZW5fbm90aWZpY2F0aW9ucycsICdQT1NUJywge30pO1xufTtcblxuY29tbWFuZHMudXBkYXRlU2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiAoc2V0dGluZ3MpIHtcbiAgLy8gd2UgaGF2ZSBzb21lIHNldHRpbmdzIHRoYXQgYXJlIHNldCBvbiB0aGUgc2V0dGluZ3Mgb2JqZWN0IGluIHRoZSBkcml2ZXJcbiAgLy8gb25seSwgZm9yIGV4YW1wbGUgaW1hZ2UgZmluZGluZyBzZXR0aW5ncy4gVGhlIHVpYXV0bzIgc2VydmVyIGRvZXMgbm90IGtub3dcbiAgLy8gd2hhdCB0byBkbyB3aXRoIHRoZW0sIHNvIGp1c3Qgc2V0IHRoZW0gb24gdGhpcyBkcml2ZXIncyBzZXR0aW5ncyBpbnN0YW5jZSxcbiAgLy8gYW5kIGRvbid0IGZvcndhcmQgdGhlbSB0byB0aGUgc2VydmVyXG4gIGxldCBkcml2ZXJPbmx5U2V0dGluZ3MgPSB7fTtcbiAgbGV0IHNlcnZlclNldHRpbmdzID0ge307XG4gIGZvciAobGV0IFtzZXR0aW5nLCB2YWx1ZV0gb2YgXy50b1BhaXJzKHNldHRpbmdzKSkge1xuICAgIGlmIChCQVNFRFJJVkVSX0hBTkRMRURfU0VUVElOR1MuaW5jbHVkZXMoc2V0dGluZykpIHtcbiAgICAgIGRyaXZlck9ubHlTZXR0aW5nc1tzZXR0aW5nXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXJ2ZXJTZXR0aW5nc1tzZXR0aW5nXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBpZiAoIV8uaXNFbXB0eShkcml2ZXJPbmx5U2V0dGluZ3MpKSB7XG4gICAgbG9nLmluZm8oYEZvdW5kIHNvbWUgc2V0dGluZ3MgZGVzaWduZWQgdG8gYmUgaGFuZGxlZCBieSBCYXNlRHJpdmVyOiBgICtcbiAgICAgICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShfLmtleXMoZHJpdmVyT25seVNldHRpbmdzKSl9LiBOb3QgYCArXG4gICAgICAgICAgICAgYHNlbmRpbmcgdGhlc2Ugb24gdG8gdGhlIFVpQXV0b21hdG9yMiBzZXJ2ZXIgYW5kIGluc3RlYWQgYCArXG4gICAgICAgICAgICAgYHNldHRpbmcgZGlyZWN0bHkgb24gdGhlIGRyaXZlcmApO1xuICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MudXBkYXRlKGRyaXZlck9ubHlTZXR0aW5ncyk7XG4gIH1cbiAgaWYgKCFfLmlzRW1wdHkoc2VydmVyU2V0dGluZ3MpKSB7XG4gICAgbG9nLmluZm8oJ0ZvcndhcmRpbmcgdGhlIGZvbGxvd2luZyBzZXR0aW5ncyB0byB0aGUgVWlBdXRvbWF0b3IyIHNlcnZlcjogJyArXG4gICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoXy5rZXlzKHNlcnZlclNldHRpbmdzKSkpO1xuICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJyxcbiAgICAgIHtzZXR0aW5nczogc2VydmVyU2V0dGluZ3N9KTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0U2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIC8vIGFzIGFib3ZlLCB3ZSBtaWdodCBoYXZlIHNvbWUgZHJpdmVyLW9ubHkgc2V0dGluZ3MgdG8gcmV0dXJuIGFzIHdlbGxcbiAgY29uc3QgZHJpdmVyT25seVNldHRpbmdzID0gdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpO1xuICBjb25zdCBzZXJ2ZXJTZXR0aW5ncyA9IGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdHRVQnKTtcbiAgcmV0dXJuIHsuLi5kcml2ZXJPbmx5U2V0dGluZ3MsIC4uLnNlcnZlclNldHRpbmdzfTtcbn07XG5cbi8qKlxuICogT3ZlcnJpZGluZyBhcHBpdW0tYW5kcm9pZC1kcml2ZXIncyB3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCxcbiAqIHVubGlrZSBpbiBhcHBpdW0tYW5kcm9pZC1kcml2ZXIgYXZvaWRpbmcgYWRiIHJlc3RhcnRpbmcgYXMgaXQgaW50ZXJuXG4gKiBraWxscyBVaUF1dG9tYXRvcjIgc2VydmVyIHJ1bm5pbmcgaW4gdGhlIGRldmljZS5cbiAqKi9cbmhlbHBlcnMud3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QgPSBhc3luYyBmdW5jdGlvbiAod3JhcHBlZCkge1xuICBhd2FpdCB3cmFwcGVkKCk7XG59O1xuXG4vLyBTdG9wIHByb3h5aW5nIHRvIGFueSBDaHJvbWVkcml2ZXIgYW5kIHJlZGlyZWN0IHRvIHVpYXV0b21hdG9yMlxuaGVscGVycy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMudWlhdXRvbWF0b3IyLnByb3h5UmVxUmVzLmJpbmQodGhpcy51aWF1dG9tYXRvcjIpO1xuICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMudWlhdXRvbWF0b3IyLnByb3h5Q29tbWFuZC5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcbiAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG59O1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBpbmZvIGVudHJpZXMgY2FuIGJlIGZvdW5kIGF0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS11aWF1dG9tYXRvcjItc2VydmVyL2Jsb2IvbWFzdGVyL2FwcC9zcmMvbWFpbi9qYXZhL2lvL2FwcGl1bS91aWF1dG9tYXRvcjIvaGFuZGxlci9HZXREZXZpY2VJbmZvLmphdmFcbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0RGV2aWNlSW5mbyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvaW5mbycsICdHRVQnKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVHlwaW5nT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfG51bWJlcnxib29sZWFufSB0ZXh0IC0gVGhlIHRleHQgdG8gdHlwZVxuICovXG5cbi8qKlxuICogVHlwZXMgdGhlIGdpdmVuIFVuaWNvZGUgc3RyaW5nLlxuICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZm9jdXMgaXMgYWxyZWFkeSBwdXRcbiAqIHRvIHRoZSBkZXN0aW5hdGlvbiBpbnB1dCBmaWVsZCBiZWZvcmUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLlxuICpcbiAqIEBwYXJhbSB7VHlwaW5nT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW5wdXQgdGV4dCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2VudCB0byBhZGJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBgdGV4dGAgcHJvcGVydHkgaGFzIG5vdCBiZWVuIHByb3ZpZGVkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVR5cGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUeXBlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRleHQsXG4gIH0gPSBvcHRzO1xuICBpZiAoXy5pc1VuZGVmaW5lZCh0ZXh0KSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgJ3RleHQnIGFyZ3VtZW50IGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi50eXBlVW5pY29kZSh0ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gYXBrcyAtIFRoZSBsaXN0IG9mIEFQS3MgdG8gaW5zdGFsbC4gRWFjaCBBUEsgc2hvdWxkIGJlIGEgcGF0aCB0byBhIGFwa1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZG93bmxvYWRhYmxlIFVSTCBhcyBIVFRQL0hUVFBTLlxuICogQHByb3BlcnR5IHtJbnN0YWxsT3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogSW5zdGFsbCBtdWx0aXBsZSBBUEtzIHdpdGggYGluc3RhbGwtbXVsdGlwbGVgIG9wdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBpbnN0YWxsaW5nIHRoZSBnaXZlbiBBUEtzLlxuICovXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBpZiAoIV8uaXNBcnJheShvcHRzLmFwa3MpIHx8IF8uaXNFbXB0eShvcHRzLmFwa3MpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignTm8gYXBrcyBhcmUgZ2l2ZW4gdG8gaW5zdGFsbCcpO1xuICB9XG4gIGNvbnN0IGFwa3MgPSBhd2FpdCBCLmFsbChvcHRzLmFwa3NcbiAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTl0pKSk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGxNdWx0aXBsZUFwa3MoYXBrcywgb3B0cy5vcHRpb25zKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvZ2VuZXJhbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9