appium-android-driver 5.8.6 → 5.8.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [5.8.7](https://github.com/appium/appium-android-driver/compare/v5.8.6...v5.8.7) (2023-01-12)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * specify supported non-standard commands in newMethodMap ([5514755](https://github.com/appium/appium-android-driver/commit/551475580f5b239860c3597d25f96682148a3bc5))
7
+
1
8
  ## [5.8.6](https://github.com/appium/appium-android-driver/compare/v5.8.5...v5.8.6) (2023-01-11)
2
9
 
3
10
 
package/build/index.js CHANGED
@@ -45,4 +45,4 @@ exports.SETTINGS_HELPER_PKG_ID = SETTINGS_HELPER_PKG_ID;
45
45
  exports.androidHelpers = androidHelpers;
46
46
  var _default = AndroidDriver;
47
47
  exports.default = _default;
48
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBbmRyb2lkRHJpdmVyIiwiZHJpdmVyIiwiaGVscGVycyIsIndlYnZpZXdIZWxwZXJzIiwiTkFUSVZFX1dJTiIsIldFQlZJRVdfV0lOIiwiV0VCVklFV19CQVNFIiwiQ0hST01JVU1fV0lOIiwid2VidmlldyIsImNvbW1vbkNhcENvbnN0cmFpbnRzIiwiY2FwcyIsImNvbW1hbmRzIiwiYW5kcm9pZENvbW1hbmRzIiwiY29tbWFuZEluZGV4IiwiYW5kcm9pZEhlbHBlcnMiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiYW5kcm9pZEhlbHBlckluZGV4Il0sInNvdXJjZXMiOlsiLi4vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLy8gdHJhbnNwaWxlOm1haW5cbmltcG9ydCAqIGFzIGRyaXZlciBmcm9tICcuL2xpYi9kcml2ZXInO1xuaW1wb3J0ICogYXMgYW5kcm9pZEhlbHBlckluZGV4IGZyb20gJy4vbGliL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgKiBhcyBjb21tYW5kSW5kZXggZnJvbSAnLi9saWIvY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0ICogYXMgd2VidmlldyBmcm9tICcuL2xpYi93ZWJ2aWV3LWhlbHBlcnMnO1xuaW1wb3J0ICogYXMgY2FwcyBmcm9tICcuL2xpYi9kZXNpcmVkLWNhcHMnO1xuXG5cbmNvbnN0IHsgQW5kcm9pZERyaXZlciB9ID0gZHJpdmVyO1xuY29uc3QgeyBoZWxwZXJzOiB3ZWJ2aWV3SGVscGVycywgTkFUSVZFX1dJTiwgV0VCVklFV19XSU4sIFdFQlZJRVdfQkFTRSxcbiAgICAgICAgQ0hST01JVU1fV0lOIH0gPSB3ZWJ2aWV3O1xuY29uc3QgeyBjb21tb25DYXBDb25zdHJhaW50cyB9ID0gY2FwcztcbmNvbnN0IHsgY29tbWFuZHM6IGFuZHJvaWRDb21tYW5kcyB9ID0gY29tbWFuZEluZGV4O1xuY29uc3QgeyBoZWxwZXJzOiBhbmRyb2lkSGVscGVycywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCB9ID0gYW5kcm9pZEhlbHBlckluZGV4O1xuXG5cbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWREcml2ZXI7XG5leHBvcnQge1xuICBhbmRyb2lkSGVscGVycywgYW5kcm9pZENvbW1hbmRzLCBBbmRyb2lkRHJpdmVyLFxuICBjb21tb25DYXBDb25zdHJhaW50cywgd2Vidmlld0hlbHBlcnMsIE5BVElWRV9XSU4sIFdFQlZJRVdfV0lOLFxuICBXRUJWSUVXX0JBU0UsIENIUk9NSVVNX1dJTiwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCxcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQW1COztBQUFBO0VBQUE7QUFBQTtBQUFBO0FBQUE7QUFFbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUEyQztBQUFBO0FBRzNDLE1BQU07RUFBRUE7QUFBYyxDQUFDLEdBQUdDLE1BQU07QUFBQztBQUNqQyxNQUFNO0VBQUVDLE9BQU8sRUFBRUMsY0FBYztFQUFFQyxVQUFVO0VBQUVDLFdBQVc7RUFBRUMsWUFBWTtFQUM5REM7QUFBYSxDQUFDLEdBQUdDLE9BQU87QUFBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ2pDLE1BQU07RUFBRUM7QUFBcUIsQ0FBQyxHQUFHQyxJQUFJO0FBQUM7QUFDdEMsTUFBTTtFQUFFQyxRQUFRLEVBQUVDO0FBQWdCLENBQUMsR0FBR0MsWUFBWTtBQUFDO0FBQ25ELE1BQU07RUFBRVgsT0FBTyxFQUFFWSxjQUFjO0VBQUVDO0FBQXVCLENBQUMsR0FBR0Msa0JBQWtCO0FBQUM7QUFBQTtBQUFBLGVBR2hFaEIsYUFBYTtBQUFBIn0=
48
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBbmRyb2lkRHJpdmVyIiwiZHJpdmVyIiwiaGVscGVycyIsIndlYnZpZXdIZWxwZXJzIiwiTkFUSVZFX1dJTiIsIldFQlZJRVdfV0lOIiwiV0VCVklFV19CQVNFIiwiQ0hST01JVU1fV0lOIiwid2VidmlldyIsImNvbW1vbkNhcENvbnN0cmFpbnRzIiwiY2FwcyIsImNvbW1hbmRzIiwiYW5kcm9pZENvbW1hbmRzIiwiY29tbWFuZEluZGV4IiwiYW5kcm9pZEhlbHBlcnMiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiYW5kcm9pZEhlbHBlckluZGV4Il0sInNvdXJjZXMiOlsiLi4vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLy8gdHJhbnNwaWxlOm1haW5cbmltcG9ydCAqIGFzIGRyaXZlciBmcm9tICcuL2xpYi9kcml2ZXInO1xuaW1wb3J0ICogYXMgYW5kcm9pZEhlbHBlckluZGV4IGZyb20gJy4vbGliL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgKiBhcyBjb21tYW5kSW5kZXggZnJvbSAnLi9saWIvY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0ICogYXMgd2VidmlldyBmcm9tICcuL2xpYi93ZWJ2aWV3LWhlbHBlcnMnO1xuaW1wb3J0ICogYXMgY2FwcyBmcm9tICcuL2xpYi9kZXNpcmVkLWNhcHMnO1xuXG5jb25zdCB7IEFuZHJvaWREcml2ZXIgfSA9IGRyaXZlcjtcbmNvbnN0IHsgaGVscGVyczogd2Vidmlld0hlbHBlcnMsIE5BVElWRV9XSU4sIFdFQlZJRVdfV0lOLCBXRUJWSUVXX0JBU0UsXG4gICAgICAgIENIUk9NSVVNX1dJTiB9ID0gd2VidmlldztcbmNvbnN0IHsgY29tbW9uQ2FwQ29uc3RyYWludHMgfSA9IGNhcHM7XG5jb25zdCB7IGNvbW1hbmRzOiBhbmRyb2lkQ29tbWFuZHMgfSA9IGNvbW1hbmRJbmRleDtcbmNvbnN0IHsgaGVscGVyczogYW5kcm9pZEhlbHBlcnMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgfSA9IGFuZHJvaWRIZWxwZXJJbmRleDtcblxuXG5leHBvcnQgZGVmYXVsdCBBbmRyb2lkRHJpdmVyO1xuZXhwb3J0IHtcbiAgYW5kcm9pZEhlbHBlcnMsIGFuZHJvaWRDb21tYW5kcywgQW5kcm9pZERyaXZlcixcbiAgY29tbW9uQ2FwQ29uc3RyYWludHMsIHdlYnZpZXdIZWxwZXJzLCBOQVRJVkVfV0lOLCBXRUJWSUVXX1dJTixcbiAgV0VCVklFV19CQVNFLCBDSFJPTUlVTV9XSU4sIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFtQjs7QUFBQTtFQUFBO0FBQUE7QUFBQTtBQUFBO0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBMkM7QUFBQTtBQUUzQyxNQUFNO0VBQUVBO0FBQWMsQ0FBQyxHQUFHQyxNQUFNO0FBQUM7QUFDakMsTUFBTTtFQUFFQyxPQUFPLEVBQUVDLGNBQWM7RUFBRUMsVUFBVTtFQUFFQyxXQUFXO0VBQUVDLFlBQVk7RUFDOURDO0FBQWEsQ0FBQyxHQUFHQyxPQUFPO0FBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNqQyxNQUFNO0VBQUVDO0FBQXFCLENBQUMsR0FBR0MsSUFBSTtBQUFDO0FBQ3RDLE1BQU07RUFBRUMsUUFBUSxFQUFFQztBQUFnQixDQUFDLEdBQUdDLFlBQVk7QUFBQztBQUNuRCxNQUFNO0VBQUVYLE9BQU8sRUFBRVksY0FBYztFQUFFQztBQUF1QixDQUFDLEdBQUdDLGtCQUFrQjtBQUFDO0FBQUE7QUFBQSxlQUdoRWhCLGFBQWE7QUFBQSJ9
@@ -9,6 +9,7 @@ require("source-map-support/register");
9
9
  var _driver = require("appium/driver");
10
10
  var _desiredCaps = _interopRequireDefault(require("./desired-caps"));
11
11
  var _index = _interopRequireDefault(require("./commands/index"));
12
+ var _methodMap = require("./method-map");
12
13
  var _androidHelpers = require("./android-helpers");
13
14
  var _lodash = _interopRequireDefault(require("lodash"));
14
15
  var _appiumAdb = require("appium-adb");
@@ -20,6 +21,7 @@ const APP_EXTENSION = '.apk';
20
21
  const DEVICE_PORT = 4724;
21
22
  const NO_PROXY = [['POST', new RegExp('^/session/[^/]+/context')], ['GET', new RegExp('^/session/[^/]+/context')], ['POST', new RegExp('^/session/[^/]+/appium')], ['GET', new RegExp('^/session/[^/]+/appium')], ['POST', new RegExp('^/session/[^/]+/touch/perform')], ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')], ['POST', new RegExp('^/session/[^/]+/orientation')], ['GET', new RegExp('^/session/[^/]+/orientation')], ['POST', new RegExp('^/session/[^/]+/execute')], ['POST', new RegExp('^/session/[^/]+/execute/sync')], ['GET', new RegExp('^/session/[^/]+/network_connection')], ['POST', new RegExp('^/session/[^/]+/network_connection')]];
22
23
  class AndroidDriver extends _driver.BaseDriver {
24
+ static newMethodMap = _methodMap.newMethodMap;
23
25
  constructor(opts = {}, shouldValidateCaps = true) {
24
26
  super(opts, shouldValidateCaps);
25
27
  this.locatorStrategies = ['xpath', 'id', 'class name', 'accessibility id', '-android uiautomator'];
@@ -404,4 +406,4 @@ class AndroidDriver extends _driver.BaseDriver {
404
406
  exports.AndroidDriver = AndroidDriver;
405
407
  var _default = AndroidDriver;
406
408
  exports.default = _default;
407
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OIiwiREVWSUNFX1BPUlQiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIkFuZHJvaWREcml2ZXIiLCJCYXNlRHJpdmVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJkZXNpcmVkQ29uc3RyYWludHMiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsImp3cFByb3h5QWN0aXZlIiwiandwUHJveHlBdm9pZCIsIl8iLCJjbG9uZSIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJpZ25vcmVVbmltcG9ydGFudFZpZXdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJjaHJvbWVkcml2ZXIiLCJhcGtTdHJpbmdzIiwidW5sb2NrZXIiLCJoZWxwZXJzIiwiY21kIiwiZm4iLCJ0b1BhaXJzIiwiY29tbWFuZHMiLCJwcm90b3R5cGUiLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJjYXBzIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJkZWZhdWx0T3B0cyIsImFjdGlvbiIsImNhdGVnb3J5IiwiZmxhZ3MiLCJkaXNhYmxlQW5kcm9pZFdhdGNoZXJzIiwidG1wRGlyIiwidGVtcERpciIsInN0YXRpY0RpciIsImZ1bGxSZXNldCIsImF1dG9MYXVuY2giLCJhZGJQb3J0IiwiREVGQVVMVF9BREJfUE9SVCIsImJvb3RzdHJhcFBvcnQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJkZWZhdWx0cyIsInVzZVVubG9ja0hlbHBlckFwcCIsImlzVW5kZWZpbmVkIiwidW5sb2NrVHlwZSIsIm5vUmVzZXQiLCJmYXN0UmVzZXQiLCJza2lwVW5pbnN0YWxsIiwiaXNDaHJvbWVTZXNzaW9uIiwiYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzIiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsInB1c2giLCJyZWJvb3QiLCJzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImFkYiIsImNyZWF0ZUFEQiIsInN1cHByZXNzS2lsbFNlcnZlciIsInJlbW90ZUFkYkhvc3QiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiYWRiRXhlY1RpbWVvdXQiLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiZ2V0QXBpTGV2ZWwiLCJsb2ciLCJ3YXJuIiwiaXNQYWNrYWdlT3JCdW5kbGUiLCJhcHAiLCJhcHBQYWNrYWdlIiwiY29uZmlndXJlQXBwIiwiY2hlY2tBcHBQcmVzZW50IiwiYXBwT25EZXZpY2UiLCJpbmZvIiwiY2hlY2tQYWNrYWdlUHJlc2VudCIsInV0aWwiLCJoYXNWYWx1ZSIsIm5ldHdvcmtTcGVlZCIsImlzRW11bGF0b3IiLCJlbnN1cmVOZXR3b3JrU3BlZWQiLCJncHNFbmFibGVkIiwidG9nZ2xlR1BTTG9jYXRpb25Qcm92aWRlciIsInN0YXJ0QW5kcm9pZFNlc3Npb24iLCJlIiwiZGVsZXRlU2Vzc2lvbiIsImlnbiIsImF2ZCIsImRldmljZU5hbWUiLCJlcnJvckFuZFRocm93IiwicGxhdGZvcm1WZXJzaW9uIiwiYXZkRGV2aWNlIiwicmVwbGFjZSIsImlzQ2hyb21lQnJvd3NlciIsImJyb3dzZXJOYW1lIiwia2V5IiwidmFsdWUiLCJzZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IiwiZGVmYXVsdElNRSIsImluaXREZXZpY2UiLCJjdXJEZXZpY2VJZCIsImRldmljZVVESUQiLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VTY3JlZW5TaXplIiwiZ2V0U2NyZWVuU2l6ZSIsImRldmljZU1vZGVsIiwiZ2V0TW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJnZXRNYW51ZmFjdHVyZXIiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwiaXNBbmltYXRpb25PbiIsInNldEhpZGRlbkFwaVBvbGljeSIsImlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJfd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQiLCJpbml0QVVUIiwiYm9vdHN0cmFwIiwid2Vic29ja2V0Iiwic3RhcnQiLCJhY2NlcHRTc2xDZXJ0cyIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwiZXJyIiwiaWdub3JlVW5leHBlY3RlZFNodXRkb3duIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJza2lwVW5sb2NrIiwidW5sb2NrIiwidXBkYXRlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwic3RhcnRBVVQiLCJvcmllbnRhdGlvbiIsImRlYnVnIiwic2V0T3JpZW50YXRpb24iLCJpbml0QXV0b1dlYnZpZXciLCJhdXRvV2VidmlldyIsInZpZXdOYW1lIiwiZGVmYXVsdFdlYnZpZXdOYW1lIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInJldHJ5SW50ZXJ2YWwiLCJzZXRDb250ZXh0IiwibGF1bmNoSW5mbyIsImdldExhdW5jaEluZm8iLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInBhcnNlQXJyYXkiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwib3RoZXJBcHBzIiwibWVzc2FnZSIsIkIiLCJhbGwiLCJtYXAiLCJpbnN0YWxsT3RoZXJBcGtzIiwicmVzZXRBcHAiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsQXBrIiwiYXBrU3RyaW5nc0Zvckxhbmd1YWdlIiwicHVzaFN0cmluZ3MiLCJsYW5ndWFnZSIsInNoYXJlZFByZWZlcmVuY2VzIiwic2V0U2hhcmVkUHJlZmVyZW5jZXMiLCJmcyIsImV4aXN0cyIsInNoZWxsIiwiY29tcHJlc3MiLCJzZW5kQWN0aW9uIiwiY29tcHJlc3NMYXlvdXQiLCJpc0VtcHR5IiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsInN0b3BDaHJvbWVkcml2ZXJQcm94aWVzIiwidW5pY29kZUtleWJvYXJkIiwicmVzZXRLZXlib2FyZCIsInNldElNRSIsImRvbnRTdG9wQXBwT25SZXNldCIsImZvcmNlU3RvcCIsImdvVG9Ib21lIiwic2h1dGRvd24iLCJzdG9wTG9nY2F0Iiwic2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSIsImF2ZE5hbWUiLCJraWxsRW11bGF0b3IiLCJzaGFyZWRQcmVmcyIsIm5hbWUiLCJKU09OIiwic3RyaW5naWZ5IiwicmVtb3RlUGF0aCIsInJlbW90ZUZpbGUiLCJsb2NhbFBhdGgiLCJidWlsZGVyIiwiZ2V0UHJlZnNCdWlsZGVyIiwiYnVpbGQiLCJwcmVmcyIsInRvRmlsZSIsInVubGluayIsIlNoYXJlZFByZWZzQnVpbGRlciIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsImlzRnVuY3Rpb24iLCJwcm94eVJlcVJlcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCBkZXNpcmVkQ29uc3RyYWludHMgZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHtcbiAgaGVscGVycywgZW5zdXJlTmV0d29ya1NwZWVkLFxuICBTRVRUSU5HU19IRUxQRVJfUEtHX0lELFxufSBmcm9tICcuL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgREVGQVVMVF9BREJfUE9SVCB9IGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFNoYXJlZFByZWZzQnVpbGRlciB9IGZyb20gJ3NoYXJlZC1wcmVmZXJlbmNlcy1idWlsZGVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgQVBQX0VYVEVOU0lPTiA9ICcuYXBrJztcbmNvbnN0IERFVklDRV9QT1JUID0gNDcyNDtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG9cbi8vIENocm9tZWRyaXZlclxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbl07XG5cbmNsYXNzIEFuZHJvaWREcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG5cbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgICAnLWFuZHJvaWQgdWlhdXRvbWF0b3InXG4gICAgXTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDb25zdHJhaW50cztcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzID0ge307XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IF8uY2xvbmUoTk9fUFJPWFkpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3Moe2lnbm9yZVVuaW1wb3J0YW50Vmlld3M6IGZhbHNlfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25TZXR0aW5nc1VwZGF0ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gICAgdGhpcy5hcGtTdHJpbmdzID0ge307XG4gICAgdGhpcy51bmxvY2tlciA9IGhlbHBlcnMudW5sb2NrZXI7XG5cbiAgICBmb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICAgICAgQW5kcm9pZERyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xuICAgIH1cblxuICAgIC8vIG5lZWRzIHRvIGJlIGFmdGVyIHRoZSBsaW5lIHdoaWNoIGFzc2lnbnMgY29tbWFuZHMgdG8gQW5kcm9pZERyaXZlci5wcm90b3R5cGUsIHNvIHRoYXQgYHRoaXMuZGVmYXVsdENvbnRleHROYW1lYCBpcyBkZWZpbmVkLlxuICAgIHRoaXMuY3VyQ29udGV4dCA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgLy8gdGhlIHdob2xlIGNyZWF0ZVNlc3Npb24gZmxvdyBpcyBzdXJyb3VuZGVkIGluIGEgdHJ5LWNhdGNoIHN0YXRlbWVudFxuICAgIC8vIGlmIGNyZWF0aW5nIGEgc2Vzc2lvbiBmYWlscyBhdCBhbnkgcG9pbnQsIHdlIHRlYXJkb3duIGV2ZXJ5dGhpbmcgd2VcbiAgICAvLyBzZXQgdXAgYmVmb3JlIHRocm93aW5nIHRoZSBlcnJvci5cbiAgICB0cnkge1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcblxuICAgICAgbGV0IHNlcnZlckRldGFpbHMgPSB7XG4gICAgICAgIHBsYXRmb3JtOiAnTElOVVgnLFxuICAgICAgICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgZGVzaXJlZDogdGhpcy5jYXBzXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNhcHMgPSBPYmplY3QuYXNzaWduKHNlcnZlckRldGFpbHMsIHRoaXMuY2Fwcyk7XG5cbiAgICAgIC8vIGFzc2lnbmluZyBkZWZhdWx0c1xuICAgICAgbGV0IGRlZmF1bHRPcHRzID0ge1xuICAgICAgICBhY3Rpb246ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgICAgIGNhdGVnb3J5OiAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgICBmbGFnczogJzB4MTAyMDAwMDAnLFxuICAgICAgICBkaXNhYmxlQW5kcm9pZFdhdGNoZXJzOiBmYWxzZSxcbiAgICAgICAgdG1wRGlyOiBhd2FpdCB0ZW1wRGlyLnN0YXRpY0RpcigpLFxuICAgICAgICBmdWxsUmVzZXQ6IGZhbHNlLFxuICAgICAgICBhdXRvTGF1bmNoOiB0cnVlLFxuICAgICAgICBhZGJQb3J0OiBERUZBVUxUX0FEQl9QT1JULFxuICAgICAgICBib290c3RyYXBQb3J0OiBERVZJQ0VfUE9SVCxcbiAgICAgICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiA5MDAwMCxcbiAgICAgIH07XG4gICAgICBfLmRlZmF1bHRzKHRoaXMub3B0cywgZGVmYXVsdE9wdHMpO1xuICAgICAgdGhpcy51c2VVbmxvY2tIZWxwZXJBcHAgPSBfLmlzVW5kZWZpbmVkKHRoaXMuY2Fwcy51bmxvY2tUeXBlKTtcblxuICAgICAgLy8gbm90IHVzZXIgdmlzaWJsZSB2aWEgY2Fwc1xuICAgICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0cy5mdWxsUmVzZXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0cy5ub1Jlc2V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdHMuZmFzdFJlc2V0ID0gIXRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5ub1Jlc2V0O1xuICAgICAgdGhpcy5vcHRzLnNraXBVbmluc3RhbGwgPSB0aGlzLm9wdHMuZmFzdFJlc2V0IHx8IHRoaXMub3B0cy5ub1Jlc2V0O1xuXG4gICAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgICAgaGVscGVycy5hZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHModGhpcy5vcHRzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICAgIHRoaXMuandwUHJveHlBdm9pZC5wdXNoKFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NjcmVlbnNob3QnKV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICB0aGlzLnNldEF2ZEZyb21DYXBhYmlsaXRpZXMoY2Fwcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBkZXZpY2UgdWRpZCBmb3IgdGhpcyBzZXNzaW9uXG4gICAgICBsZXQge3VkaWQsIGVtUG9ydH0gPSBhd2FpdCBoZWxwZXJzLmdldERldmljZUluZm9Gcm9tQ2Fwcyh0aGlzLm9wdHMpO1xuICAgICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgICAgdGhpcy5vcHRzLmVtUG9ydCA9IGVtUG9ydDtcblxuICAgICAgLy8gc2V0IHVwIGFuIGluc3RhbmNlIG9mIEFEQlxuICAgICAgdGhpcy5hZGIgPSBhd2FpdCBoZWxwZXJzLmNyZWF0ZUFEQih7XG4gICAgICAgIHVkaWQ6IHRoaXMub3B0cy51ZGlkLFxuICAgICAgICBlbVBvcnQ6IHRoaXMub3B0cy5lbVBvcnQsXG4gICAgICAgIGFkYlBvcnQ6IHRoaXMub3B0cy5hZGJQb3J0LFxuICAgICAgICBzdXBwcmVzc0tpbGxTZXJ2ZXI6IHRoaXMub3B0cy5zdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgICAgIHJlbW90ZUFkYkhvc3Q6IHRoaXMub3B0cy5yZW1vdGVBZGJIb3N0LFxuICAgICAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0OiB0aGlzLm9wdHMuY2xlYXJEZXZpY2VMb2dzT25TdGFydCxcbiAgICAgICAgYWRiRXhlY1RpbWVvdXQ6IHRoaXMub3B0cy5hZGJFeGVjVGltZW91dCxcbiAgICAgICAgYWxsb3dPZmZsaW5lRGV2aWNlczogdGhpcy5vcHRzLmFsbG93T2ZmbGluZURldmljZXMsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjMpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihcIkNvbnNpZGVyIHNldHRpbmcgJ2F1dG9tYXRpb25OYW1lJyBjYXBhYmlsaXR5IHRvIFwiICtcbiAgICAgICAgICBcIid1aWF1dG9tYXRvcjInIG9uIEFuZHJvaWQgPj0gNiwgc2luY2UgVUlBdXRvbWF0b3IgZnJhbWV3b3JrIFwiICtcbiAgICAgICAgICAnaXMgbm90IG1haW50YWluZWQgYW55bW9yZSBieSB0aGUgT1MgdmVuZG9yLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApKSB7XG4gICAgICAgIC8vIHVzZXIgcHJvdmlkZWQgcGFja2FnZSBpbnN0ZWFkIG9mIGFwcCBmb3IgJ2FwcCcgY2FwYWJpbGl0eSwgbWFzc2FnZSBvcHRpb25zXG4gICAgICAgIHRoaXMub3B0cy5hcHBQYWNrYWdlID0gdGhpcy5vcHRzLmFwcDtcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICAgIC8vIGZpbmQgYW5kIGNvcHksIG9yIGRvd25sb2FkIGFuZCB1bnppcCBhbiBhcHAgdXJsIG9yIHBhdGhcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAodGhpcy5vcHRzLmFwcCwgQVBQX0VYVEVOU0lPTik7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBQcmVzZW50KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgLy8gdGhlIGFwcCBpc24ndCBhbiBhY3R1YWwgYXBwIGZpbGUgYnV0IHJhdGhlciBzb21ldGhpbmcgd2Ugd2FudCB0b1xuICAgICAgICAvLyBhc3N1bWUgaXMgb24gdGhlIGRldmljZSBhbmQganVzdCBsYXVuY2ggdmlhIHRoZSBhcHBQYWNrYWdlXG4gICAgICAgIHRoaXMubG9nLmluZm8oYEFwcCBmaWxlIHdhcyBub3QgbGlzdGVkLCBpbnN0ZWFkIHdlJ3JlIGdvaW5nIHRvIHJ1biBgICtcbiAgICAgICAgICBgJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0gZGlyZWN0bHkgb24gdGhlIGRldmljZWApO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGFja2FnZVByZXNlbnQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU29tZSBjbG91ZCBzZXJ2aWNlcyB1c2luZyBhcHBpdW0gbGF1bmNoIHRoZSBhdmQgdGhlbXNlbHZlcywgc28gd2UgZW5zdXJlIG5ldHNwZWVkXG4gICAgICAvLyBpcyBzZXQgZm9yIGVtdWxhdG9ycyBieSBjYWxsaW5nIGFkYi5uZXR3b3JrU3BlZWQgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcFxuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLm5ldHdvcmtTcGVlZCkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ1NvcnJ5LCBuZXR3b3JrU3BlZWQgY2FwYWJpbGl0eSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbmV0d29ya1NwZWVkID0gZW5zdXJlTmV0d29ya1NwZWVkKHRoaXMuYWRiLCB0aGlzLm9wdHMubmV0d29ya1NwZWVkKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5uZXR3b3JrU3BlZWQobmV0d29ya1NwZWVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byBlbmFibGUvZGlzYWJsZSBncHMgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uXG4gICAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuZ3BzRW5hYmxlZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgVHJ5aW5nIHRvICR7dGhpcy5vcHRzLmdwc0VuYWJsZWQgPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ30gZ3BzIGxvY2F0aW9uIHByb3ZpZGVyYCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIudG9nZ2xlR1BTTG9jYXRpb25Qcm92aWRlcih0aGlzLm9wdHMuZ3BzRW5hYmxlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybignU29ycnkhIGdwc0VuYWJsZWQgY2FwYWJpbGl0eSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydEFuZHJvaWRTZXNzaW9uKHRoaXMub3B0cyk7XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgdGhpcy5jYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBpZ25vcmluZyBkZWxldGUgc2Vzc2lvbiBleGNlcHRpb24gaWYgYW55IGFuZCB0aHJvdyB0aGUgcmVhbCBlcnJvclxuICAgICAgLy8gdGhhdCBoYXBwZW5lZCB3aGlsZSBjcmVhdGluZyB0aGUgc2Vzc2lvbi5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBpc0VtdWxhdG9yICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0VtdWxhdG9yKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICB9XG5cbiAgc2V0QXZkRnJvbUNhcGFiaWxpdGllcyAoY2Fwcykge1xuICAgIGlmICh0aGlzLm9wdHMuYXZkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdhdmQgbmFtZSBkZWZpbmVkLCBpZ25vcmluZyBkZXZpY2UgbmFtZSBhbmQgcGxhdGZvcm0gdmVyc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgZGV2aWNlTmFtZSBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVzJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWNhcHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBwbGF0Zm9ybVZlcnNpb24gc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGF2ZERldmljZSA9IGNhcHMuZGV2aWNlTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV8uXS9nLCAnLScpO1xuICAgICAgdGhpcy5vcHRzLmF2ZCA9IGAke2F2ZERldmljZX1fXyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259YDtcbiAgICB9XG4gIH1cblxuICBnZXQgYXBwT25EZXZpY2UgKCkge1xuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkgfHwgKCF0aGlzLm9wdHMuYXBwICYmXG4gICAgICAgICAgIHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwUGFja2FnZSkpO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gJ2lnbm9yZVVuaW1wb3J0YW50Vmlld3MnKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0QW5kcm9pZFNlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nIEFuZHJvaWQgc2Vzc2lvbmApO1xuICAgIC8vIHNldCB1cCB0aGUgZGV2aWNlIHRvIHJ1biBvbiAocmVhbCBvciBlbXVsYXRvciwgZXRjKVxuICAgIHRoaXMuZGVmYXVsdElNRSA9IGF3YWl0IGhlbHBlcnMuaW5pdERldmljZSh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcblxuICAgIC8vIHNldCBhY3R1YWwgZGV2aWNlIG5hbWUsIHVkaWQsIHBsYXRmb3JtIHZlcnNpb24sIHNjcmVlbiBzaXplLCBtb2RlbCBhbmQgbWFudWZhY3R1cmVyIGRldGFpbHMuXG4gICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSB0aGlzLmFkYi5jdXJEZXZpY2VJZDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlVURJRCA9IHRoaXMub3B0cy51ZGlkO1xuICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24gPSBhd2FpdCB0aGlzLmFkYi5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuU2l6ZSA9IGF3YWl0IHRoaXMuYWRiLmdldFNjcmVlblNpemUoKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTW9kZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRNb2RlbCgpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNYW51ZmFjdHVyZXIgPSBhd2FpdCB0aGlzLmFkYi5nZXRNYW51ZmFjdHVyZXIoKTtcblxuICAgIGlmICh0aGlzLm9wdHMuZGlzYWJsZVdpbmRvd0FuaW1hdGlvbikge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQW5pbWF0aW9uT24oKSkge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkgeyAvLyBBUEkgbGV2ZWwgMjggaXMgQW5kcm9pZCBQXG4gICAgICAgICAgLy8gRG9uJ3QgZm9yZ2V0IHRvIHJlc2V0IHRoZSByZWxheGluZyBpbiBkZWxldGUgc2Vzc2lvblxuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ1JlbGF4aW5nIGhpZGRlbiBhcGkgcG9saWN5IHRvIG1hbmFnZSBhbmltYXRpb24gc2NhbGUnKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRIaWRkZW5BcGlQb2xpY3koJzEnLCAhIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZy5pbmZvKCdEaXNhYmxpbmcgd2luZG93IGFuaW1hdGlvbiBhcyBpdCBpcyByZXF1ZXN0ZWQgYnkgXCJkaXNhYmxlV2luZG93QW5pbWF0aW9uXCIgY2FwYWJpbGl0eScpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRBbmltYXRpb25TdGF0ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1dpbmRvdyBhbmltYXRpb24gaXMgYWxyZWFkeSBkaXNhYmxlZCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldCB1cCBhcHAgdW5kZXIgdGVzdFxuICAgIGF3YWl0IHRoaXMuaW5pdEFVVCgpO1xuXG4gICAgLy8gc3RhcnQgVWlBdXRvbWF0b3JcbiAgICB0aGlzLmJvb3RzdHJhcCA9IG5ldyBoZWxwZXJzLmJvb3RzdHJhcCh0aGlzLmFkYiwgdGhpcy5vcHRzLmJvb3RzdHJhcFBvcnQsIHRoaXMub3B0cy53ZWJzb2NrZXQpO1xuICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnN0YXJ0KHRoaXMub3B0cy5hcHBQYWNrYWdlLCB0aGlzLm9wdHMuZGlzYWJsZUFuZHJvaWRXYXRjaGVycywgdGhpcy5vcHRzLmFjY2VwdFNzbENlcnRzKTtcbiAgICAvLyBoYW5kbGluZyB1bmV4cGVjdGVkIHNodXRkb3duXG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLm9uVW5leHBlY3RlZFNodXRkb3duO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghdGhpcy5ib290c3RyYXAuaWdub3JlVW5leHBlY3RlZFNodXRkb3duKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoKTtcblxuXG4gICAgaWYgKHRoaXMub3B0cy5za2lwVW5sb2NrKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdTa2lwcGluZyBsb2Nrc2NyZWVuIGNoZWNrJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ0NoZWNraW5nIGZvciBsb2Nrc2NyZWVuIHByZXNlbmNlLiAnICtcbiAgICAgICAgYFRoaXMgY291bGQgYmUgc2tpcHBlZCBieSBzZXR0aW5nIHRoZSAnYXBwaXVtOnNraXBVbmxvY2snIGNhcGFiaWxpdHkgdG8gdHJ1ZS5gKTtcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB0aGlzLmNhcHMpO1xuICAgIH1cblxuICAgIC8vIFNldCBDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IG9uIHRoZSBkZXZpY2UgYmFzZWQgb24gY3VycmVudCBzZXR0aW5ncyBvYmplY3RcbiAgICAvLyB0aGlzIGhhcyB0byBoYXBwZW4gX2FmdGVyXyBib290c3RyYXAgaXMgaW5pdGlhbGl6ZWRcbiAgICBpZiAodGhpcy5vcHRzLmlnbm9yZVVuaW1wb3J0YW50Vmlld3MpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MudXBkYXRlKHtpZ25vcmVVbmltcG9ydGFudFZpZXdzOiB0aGlzLm9wdHMuaWdub3JlVW5pbXBvcnRhbnRWaWV3c30pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQ2hyb21lU2Vzc2lvbikge1xuICAgICAgLy8gc3RhcnQgYSBjaHJvbWVkcml2ZXIgc2Vzc2lvbiBhbmQgcHJveHkgdG8gaXRcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRDaHJvbWVTZXNzaW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuYXV0b0xhdW5jaCkge1xuICAgICAgICAvLyBzdGFydCBhcHBcbiAgICAgICAgYXdhaXQgdGhpcy5zdGFydEFVVCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5vcmllbnRhdGlvbikpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7dGhpcy5vcHRzLm9yaWVudGF0aW9ufSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0T3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmluaXRBdXRvV2VidmlldygpO1xuICB9XG5cbiAgYXN5bmMgaW5pdEF1dG9XZWJ2aWV3ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLmF1dG9XZWJ2aWV3KSB7XG4gICAgICBsZXQgdmlld05hbWUgPSB0aGlzLmRlZmF1bHRXZWJ2aWV3TmFtZSgpO1xuICAgICAgbGV0IHRpbWVvdXQgPSAodGhpcy5vcHRzLmF1dG9XZWJ2aWV3VGltZW91dCkgfHwgMjAwMDtcblxuICAgICAgdGhpcy5sb2cuaW5mbyhgU2V0dGluZyBhdXRvIHdlYnZpZXcgdG8gY29udGV4dCAnJHt2aWV3TmFtZX0nIHdpdGggdGltZW91dCAke3RpbWVvdXR9bXNgKTtcblxuICAgICAgLy8gdHJ5IGV2ZXJ5IDUwMG1zIHVudGlsIHRpbWVvdXQgaXMgb3ZlclxuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCh0aW1lb3V0IC8gNTAwLCA1MDAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KHZpZXdOYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXRBVVQgKCkge1xuICAgIC8vIHBvcHVsYXRlIGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5LFxuICAgIC8vIGFuZCB0aGUgZGV2aWNlIGJlaW5nIHVzZWRcbiAgICAvLyBpbiB0aGUgb3B0cyBhbmQgY2FwcyAoc28gaXQgZ2V0cyBiYWNrIHRvIHRoZSB1c2VyIG9uIHNlc3Npb24gY3JlYXRpb24pXG4gICAgbGV0IGxhdW5jaEluZm8gPSBhd2FpdCBoZWxwZXJzLmdldExhdW5jaEluZm8odGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdHMsIGxhdW5jaEluZm8pO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5jYXBzLCBsYXVuY2hJbmZvKTtcblxuICAgIC8vIFVuaW5zdGFsbCBhbnkgdW5pbnN0YWxsT3RoZXJQYWNrYWdlcyB3aGljaCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSB7XG4gICAgICBoZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHModGhpcy5vcHRzKTtcbiAgICAgIC8vIE9ubHkgU0VUVElOR1NfSEVMUEVSX1BLR19JRCBwYWNrYWdlIGlzIHVzZWQgYnkgVUlBMVxuICAgICAgYXdhaXQgaGVscGVycy51bmluc3RhbGxPdGhlclBhY2thZ2VzKFxuICAgICAgICB0aGlzLmFkYixcbiAgICAgICAgaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSxcbiAgICAgICAgW1NFVFRJTkdTX0hFTFBFUl9QS0dfSURdXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEluc3RhbGwgYW55IFwib3RoZXJBcHBzXCIgdGhhdCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGxldCBvdGhlckFwcHM7XG4gICAgICB0cnkge1xuICAgICAgICBvdGhlckFwcHMgPSBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLm90aGVyQXBwcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcIm90aGVyQXBwc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgb3RoZXJBcHBzID0gYXdhaXQgQi5hbGwob3RoZXJBcHBzLm1hcCgoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgQVBQX0VYVEVOU0lPTikpKTtcbiAgICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbE90aGVyQXBrcyhvdGhlckFwcHMsIHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIH1cblxuICAgIC8vIGluc3RhbGwgYXBwXG4gICAgaWYgKCF0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdGdWxsIHJlc2V0IHJlcXVpcmVzIGFuIGFwcCBjYXBhYmlsaXR5LCB1c2UgZmFzdFJlc2V0IGlmIGFwcCBpcyBub3QgcHJvdmlkZWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBhcHAgY2FwYWJpbGl0eS4gQXNzdW1pbmcgaXQgaXMgYWxyZWFkeSBvbiB0aGUgZGV2aWNlJyk7XG4gICAgICBpZiAodGhpcy5vcHRzLmZhc3RSZXNldCkge1xuICAgICAgICBhd2FpdCBoZWxwZXJzLnJlc2V0QXBwKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgIH1cbiAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxBcGsodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgY29uc3QgYXBrU3RyaW5nc0Zvckxhbmd1YWdlID0gYXdhaXQgaGVscGVycy5wdXNoU3RyaW5ncyh0aGlzLm9wdHMubGFuZ3VhZ2UsIHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIGlmICh0aGlzLm9wdHMubGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuYXBrU3RyaW5nc1t0aGlzLm9wdHMubGFuZ3VhZ2VdID0gYXBrU3RyaW5nc0Zvckxhbmd1YWdlO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbXVzdCBydW4gYWZ0ZXIgaW5zdGFsbGluZyB0aGUgYXBrLCBvdGhlcndpc2UgaXQgd291bGQgY2F1c2UgdGhlXG4gICAgLy8gaW5zdGFsbCB0byBmYWlsLiBBbmQgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcC5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5vcHRzLnNoYXJlZFByZWZlcmVuY2VzKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZXRTaGFyZWRQcmVmZXJlbmNlcyh0aGlzLm9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNoZWNrQXBwUHJlc2VudCAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0NoZWNraW5nIHdoZXRoZXIgYXBwIGlzIGFjdHVhbGx5IHByZXNlbnQnKTtcbiAgICBpZiAoIShhd2FpdCBmcy5leGlzdHModGhpcy5vcHRzLmFwcCkpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgZmluZCBhcHAgYXBrIGF0ICR7dGhpcy5vcHRzLmFwcH1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja1BhY2thZ2VQcmVzZW50ICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnQ2hlY2tpbmcgd2hldGhlciBwYWNrYWdlIGlzIHByZXNlbnQgb24gdGhlIGRldmljZScpO1xuICAgIGlmICghKGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncG0nLCAnbGlzdCcsICdwYWNrYWdlcycsIHRoaXMub3B0cy5hcHBQYWNrYWdlXSkpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgZmluZCBwYWNrYWdlICR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9IG9uIHRoZSBkZXZpY2VgKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgQ29tcHJlc3NlZExheW91dEhpZXJhcmNoeSBvbiB0aGUgZGV2aWNlXG4gIGFzeW5jIHNldENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkgKGNvbXByZXNzKSB7XG4gICAgYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignY29tcHJlc3NlZExheW91dEhpZXJhcmNoeScsIHtjb21wcmVzc0xheW91dDogY29tcHJlc3N9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdTaHV0dGluZyBkb3duIEFuZHJvaWQgZHJpdmVyJyk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9wUmVjb3JkaW5nU2NyZWVuKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuXG4gICAgYXdhaXQgaGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZygpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuXG4gICAgaWYgKHRoaXMuYm9vdHN0cmFwKSB7XG4gICAgICAvLyBjZXJ0YWluIGNsZWFudXAgd2Ugb25seSBjYXJlIHRvIGRvIGlmIHRoZSBib290c3RyYXAgd2FzIGV2ZXIgcnVuXG4gICAgICBhd2FpdCB0aGlzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzKCk7XG4gICAgICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCAmJiB0aGlzLm9wdHMucmVzZXRLZXlib2FyZCAmJiB0aGlzLmRlZmF1bHRJTUUpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFJlc2V0dGluZyBJTUUgdG8gJHt0aGlzLmRlZmF1bHRJTUV9YCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy5zZXRJTUUodGhpcy5kZWZhdWx0SU1FKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc0Nocm9tZVNlc3Npb24gJiYgIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGI/LmZvcmNlU3RvcCh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYj8uZ29Ub0hvbWUoKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCAmJiAhdGhpcy5hcHBPbkRldmljZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYj8udW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNodXRkb3duKCk7XG4gICAgICB0aGlzLmJvb3RzdHJhcCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKFwiQ2FsbGVkIGRlbGV0ZVNlc3Npb24gYnV0IGJvb3RzdHJhcCB3YXNuJ3QgYWN0aXZlXCIpO1xuICAgIH1cbiAgICAvLyBzb21lIGNsZWFudXAgd2Ugd2FudCB0byBkbyByZWdhcmRsZXNzLCBpbiBjYXNlIHdlIGFyZSBzaHV0dGluZyBkb3duXG4gICAgLy8gbWlkLXN0YXJ0dXBcbiAgICBhd2FpdCB0aGlzLmFkYj8uc3RvcExvZ2NhdCgpO1xuICAgIGlmICh0aGlzLnVzZVVubG9ja0hlbHBlckFwcCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGI/LmZvcmNlU3RvcCgnaW8uYXBwaXVtLnVubG9jaycpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1Jlc3RvcmluZyB3aW5kb3cgYW5pbWF0aW9uIHN0YXRlJyk7XG4gICAgICBhd2FpdCB0aGlzLmFkYj8uc2V0QW5pbWF0aW9uU3RhdGUodHJ1ZSk7XG5cbiAgICAgIC8vIFRoaXMgd2FzIG5lY2Vzc2FyeSB0byBjaGFuZ2UgYW5pbWF0aW9uIHNjYWxlIG92ZXIgQW5kcm9pZCBQLiBXZSBtdXN0IHJlc2V0IHRoZSBwb2xpY3kgZm9yIHRoZSBzZWN1cml0eS5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYj8uZ2V0QXBpTGV2ZWwoKSA+PSAyOCkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdSZXN0b3JpbmcgaGlkZGVuIGFwaSBwb2xpY3kgdG8gdGhlIGRldmljZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGI/LnNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3koISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICBsZXQgYXZkTmFtZSA9IHRoaXMub3B0cy5hdmQucmVwbGFjZSgnQCcsICcnKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBjbG9zaW5nIGVtdWxhdG9yICcke2F2ZE5hbWV9J2ApO1xuICAgICAgYXdhaXQgdGhpcy5hZGI/LmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZXRTaGFyZWRQcmVmZXJlbmNlcyAoKSB7XG4gICAgbGV0IHNoYXJlZFByZWZzID0gdGhpcy5vcHRzLnNoYXJlZFByZWZlcmVuY2VzO1xuICAgIHRoaXMubG9nLmluZm8oJ1RyeWluZyB0byBzZXQgc2hhcmVkIHByZWZlcmVuY2VzJyk7XG4gICAgbGV0IG5hbWUgPSBzaGFyZWRQcmVmcy5uYW1lO1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBTa2lwcGluZyBzZXR0aW5nIFNoYXJlZCBwcmVmZXJlbmNlcywgbmFtZSBpcyB1bmRlZmluZWQ6ICR7SlNPTi5zdHJpbmdpZnkoc2hhcmVkUHJlZnMpfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgcmVtb3RlUGF0aCA9IGAvZGF0YS9kYXRhLyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9L3NoYXJlZF9wcmVmc2A7XG4gICAgbGV0IHJlbW90ZUZpbGUgPSBgJHtyZW1vdGVQYXRofS8ke25hbWV9LnhtbGA7XG4gICAgbGV0IGxvY2FsUGF0aCA9IGAvdG1wLyR7bmFtZX0ueG1sYDtcbiAgICBsZXQgYnVpbGRlciA9IHRoaXMuZ2V0UHJlZnNCdWlsZGVyKCk7XG4gICAgYnVpbGRlci5idWlsZChzaGFyZWRQcmVmcy5wcmVmcyk7XG4gICAgdGhpcy5sb2cuaW5mbyhgQ3JlYXRpbmcgdGVtcG9yYXJ5IHNoYXJlZCBwcmVmZXJlbmNlczogJHtsb2NhbFBhdGh9YCk7XG4gICAgYnVpbGRlci50b0ZpbGUobG9jYWxQYXRoKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBDcmVhdGluZyBzaGFyZWRfcHJlZnMgcmVtb3RlIGZvbGRlcjogJHtyZW1vdGVQYXRofWApO1xuICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnbWtkaXInLCAnLXAnLCByZW1vdGVQYXRoXSk7XG4gICAgdGhpcy5sb2cuaW5mbyhgUHVzaGluZyBzaGFyZWRfcHJlZnMgdG8gJHtyZW1vdGVGaWxlfWApO1xuICAgIGF3YWl0IHRoaXMuYWRiLnB1c2gobG9jYWxQYXRoLCByZW1vdGVGaWxlKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVHJ5aW5nIHRvIHJlbW92ZSBzaGFyZWQgcHJlZmVyZW5jZXMgdGVtcG9yYXJ5IGZpbGVgKTtcbiAgICAgIGlmIChhd2FpdCBmcy5leGlzdHMobG9jYWxQYXRoKSkge1xuICAgICAgICBhd2FpdCBmcy51bmxpbmsobG9jYWxQYXRoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBFcnJvciB0cnlpbmcgdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlICR7bG9jYWxQYXRofWApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFByZWZzQnVpbGRlciAoKSB7XG4gICAgLyogQWRkIHRoaXMgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBTaGFyZWRQcmVmc0J1aWxkZXIgaW5zdGVhZCBvZlxuICAgICAqIGRpcmVjdGx5IGNyZWF0aW5nIHRoZSBvYmplY3Qgb24gc2V0U2hhcmVkUHJlZmVyZW5jZXMgZm9yIHRlc3RpbmcgcHVycG9zZXNcbiAgICAqL1xuICAgIHJldHVybiBuZXcgU2hhcmVkUHJlZnNCdWlsZGVyKCk7XG4gIH1cblxuICB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gICAgaWYgKCFzdXBlci52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICgoIWNhcHMuYnJvd3Nlck5hbWUgfHwgIWhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKGNhcHMuYnJvd3Nlck5hbWUpKSAmJiAhY2Fwcy5hcHAgJiYgIWNhcHMuYXBwUGFja2FnZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIG11c3QgaW5jbHVkZSBlaXRoZXIgYW4gYXBwLCBhcHBQYWNrYWdlIG9yIGJyb3dzZXJOYW1lJyk7XG4gICAgfVxuICAgIHJldHVybiBoZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHMoY2Fwcyk7XG4gIH1cblxuICBwcm94eUFjdGl2ZSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIucHJveHlBY3RpdmUoc2Vzc2lvbklkKTtcblxuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCk7XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUF2b2lkO1xuICB9XG5cbiAgY2FuUHJveHkgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmNhblByb3h5KHNlc3Npb25JZCk7XG5cbiAgICAvLyB0aGlzIHdpbGwgY2hhbmdlIGRlcGVuZGluZyBvbiBDaHJvbWVEcml2ZXIgc3RhdHVzXG4gICAgcmV0dXJuIF8uaXNGdW5jdGlvbih0aGlzLnByb3h5UmVxUmVzKTtcbiAgfVxufVxuXG5leHBvcnQgeyBBbmRyb2lkRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBBbmRyb2lkRHJpdmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsYUFBYSxHQUFHLE1BQU07QUFDNUIsTUFBTUMsV0FBVyxHQUFHLElBQUk7QUFJeEIsTUFBTUMsUUFBUSxHQUFHLENBQ2YsQ0FBQyxNQUFNLEVBQUUsSUFBSUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFDL0MsQ0FBQyxLQUFLLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFDOUMsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFDOUMsQ0FBQyxLQUFLLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFDN0MsQ0FBQyxNQUFNLEVBQUUs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
409
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OIiwiREVWSUNFX1BPUlQiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIkFuZHJvaWREcml2ZXIiLCJCYXNlRHJpdmVyIiwibmV3TWV0aG9kTWFwIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJkZXNpcmVkQ29uc3RyYWludHMiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsImp3cFByb3h5QWN0aXZlIiwiandwUHJveHlBdm9pZCIsIl8iLCJjbG9uZSIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJpZ25vcmVVbmltcG9ydGFudFZpZXdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJjaHJvbWVkcml2ZXIiLCJhcGtTdHJpbmdzIiwidW5sb2NrZXIiLCJoZWxwZXJzIiwiY21kIiwiZm4iLCJ0b1BhaXJzIiwiY29tbWFuZHMiLCJwcm90b3R5cGUiLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJjYXBzIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJkZWZhdWx0T3B0cyIsImFjdGlvbiIsImNhdGVnb3J5IiwiZmxhZ3MiLCJkaXNhYmxlQW5kcm9pZFdhdGNoZXJzIiwidG1wRGlyIiwidGVtcERpciIsInN0YXRpY0RpciIsImZ1bGxSZXNldCIsImF1dG9MYXVuY2giLCJhZGJQb3J0IiwiREVGQVVMVF9BREJfUE9SVCIsImJvb3RzdHJhcFBvcnQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJkZWZhdWx0cyIsInVzZVVubG9ja0hlbHBlckFwcCIsImlzVW5kZWZpbmVkIiwidW5sb2NrVHlwZSIsIm5vUmVzZXQiLCJmYXN0UmVzZXQiLCJza2lwVW5pbnN0YWxsIiwiaXNDaHJvbWVTZXNzaW9uIiwiYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzIiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsInB1c2giLCJyZWJvb3QiLCJzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImFkYiIsImNyZWF0ZUFEQiIsInN1cHByZXNzS2lsbFNlcnZlciIsInJlbW90ZUFkYkhvc3QiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiYWRiRXhlY1RpbWVvdXQiLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiZ2V0QXBpTGV2ZWwiLCJsb2ciLCJ3YXJuIiwiaXNQYWNrYWdlT3JCdW5kbGUiLCJhcHAiLCJhcHBQYWNrYWdlIiwiY29uZmlndXJlQXBwIiwiY2hlY2tBcHBQcmVzZW50IiwiYXBwT25EZXZpY2UiLCJpbmZvIiwiY2hlY2tQYWNrYWdlUHJlc2VudCIsInV0aWwiLCJoYXNWYWx1ZSIsIm5ldHdvcmtTcGVlZCIsImlzRW11bGF0b3IiLCJlbnN1cmVOZXR3b3JrU3BlZWQiLCJncHNFbmFibGVkIiwidG9nZ2xlR1BTTG9jYXRpb25Qcm92aWRlciIsInN0YXJ0QW5kcm9pZFNlc3Npb24iLCJlIiwiZGVsZXRlU2Vzc2lvbiIsImlnbiIsImF2ZCIsImRldmljZU5hbWUiLCJlcnJvckFuZFRocm93IiwicGxhdGZvcm1WZXJzaW9uIiwiYXZkRGV2aWNlIiwicmVwbGFjZSIsImlzQ2hyb21lQnJvd3NlciIsImJyb3dzZXJOYW1lIiwia2V5IiwidmFsdWUiLCJzZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IiwiZGVmYXVsdElNRSIsImluaXREZXZpY2UiLCJjdXJEZXZpY2VJZCIsImRldmljZVVESUQiLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VTY3JlZW5TaXplIiwiZ2V0U2NyZWVuU2l6ZSIsImRldmljZU1vZGVsIiwiZ2V0TW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJnZXRNYW51ZmFjdHVyZXIiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwiaXNBbmltYXRpb25PbiIsInNldEhpZGRlbkFwaVBvbGljeSIsImlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJfd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQiLCJpbml0QVVUIiwiYm9vdHN0cmFwIiwid2Vic29ja2V0Iiwic3RhcnQiLCJhY2NlcHRTc2xDZXJ0cyIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwiZXJyIiwiaWdub3JlVW5leHBlY3RlZFNodXRkb3duIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJza2lwVW5sb2NrIiwidW5sb2NrIiwidXBkYXRlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwic3RhcnRBVVQiLCJvcmllbnRhdGlvbiIsImRlYnVnIiwic2V0T3JpZW50YXRpb24iLCJpbml0QXV0b1dlYnZpZXciLCJhdXRvV2VidmlldyIsInZpZXdOYW1lIiwiZGVmYXVsdFdlYnZpZXdOYW1lIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInJldHJ5SW50ZXJ2YWwiLCJzZXRDb250ZXh0IiwibGF1bmNoSW5mbyIsImdldExhdW5jaEluZm8iLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInBhcnNlQXJyYXkiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwib3RoZXJBcHBzIiwibWVzc2FnZSIsIkIiLCJhbGwiLCJtYXAiLCJpbnN0YWxsT3RoZXJBcGtzIiwicmVzZXRBcHAiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsQXBrIiwiYXBrU3RyaW5nc0Zvckxhbmd1YWdlIiwicHVzaFN0cmluZ3MiLCJsYW5ndWFnZSIsInNoYXJlZFByZWZlcmVuY2VzIiwic2V0U2hhcmVkUHJlZmVyZW5jZXMiLCJmcyIsImV4aXN0cyIsInNoZWxsIiwiY29tcHJlc3MiLCJzZW5kQWN0aW9uIiwiY29tcHJlc3NMYXlvdXQiLCJpc0VtcHR5IiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsInN0b3BDaHJvbWVkcml2ZXJQcm94aWVzIiwidW5pY29kZUtleWJvYXJkIiwicmVzZXRLZXlib2FyZCIsInNldElNRSIsImRvbnRTdG9wQXBwT25SZXNldCIsImZvcmNlU3RvcCIsImdvVG9Ib21lIiwic2h1dGRvd24iLCJzdG9wTG9nY2F0Iiwic2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSIsImF2ZE5hbWUiLCJraWxsRW11bGF0b3IiLCJzaGFyZWRQcmVmcyIsIm5hbWUiLCJKU09OIiwic3RyaW5naWZ5IiwicmVtb3RlUGF0aCIsInJlbW90ZUZpbGUiLCJsb2NhbFBhdGgiLCJidWlsZGVyIiwiZ2V0UHJlZnNCdWlsZGVyIiwiYnVpbGQiLCJwcmVmcyIsInRvRmlsZSIsInVubGluayIsIlNoYXJlZFByZWZzQnVpbGRlciIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsImlzRnVuY3Rpb24iLCJwcm94eVJlcVJlcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCBkZXNpcmVkQ29uc3RyYWludHMgZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHsgbmV3TWV0aG9kTWFwIH0gZnJvbSAnLi9tZXRob2QtbWFwJztcbmltcG9ydCB7XG4gIGhlbHBlcnMsIGVuc3VyZU5ldHdvcmtTcGVlZCxcbiAgU0VUVElOR1NfSEVMUEVSX1BLR19JRCxcbn0gZnJvbSAnLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IERFRkFVTFRfQURCX1BPUlQgfSBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB7IGZzLCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTaGFyZWRQcmVmc0J1aWxkZXIgfSBmcm9tICdzaGFyZWQtcHJlZmVyZW5jZXMtYnVpbGRlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IEFQUF9FWFRFTlNJT04gPSAnLmFwayc7XG5jb25zdCBERVZJQ0VfUE9SVCA9IDQ3MjQ7XG5cbi8vIFRoaXMgaXMgYSBzZXQgb2YgbWV0aG9kcyBhbmQgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvXG4vLyBDaHJvbWVkcml2ZXJcbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL211bHRpL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG5dO1xuXG5jbGFzcyBBbmRyb2lkRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG5cbiAgc3RhdGljIG5ld01ldGhvZE1hcCA9IG5ld01ldGhvZE1hcDtcblxuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9LCBzaG91bGRWYWxpZGF0ZUNhcHMgPSB0cnVlKSB7XG4gICAgc3VwZXIob3B0cywgc2hvdWxkVmFsaWRhdGVDYXBzKTtcblxuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAneHBhdGgnLFxuICAgICAgJ2lkJyxcbiAgICAgICdjbGFzcyBuYW1lJyxcbiAgICAgICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICAgICctYW5kcm9pZCB1aWF1dG9tYXRvcidcbiAgICBdO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENvbnN0cmFpbnRzO1xuICAgIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnMgPSB7fTtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gXy5jbG9uZShOT19QUk9YWSk7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogZmFsc2V9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgICB0aGlzLmFwa1N0cmluZ3MgPSB7fTtcbiAgICB0aGlzLnVubG9ja2VyID0gaGVscGVycy51bmxvY2tlcjtcblxuICAgIGZvciAobGV0IFtjbWQsIGZuXSBvZiBfLnRvUGFpcnMoY29tbWFuZHMpKSB7XG4gICAgICBBbmRyb2lkRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG4gICAgfVxuXG4gICAgLy8gbmVlZHMgdG8gYmUgYWZ0ZXIgdGhlIGxpbmUgd2hpY2ggYXNzaWducyBjb21tYW5kcyB0byBBbmRyb2lkRHJpdmVyLnByb3RvdHlwZSwgc28gdGhhdCBgdGhpcy5kZWZhdWx0Q29udGV4dE5hbWVgIGlzIGRlZmluZWQuXG4gICAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICAvLyB0aGUgd2hvbGUgY3JlYXRlU2Vzc2lvbiBmbG93IGlzIHN1cnJvdW5kZWQgaW4gYSB0cnktY2F0Y2ggc3RhdGVtZW50XG4gICAgLy8gaWYgY3JlYXRpbmcgYSBzZXNzaW9uIGZhaWxzIGF0IGFueSBwb2ludCwgd2UgdGVhcmRvd24gZXZlcnl0aGluZyB3ZVxuICAgIC8vIHNldCB1cCBiZWZvcmUgdGhyb3dpbmcgdGhlIGVycm9yLlxuICAgIHRyeSB7XG4gICAgICBsZXQgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuXG4gICAgICBsZXQgc2VydmVyRGV0YWlscyA9IHtcbiAgICAgICAgcGxhdGZvcm06ICdMSU5VWCcsXG4gICAgICAgIHdlYlN0b3JhZ2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdGFrZXNTY3JlZW5zaG90OiB0cnVlLFxuICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgZGF0YWJhc2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkOiB0cnVlLFxuICAgICAgICBsb2NhdGlvbkNvbnRleHRFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgd2FybmluZ3M6IHt9LFxuICAgICAgICBkZXNpcmVkOiB0aGlzLmNhcHNcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2FwcyA9IE9iamVjdC5hc3NpZ24oc2VydmVyRGV0YWlscywgdGhpcy5jYXBzKTtcblxuICAgICAgLy8gYXNzaWduaW5nIGRlZmF1bHRzXG4gICAgICBsZXQgZGVmYXVsdE9wdHMgPSB7XG4gICAgICAgIGFjdGlvbjogJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAgICAgY2F0ZWdvcnk6ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgICAgIGZsYWdzOiAnMHgxMDIwMDAwMCcsXG4gICAgICAgIGRpc2FibGVBbmRyb2lkV2F0Y2hlcnM6IGZhbHNlLFxuICAgICAgICB0bXBEaXI6IGF3YWl0IHRlbXBEaXIuc3RhdGljRGlyKCksXG4gICAgICAgIGZ1bGxSZXNldDogZmFsc2UsXG4gICAgICAgIGF1dG9MYXVuY2g6IHRydWUsXG4gICAgICAgIGFkYlBvcnQ6IERFRkFVTFRfQURCX1BPUlQsXG4gICAgICAgIGJvb3RzdHJhcFBvcnQ6IERFVklDRV9QT1JULFxuICAgICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IDkwMDAwLFxuICAgICAgfTtcbiAgICAgIF8uZGVmYXVsdHModGhpcy5vcHRzLCBkZWZhdWx0T3B0cyk7XG4gICAgICB0aGlzLnVzZVVubG9ja0hlbHBlckFwcCA9IF8uaXNVbmRlZmluZWQodGhpcy5jYXBzLnVubG9ja1R5cGUpO1xuXG4gICAgICAvLyBub3QgdXNlciB2aXNpYmxlIHZpYSBjYXBzXG4gICAgICBpZiAodGhpcy5vcHRzLm5vUmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5vcHRzLmZ1bGxSZXNldCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5vcHRzLm5vUmVzZXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0cy5mYXN0UmVzZXQgPSAhdGhpcy5vcHRzLmZ1bGxSZXNldCAmJiAhdGhpcy5vcHRzLm5vUmVzZXQ7XG4gICAgICB0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCA9IHRoaXMub3B0cy5mYXN0UmVzZXQgfHwgdGhpcy5vcHRzLm5vUmVzZXQ7XG5cbiAgICAgIGlmICh0aGlzLmlzQ2hyb21lU2Vzc2lvbikge1xuICAgICAgICBoZWxwZXJzLmFkanVzdEJyb3dzZXJTZXNzaW9uQ2Fwcyh0aGlzLm9wdHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLm5hdGl2ZVdlYlNjcmVlbnNob3QpIHtcbiAgICAgICAgdGhpcy5qd3BQcm94eUF2b2lkLnB1c2goWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2NyZWVuc2hvdCcpXSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIHRoaXMuc2V0QXZkRnJvbUNhcGFiaWxpdGllcyhjYXBzKTtcbiAgICAgIH1cblxuICAgICAgLy8gZ2V0IGRldmljZSB1ZGlkIGZvciB0aGlzIHNlc3Npb25cbiAgICAgIGxldCB7dWRpZCwgZW1Qb3J0fSA9IGF3YWl0IGhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzKHRoaXMub3B0cyk7XG4gICAgICB0aGlzLm9wdHMudWRpZCA9IHVkaWQ7XG4gICAgICB0aGlzLm9wdHMuZW1Qb3J0ID0gZW1Qb3J0O1xuXG4gICAgICAvLyBzZXQgdXAgYW4gaW5zdGFuY2Ugb2YgQURCXG4gICAgICB0aGlzLmFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQURCKHtcbiAgICAgICAgdWRpZDogdGhpcy5vcHRzLnVkaWQsXG4gICAgICAgIGVtUG9ydDogdGhpcy5vcHRzLmVtUG9ydCxcbiAgICAgICAgYWRiUG9ydDogdGhpcy5vcHRzLmFkYlBvcnQsXG4gICAgICAgIHN1cHByZXNzS2lsbFNlcnZlcjogdGhpcy5vcHRzLnN1cHByZXNzS2lsbFNlcnZlcixcbiAgICAgICAgcmVtb3RlQWRiSG9zdDogdGhpcy5vcHRzLnJlbW90ZUFkYkhvc3QsXG4gICAgICAgIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQ6IHRoaXMub3B0cy5jbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgICAgICBhZGJFeGVjVGltZW91dDogdGhpcy5vcHRzLmFkYkV4ZWNUaW1lb3V0LFxuICAgICAgICBhbGxvd09mZmxpbmVEZXZpY2VzOiB0aGlzLm9wdHMuYWxsb3dPZmZsaW5lRGV2aWNlcyxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyMykge1xuICAgICAgICB0aGlzLmxvZy53YXJuKFwiQ29uc2lkZXIgc2V0dGluZyAnYXV0b21hdGlvbk5hbWUnIGNhcGFiaWxpdHkgdG8gXCIgK1xuICAgICAgICAgIFwiJ3VpYXV0b21hdG9yMicgb24gQW5kcm9pZCA+PSA2LCBzaW5jZSBVSUF1dG9tYXRvciBmcmFtZXdvcmsgXCIgK1xuICAgICAgICAgICdpcyBub3QgbWFpbnRhaW5lZCBhbnltb3JlIGJ5IHRoZSBPUyB2ZW5kb3IuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpIHtcbiAgICAgICAgLy8gdXNlciBwcm92aWRlZCBwYWNrYWdlIGluc3RlYWQgb2YgYXBwIGZvciAnYXBwJyBjYXBhYmlsaXR5LCBtYXNzYWdlIG9wdGlvbnNcbiAgICAgICAgdGhpcy5vcHRzLmFwcFBhY2thZ2UgPSB0aGlzLm9wdHMuYXBwO1xuICAgICAgICB0aGlzLm9wdHMuYXBwID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgLy8gZmluZCBhbmQgY29weSwgb3IgZG93bmxvYWQgYW5kIHVuemlwIGFuIGFwcCB1cmwgb3IgcGF0aFxuICAgICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCBBUFBfRVhURU5TSU9OKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcFByZXNlbnQoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBPbkRldmljZSkge1xuICAgICAgICAvLyB0aGUgYXBwIGlzbid0IGFuIGFjdHVhbCBhcHAgZmlsZSBidXQgcmF0aGVyIHNvbWV0aGluZyB3ZSB3YW50IHRvXG4gICAgICAgIC8vIGFzc3VtZSBpcyBvbiB0aGUgZGV2aWNlIGFuZCBqdXN0IGxhdW5jaCB2aWEgdGhlIGFwcFBhY2thZ2VcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgQXBwIGZpbGUgd2FzIG5vdCBsaXN0ZWQsIGluc3RlYWQgd2UncmUgZ29pbmcgdG8gcnVuIGAgK1xuICAgICAgICAgIGAke3RoaXMub3B0cy5hcHBQYWNrYWdlfSBkaXJlY3RseSBvbiB0aGUgZGV2aWNlYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tQYWNrYWdlUHJlc2VudCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTb21lIGNsb3VkIHNlcnZpY2VzIHVzaW5nIGFwcGl1bSBsYXVuY2ggdGhlIGF2ZCB0aGVtc2VsdmVzLCBzbyB3ZSBlbnN1cmUgbmV0c3BlZWRcbiAgICAgIC8vIGlzIHNldCBmb3IgZW11bGF0b3JzIGJ5IGNhbGxpbmcgYWRiLm5ldHdvcmtTcGVlZCBiZWZvcmUgcnVubmluZyB0aGUgYXBwXG4gICAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMubmV0d29ya1NwZWVkKSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybignU29ycnksIG5ldHdvcmtTcGVlZCBjYXBhYmlsaXR5IGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBuZXR3b3JrU3BlZWQgPSBlbnN1cmVOZXR3b3JrU3BlZWQodGhpcy5hZGIsIHRoaXMub3B0cy5uZXR3b3JrU3BlZWQpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLm5ldHdvcmtTcGVlZChuZXR3b3JrU3BlZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBjaGVjayBpZiB3ZSBoYXZlIHRvIGVuYWJsZS9kaXNhYmxlIGdwcyBiZWZvcmUgcnVubmluZyB0aGUgYXBwbGljYXRpb25cbiAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5ncHNFbmFibGVkKSkge1xuICAgICAgICBpZiAodGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBUcnlpbmcgdG8gJHt0aGlzLm9wdHMuZ3BzRW5hYmxlZCA/ICdlbmFibGUnIDogJ2Rpc2FibGUnfSBncHMgbG9jYXRpb24gcHJvdmlkZXJgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi50b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyKHRoaXMub3B0cy5ncHNFbmFibGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKCdTb3JyeSEgZ3BzRW5hYmxlZCBjYXBhYmlsaXR5IGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0QW5kcm9pZFNlc3Npb24odGhpcy5vcHRzKTtcbiAgICAgIHJldHVybiBbc2Vzc2lvbklkLCB0aGlzLmNhcHNdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGlnbm9yaW5nIGRlbGV0ZSBzZXNzaW9uIGV4Y2VwdGlvbiBpZiBhbnkgYW5kIHRocm93IHRoZSByZWFsIGVycm9yXG4gICAgICAvLyB0aGF0IGhhcHBlbmVkIHdoaWxlIGNyZWF0aW5nIHRoZSBzZXNzaW9uLlxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGlzRW11bGF0b3IgKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzRW11bGF0b3IodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIH1cblxuICBzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIChjYXBzKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdmQpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ2F2ZCBuYW1lIGRlZmluZWQsIGlnbm9yaW5nIGRldmljZSBuYW1lIGFuZCBwbGF0Zm9ybSB2ZXJzaW9uJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY2Fwcy5kZXZpY2VOYW1lKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBkZXZpY2VOYW1lIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZXMnKTtcbiAgICAgIH1cbiAgICAgIGlmICghY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIHBsYXRmb3JtVmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVkJyk7XG4gICAgICB9XG4gICAgICBsZXQgYXZkRGV2aWNlID0gY2Fwcy5kZXZpY2VOYW1lLnJlcGxhY2UoL1teYS16QS1aMC05Xy5dL2csICctJyk7XG4gICAgICB0aGlzLm9wdHMuYXZkID0gYCR7YXZkRGV2aWNlfV9fJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn1gO1xuICAgIH1cbiAgfVxuXG4gIGdldCBhcHBPbkRldmljZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSB8fCAoIXRoaXMub3B0cy5hcHAgJiZcbiAgICAgICAgICAgdGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHBQYWNrYWdlKSk7XG4gIH1cblxuICBnZXQgaXNDaHJvbWVTZXNzaW9uICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0Nocm9tZUJyb3dzZXIodGhpcy5vcHRzLmJyb3dzZXJOYW1lKTtcbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ID09PSAnaWdub3JlVW5pbXBvcnRhbnRWaWV3cycpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0Q29tcHJlc3NlZExheW91dEhpZXJhcmNoeSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRBbmRyb2lkU2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgQW5kcm9pZCBzZXNzaW9uYCk7XG4gICAgLy8gc2V0IHVwIHRoZSBkZXZpY2UgdG8gcnVuIG9uIChyZWFsIG9yIGVtdWxhdG9yLCBldGMpXG4gICAgdGhpcy5kZWZhdWx0SU1FID0gYXdhaXQgaGVscGVycy5pbml0RGV2aWNlKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuXG4gICAgLy8gc2V0IGFjdHVhbCBkZXZpY2UgbmFtZSwgdWRpZCwgcGxhdGZvcm0gdmVyc2lvbiwgc2NyZWVuIHNpemUsIG1vZGVsIGFuZCBtYW51ZmFjdHVyZXIgZGV0YWlscy5cbiAgICB0aGlzLmNhcHMuZGV2aWNlTmFtZSA9IHRoaXMuYWRiLmN1ckRldmljZUlkO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VVRElEID0gdGhpcy5vcHRzLnVkaWQ7XG4gICAgdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbiA9IGF3YWl0IHRoaXMuYWRiLmdldFBsYXRmb3JtVmVyc2lvbigpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5TaXplID0gYXdhaXQgdGhpcy5hZGIuZ2V0U2NyZWVuU2l6ZSgpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNb2RlbCA9IGF3YWl0IHRoaXMuYWRiLmdldE1vZGVsKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1hbnVmYWN0dXJlciA9IGF3YWl0IHRoaXMuYWRiLmdldE1hbnVmYWN0dXJlcigpO1xuXG4gICAgaWYgKHRoaXMub3B0cy5kaXNhYmxlV2luZG93QW5pbWF0aW9uKSB7XG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuaXNBbmltYXRpb25PbigpKSB7XG4gICAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDI4KSB7IC8vIEFQSSBsZXZlbCAyOCBpcyBBbmRyb2lkIFBcbiAgICAgICAgICAvLyBEb24ndCBmb3JnZXQgdG8gcmVzZXQgdGhlIHJlbGF4aW5nIGluIGRlbGV0ZSBzZXNzaW9uXG4gICAgICAgICAgdGhpcy5sb2cud2FybignUmVsYXhpbmcgaGlkZGVuIGFwaSBwb2xpY3kgdG8gbWFuYWdlIGFuaW1hdGlvbiBzY2FsZScpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEhpZGRlbkFwaVBvbGljeSgnMScsICEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0Rpc2FibGluZyB3aW5kb3cgYW5pbWF0aW9uIGFzIGl0IGlzIHJlcXVlc3RlZCBieSBcImRpc2FibGVXaW5kb3dBbmltYXRpb25cIiBjYXBhYmlsaXR5Jyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFuaW1hdGlvblN0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnV2luZG93IGFuaW1hdGlvbiBpcyBhbHJlYWR5IGRpc2FibGVkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IHVwIGFwcCB1bmRlciB0ZXN0XG4gICAgYXdhaXQgdGhpcy5pbml0QVVUKCk7XG5cbiAgICAvLyBzdGFydCBVaUF1dG9tYXRvclxuICAgIHRoaXMuYm9vdHN0cmFwID0gbmV3IGhlbHBlcnMuYm9vdHN0cmFwKHRoaXMuYWRiLCB0aGlzLm9wdHMuYm9vdHN0cmFwUG9ydCwgdGhpcy5vcHRzLndlYnNvY2tldCk7XG4gICAgYXdhaXQgdGhpcy5ib290c3RyYXAuc3RhcnQodGhpcy5vcHRzLmFwcFBhY2thZ2UsIHRoaXMub3B0cy5kaXNhYmxlQW5kcm9pZFdhdGNoZXJzLCB0aGlzLm9wdHMuYWNjZXB0U3NsQ2VydHMpO1xuICAgIC8vIGhhbmRsaW5nIHVuZXhwZWN0ZWQgc2h1dGRvd25cbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5ib290c3RyYXAub25VbmV4cGVjdGVkU2h1dGRvd247XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmJvb3RzdHJhcC5pZ25vcmVVbmV4cGVjdGVkU2h1dGRvd24pIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSgpO1xuXG5cbiAgICBpZiAodGhpcy5vcHRzLnNraXBVbmxvY2spIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1NraXBwaW5nIGxvY2tzY3JlZW4gY2hlY2snKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuaW5mbygnQ2hlY2tpbmcgZm9yIGxvY2tzY3JlZW4gcHJlc2VuY2UuICcgK1xuICAgICAgICBgVGhpcyBjb3VsZCBiZSBza2lwcGVkIGJ5IHNldHRpbmcgdGhlICdhcHBpdW06c2tpcFVubG9jaycgY2FwYWJpbGl0eSB0byB0cnVlLmApO1xuICAgICAgYXdhaXQgaGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHRoaXMuY2Fwcyk7XG4gICAgfVxuXG4gICAgLy8gU2V0IENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkgb24gdGhlIGRldmljZSBiYXNlZCBvbiBjdXJyZW50IHNldHRpbmdzIG9iamVjdFxuICAgIC8vIHRoaXMgaGFzIHRvIGhhcHBlbiBfYWZ0ZXJfIGJvb3RzdHJhcCBpcyBpbml0aWFsaXplZFxuICAgIGlmICh0aGlzLm9wdHMuaWdub3JlVW5pbXBvcnRhbnRWaWV3cykge1xuICAgICAgYXdhaXQgdGhpcy5zZXR0aW5ncy51cGRhdGUoe2lnbm9yZVVuaW1wb3J0YW50Vmlld3M6IHRoaXMub3B0cy5pZ25vcmVVbmltcG9ydGFudFZpZXdzfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAvLyBzdGFydCBhIGNocm9tZWRyaXZlciBzZXNzaW9uIGFuZCBwcm94eSB0byBpdFxuICAgICAgYXdhaXQgdGhpcy5zdGFydENocm9tZVNlc3Npb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMub3B0cy5hdXRvTGF1bmNoKSB7XG4gICAgICAgIC8vIHN0YXJ0IGFwcFxuICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0QVVUKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLm9yaWVudGF0aW9uKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHt0aGlzLm9wdHMub3JpZW50YXRpb259J2ApO1xuICAgICAgYXdhaXQgdGhpcy5zZXRPcmllbnRhdGlvbih0aGlzLm9wdHMub3JpZW50YXRpb24pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuaW5pdEF1dG9XZWJ2aWV3KCk7XG4gIH1cblxuICBhc3luYyBpbml0QXV0b1dlYnZpZXcgKCkge1xuICAgIGlmICh0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGxldCB2aWV3TmFtZSA9IHRoaXMuZGVmYXVsdFdlYnZpZXdOYW1lKCk7XG4gICAgICBsZXQgdGltZW91dCA9ICh0aGlzLm9wdHMuYXV0b1dlYnZpZXdUaW1lb3V0KSB8fCAyMDAwO1xuXG4gICAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIGF1dG8gd2VidmlldyB0byBjb250ZXh0ICcke3ZpZXdOYW1lfScgd2l0aCB0aW1lb3V0ICR7dGltZW91dH1tc2ApO1xuXG4gICAgICAvLyB0cnkgZXZlcnkgNTAwbXMgdW50aWwgdGltZW91dCBpcyBvdmVyXG4gICAgICBhd2FpdCByZXRyeUludGVydmFsKHRpbWVvdXQgLyA1MDAsIDUwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnNldENvbnRleHQodmlld05hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5pdEFVVCAoKSB7XG4gICAgLy8gcG9wdWxhdGUgYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHksXG4gICAgLy8gYW5kIHRoZSBkZXZpY2UgYmVpbmcgdXNlZFxuICAgIC8vIGluIHRoZSBvcHRzIGFuZCBjYXBzIChzbyBpdCBnZXRzIGJhY2sgdG8gdGhlIHVzZXIgb24gc2Vzc2lvbiBjcmVhdGlvbilcbiAgICBsZXQgbGF1bmNoSW5mbyA9IGF3YWl0IGhlbHBlcnMuZ2V0TGF1bmNoSW5mbyh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0cywgbGF1bmNoSW5mbyk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLmNhcHMsIGxhdW5jaEluZm8pO1xuXG4gICAgLy8gVW5pbnN0YWxsIGFueSB1bmluc3RhbGxPdGhlclBhY2thZ2VzIHdoaWNoIHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICAgIGhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2Fwcyh0aGlzLm9wdHMpO1xuICAgICAgLy8gT25seSBTRVRUSU5HU19IRUxQRVJfUEtHX0lEIHBhY2thZ2UgaXMgdXNlZCBieSBVSUExXG4gICAgICBhd2FpdCBoZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMoXG4gICAgICAgIHRoaXMuYWRiLFxuICAgICAgICBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpLFxuICAgICAgICBbU0VUVElOR1NfSEVMUEVSX1BLR19JRF1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSW5zdGFsbCBhbnkgXCJvdGhlckFwcHNcIiB0aGF0IHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLm90aGVyQXBwcykge1xuICAgICAgbGV0IG90aGVyQXBwcztcbiAgICAgIHRyeSB7XG4gICAgICAgIG90aGVyQXBwcyA9IGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMub3RoZXJBcHBzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIFwib3RoZXJBcHBzXCIgY2FwYWJpbGl0eTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICBvdGhlckFwcHMgPSBhd2FpdCBCLmFsbChvdGhlckFwcHMubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBBUFBfRVhURU5TSU9OKSkpO1xuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsT3RoZXJBcGtzKG90aGVyQXBwcywgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfVxuXG4gICAgLy8gaW5zdGFsbCBhcHBcbiAgICBpZiAoIXRoaXMub3B0cy5hcHApIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0KSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ0Z1bGwgcmVzZXQgcmVxdWlyZXMgYW4gYXBwIGNhcGFiaWxpdHksIHVzZSBmYXN0UmVzZXQgaWYgYXBwIGlzIG5vdCBwcm92aWRlZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoJ05vIGFwcCBjYXBhYmlsaXR5LiBBc3N1bWluZyBpdCBpcyBhbHJlYWR5IG9uIHRoZSBkZXZpY2UnKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZmFzdFJlc2V0KSB7XG4gICAgICAgIGF3YWl0IGhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmluc3RhbGwpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgfVxuICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEFwayh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBjb25zdCBhcGtTdHJpbmdzRm9yTGFuZ3VhZ2UgPSBhd2FpdCBoZWxwZXJzLnB1c2hTdHJpbmdzKHRoaXMub3B0cy5sYW5ndWFnZSwgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgaWYgKHRoaXMub3B0cy5sYW5ndWFnZSkge1xuICAgICAgdGhpcy5hcGtTdHJpbmdzW3RoaXMub3B0cy5sYW5ndWFnZV0gPSBhcGtTdHJpbmdzRm9yTGFuZ3VhZ2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtdXN0IHJ1biBhZnRlciBpbnN0YWxsaW5nIHRoZSBhcGssIG90aGVyd2lzZSBpdCB3b3VsZCBjYXVzZSB0aGVcbiAgICAvLyBpbnN0YWxsIHRvIGZhaWwuIEFuZCBiZWZvcmUgcnVubmluZyB0aGUgYXBwLlxuICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLm9wdHMuc2hhcmVkUHJlZmVyZW5jZXMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldFNoYXJlZFByZWZlcmVuY2VzKHRoaXMub3B0cyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2hlY2tBcHBQcmVzZW50ICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnQ2hlY2tpbmcgd2hldGhlciBhcHAgaXMgYWN0dWFsbHkgcHJlc2VudCcpO1xuICAgIGlmICghKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm9wdHMuYXBwKSkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIGFwcCBhcGsgYXQgJHt0aGlzLm9wdHMuYXBwfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNoZWNrUGFja2FnZVByZXNlbnQgKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdDaGVja2luZyB3aGV0aGVyIHBhY2thZ2UgaXMgcHJlc2VudCBvbiB0aGUgZGV2aWNlJyk7XG4gICAgaWYgKCEoYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydwbScsICdsaXN0JywgJ3BhY2thZ2VzJywgdGhpcy5vcHRzLmFwcFBhY2thZ2VdKSkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIHBhY2thZ2UgJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0gb24gdGhlIGRldmljZWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IG9uIHRoZSBkZXZpY2VcbiAgYXN5bmMgc2V0Q29tcHJlc3NlZExheW91dEhpZXJhcmNoeSAoY29tcHJlc3MpIHtcbiAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdjb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5Jywge2NvbXByZXNzTGF5b3V0OiBjb21wcmVzc30pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ1NodXR0aW5nIGRvd24gQW5kcm9pZCBkcml2ZXInKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgICBhd2FpdCBoZWxwZXJzLnJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgYXdhaXQgdGhpcy5tb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nKCk7XG5cbiAgICBhd2FpdCBzdXBlci5kZWxldGVTZXNzaW9uKCk7XG5cbiAgICBpZiAodGhpcy5ib290c3RyYXApIHtcbiAgICAgIC8vIGNlcnRhaW4gY2xlYW51cCB3ZSBvbmx5IGNhcmUgdG8gZG8gaWYgdGhlIGJvb3RzdHJhcCB3YXMgZXZlciBydW5cbiAgICAgIGF3YWl0IHRoaXMuc3RvcENocm9tZWRyaXZlclByb3hpZXMoKTtcbiAgICAgIGlmICh0aGlzLm9wdHMudW5pY29kZUtleWJvYXJkICYmIHRoaXMub3B0cy5yZXNldEtleWJvYXJkICYmIHRoaXMuZGVmYXVsdElNRSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgUmVzZXR0aW5nIElNRSB0byAke3RoaXMuZGVmYXVsdElNRX1gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGI/LnNldElNRSh0aGlzLmRlZmF1bHRJTUUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzQ2hyb21lU2Vzc2lvbiAmJiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYj8uZm9yY2VTdG9wKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5nb1RvSG9tZSgpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsICYmICF0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5ib290c3RyYXAuc2h1dGRvd24oKTtcbiAgICAgIHRoaXMuYm9vdHN0cmFwID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZGVidWcoXCJDYWxsZWQgZGVsZXRlU2Vzc2lvbiBidXQgYm9vdHN0cmFwIHdhc24ndCBhY3RpdmVcIik7XG4gICAgfVxuICAgIC8vIHNvbWUgY2xlYW51cCB3ZSB3YW50IHRvIGRvIHJlZ2FyZGxlc3MsIGluIGNhc2Ugd2UgYXJlIHNodXR0aW5nIGRvd25cbiAgICAvLyBtaWQtc3RhcnR1cFxuICAgIGF3YWl0IHRoaXMuYWRiPy5zdG9wTG9nY2F0KCk7XG4gICAgaWYgKHRoaXMudXNlVW5sb2NrSGVscGVyQXBwKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYj8uZm9yY2VTdG9wKCdpby5hcHBpdW0udW5sb2NrJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnUmVzdG9yaW5nIHdpbmRvdyBhbmltYXRpb24gc3RhdGUnKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5zZXRBbmltYXRpb25TdGF0ZSh0cnVlKTtcblxuICAgICAgLy8gVGhpcyB3YXMgbmVjZXNzYXJ5IHRvIGNoYW5nZSBhbmltYXRpb24gc2NhbGUgb3ZlciBBbmRyb2lkIFAuIFdlIG11c3QgcmVzZXQgdGhlIHBvbGljeSBmb3IgdGhlIHNlY3VyaXR5LlxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiPy5nZXRBcGlMZXZlbCgpID49IDI4KSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1Jlc3RvcmluZyBoaWRkZW4gYXBpIHBvbGljeSB0byB0aGUgZGV2aWNlIGRlZmF1bHQgY29uZmlndXJhdGlvbicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYj8uc2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSghIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgIGxldCBhdmROYW1lID0gdGhpcy5vcHRzLmF2ZC5yZXBsYWNlKCdAJywgJycpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYGNsb3NpbmcgZW11bGF0b3IgJyR7YXZkTmFtZX0nYCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYj8ua2lsbEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNldFNoYXJlZFByZWZlcmVuY2VzICgpIHtcbiAgICBsZXQgc2hhcmVkUHJlZnMgPSB0aGlzLm9wdHMuc2hhcmVkUHJlZmVyZW5jZXM7XG4gICAgdGhpcy5sb2cuaW5mbygnVHJ5aW5nIHRvIHNldCBzaGFyZWQgcHJlZmVyZW5jZXMnKTtcbiAgICBsZXQgbmFtZSA9IHNoYXJlZFByZWZzLm5hbWU7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYFNraXBwaW5nIHNldHRpbmcgU2hhcmVkIHByZWZlcmVuY2VzLCBuYW1lIGlzIHVuZGVmaW5lZDogJHtKU09OLnN0cmluZ2lmeShzaGFyZWRQcmVmcyl9YCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCByZW1vdGVQYXRoID0gYC9kYXRhL2RhdGEvJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0vc2hhcmVkX3ByZWZzYDtcbiAgICBsZXQgcmVtb3RlRmlsZSA9IGAke3JlbW90ZVBhdGh9LyR7bmFtZX0ueG1sYDtcbiAgICBsZXQgbG9jYWxQYXRoID0gYC90bXAvJHtuYW1lfS54bWxgO1xuICAgIGxldCBidWlsZGVyID0gdGhpcy5nZXRQcmVmc0J1aWxkZXIoKTtcbiAgICBidWlsZGVyLmJ1aWxkKHNoYXJlZFByZWZzLnByZWZzKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBDcmVhdGluZyB0ZW1wb3Jhcnkgc2hhcmVkIHByZWZlcmVuY2VzOiAke2xvY2FsUGF0aH1gKTtcbiAgICBidWlsZGVyLnRvRmlsZShsb2NhbFBhdGgpO1xuICAgIHRoaXMubG9nLmluZm8oYENyZWF0aW5nIHNoYXJlZF9wcmVmcyByZW1vdGUgZm9sZGVyOiAke3JlbW90ZVBhdGh9YCk7XG4gICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydta2RpcicsICctcCcsIHJlbW90ZVBhdGhdKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBQdXNoaW5nIHNoYXJlZF9wcmVmcyB0byAke3JlbW90ZUZpbGV9YCk7XG4gICAgYXdhaXQgdGhpcy5hZGIucHVzaChsb2NhbFBhdGgsIHJlbW90ZUZpbGUpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBUcnlpbmcgdG8gcmVtb3ZlIHNoYXJlZCBwcmVmZXJlbmNlcyB0ZW1wb3JhcnkgZmlsZWApO1xuICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhsb2NhbFBhdGgpKSB7XG4gICAgICAgIGF3YWl0IGZzLnVubGluayhsb2NhbFBhdGgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYEVycm9yIHRyeWluZyB0byByZW1vdmUgdGVtcG9yYXJ5IGZpbGUgJHtsb2NhbFBhdGh9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0UHJlZnNCdWlsZGVyICgpIHtcbiAgICAvKiBBZGQgdGhpcyBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFNoYXJlZFByZWZzQnVpbGRlciBpbnN0ZWFkIG9mXG4gICAgICogZGlyZWN0bHkgY3JlYXRpbmcgdGhlIG9iamVjdCBvbiBzZXRTaGFyZWRQcmVmZXJlbmNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlc1xuICAgICovXG4gICAgcmV0dXJuIG5ldyBTaGFyZWRQcmVmc0J1aWxkZXIoKTtcbiAgfVxuXG4gIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgICBpZiAoIXN1cGVyLnZhbGlkYXRlRGVzaXJlZENhcHMoY2FwcykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCghY2Fwcy5icm93c2VyTmFtZSB8fCAhaGVscGVycy5pc0Nocm9tZUJyb3dzZXIoY2Fwcy5icm93c2VyTmFtZSkpICYmICFjYXBzLmFwcCAmJiAhY2Fwcy5hcHBQYWNrYWdlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdUaGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMgbXVzdCBpbmNsdWRlIGVpdGhlciBhbiBhcHAsIGFwcFBhY2thZ2Ugb3IgYnJvd3Nlck5hbWUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKTtcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBY3RpdmU7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKTtcblxuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QXZvaWQ7XG4gIH1cblxuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuY2FuUHJveHkoc2Vzc2lvbklkKTtcblxuICAgIC8vIHRoaXMgd2lsbCBjaGFuZ2UgZGVwZW5kaW5nIG9uIENocm9tZURyaXZlciBzdGF0dXNcbiAgICByZXR1cm4gXy5pc0Z1bmN0aW9uKHRoaXMucHJveHlSZXFSZXMpO1xuICB9XG59XG5cbmV4cG9ydCB7IEFuZHJvaWREcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWREcml2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLGFBQWEsR0FBRyxNQUFNO0FBQzVCLE1BQU1DLFdBQVcsR0FBRyxJQUFJO0FBSXhCLE1BQU1DLFFBQVEsR0FBRyxDQUNmLENBQUMsTUFBTSxFQUFFLElBQUlDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQy9DLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQzlDLENBQUMsTUFBTSxFQUFF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
@@ -1 +1 @@
1
- {"version":3,"file":"driver.js","names":["APP_EXTENSION","DEVICE_PORT","NO_PROXY","RegExp","AndroidDriver","BaseDriver","constructor","opts","shouldValidateCaps","locatorStrategies","desiredCapConstraints","desiredConstraints","sessionChromedrivers","jwpProxyActive","jwpProxyAvoid","_","clone","settings","DeviceSettings","ignoreUnimportantViews","onSettingsUpdate","bind","chromedriver","apkStrings","unlocker","helpers","cmd","fn","toPairs","commands","prototype","curContext","defaultContextName","createSession","args","sessionId","caps","serverDetails","platform","webStorageEnabled","takesScreenshot","javascriptEnabled","databaseEnabled","networkConnectionEnabled","locationContextEnabled","warnings","desired","Object","assign","defaultOpts","action","category","flags","disableAndroidWatchers","tmpDir","tempDir","staticDir","fullReset","autoLaunch","adbPort","DEFAULT_ADB_PORT","bootstrapPort","androidInstallTimeout","defaults","useUnlockHelperApp","isUndefined","unlockType","noReset","fastReset","skipUninstall","isChromeSession","adjustBrowserSessionCaps","nativeWebScreenshot","push","reboot","setAvdFromCapabilities","udid","emPort","getDeviceInfoFromCaps","adb","createADB","suppressKillServer","remoteAdbHost","clearDeviceLogsOnStart","adbExecTimeout","allowOfflineDevices","getApiLevel","log","warn","isPackageOrBundle","app","appPackage","configureApp","checkAppPresent","appOnDevice","info","checkPackagePresent","util","hasValue","networkSpeed","isEmulator","ensureNetworkSpeed","gpsEnabled","toggleGPSLocationProvider","startAndroidSession","e","deleteSession","ign","avd","deviceName","errorAndThrow","platformVersion","avdDevice","replace","isChromeBrowser","browserName","key","value","setCompressedLayoutHierarchy","defaultIME","initDevice","curDeviceId","deviceUDID","getPlatformVersion","deviceScreenSize","getScreenSize","deviceModel","getModel","deviceManufacturer","getManufacturer","disableWindowAnimation","isAnimationOn","setHiddenApiPolicy","ignoreHiddenApiPolicyError","setAnimationState","_wasWindowAnimationDisabled","initAUT","bootstrap","websocket","start","acceptSslCerts","onUnexpectedShutdown","err","ignoreUnexpectedShutdown","startUnexpectedShutdown","skipUnlock","unlock","update","startChromeSession","startAUT","orientation","debug","setOrientation","initAutoWebview","autoWebview","viewName","defaultWebviewName","timeout","autoWebviewTimeout","retryInterval","setContext","launchInfo","getLaunchInfo","uninstallOtherPackages","validateDesiredCaps","parseArray","SETTINGS_HELPER_PKG_ID","otherApps","message","B","all","map","installOtherApks","resetApp","uninstallApk","installApk","apkStringsForLanguage","pushStrings","language","sharedPreferences","setSharedPreferences","fs","exists","shell","compress","sendAction","compressLayout","isEmpty","_screenRecordingProperties","stopRecordingScreen","removeAllSessionWebSocketHandlers","server","mobileStopScreenStreaming","stopChromedriverProxies","unicodeKeyboard","resetKeyboard","setIME","dontStopAppOnReset","forceStop","goToHome","shutdown","stopLogcat","setDefaultHiddenApiPolicy","avdName","killEmulator","sharedPrefs","name","JSON","stringify","remotePath","remoteFile","localPath","builder","getPrefsBuilder","build","prefs","toFile","unlink","SharedPrefsBuilder","proxyActive","getProxyAvoidList","canProxy","isFunction","proxyReqRes"],"sources":["../../lib/driver.js"],"sourcesContent":["import { BaseDriver, DeviceSettings } from 'appium/driver';\nimport desiredConstraints from './desired-caps';\nimport commands from './commands/index';\nimport {\n helpers, ensureNetworkSpeed,\n SETTINGS_HELPER_PKG_ID,\n} from './android-helpers';\nimport _ from 'lodash';\nimport { DEFAULT_ADB_PORT } from 'appium-adb';\nimport { fs, tempDir, util } from '@appium/support';\nimport { retryInterval } from 'asyncbox';\nimport { SharedPrefsBuilder } from 'shared-preferences-builder';\nimport B from 'bluebird';\n\nconst APP_EXTENSION = '.apk';\nconst DEVICE_PORT = 4724;\n\n// This is a set of methods and paths that we never want to proxy to\n// Chromedriver\nconst NO_PROXY = [\n ['POST', new RegExp('^/session/[^/]+/context')],\n ['GET', new RegExp('^/session/[^/]+/context')],\n ['POST', new RegExp('^/session/[^/]+/appium')],\n ['GET', new RegExp('^/session/[^/]+/appium')],\n ['POST', new RegExp('^/session/[^/]+/touch/perform')],\n ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')],\n ['POST', new RegExp('^/session/[^/]+/orientation')],\n ['GET', new RegExp('^/session/[^/]+/orientation')],\n ['POST', new RegExp('^/session/[^/]+/execute')],\n ['POST', new RegExp('^/session/[^/]+/execute/sync')],\n ['GET', new RegExp('^/session/[^/]+/network_connection')],\n ['POST', new RegExp('^/session/[^/]+/network_connection')],\n];\n\nclass AndroidDriver extends BaseDriver {\n constructor (opts = {}, shouldValidateCaps = true) {\n super(opts, shouldValidateCaps);\n\n this.locatorStrategies = [\n 'xpath',\n 'id',\n 'class name',\n 'accessibility id',\n '-android uiautomator'\n ];\n this.desiredCapConstraints = desiredConstraints;\n this.sessionChromedrivers = {};\n this.jwpProxyActive = false;\n this.jwpProxyAvoid = _.clone(NO_PROXY);\n this.settings = new DeviceSettings({ignoreUnimportantViews: false},\n this.onSettingsUpdate.bind(this));\n this.chromedriver = null;\n this.apkStrings = {};\n this.unlocker = helpers.unlocker;\n\n for (let [cmd, fn] of _.toPairs(commands)) {\n AndroidDriver.prototype[cmd] = fn;\n }\n\n // needs to be after the line which assigns commands to AndroidDriver.prototype, so that `this.defaultContextName` is defined.\n this.curContext = this.defaultContextName();\n }\n\n async createSession (...args) {\n // the whole createSession flow is surrounded in a try-catch statement\n // if creating a session fails at any point, we teardown everything we\n // set up before throwing the error.\n try {\n let [sessionId, caps] = await super.createSession(...args);\n\n let serverDetails = {\n platform: 'LINUX',\n webStorageEnabled: false,\n takesScreenshot: true,\n javascriptEnabled: true,\n databaseEnabled: false,\n networkConnectionEnabled: true,\n locationContextEnabled: false,\n warnings: {},\n desired: this.caps\n };\n\n this.caps = Object.assign(serverDetails, this.caps);\n\n // assigning defaults\n let defaultOpts = {\n action: 'android.intent.action.MAIN',\n category: 'android.intent.category.LAUNCHER',\n flags: '0x10200000',\n disableAndroidWatchers: false,\n tmpDir: await tempDir.staticDir(),\n fullReset: false,\n autoLaunch: true,\n adbPort: DEFAULT_ADB_PORT,\n bootstrapPort: DEVICE_PORT,\n androidInstallTimeout: 90000,\n };\n _.defaults(this.opts, defaultOpts);\n this.useUnlockHelperApp = _.isUndefined(this.caps.unlockType);\n\n // not user visible via caps\n if (this.opts.noReset === true) {\n this.opts.fullReset = false;\n }\n if (this.opts.fullReset === true) {\n this.opts.noReset = false;\n }\n this.opts.fastReset = !this.opts.fullReset && !this.opts.noReset;\n this.opts.skipUninstall = this.opts.fastReset || this.opts.noReset;\n\n if (this.isChromeSession) {\n helpers.adjustBrowserSessionCaps(this.opts);\n }\n\n if (this.opts.nativeWebScreenshot) {\n this.jwpProxyAvoid.push(['GET', new RegExp('^/session/[^/]+/screenshot')]);\n }\n\n if (this.opts.reboot) {\n this.setAvdFromCapabilities(caps);\n }\n\n // get device udid for this session\n let {udid, emPort} = await helpers.getDeviceInfoFromCaps(this.opts);\n this.opts.udid = udid;\n this.opts.emPort = emPort;\n\n // set up an instance of ADB\n this.adb = await helpers.createADB({\n udid: this.opts.udid,\n emPort: this.opts.emPort,\n adbPort: this.opts.adbPort,\n suppressKillServer: this.opts.suppressKillServer,\n remoteAdbHost: this.opts.remoteAdbHost,\n clearDeviceLogsOnStart: this.opts.clearDeviceLogsOnStart,\n adbExecTimeout: this.opts.adbExecTimeout,\n allowOfflineDevices: this.opts.allowOfflineDevices,\n });\n\n if (await this.adb.getApiLevel() >= 23) {\n this.log.warn(\"Consider setting 'automationName' capability to \" +\n \"'uiautomator2' on Android >= 6, since UIAutomator framework \" +\n 'is not maintained anymore by the OS vendor.');\n }\n\n if (this.helpers.isPackageOrBundle(this.opts.app)) {\n // user provided package instead of app for 'app' capability, massage options\n this.opts.appPackage = this.opts.app;\n this.opts.app = null;\n }\n\n if (this.opts.app) {\n // find and copy, or download and unzip an app url or path\n this.opts.app = await this.helpers.configureApp(this.opts.app, APP_EXTENSION);\n await this.checkAppPresent();\n } else if (this.appOnDevice) {\n // the app isn't an actual app file but rather something we want to\n // assume is on the device and just launch via the appPackage\n this.log.info(`App file was not listed, instead we're going to run ` +\n `${this.opts.appPackage} directly on the device`);\n await this.checkPackagePresent();\n }\n\n // Some cloud services using appium launch the avd themselves, so we ensure netspeed\n // is set for emulators by calling adb.networkSpeed before running the app\n if (util.hasValue(this.opts.networkSpeed)) {\n if (!this.isEmulator()) {\n this.log.warn('Sorry, networkSpeed capability is only available for emulators');\n } else {\n const networkSpeed = ensureNetworkSpeed(this.adb, this.opts.networkSpeed);\n await this.adb.networkSpeed(networkSpeed);\n }\n }\n // check if we have to enable/disable gps before running the application\n if (util.hasValue(this.opts.gpsEnabled)) {\n if (this.isEmulator()) {\n this.log.info(`Trying to ${this.opts.gpsEnabled ? 'enable' : 'disable'} gps location provider`);\n await this.adb.toggleGPSLocationProvider(this.opts.gpsEnabled);\n } else {\n this.log.warn('Sorry! gpsEnabled capability is only available for emulators');\n }\n }\n\n await this.startAndroidSession(this.opts);\n return [sessionId, this.caps];\n } catch (e) {\n // ignoring delete session exception if any and throw the real error\n // that happened while creating the session.\n try {\n await this.deleteSession();\n } catch (ign) {}\n throw e;\n }\n }\n\n isEmulator () {\n return helpers.isEmulator(this.adb, this.opts);\n }\n\n setAvdFromCapabilities (caps) {\n if (this.opts.avd) {\n this.log.info('avd name defined, ignoring device name and platform version');\n } else {\n if (!caps.deviceName) {\n this.log.errorAndThrow('avd or deviceName should be specified when reboot option is enables');\n }\n if (!caps.platformVersion) {\n this.log.errorAndThrow('avd or platformVersion should be specified when reboot option is enabled');\n }\n let avdDevice = caps.deviceName.replace(/[^a-zA-Z0-9_.]/g, '-');\n this.opts.avd = `${avdDevice}__${caps.platformVersion}`;\n }\n }\n\n get appOnDevice () {\n return this.helpers.isPackageOrBundle(this.opts.app) || (!this.opts.app &&\n this.helpers.isPackageOrBundle(this.opts.appPackage));\n }\n\n get isChromeSession () {\n return helpers.isChromeBrowser(this.opts.browserName);\n }\n\n async onSettingsUpdate (key, value) {\n if (key === 'ignoreUnimportantViews') {\n await this.setCompressedLayoutHierarchy(value);\n }\n }\n\n async startAndroidSession () {\n this.log.info(`Starting Android session`);\n // set up the device to run on (real or emulator, etc)\n this.defaultIME = await helpers.initDevice(this.adb, this.opts);\n\n // set actual device name, udid, platform version, screen size, model and manufacturer details.\n this.caps.deviceName = this.adb.curDeviceId;\n this.caps.deviceUDID = this.opts.udid;\n this.caps.platformVersion = await this.adb.getPlatformVersion();\n this.caps.deviceScreenSize = await this.adb.getScreenSize();\n this.caps.deviceModel = await this.adb.getModel();\n this.caps.deviceManufacturer = await this.adb.getManufacturer();\n\n if (this.opts.disableWindowAnimation) {\n if (await this.adb.isAnimationOn()) {\n if (await this.adb.getApiLevel() >= 28) { // API level 28 is Android P\n // Don't forget to reset the relaxing in delete session\n this.log.warn('Relaxing hidden api policy to manage animation scale');\n await this.adb.setHiddenApiPolicy('1', !!this.opts.ignoreHiddenApiPolicyError);\n }\n\n this.log.info('Disabling window animation as it is requested by \"disableWindowAnimation\" capability');\n await this.adb.setAnimationState(false);\n this._wasWindowAnimationDisabled = true;\n } else {\n this.log.info('Window animation is already disabled');\n }\n }\n\n // set up app under test\n await this.initAUT();\n\n // start UiAutomator\n this.bootstrap = new helpers.bootstrap(this.adb, this.opts.bootstrapPort, this.opts.websocket);\n await this.bootstrap.start(this.opts.appPackage, this.opts.disableAndroidWatchers, this.opts.acceptSslCerts);\n // handling unexpected shutdown\n (async () => {\n try {\n await this.bootstrap.onUnexpectedShutdown;\n } catch (err) {\n if (!this.bootstrap.ignoreUnexpectedShutdown) {\n await this.startUnexpectedShutdown(err);\n }\n }\n })();\n\n\n if (this.opts.skipUnlock) {\n this.log.info('Skipping lockscreen check');\n } else {\n this.log.info('Checking for lockscreen presence. ' +\n `This could be skipped by setting the 'appium:skipUnlock' capability to true.`);\n await helpers.unlock(this, this.adb, this.caps);\n }\n\n // Set CompressedLayoutHierarchy on the device based on current settings object\n // this has to happen _after_ bootstrap is initialized\n if (this.opts.ignoreUnimportantViews) {\n await this.settings.update({ignoreUnimportantViews: this.opts.ignoreUnimportantViews});\n }\n\n if (this.isChromeSession) {\n // start a chromedriver session and proxy to it\n await this.startChromeSession();\n } else {\n if (this.opts.autoLaunch) {\n // start app\n await this.startAUT();\n }\n }\n\n if (util.hasValue(this.opts.orientation)) {\n this.log.debug(`Setting initial orientation to '${this.opts.orientation}'`);\n await this.setOrientation(this.opts.orientation);\n }\n\n await this.initAutoWebview();\n }\n\n async initAutoWebview () {\n if (this.opts.autoWebview) {\n let viewName = this.defaultWebviewName();\n let timeout = (this.opts.autoWebviewTimeout) || 2000;\n\n this.log.info(`Setting auto webview to context '${viewName}' with timeout ${timeout}ms`);\n\n // try every 500ms until timeout is over\n await retryInterval(timeout / 500, 500, async () => {\n await this.setContext(viewName);\n });\n }\n }\n\n async initAUT () {\n // populate appPackage, appActivity, appWaitPackage, appWaitActivity,\n // and the device being used\n // in the opts and caps (so it gets back to the user on session creation)\n let launchInfo = await helpers.getLaunchInfo(this.adb, this.opts);\n Object.assign(this.opts, launchInfo);\n Object.assign(this.caps, launchInfo);\n\n // Uninstall any uninstallOtherPackages which were specified in caps\n if (this.opts.uninstallOtherPackages) {\n helpers.validateDesiredCaps(this.opts);\n // Only SETTINGS_HELPER_PKG_ID package is used by UIA1\n await helpers.uninstallOtherPackages(\n this.adb,\n helpers.parseArray(this.opts.uninstallOtherPackages),\n [SETTINGS_HELPER_PKG_ID]\n );\n }\n\n // Install any \"otherApps\" that were specified in caps\n if (this.opts.otherApps) {\n let otherApps;\n try {\n otherApps = helpers.parseArray(this.opts.otherApps);\n } catch (e) {\n this.log.errorAndThrow(`Could not parse \"otherApps\" capability: ${e.message}`);\n }\n otherApps = await B.all(otherApps.map((app) => this.helpers.configureApp(app, APP_EXTENSION)));\n await helpers.installOtherApks(otherApps, this.adb, this.opts);\n }\n\n // install app\n if (!this.opts.app) {\n if (this.opts.fullReset) {\n this.log.errorAndThrow('Full reset requires an app capability, use fastReset if app is not provided');\n }\n this.log.debug('No app capability. Assuming it is already on the device');\n if (this.opts.fastReset) {\n await helpers.resetApp(this.adb, this.opts);\n }\n return;\n }\n if (!this.opts.skipUninstall) {\n await this.adb.uninstallApk(this.opts.appPackage);\n }\n await helpers.installApk(this.adb, this.opts);\n const apkStringsForLanguage = await helpers.pushStrings(this.opts.language, this.adb, this.opts);\n if (this.opts.language) {\n this.apkStrings[this.opts.language] = apkStringsForLanguage;\n }\n\n // This must run after installing the apk, otherwise it would cause the\n // install to fail. And before running the app.\n if (!_.isUndefined(this.opts.sharedPreferences)) {\n await this.setSharedPreferences(this.opts);\n }\n }\n\n async checkAppPresent () {\n this.log.debug('Checking whether app is actually present');\n if (!(await fs.exists(this.opts.app))) {\n this.log.errorAndThrow(`Could not find app apk at ${this.opts.app}`);\n }\n }\n\n async checkPackagePresent () {\n this.log.debug('Checking whether package is present on the device');\n if (!(await this.adb.shell(['pm', 'list', 'packages', this.opts.appPackage]))) {\n this.log.errorAndThrow(`Could not find package ${this.opts.appPackage} on the device`);\n }\n }\n\n // Set CompressedLayoutHierarchy on the device\n async setCompressedLayoutHierarchy (compress) {\n await this.bootstrap.sendAction('compressedLayoutHierarchy', {compressLayout: compress});\n }\n\n async deleteSession () {\n this.log.debug('Shutting down Android driver');\n\n try {\n if (!_.isEmpty(this._screenRecordingProperties)) {\n await this.stopRecordingScreen();\n }\n } catch (ign) {}\n\n await helpers.removeAllSessionWebSocketHandlers(this.server, this.sessionId);\n\n await this.mobileStopScreenStreaming();\n\n await super.deleteSession();\n\n if (this.bootstrap) {\n // certain cleanup we only care to do if the bootstrap was ever run\n await this.stopChromedriverProxies();\n if (this.opts.unicodeKeyboard && this.opts.resetKeyboard && this.defaultIME) {\n this.log.debug(`Resetting IME to ${this.defaultIME}`);\n await this.adb?.setIME(this.defaultIME);\n }\n if (!this.isChromeSession && !this.opts.dontStopAppOnReset) {\n await this.adb?.forceStop(this.opts.appPackage);\n }\n await this.adb?.goToHome();\n if (this.opts.fullReset && !this.opts.skipUninstall && !this.appOnDevice) {\n await this.adb?.uninstallApk(this.opts.appPackage);\n }\n await this.bootstrap.shutdown();\n this.bootstrap = null;\n } else {\n this.log.debug(\"Called deleteSession but bootstrap wasn't active\");\n }\n // some cleanup we want to do regardless, in case we are shutting down\n // mid-startup\n await this.adb?.stopLogcat();\n if (this.useUnlockHelperApp) {\n await this.adb?.forceStop('io.appium.unlock');\n }\n if (this._wasWindowAnimationDisabled) {\n this.log.info('Restoring window animation state');\n await this.adb?.setAnimationState(true);\n\n // This was necessary to change animation scale over Android P. We must reset the policy for the security.\n if (await this.adb?.getApiLevel() >= 28) {\n this.log.info('Restoring hidden api policy to the device default configuration');\n await this.adb?.setDefaultHiddenApiPolicy(!!this.opts.ignoreHiddenApiPolicyError);\n }\n }\n\n if (this.opts.reboot) {\n let avdName = this.opts.avd.replace('@', '');\n this.log.debug(`closing emulator '${avdName}'`);\n await this.adb?.killEmulator(avdName);\n }\n }\n\n async setSharedPreferences () {\n let sharedPrefs = this.opts.sharedPreferences;\n this.log.info('Trying to set shared preferences');\n let name = sharedPrefs.name;\n if (_.isUndefined(name)) {\n this.log.warn(`Skipping setting Shared preferences, name is undefined: ${JSON.stringify(sharedPrefs)}`);\n return false;\n }\n let remotePath = `/data/data/${this.opts.appPackage}/shared_prefs`;\n let remoteFile = `${remotePath}/${name}.xml`;\n let localPath = `/tmp/${name}.xml`;\n let builder = this.getPrefsBuilder();\n builder.build(sharedPrefs.prefs);\n this.log.info(`Creating temporary shared preferences: ${localPath}`);\n builder.toFile(localPath);\n this.log.info(`Creating shared_prefs remote folder: ${remotePath}`);\n await this.adb.shell(['mkdir', '-p', remotePath]);\n this.log.info(`Pushing shared_prefs to ${remoteFile}`);\n await this.adb.push(localPath, remoteFile);\n try {\n this.log.info(`Trying to remove shared preferences temporary file`);\n if (await fs.exists(localPath)) {\n await fs.unlink(localPath);\n }\n } catch (e) {\n this.log.warn(`Error trying to remove temporary file ${localPath}`);\n }\n return true;\n }\n\n getPrefsBuilder () {\n /* Add this method to create a new SharedPrefsBuilder instead of\n * directly creating the object on setSharedPreferences for testing purposes\n */\n return new SharedPrefsBuilder();\n }\n\n validateDesiredCaps (caps) {\n if (!super.validateDesiredCaps(caps)) {\n return false;\n }\n if ((!caps.browserName || !helpers.isChromeBrowser(caps.browserName)) && !caps.app && !caps.appPackage) {\n this.log.errorAndThrow('The desired capabilities must include either an app, appPackage or browserName');\n }\n return helpers.validateDesiredCaps(caps);\n }\n\n proxyActive (sessionId) {\n super.proxyActive(sessionId);\n\n return this.jwpProxyActive;\n }\n\n getProxyAvoidList (sessionId) {\n super.getProxyAvoidList(sessionId);\n\n return this.jwpProxyAvoid;\n }\n\n canProxy (sessionId) {\n super.canProxy(sessionId);\n\n // this will change depending on ChromeDriver status\n return _.isFunction(this.proxyReqRes);\n }\n}\n\nexport { AndroidDriver };\nexport default AndroidDriver;\n"],"mappings":"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"}
1
+ {"version":3,"file":"driver.js","names":["APP_EXTENSION","DEVICE_PORT","NO_PROXY","RegExp","AndroidDriver","BaseDriver","newMethodMap","constructor","opts","shouldValidateCaps","locatorStrategies","desiredCapConstraints","desiredConstraints","sessionChromedrivers","jwpProxyActive","jwpProxyAvoid","_","clone","settings","DeviceSettings","ignoreUnimportantViews","onSettingsUpdate","bind","chromedriver","apkStrings","unlocker","helpers","cmd","fn","toPairs","commands","prototype","curContext","defaultContextName","createSession","args","sessionId","caps","serverDetails","platform","webStorageEnabled","takesScreenshot","javascriptEnabled","databaseEnabled","networkConnectionEnabled","locationContextEnabled","warnings","desired","Object","assign","defaultOpts","action","category","flags","disableAndroidWatchers","tmpDir","tempDir","staticDir","fullReset","autoLaunch","adbPort","DEFAULT_ADB_PORT","bootstrapPort","androidInstallTimeout","defaults","useUnlockHelperApp","isUndefined","unlockType","noReset","fastReset","skipUninstall","isChromeSession","adjustBrowserSessionCaps","nativeWebScreenshot","push","reboot","setAvdFromCapabilities","udid","emPort","getDeviceInfoFromCaps","adb","createADB","suppressKillServer","remoteAdbHost","clearDeviceLogsOnStart","adbExecTimeout","allowOfflineDevices","getApiLevel","log","warn","isPackageOrBundle","app","appPackage","configureApp","checkAppPresent","appOnDevice","info","checkPackagePresent","util","hasValue","networkSpeed","isEmulator","ensureNetworkSpeed","gpsEnabled","toggleGPSLocationProvider","startAndroidSession","e","deleteSession","ign","avd","deviceName","errorAndThrow","platformVersion","avdDevice","replace","isChromeBrowser","browserName","key","value","setCompressedLayoutHierarchy","defaultIME","initDevice","curDeviceId","deviceUDID","getPlatformVersion","deviceScreenSize","getScreenSize","deviceModel","getModel","deviceManufacturer","getManufacturer","disableWindowAnimation","isAnimationOn","setHiddenApiPolicy","ignoreHiddenApiPolicyError","setAnimationState","_wasWindowAnimationDisabled","initAUT","bootstrap","websocket","start","acceptSslCerts","onUnexpectedShutdown","err","ignoreUnexpectedShutdown","startUnexpectedShutdown","skipUnlock","unlock","update","startChromeSession","startAUT","orientation","debug","setOrientation","initAutoWebview","autoWebview","viewName","defaultWebviewName","timeout","autoWebviewTimeout","retryInterval","setContext","launchInfo","getLaunchInfo","uninstallOtherPackages","validateDesiredCaps","parseArray","SETTINGS_HELPER_PKG_ID","otherApps","message","B","all","map","installOtherApks","resetApp","uninstallApk","installApk","apkStringsForLanguage","pushStrings","language","sharedPreferences","setSharedPreferences","fs","exists","shell","compress","sendAction","compressLayout","isEmpty","_screenRecordingProperties","stopRecordingScreen","removeAllSessionWebSocketHandlers","server","mobileStopScreenStreaming","stopChromedriverProxies","unicodeKeyboard","resetKeyboard","setIME","dontStopAppOnReset","forceStop","goToHome","shutdown","stopLogcat","setDefaultHiddenApiPolicy","avdName","killEmulator","sharedPrefs","name","JSON","stringify","remotePath","remoteFile","localPath","builder","getPrefsBuilder","build","prefs","toFile","unlink","SharedPrefsBuilder","proxyActive","getProxyAvoidList","canProxy","isFunction","proxyReqRes"],"sources":["../../lib/driver.js"],"sourcesContent":["import { BaseDriver, DeviceSettings } from 'appium/driver';\nimport desiredConstraints from './desired-caps';\nimport commands from './commands/index';\nimport { newMethodMap } from './method-map';\nimport {\n helpers, ensureNetworkSpeed,\n SETTINGS_HELPER_PKG_ID,\n} from './android-helpers';\nimport _ from 'lodash';\nimport { DEFAULT_ADB_PORT } from 'appium-adb';\nimport { fs, tempDir, util } from '@appium/support';\nimport { retryInterval } from 'asyncbox';\nimport { SharedPrefsBuilder } from 'shared-preferences-builder';\nimport B from 'bluebird';\n\nconst APP_EXTENSION = '.apk';\nconst DEVICE_PORT = 4724;\n\n// This is a set of methods and paths that we never want to proxy to\n// Chromedriver\nconst NO_PROXY = [\n ['POST', new RegExp('^/session/[^/]+/context')],\n ['GET', new RegExp('^/session/[^/]+/context')],\n ['POST', new RegExp('^/session/[^/]+/appium')],\n ['GET', new RegExp('^/session/[^/]+/appium')],\n ['POST', new RegExp('^/session/[^/]+/touch/perform')],\n ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')],\n ['POST', new RegExp('^/session/[^/]+/orientation')],\n ['GET', new RegExp('^/session/[^/]+/orientation')],\n ['POST', new RegExp('^/session/[^/]+/execute')],\n ['POST', new RegExp('^/session/[^/]+/execute/sync')],\n ['GET', new RegExp('^/session/[^/]+/network_connection')],\n ['POST', new RegExp('^/session/[^/]+/network_connection')],\n];\n\nclass AndroidDriver extends BaseDriver {\n\n static newMethodMap = newMethodMap;\n\n constructor (opts = {}, shouldValidateCaps = true) {\n super(opts, shouldValidateCaps);\n\n this.locatorStrategies = [\n 'xpath',\n 'id',\n 'class name',\n 'accessibility id',\n '-android uiautomator'\n ];\n this.desiredCapConstraints = desiredConstraints;\n this.sessionChromedrivers = {};\n this.jwpProxyActive = false;\n this.jwpProxyAvoid = _.clone(NO_PROXY);\n this.settings = new DeviceSettings({ignoreUnimportantViews: false},\n this.onSettingsUpdate.bind(this));\n this.chromedriver = null;\n this.apkStrings = {};\n this.unlocker = helpers.unlocker;\n\n for (let [cmd, fn] of _.toPairs(commands)) {\n AndroidDriver.prototype[cmd] = fn;\n }\n\n // needs to be after the line which assigns commands to AndroidDriver.prototype, so that `this.defaultContextName` is defined.\n this.curContext = this.defaultContextName();\n }\n\n async createSession (...args) {\n // the whole createSession flow is surrounded in a try-catch statement\n // if creating a session fails at any point, we teardown everything we\n // set up before throwing the error.\n try {\n let [sessionId, caps] = await super.createSession(...args);\n\n let serverDetails = {\n platform: 'LINUX',\n webStorageEnabled: false,\n takesScreenshot: true,\n javascriptEnabled: true,\n databaseEnabled: false,\n networkConnectionEnabled: true,\n locationContextEnabled: false,\n warnings: {},\n desired: this.caps\n };\n\n this.caps = Object.assign(serverDetails, this.caps);\n\n // assigning defaults\n let defaultOpts = {\n action: 'android.intent.action.MAIN',\n category: 'android.intent.category.LAUNCHER',\n flags: '0x10200000',\n disableAndroidWatchers: false,\n tmpDir: await tempDir.staticDir(),\n fullReset: false,\n autoLaunch: true,\n adbPort: DEFAULT_ADB_PORT,\n bootstrapPort: DEVICE_PORT,\n androidInstallTimeout: 90000,\n };\n _.defaults(this.opts, defaultOpts);\n this.useUnlockHelperApp = _.isUndefined(this.caps.unlockType);\n\n // not user visible via caps\n if (this.opts.noReset === true) {\n this.opts.fullReset = false;\n }\n if (this.opts.fullReset === true) {\n this.opts.noReset = false;\n }\n this.opts.fastReset = !this.opts.fullReset && !this.opts.noReset;\n this.opts.skipUninstall = this.opts.fastReset || this.opts.noReset;\n\n if (this.isChromeSession) {\n helpers.adjustBrowserSessionCaps(this.opts);\n }\n\n if (this.opts.nativeWebScreenshot) {\n this.jwpProxyAvoid.push(['GET', new RegExp('^/session/[^/]+/screenshot')]);\n }\n\n if (this.opts.reboot) {\n this.setAvdFromCapabilities(caps);\n }\n\n // get device udid for this session\n let {udid, emPort} = await helpers.getDeviceInfoFromCaps(this.opts);\n this.opts.udid = udid;\n this.opts.emPort = emPort;\n\n // set up an instance of ADB\n this.adb = await helpers.createADB({\n udid: this.opts.udid,\n emPort: this.opts.emPort,\n adbPort: this.opts.adbPort,\n suppressKillServer: this.opts.suppressKillServer,\n remoteAdbHost: this.opts.remoteAdbHost,\n clearDeviceLogsOnStart: this.opts.clearDeviceLogsOnStart,\n adbExecTimeout: this.opts.adbExecTimeout,\n allowOfflineDevices: this.opts.allowOfflineDevices,\n });\n\n if (await this.adb.getApiLevel() >= 23) {\n this.log.warn(\"Consider setting 'automationName' capability to \" +\n \"'uiautomator2' on Android >= 6, since UIAutomator framework \" +\n 'is not maintained anymore by the OS vendor.');\n }\n\n if (this.helpers.isPackageOrBundle(this.opts.app)) {\n // user provided package instead of app for 'app' capability, massage options\n this.opts.appPackage = this.opts.app;\n this.opts.app = null;\n }\n\n if (this.opts.app) {\n // find and copy, or download and unzip an app url or path\n this.opts.app = await this.helpers.configureApp(this.opts.app, APP_EXTENSION);\n await this.checkAppPresent();\n } else if (this.appOnDevice) {\n // the app isn't an actual app file but rather something we want to\n // assume is on the device and just launch via the appPackage\n this.log.info(`App file was not listed, instead we're going to run ` +\n `${this.opts.appPackage} directly on the device`);\n await this.checkPackagePresent();\n }\n\n // Some cloud services using appium launch the avd themselves, so we ensure netspeed\n // is set for emulators by calling adb.networkSpeed before running the app\n if (util.hasValue(this.opts.networkSpeed)) {\n if (!this.isEmulator()) {\n this.log.warn('Sorry, networkSpeed capability is only available for emulators');\n } else {\n const networkSpeed = ensureNetworkSpeed(this.adb, this.opts.networkSpeed);\n await this.adb.networkSpeed(networkSpeed);\n }\n }\n // check if we have to enable/disable gps before running the application\n if (util.hasValue(this.opts.gpsEnabled)) {\n if (this.isEmulator()) {\n this.log.info(`Trying to ${this.opts.gpsEnabled ? 'enable' : 'disable'} gps location provider`);\n await this.adb.toggleGPSLocationProvider(this.opts.gpsEnabled);\n } else {\n this.log.warn('Sorry! gpsEnabled capability is only available for emulators');\n }\n }\n\n await this.startAndroidSession(this.opts);\n return [sessionId, this.caps];\n } catch (e) {\n // ignoring delete session exception if any and throw the real error\n // that happened while creating the session.\n try {\n await this.deleteSession();\n } catch (ign) {}\n throw e;\n }\n }\n\n isEmulator () {\n return helpers.isEmulator(this.adb, this.opts);\n }\n\n setAvdFromCapabilities (caps) {\n if (this.opts.avd) {\n this.log.info('avd name defined, ignoring device name and platform version');\n } else {\n if (!caps.deviceName) {\n this.log.errorAndThrow('avd or deviceName should be specified when reboot option is enables');\n }\n if (!caps.platformVersion) {\n this.log.errorAndThrow('avd or platformVersion should be specified when reboot option is enabled');\n }\n let avdDevice = caps.deviceName.replace(/[^a-zA-Z0-9_.]/g, '-');\n this.opts.avd = `${avdDevice}__${caps.platformVersion}`;\n }\n }\n\n get appOnDevice () {\n return this.helpers.isPackageOrBundle(this.opts.app) || (!this.opts.app &&\n this.helpers.isPackageOrBundle(this.opts.appPackage));\n }\n\n get isChromeSession () {\n return helpers.isChromeBrowser(this.opts.browserName);\n }\n\n async onSettingsUpdate (key, value) {\n if (key === 'ignoreUnimportantViews') {\n await this.setCompressedLayoutHierarchy(value);\n }\n }\n\n async startAndroidSession () {\n this.log.info(`Starting Android session`);\n // set up the device to run on (real or emulator, etc)\n this.defaultIME = await helpers.initDevice(this.adb, this.opts);\n\n // set actual device name, udid, platform version, screen size, model and manufacturer details.\n this.caps.deviceName = this.adb.curDeviceId;\n this.caps.deviceUDID = this.opts.udid;\n this.caps.platformVersion = await this.adb.getPlatformVersion();\n this.caps.deviceScreenSize = await this.adb.getScreenSize();\n this.caps.deviceModel = await this.adb.getModel();\n this.caps.deviceManufacturer = await this.adb.getManufacturer();\n\n if (this.opts.disableWindowAnimation) {\n if (await this.adb.isAnimationOn()) {\n if (await this.adb.getApiLevel() >= 28) { // API level 28 is Android P\n // Don't forget to reset the relaxing in delete session\n this.log.warn('Relaxing hidden api policy to manage animation scale');\n await this.adb.setHiddenApiPolicy('1', !!this.opts.ignoreHiddenApiPolicyError);\n }\n\n this.log.info('Disabling window animation as it is requested by \"disableWindowAnimation\" capability');\n await this.adb.setAnimationState(false);\n this._wasWindowAnimationDisabled = true;\n } else {\n this.log.info('Window animation is already disabled');\n }\n }\n\n // set up app under test\n await this.initAUT();\n\n // start UiAutomator\n this.bootstrap = new helpers.bootstrap(this.adb, this.opts.bootstrapPort, this.opts.websocket);\n await this.bootstrap.start(this.opts.appPackage, this.opts.disableAndroidWatchers, this.opts.acceptSslCerts);\n // handling unexpected shutdown\n (async () => {\n try {\n await this.bootstrap.onUnexpectedShutdown;\n } catch (err) {\n if (!this.bootstrap.ignoreUnexpectedShutdown) {\n await this.startUnexpectedShutdown(err);\n }\n }\n })();\n\n\n if (this.opts.skipUnlock) {\n this.log.info('Skipping lockscreen check');\n } else {\n this.log.info('Checking for lockscreen presence. ' +\n `This could be skipped by setting the 'appium:skipUnlock' capability to true.`);\n await helpers.unlock(this, this.adb, this.caps);\n }\n\n // Set CompressedLayoutHierarchy on the device based on current settings object\n // this has to happen _after_ bootstrap is initialized\n if (this.opts.ignoreUnimportantViews) {\n await this.settings.update({ignoreUnimportantViews: this.opts.ignoreUnimportantViews});\n }\n\n if (this.isChromeSession) {\n // start a chromedriver session and proxy to it\n await this.startChromeSession();\n } else {\n if (this.opts.autoLaunch) {\n // start app\n await this.startAUT();\n }\n }\n\n if (util.hasValue(this.opts.orientation)) {\n this.log.debug(`Setting initial orientation to '${this.opts.orientation}'`);\n await this.setOrientation(this.opts.orientation);\n }\n\n await this.initAutoWebview();\n }\n\n async initAutoWebview () {\n if (this.opts.autoWebview) {\n let viewName = this.defaultWebviewName();\n let timeout = (this.opts.autoWebviewTimeout) || 2000;\n\n this.log.info(`Setting auto webview to context '${viewName}' with timeout ${timeout}ms`);\n\n // try every 500ms until timeout is over\n await retryInterval(timeout / 500, 500, async () => {\n await this.setContext(viewName);\n });\n }\n }\n\n async initAUT () {\n // populate appPackage, appActivity, appWaitPackage, appWaitActivity,\n // and the device being used\n // in the opts and caps (so it gets back to the user on session creation)\n let launchInfo = await helpers.getLaunchInfo(this.adb, this.opts);\n Object.assign(this.opts, launchInfo);\n Object.assign(this.caps, launchInfo);\n\n // Uninstall any uninstallOtherPackages which were specified in caps\n if (this.opts.uninstallOtherPackages) {\n helpers.validateDesiredCaps(this.opts);\n // Only SETTINGS_HELPER_PKG_ID package is used by UIA1\n await helpers.uninstallOtherPackages(\n this.adb,\n helpers.parseArray(this.opts.uninstallOtherPackages),\n [SETTINGS_HELPER_PKG_ID]\n );\n }\n\n // Install any \"otherApps\" that were specified in caps\n if (this.opts.otherApps) {\n let otherApps;\n try {\n otherApps = helpers.parseArray(this.opts.otherApps);\n } catch (e) {\n this.log.errorAndThrow(`Could not parse \"otherApps\" capability: ${e.message}`);\n }\n otherApps = await B.all(otherApps.map((app) => this.helpers.configureApp(app, APP_EXTENSION)));\n await helpers.installOtherApks(otherApps, this.adb, this.opts);\n }\n\n // install app\n if (!this.opts.app) {\n if (this.opts.fullReset) {\n this.log.errorAndThrow('Full reset requires an app capability, use fastReset if app is not provided');\n }\n this.log.debug('No app capability. Assuming it is already on the device');\n if (this.opts.fastReset) {\n await helpers.resetApp(this.adb, this.opts);\n }\n return;\n }\n if (!this.opts.skipUninstall) {\n await this.adb.uninstallApk(this.opts.appPackage);\n }\n await helpers.installApk(this.adb, this.opts);\n const apkStringsForLanguage = await helpers.pushStrings(this.opts.language, this.adb, this.opts);\n if (this.opts.language) {\n this.apkStrings[this.opts.language] = apkStringsForLanguage;\n }\n\n // This must run after installing the apk, otherwise it would cause the\n // install to fail. And before running the app.\n if (!_.isUndefined(this.opts.sharedPreferences)) {\n await this.setSharedPreferences(this.opts);\n }\n }\n\n async checkAppPresent () {\n this.log.debug('Checking whether app is actually present');\n if (!(await fs.exists(this.opts.app))) {\n this.log.errorAndThrow(`Could not find app apk at ${this.opts.app}`);\n }\n }\n\n async checkPackagePresent () {\n this.log.debug('Checking whether package is present on the device');\n if (!(await this.adb.shell(['pm', 'list', 'packages', this.opts.appPackage]))) {\n this.log.errorAndThrow(`Could not find package ${this.opts.appPackage} on the device`);\n }\n }\n\n // Set CompressedLayoutHierarchy on the device\n async setCompressedLayoutHierarchy (compress) {\n await this.bootstrap.sendAction('compressedLayoutHierarchy', {compressLayout: compress});\n }\n\n async deleteSession () {\n this.log.debug('Shutting down Android driver');\n\n try {\n if (!_.isEmpty(this._screenRecordingProperties)) {\n await this.stopRecordingScreen();\n }\n } catch (ign) {}\n\n await helpers.removeAllSessionWebSocketHandlers(this.server, this.sessionId);\n\n await this.mobileStopScreenStreaming();\n\n await super.deleteSession();\n\n if (this.bootstrap) {\n // certain cleanup we only care to do if the bootstrap was ever run\n await this.stopChromedriverProxies();\n if (this.opts.unicodeKeyboard && this.opts.resetKeyboard && this.defaultIME) {\n this.log.debug(`Resetting IME to ${this.defaultIME}`);\n await this.adb?.setIME(this.defaultIME);\n }\n if (!this.isChromeSession && !this.opts.dontStopAppOnReset) {\n await this.adb?.forceStop(this.opts.appPackage);\n }\n await this.adb?.goToHome();\n if (this.opts.fullReset && !this.opts.skipUninstall && !this.appOnDevice) {\n await this.adb?.uninstallApk(this.opts.appPackage);\n }\n await this.bootstrap.shutdown();\n this.bootstrap = null;\n } else {\n this.log.debug(\"Called deleteSession but bootstrap wasn't active\");\n }\n // some cleanup we want to do regardless, in case we are shutting down\n // mid-startup\n await this.adb?.stopLogcat();\n if (this.useUnlockHelperApp) {\n await this.adb?.forceStop('io.appium.unlock');\n }\n if (this._wasWindowAnimationDisabled) {\n this.log.info('Restoring window animation state');\n await this.adb?.setAnimationState(true);\n\n // This was necessary to change animation scale over Android P. We must reset the policy for the security.\n if (await this.adb?.getApiLevel() >= 28) {\n this.log.info('Restoring hidden api policy to the device default configuration');\n await this.adb?.setDefaultHiddenApiPolicy(!!this.opts.ignoreHiddenApiPolicyError);\n }\n }\n\n if (this.opts.reboot) {\n let avdName = this.opts.avd.replace('@', '');\n this.log.debug(`closing emulator '${avdName}'`);\n await this.adb?.killEmulator(avdName);\n }\n }\n\n async setSharedPreferences () {\n let sharedPrefs = this.opts.sharedPreferences;\n this.log.info('Trying to set shared preferences');\n let name = sharedPrefs.name;\n if (_.isUndefined(name)) {\n this.log.warn(`Skipping setting Shared preferences, name is undefined: ${JSON.stringify(sharedPrefs)}`);\n return false;\n }\n let remotePath = `/data/data/${this.opts.appPackage}/shared_prefs`;\n let remoteFile = `${remotePath}/${name}.xml`;\n let localPath = `/tmp/${name}.xml`;\n let builder = this.getPrefsBuilder();\n builder.build(sharedPrefs.prefs);\n this.log.info(`Creating temporary shared preferences: ${localPath}`);\n builder.toFile(localPath);\n this.log.info(`Creating shared_prefs remote folder: ${remotePath}`);\n await this.adb.shell(['mkdir', '-p', remotePath]);\n this.log.info(`Pushing shared_prefs to ${remoteFile}`);\n await this.adb.push(localPath, remoteFile);\n try {\n this.log.info(`Trying to remove shared preferences temporary file`);\n if (await fs.exists(localPath)) {\n await fs.unlink(localPath);\n }\n } catch (e) {\n this.log.warn(`Error trying to remove temporary file ${localPath}`);\n }\n return true;\n }\n\n getPrefsBuilder () {\n /* Add this method to create a new SharedPrefsBuilder instead of\n * directly creating the object on setSharedPreferences for testing purposes\n */\n return new SharedPrefsBuilder();\n }\n\n validateDesiredCaps (caps) {\n if (!super.validateDesiredCaps(caps)) {\n return false;\n }\n if ((!caps.browserName || !helpers.isChromeBrowser(caps.browserName)) && !caps.app && !caps.appPackage) {\n this.log.errorAndThrow('The desired capabilities must include either an app, appPackage or browserName');\n }\n return helpers.validateDesiredCaps(caps);\n }\n\n proxyActive (sessionId) {\n super.proxyActive(sessionId);\n\n return this.jwpProxyActive;\n }\n\n getProxyAvoidList (sessionId) {\n super.getProxyAvoidList(sessionId);\n\n return this.jwpProxyAvoid;\n }\n\n canProxy (sessionId) {\n super.canProxy(sessionId);\n\n // this will change depending on ChromeDriver status\n return _.isFunction(this.proxyReqRes);\n }\n}\n\nexport { AndroidDriver };\nexport default AndroidDriver;\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAMA,aAAa,GAAG,MAAM;AAC5B,MAAMC,WAAW,GAAG,IAAI;AAIxB,MAAMC,QAAQ,GAAG,CACf,CAAC,MAAM,EAAE,IAAIC,MAAM,CAAC,yBAAyB,CAAC,CAAC,EAC/C,CAAC,KAAK,EAAE,IAAIA,MAAM,CAAC,yBAAyB,CAAC,CAAC,EAC9C,CAAC,MAAM,EAAE,IAAIA,MAAM,CAAC,wBAAwB,CAAC,CAAC,EAC9C,CAAC,KAAK,EAAE,IAAIA,MAAM,CAAC,wBAAwB,CAAC,CAAC,EAC7C,CAAC,MAAM,EAAE,IAAIA,MAAM,CAAC,+BAA+B,CAAC,CAAC,EACrD,CAAC,MAAM,EAAE,IAAIA,MAAM,CAAC,qCAAqC,CAAC,CAAC,EAC3D,CAAC,MAAM,EAAE,IAAIA,MAAM,CAAC,6BAA6B,CAAC,CAAC,EACnD,CAAC,KAAK,EAAE,IAAIA,MAAM,CAAC,6BAA6B,CAAC,CAAC,EAClD,CAAC,MAAM,EAAE,IAAIA,MAAM,CAAC,yBAAyB,CAAC,CAAC,EAC/C,CAAC,MAAM,EAAE,IAAIA,MAAM,CAAC,8BAA8B,CAAC,CAAC,EACpD,CAAC,KAAK,EAAE,IAAIA,MAAM,CAAC,oCAAoC,CAAC,CAAC,EACzD,CAAC,MAAM,EAAE,IAAIA,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAC3D;AAED,MAAMC,aAAa,SAASC,kBAAU,CAAC;EAErC,OAAOC,YAAY,GAAGA,uBAAY;EAElCC,WAAW,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAEC,kBAAkB,GAAG,IAAI,EAAE;IACjD,KAAK,CAACD,IAAI,EAAEC,kBAAkB,CAAC;IAE/B,IAAI,CAACC,iBAAiB,GAAG,CACvB,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,CACvB;IACD,IAAI,CAACC,qBAAqB,GAAGC,oBAAkB;IAC/C,IAAI,CAACC,oBAAoB,GAAG,CAAC,CAAC;IAC9B,IAAI,CAACC,cAAc,GAAG,KAAK;IAC3B,IAAI,CAACC,aAAa,GAAGC,eAAC,CAACC,KAAK,CAACf,QAAQ,CAAC;IACtC,IAAI,CAACgB,QAAQ,GAAG,IAAIC,sBAAc,CAAC;MAACC,sBAAsB,EAAE;IAAK,CAAC,EAC/B,IAAI,CAACC,gBAAgB,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,IAAI,CAACC,YAAY,GAAG,IAAI;IACxB,IAAI,CAACC,UAAU,GAAG,CAAC,CAAC;IACpB,IAAI,CAACC,QAAQ,GAAGC,uBAAO,CAACD,QAAQ;IAEhC,KAAK,IAAI,CAACE,GAAG,EAAEC,EAAE,CAAC,IAAIZ,eAAC,CAACa,OAAO,CAACC,cAAQ,CAAC,EAAE;MACzC1B,aAAa,CAAC2B,SAAS,CAACJ,GAAG,CAAC,GAAGC,EAAE;IACnC;IAGA,IAAI,CAACI,UAAU,GAAG,IAAI,CAACC,kBAAkB,EAAE;EAC7C;EAEA,MAAMC,aAAa,CAAE,GAAGC,IAAI,EAAE;IAI5B,IAAI;MACF,IAAI,CAACC,SAAS,EAAEC,IAAI,CAAC,GAAG,MAAM,KAAK,CAACH,aAAa,CAAC,GAAGC,IAAI,CAAC;MAE1D,IAAIG,aAAa,GAAG;QAClBC,QAAQ,EAAE,OAAO;QACjBC,iBAAiB,EAAE,KAAK;QACxBC,eAAe,EAAE,IAAI;QACrBC,iBAAiB,EAAE,IAAI;QACvBC,eAAe,EAAE,KAAK;QACtBC,wBAAwB,EAAE,IAAI;QAC9BC,sBAAsB,EAAE,KAAK;QAC7BC,QAAQ,EAAE,CAAC,CAAC;QACZC,OAAO,EAAE,IAAI,CAACV;MAChB,CAAC;MAED,IAAI,CAACA,IAAI,GAAGW,MAAM,CAACC,MAAM,CAACX,aAAa,EAAE,IAAI,CAACD,IAAI,CAAC;MAGnD,IAAIa,WAAW,GAAG;QAChBC,MAAM,EAAE,4BAA4B;QACpCC,QAAQ,EAAE,kCAAkC;QAC5CC,KAAK,EAAE,YAAY;QACnBC,sBAAsB,EAAE,KAAK;QAC7BC,MAAM,EAAE,MAAMC,gBAAO,CAACC,SAAS,EAAE;QACjCC,SAAS,EAAE,KAAK;QAChBC,UAAU,EAAE,IAAI;QAChBC,OAAO,EAAEC,2BAAgB;QACzBC,aAAa,EAAE7D,WAAW;QAC1B8D,qBAAqB,EAAE;MACzB,CAAC;MACD/C,eAAC,CAACgD,QAAQ,CAAC,IAAI,CAACxD,IAAI,EAAE0C,WAAW,CAAC;MAClC,IAAI,CAACe,kBAAkB,GAAGjD,eAAC,CAACkD,WAAW,CAAC,IAAI,CAAC7B,IAAI,CAAC8B,UAAU,CAAC;MAG7D,IAAI,IAAI,CAAC3D,IAAI,CAAC4D,OAAO,KAAK,IAAI,EAAE;QAC9B,IAAI,CAAC5D,IAAI,CAACkD,SAAS,GAAG,KAAK;MAC7B;MACA,IAAI,IAAI,CAAClD,IAAI,CAACkD,SAAS,KAAK,IAAI,EAAE;QAChC,IAAI,CAAClD,IAAI,CAAC4D,OAAO,GAAG,KAAK;MAC3B;MACA,IAAI,CAAC5D,IAAI,CAAC6D,SAAS,GAAG,CAAC,IAAI,CAAC7D,IAAI,CAACkD,SAAS,IAAI,CAAC,IAAI,CAAClD,IAAI,CAAC4D,OAAO;MAChE,IAAI,CAAC5D,IAAI,CAAC8D,aAAa,GAAG,IAAI,CAAC9D,IAAI,CAAC6D,SAAS,IAAI,IAAI,CAAC7D,IAAI,CAAC4D,OAAO;MAElE,IAAI,IAAI,CAACG,eAAe,EAAE;QACxB7C,uBAAO,CAAC8C,wBAAwB,CAAC,IAAI,CAAChE,IAAI,CAAC;MAC7C;MAEA,IAAI,IAAI,CAACA,IAAI,CAACiE,mBAAmB,EAAE;QACjC,IAAI,CAAC1D,aAAa,CAAC2D,IAAI,CAAC,CAAC,KAAK,EAAE,IAAIvE,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;MAC5E;MAEA,IAAI,IAAI,CAACK,IAAI,CAACmE,MAAM,EAAE;QACpB,IAAI,CAACC,sBAAsB,CAACvC,IAAI,CAAC;MACnC;MAGA,IAAI;QAACwC,IAAI;QAAEC;MAAM,CAAC,GAAG,MAAMpD,uBAAO,CAACqD,qBAAqB,CAAC,IAAI,CAACvE,IAAI,CAAC;MACnE,IAAI,CAACA,IAAI,CAACqE,IAAI,GAAGA,IAAI;MACrB,IAAI,CAACrE,IAAI,CAACsE,MAAM,GAAGA,MAAM;MAGzB,IAAI,CAACE,GAAG,GAAG,MAAMtD,uBAAO,CAACuD,SAAS,CAAC;QACjCJ,IAAI,EAAE,IAAI,CAACrE,IAAI,CAACqE,IAAI;QACpBC,MAAM,EAAE,IAAI,CAACtE,IAAI,CAACsE,MAAM;QACxBlB,OAAO,EAAE,IAAI,CAACpD,IAAI,CAACoD,OAAO;QAC1BsB,kBAAkB,EAAE,IAAI,CAAC1E,IAAI,CAAC0E,kBAAkB;QAChDC,aAAa,EAAE,IAAI,CAAC3E,IAAI,CAAC2E,aAAa;QACtCC,sBAAsB,EAAE,IAAI,CAAC5E,IAAI,CAAC4E,sBAAsB;QACxDC,cAAc,EAAE,IAAI,CAAC7E,IAAI,CAAC6E,cAAc;QACxCC,mBAAmB,EAAE,IAAI,CAAC9E,IAAI,CAAC8E;MACjC,CAAC,CAAC;MAEF,IAAI,OAAM,IAAI,CAACN,GAAG,CAACO,WAAW,EAAE,KAAI,EAAE,EAAE;QACtC,IAAI,CAACC,GAAG,CAACC,IAAI,CAAC,kDAAkD,GAC9D,8DAA8D,GAC9D,6CAA6C,CAAC;MAClD;MAEA,IAAI,IAAI,CAAC/D,OAAO,CAACgE,iBAAiB,CAAC,IAAI,CAAClF,IAAI,CAACmF,GAAG,CAAC,EAAE;QAEjD,IAAI,CAACnF,IAAI,CAACoF,UAAU,GAAG,IAAI,CAACpF,IAAI,CAACmF,GAAG;QACpC,IAAI,CAACnF,IAAI,CAACmF,GAAG,GAAG,IAAI;MACtB;MAEA,IAAI,IAAI,CAACnF,IAAI,CAACmF,GAAG,EAAE;QAEjB,IAAI,CAACnF,IAAI,CAACmF,GAAG,GAAG,MAAM,IAAI,CAACjE,OAAO,CAACmE,YAAY,CAAC,IAAI,CAACrF,IAAI,CAACmF,GAAG,EAAE3F,aAAa,CAAC;QAC7E,MAAM,IAAI,CAAC8F,eAAe,EAAE;MAC9B,CAAC,MAAM,IAAI,IAAI,CAACC,WAAW,EAAE;QAG3B,IAAI,CAACP,GAAG,CAACQ,IAAI,CAAE,sDAAqD,GACjE,GAAE,IAAI,CAACxF,IAAI,CAACoF,UAAW,yBAAwB,CAAC;QACnD,MAAM,IAAI,CAACK,mBAAmB,EAAE;MAClC;MAIA,IAAIC,aAAI,CAACC,QAAQ,CAAC,IAAI,CAAC3F,IAAI,CAAC4F,YAAY,CAAC,EAAE;QACzC,IAAI,CAAC,IAAI,CAACC,UAAU,EAAE,EAAE;UACtB,IAAI,CAACb,GAAG,CAACC,IAAI,CAAC,gEAAgE,CAAC;QACjF,CAAC,MAAM;UACL,MAAMW,YAAY,GAAG,IAAAE,kCAAkB,EAAC,IAAI,CAACtB,GAAG,EAAE,IAAI,CAACxE,IAAI,CAAC4F,YAAY,CAAC;UACzE,MAAM,IAAI,CAACpB,GAAG,CAACoB,YAAY,CAACA,YAAY,CAAC;QAC3C;MACF;MAEA,IAAIF,aAAI,CAACC,QAAQ,CAAC,IAAI,CAAC3F,IAAI,CAAC+F,UAAU,CAAC,EAAE;QACvC,IAAI,IAAI,CAACF,UAAU,EAAE,EAAE;UACrB,IAAI,CAACb,GAAG,CAACQ,IAAI,CAAE,aAAY,IAAI,CAACxF,IAAI,CAAC+F,UAAU,GAAG,QAAQ,GAAG,SAAU,wBAAuB,CAAC;UAC/F,MAAM,IAAI,CAACvB,GAAG,CAACwB,yBAAyB,CAAC,IAAI,CAAChG,IAAI,CAAC+F,UAAU,CAAC;QAChE,CAAC,MAAM;UACL,IAAI,CAACf,GAAG,CAACC,IAAI,CAAC,8DAA8D,CAAC;QAC/E;MACF;MAEA,MAAM,IAAI,CAACgB,mBAAmB,CAAC,IAAI,CAACjG,IAAI,CAAC;MACzC,OAAO,CAAC4B,SAAS,EAAE,IAAI,CAACC,IAAI,CAAC;IAC/B,CAAC,CAAC,OAAOqE,CAAC,EAAE;MAGV,IAAI;QACF,MAAM,IAAI,CAACC,aAAa,EAAE;MAC5B,CAAC,CAAC,OAAOC,GAAG,EAAE,CAAC;MACf,MAAMF,CAAC;IACT;EACF;EAEAL,UAAU,GAAI;IACZ,OAAO3E,uBAAO,CAAC2E,UAAU,CAAC,IAAI,CAACrB,GAAG,EAAE,IAAI,CAACxE,IAAI,CAAC;EAChD;EAEAoE,sBAAsB,CAAEvC,IAAI,EAAE;IAC5B,IAAI,IAAI,CAAC7B,IAAI,CAACqG,GAAG,EAAE;MACjB,IAAI,CAACrB,GAAG,CAACQ,IAAI,CAAC,6DAA6D,CAAC;IAC9E,CAAC,MAAM;MACL,IAAI,CAAC3D,IAAI,CAACyE,UAAU,EAAE;QACpB,IAAI,CAACtB,GAAG,CAACuB,aAAa,CAAC,qEAAqE,CAAC;MAC/F;MACA,IAAI,CAAC1E,IAAI,CAAC2E,eAAe,EAAE;QACzB,IAAI,CAACxB,GAAG,CAACuB,aAAa,CAAC,0EAA0E,CAAC;MACpG;MACA,IAAIE,SAAS,GAAG5E,IAAI,CAACyE,UAAU,CAACI,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC;MAC/D,IAAI,CAAC1G,IAAI,CAACqG,GAAG,GAAI,GAAEI,SAAU,KAAI5E,IAAI,CAAC2E,eAAgB,EAAC;IACzD;EACF;EAEA,IAAIjB,WAAW,GAAI;IACjB,OAAO,IAAI,CAACrE,OAAO,CAACgE,iBAAiB,CAAC,IAAI,CAAClF,IAAI,CAACmF,GAAG,CAAC,IAAK,CAAC,IAAI,CAACnF,IAAI,CAACmF,GAAG,IAChE,IAAI,CAACjE,OAAO,CAACgE,iBAAiB,CAAC,IAAI,CAAClF,IAAI,CAACoF,UAAU,CAAE;EAC9D;EAEA,IAAIrB,eAAe,GAAI;IACrB,OAAO7C,uBAAO,CAACyF,eAAe,CAAC,IAAI,CAAC3G,IAAI,CAAC4G,WAAW,CAAC;EACvD;EAEA,MAAM/F,gBAAgB,CAAEgG,GAAG,EAAEC,KAAK,EAAE;IAClC,IAAID,GAAG,KAAK,wBAAwB,EAAE;MACpC,MAAM,IAAI,CAACE,4BAA4B,CAACD,KAAK,CAAC;IAChD;EACF;EAEA,MAAMb,mBAAmB,GAAI;IAC3B,IAAI,CAACjB,GAAG,CAACQ,IAAI,CAAE,0BAAyB,CAAC;IAEzC,IAAI,CAACwB,UAAU,GAAG,MAAM9F,uBAAO,CAAC+F,UAAU,CAAC,IAAI,CAACzC,GAAG,EAAE,IAAI,CAACxE,IAAI,CAAC;IAG/D,IAAI,CAAC6B,IAAI,CAACyE,UAAU,GAAG,IAAI,CAAC9B,GAAG,CAAC0C,WAAW;IAC3C,IAAI,CAACrF,IAAI,CAACsF,UAAU,GAAG,IAAI,CAACnH,IAAI,CAACqE,IAAI;IACrC,IAAI,CAACxC,IAAI,CAAC2E,eAAe,GAAG,MAAM,IAAI,CAAChC,GAAG,CAAC4C,kBAAkB,EAAE;IAC/D,IAAI,CAACvF,IAAI,CAACwF,gBAAgB,GAAG,MAAM,IAAI,CAAC7C,GAAG,CAAC8C,aAAa,EAAE;IAC3D,IAAI,CAACzF,IAAI,CAAC0F,WAAW,GAAG,MAAM,IAAI,CAAC/C,GAAG,CAACgD,QAAQ,EAAE;IACjD,IAAI,CAAC3F,IAAI,CAAC4F,kBAAkB,GAAG,MAAM,IAAI,CAACjD,GAAG,CAACkD,eAAe,EAAE;IAE/D,IAAI,IAAI,CAAC1H,IAAI,CAAC2H,sBAAsB,EAAE;MACpC,IAAI,MAAM,IAAI,CAACnD,GAAG,CAACoD,aAAa,EAAE,EAAE;QAClC,IAAI,OAAM,IAAI,CAACpD,GAAG,CAACO,WAAW,EAAE,KAAI,EAAE,EAAE;UAEtC,IAAI,CAACC,GAAG,CAACC,IAAI,CAAC,sDAAsD,CAAC;UACrE,MAAM,IAAI,CAACT,GAAG,CAACqD,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC7H,IAAI,CAAC8H,0BAA0B,CAAC;QAChF;QAEA,IAAI,CAAC9C,GAAG,CAACQ,IAAI,CAAC,sFAAsF,CAAC;QACrG,MAAM,IAAI,CAAChB,GAAG,CAACuD,iBAAiB,CAAC,KAAK,CAAC;QACvC,IAAI,CAACC,2BAA2B,GAAG,IAAI;MACzC,CAAC,MAAM;QACL,IAAI,CAAChD,GAAG,CAACQ,IAAI,CAAC,sCAAsC,CAAC;MACvD;IACF;IAGA,MAAM,IAAI,CAACyC,OAAO,EAAE;IAGpB,IAAI,CAACC,SAAS,GAAG,IAAIhH,uBAAO,CAACgH,SAAS,CAAC,IAAI,CAAC1D,GAAG,EAAE,IAAI,CAACxE,IAAI,CAACsD,aAAa,EAAE,IAAI,CAACtD,IAAI,CAACmI,SAAS,CAAC;IAC9F,MAAM,IAAI,CAACD,SAAS,CAACE,KAAK,CAAC,IAAI,CAACpI,IAAI,CAACoF,UAAU,EAAE,IAAI,CAACpF,IAAI,CAAC8C,sBAAsB,EAAE,IAAI,CAAC9C,IAAI,CAACqI,cAAc,CAAC;IAE5G,CAAC,YAAY;MACX,IAAI;QACF,MAAM,IAAI,CAACH,SAAS,CAACI,oBAAoB;MAC3C,CAAC,CAAC,OAAOC,GAAG,EAAE;QACZ,IAAI,CAAC,IAAI,CAACL,SAAS,CAACM,wBAAwB,EAAE;UAC5C,MAAM,IAAI,CAACC,uBAAuB,CAACF,GAAG,CAAC;QACzC;MACF;IACF,CAAC,GAAG;IAGJ,IAAI,IAAI,CAACvI,IAAI,CAAC0I,UAAU,EAAE;MACxB,IAAI,CAAC1D,GAAG,CAACQ,IAAI,CAAC,2BAA2B,CAAC;IAC5C,CAAC,MAAM;MACL,IAAI,CAACR,GAAG,CAACQ,IAAI,CAAC,oCAAoC,GAC/C,8EAA6E,CAAC;MACjF,MAAMtE,uBAAO,CAACyH,MAAM,CAAC,IAAI,EAAE,IAAI,CAACnE,GAAG,EAAE,IAAI,CAAC3C,IAAI,CAAC;IACjD;IAIA,IAAI,IAAI,CAAC7B,IAAI,CAACY,sBAAsB,EAAE;MACpC,MAAM,IAAI,CAACF,QAAQ,CAACkI,MAAM,CAAC;QAAChI,sBAAsB,EAAE,IAAI,CAACZ,IAAI,CAACY;MAAsB,CAAC,CAAC;IACxF;IAEA,IAAI,IAAI,CAACmD,eAAe,EAAE;MAExB,MAAM,IAAI,CAAC8E,kBAAkB,EAAE;IACjC,CAAC,MAAM;MACL,IAAI,IAAI,CAAC7I,IAAI,CAACmD,UAAU,EAAE;QAExB,MAAM,IAAI,CAAC2F,QAAQ,EAAE;MACvB;IACF;IAEA,IAAIpD,aAAI,CAACC,QAAQ,CAAC,IAAI,CAAC3F,IAAI,CAAC+I,WAAW,CAAC,EAAE;MACxC,IAAI,CAAC/D,GAAG,CAACgE,KAAK,CAAE,mCAAkC,IAAI,CAAChJ,IAAI,CAAC+I,WAAY,GAAE,CAAC;MAC3E,MAAM,IAAI,CAACE,cAAc,CAAC,IAAI,CAACjJ,IAAI,CAAC+I,WAAW,CAAC;IAClD;IAEA,MAAM,IAAI,CAACG,eAAe,EAAE;EAC9B;EAEA,MAAMA,eAAe,GAAI;IACvB,IAAI,IAAI,CAAClJ,IAAI,CAACmJ,WAAW,EAAE;MACzB,IAAIC,QAAQ,GAAG,IAAI,CAACC,kBAAkB,EAAE;MACxC,IAAIC,OAAO,GAAI,IAAI,CAACtJ,IAAI,CAACuJ,kBAAkB,IAAK,IAAI;MAEpD,IAAI,CAACvE,GAAG,CAACQ,IAAI,CAAE,oCAAmC4D,QAAS,kBAAiBE,OAAQ,IAAG,CAAC;MAGxF,MAAM,IAAAE,uBAAa,EAACF,OAAO,GAAG,GAAG,EAAE,GAAG,EAAE,YAAY;QAClD,MAAM,IAAI,CAACG,UAAU,CAACL,QAAQ,CAAC;MACjC,CAAC,CAAC;IACJ;EACF;EAEA,MAAMnB,OAAO,GAAI;IAIf,IAAIyB,UAAU,GAAG,MAAMxI,uBAAO,CAACyI,aAAa,CAAC,IAAI,CAACnF,GAAG,EAAE,IAAI,CAACxE,IAAI,CAAC;IACjEwC,MAAM,CAACC,MAAM,CAAC,IAAI,CAACzC,IAAI,EAAE0J,UAAU,CAAC;IACpClH,MAAM,CAACC,MAAM,CAAC,IAAI,CAACZ,IAAI,EAAE6H,UAAU,CAAC;IAGpC,IAAI,IAAI,CAAC1J,IAAI,CAAC4J,sBAAsB,EAAE;MACpC1I,uBAAO,CAAC2I,mBAAmB,CAAC,IAAI,CAAC7J,IAAI,CAAC;MAEtC,MAAMkB,uBAAO,CAAC0I,sBAAsB,CAClC,IAAI,CAACpF,GAAG,EACRtD,uBAAO,CAAC4I,UAAU,CAAC,IAAI,CAAC9J,IAAI,CAAC4J,sBAAsB,CAAC,EACpD,CAACG,sCAAsB,CAAC,CACzB;IACH;IAGA,IAAI,IAAI,CAAC/J,IAAI,CAACgK,SAAS,EAAE;MACvB,IAAIA,SAAS;MACb,IAAI;QACFA,SAAS,GAAG9I,uBAAO,CAAC4I,UAAU,CAAC,IAAI,CAAC9J,IAAI,CAACgK,SAAS,CAAC;MACrD,CAAC,CAAC,OAAO9D,CAAC,EAAE;QACV,IAAI,CAAClB,GAAG,CAACuB,aAAa,CAAE,2CAA0CL,CAAC,CAAC+D,OAAQ,EAAC,CAAC;MAChF;MACAD,SAAS,GAAG,MAAME,iBAAC,CAACC,GAAG,CAACH,SAAS,CAACI,GAAG,CAAEjF,GAAG,IAAK,IAAI,CAACjE,OAAO,CAACmE,YAAY,CAACF,GAAG,EAAE3F,aAAa,CAAC,CAAC,CAAC;MAC9F,MAAM0B,uBAAO,CAACmJ,gBAAgB,CAACL,SAAS,EAAE,IAAI,CAACxF,GAAG,EAAE,IAAI,CAACxE,IAAI,CAAC;IAChE;IAGA,IAAI,CAAC,IAAI,CAACA,IAAI,CAACmF,GAAG,EAAE;MAClB,IAAI,IAAI,CAACnF,IAAI,CAACkD,SAAS,EAAE;QACvB,IAAI,CAAC8B,GAAG,CAACuB,aAAa,CAAC,6EAA6E,CAAC;MACvG;MACA,IAAI,CAACvB,GAAG,CAACgE,KAAK,CAAC,yDAAyD,CAAC;MACzE,IAAI,IAAI,CAAChJ,IAAI,CAAC6D,SAAS,EAAE;QACvB,MAAM3C,uBAAO,CAACoJ,QAAQ,CAAC,IAAI,CAAC9F,GAAG,EAAE,IAAI,CAACxE,IAAI,CAAC;MAC7C;MACA;IACF;IACA,IAAI,CAAC,IAAI,CAACA,IAAI,CAAC8D,aAAa,EAAE;MAC5B,MAAM,IAAI,CAACU,GAAG,CAAC+F,YAAY,CAAC,IAAI,CAACvK,IAAI,CAACoF,UAAU,CAAC;IACnD;IACA,MAAMlE,uBAAO,CAACsJ,UAAU,CAAC,IAAI,CAAChG,GAAG,EAAE,IAAI,CAACxE,IAAI,CAAC;IAC7C,MAAMyK,qBAAqB,GAAG,MAAMvJ,uBAAO,CAACwJ,WAAW,CAAC,IAAI,CAAC1K,IAAI,CAAC2K,QAAQ,EAAE,IAAI,CAACnG,GAAG,EAAE,IAAI,CAACxE,IAAI,CAAC;IAChG,IAAI,IAAI,CAACA,IAAI,CAAC2K,QAAQ,EAAE;MACtB,IAAI,CAAC3J,UAAU,CAAC,IAAI,CAAChB,IAAI,CAAC2K,QAAQ,CAAC,GAAGF,qBAAqB;IAC7D;IAIA,IAAI,CAACjK,eAAC,CAACkD,WAAW,CAAC,IAAI,CAAC1D,IAAI,CAAC4K,iBAAiB,CAAC,EAAE;MAC/C,MAAM,IAAI,CAACC,oBAAoB,CAAC,IAAI,CAAC7K,IAAI,CAAC;IAC5C;EACF;EAEA,MAAMsF,eAAe,GAAI;IACvB,IAAI,CAACN,GAAG,CAACgE,KAAK,CAAC,0CAA0C,CAAC;IAC1D,IAAI,EAAE,MAAM8B,WAAE,CAACC,MAAM,CAAC,IAAI,CAAC/K,IAAI,CAACmF,GAAG,CAAC,CAAC,EAAE;MACrC,IAAI,CAACH,GAAG,CAACuB,aAAa,CAAE,6BAA4B,IAAI,CAACvG,IAAI,CAACmF,GAAI,EAAC,CAAC;IACtE;EACF;EAEA,MAAMM,mBAAmB,GAAI;IAC3B,IAAI,CAACT,GAAG,CAACgE,KAAK,CAAC,mDAAmD,CAAC;IACnE,IAAI,EAAE,MAAM,IAAI,CAACxE,GAAG,CAACwG,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAChL,IAAI,CAACoF,UAAU,CAAC,CAAC,CAAC,EAAE;MAC7E,IAAI,CAACJ,GAAG,CAACuB,aAAa,CAAE,0BAAyB,IAAI,CAACvG,IAAI,CAACoF,UAAW,gBAAe,CAAC;IACxF;EACF;EAGA,MAAM2B,4BAA4B,CAAEkE,QAAQ,EAAE;IAC5C,MAAM,IAAI,CAAC/C,SAAS,CAACgD,UAAU,CAAC,2BAA2B,EAAE;MAACC,cAAc,EAAEF;IAAQ,CAAC,CAAC;EAC1F;EAEA,MAAM9E,aAAa,GAAI;IAAA;IACrB,IAAI,CAACnB,GAAG,CAACgE,KAAK,CAAC,8BAA8B,CAAC;IAE9C,IAAI;MACF,IAAI,CAACxI,eAAC,CAAC4K,OAAO,CAAC,IAAI,CAACC,0BAA0B,CAAC,EAAE;QAC/C,MAAM,IAAI,CAACC,mBAAmB,EAAE;MAClC;IACF,CAAC,CAAC,OAAOlF,GAAG,EAAE,CAAC;IAEf,MAAMlF,uBAAO,CAACqK,iCAAiC,CAAC,IAAI,CAACC,MAAM,EAAE,IAAI,CAAC5J,SAAS,CAAC;IAE5E,MAAM,IAAI,CAAC6J,yBAAyB,EAAE;IAEtC,MAAM,KAAK,CAACtF,aAAa,EAAE;IAE3B,IAAI,IAAI,CAAC+B,SAAS,EAAE;MAAA;MAElB,MAAM,IAAI,CAACwD,uBAAuB,EAAE;MACpC,IAAI,IAAI,CAAC1L,IAAI,CAAC2L,eAAe,IAAI,IAAI,CAAC3L,IAAI,CAAC4L,aAAa,IAAI,IAAI,CAAC5E,UAAU,EAAE;QAAA;QAC3E,IAAI,CAAChC,GAAG,CAACgE,KAAK,CAAE,oBAAmB,IAAI,CAAChC,UAAW,EAAC,CAAC;QACrD,oBAAM,IAAI,CAACxC,GAAG,8CAAR,UAAUqH,MAAM,CAAC,IAAI,CAAC7E,UAAU,CAAC;MACzC;MACA,IAAI,CAAC,IAAI,CAACjD,eAAe,IAAI,CAAC,IAAI,CAAC/D,IAAI,CAAC8L,kBAAkB,EAAE;QAAA;QAC1D,qBAAM,IAAI,CAACtH,GAAG,+CAAR,WAAUuH,SAAS,CAAC,IAAI,CAAC/L,IAAI,CAACoF,UAAU,CAAC;MACjD;MACA,qBAAM,IAAI,CAACZ,GAAG,+CAAR,WAAUwH,QAAQ,EAAE;MAC1B,IAAI,IAAI,CAAChM,IAAI,CAACkD,SAAS,IAAI,CAAC,IAAI,CAAClD,IAAI,CAAC8D,aAAa,IAAI,CAAC,IAAI,CAACyB,WAAW,EAAE;QAAA;QACxE,qBAAM,IAAI,CAACf,GAAG,+CAAR,WAAU+F,YAAY,CAAC,IAAI,CAACvK,IAAI,CAACoF,UAAU,CAAC;MACpD;MACA,MAAM,IAAI,CAAC8C,SAAS,CAAC+D,QAAQ,EAAE;MAC/B,IAAI,CAAC/D,SAAS,GAAG,IAAI;IACvB,CAAC,MAAM;MACL,IAAI,CAAClD,GAAG,CAACgE,KAAK,CAAC,kDAAkD,CAAC;IACpE;IAGA,qBAAM,IAAI,CAACxE,GAAG,+CAAR,WAAU0H,UAAU,EAAE;IAC5B,IAAI,IAAI,CAACzI,kBAAkB,EAAE;MAAA;MAC3B,qBAAM,IAAI,CAACe,GAAG,+CAAR,WAAUuH,SAAS,CAAC,kBAAkB,CAAC;IAC/C;IACA,IAAI,IAAI,CAAC/D,2BAA2B,EAAE;MAAA;MACpC,IAAI,CAAChD,GAAG,CAACQ,IAAI,CAAC,kCAAkC,CAAC;MACjD,qBAAM,IAAI,CAAChB,GAAG,+CAAR,WAAUuD,iBAAiB,CAAC,IAAI,CAAC;MAGvC,IAAI,sBAAM,IAAI,CAACvD,GAAG,+CAAR,WAAUO,WAAW,EAAE,MAAI,EAAE,EAAE;QAAA;QACvC,IAAI,CAACC,GAAG,CAACQ,IAAI,CAAC,iEAAiE,CAAC;QAChF,qBAAM,IAAI,CAAChB,GAAG,+CAAR,WAAU2H,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAACnM,IAAI,CAAC8H,0BAA0B,CAAC;MACnF;IACF;IAEA,IAAI,IAAI,CAAC9H,IAAI,CAACmE,MAAM,EAAE;MAAA;MACpB,IAAIiI,OAAO,GAAG,IAAI,CAACpM,IAAI,CAACqG,GAAG,CAACK,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;MAC5C,IAAI,CAAC1B,GAAG,CAACgE,KAAK,CAAE,qBAAoBoD,OAAQ,GAAE,CAAC;MAC/C,sBAAM,IAAI,CAAC5H,GAAG,gDAAR,YAAU6H,YAAY,CAACD,OAAO,CAAC;IACvC;EACF;EAEA,MAAMvB,oBAAoB,GAAI;IAC5B,IAAIyB,WAAW,GAAG,IAAI,CAACtM,IAAI,CAAC4K,iBAAiB;IAC7C,IAAI,CAAC5F,GAAG,CAACQ,IAAI,CAAC,kCAAkC,CAAC;IACjD,IAAI+G,IAAI,GAAGD,WAAW,CAACC,IAAI;IAC3B,IAAI/L,eAAC,CAACkD,WAAW,CAAC6I,IAAI,CAAC,EAAE;MACvB,IAAI,CAACvH,GAAG,CAACC,IAAI,CAAE,2DAA0DuH,IAAI,CAACC,SAAS,CAACH,WAAW,CAAE,EAAC,CAAC;MACvG,OAAO,KAAK;IACd;IACA,IAAII,UAAU,GAAI,cAAa,IAAI,CAAC1M,IAAI,CAACoF,UAAW,eAAc;IAClE,IAAIuH,UAAU,GAAI,GAAED,UAAW,IAAGH,IAAK,MAAK;IAC5C,IAAIK,SAAS,GAAI,QAAOL,IAAK,MAAK;IAClC,IAAIM,OAAO,GAAG,IAAI,CAACC,eAAe,EAAE;IACpCD,OAAO,CAACE,KAAK,CAACT,WAAW,CAACU,KAAK,CAAC;IAChC,IAAI,CAAChI,GAAG,CAACQ,IAAI,CAAE,0CAAyCoH,SAAU,EAAC,CAAC;IACpEC,OAAO,CAACI,MAAM,CAACL,SAAS,CAAC;IACzB,IAAI,CAAC5H,GAAG,CAACQ,IAAI,CAAE,wCAAuCkH,UAAW,EAAC,CAAC;IACnE,MAAM,IAAI,CAAClI,GAAG,CAACwG,KAAK,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE0B,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC1H,GAAG,CAACQ,IAAI,CAAE,2BAA0BmH,UAAW,EAAC,CAAC;IACtD,MAAM,IAAI,CAACnI,GAAG,CAACN,IAAI,CAAC0I,SAAS,EAAED,UAAU,CAAC;IAC1C,IAAI;MACF,IAAI,CAAC3H,GAAG,CAACQ,IAAI,CAAE,oDAAmD,CAAC;MACnE,IAAI,MAAMsF,WAAE,CAACC,MAAM,CAAC6B,SAAS,CAAC,EAAE;QAC9B,MAAM9B,WAAE,CAACoC,MAAM,CAACN,SAAS,CAAC;MAC5B;IACF,CAAC,CAAC,OAAO1G,CAAC,EAAE;MACV,IAAI,CAAClB,GAAG,CAACC,IAAI,CAAE,yCAAwC2H,SAAU,EAAC,CAAC;IACrE;IACA,OAAO,IAAI;EACb;EAEAE,eAAe,GAAI;IAIjB,OAAO,IAAIK,4CAAkB,EAAE;EACjC;EAEAtD,mBAAmB,CAAEhI,IAAI,EAAE;IACzB,IAAI,CAAC,KAAK,CAACgI,mBAAmB,CAAChI,IAAI,CAAC,EAAE;MACpC,OAAO,KAAK;IACd;IACA,IAAI,CAAC,CAACA,IAAI,CAAC+E,WAAW,IAAI,CAAC1F,uBAAO,CAACyF,eAAe,CAAC9E,IAAI,CAAC+E,WAAW,CAAC,KAAK,CAAC/E,IAAI,CAACsD,GAAG,IAAI,CAACtD,IAAI,CAACuD,UAAU,EAAE;MACtG,IAAI,CAACJ,GAAG,CAACuB,aAAa,CAAC,gFAAgF,CAAC;IAC1G;IACA,OAAOrF,uBAAO,CAAC2I,mBAAmB,CAAChI,IAAI,CAAC;EAC1C;EAEAuL,WAAW,CAAExL,SAAS,EAAE;IACtB,KAAK,CAACwL,WAAW,CAACxL,SAAS,CAAC;IAE5B,OAAO,IAAI,CAACtB,cAAc;EAC5B;EAEA+M,iBAAiB,CAAEzL,SAAS,EAAE;IAC5B,KAAK,CAACyL,iBAAiB,CAACzL,SAAS,CAAC;IAElC,OAAO,IAAI,CAACrB,aAAa;EAC3B;EAEA+M,QAAQ,CAAE1L,SAAS,EAAE;IACnB,KAAK,CAAC0L,QAAQ,CAAC1L,SAAS,CAAC;IAGzB,OAAOpB,eAAC,CAAC+M,UAAU,CAAC,IAAI,CAACC,WAAW,CAAC;EACvC;AACF;AAAC;AAAA,eAGc5N,aAAa;AAAA"}
@@ -0,0 +1,397 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.newMethodMap = void 0;
7
+ require("source-map-support/register");
8
+ const newMethodMap = {
9
+ '/session/:sessionId/timeouts/implicit_wait': {
10
+ POST: {
11
+ command: 'implicitWait',
12
+ payloadParams: {
13
+ required: ['ms']
14
+ }
15
+ }
16
+ },
17
+ '/session/:sessionId/ime/available_engines': {
18
+ GET: {
19
+ command: 'availableIMEEngines'
20
+ }
21
+ },
22
+ '/session/:sessionId/ime/active_engine': {
23
+ GET: {
24
+ command: 'getActiveIMEEngine'
25
+ }
26
+ },
27
+ '/session/:sessionId/ime/activated': {
28
+ GET: {
29
+ command: 'isIMEActivated'
30
+ }
31
+ },
32
+ '/session/:sessionId/ime/deactivate': {
33
+ POST: {
34
+ command: 'deactivateIMEEngine'
35
+ }
36
+ },
37
+ '/session/:sessionId/ime/activate': {
38
+ POST: {
39
+ command: 'activateIMEEngine',
40
+ payloadParams: {
41
+ required: ['engine']
42
+ }
43
+ }
44
+ },
45
+ '/session/:sessionId/window/:windowhandle/size': {
46
+ GET: {
47
+ command: 'getWindowSize'
48
+ }
49
+ },
50
+ '/session/:sessionId/keys': {
51
+ POST: {
52
+ command: 'keys',
53
+ payloadParams: {
54
+ required: ['value']
55
+ }
56
+ }
57
+ },
58
+ '/session/:sessionId/element/:elementId/location': {
59
+ GET: {
60
+ command: 'getLocation'
61
+ }
62
+ },
63
+ '/session/:sessionId/element/:elementId/location_in_view': {
64
+ GET: {
65
+ command: 'getLocationInView'
66
+ }
67
+ },
68
+ '/session/:sessionId/element/:elementId/size': {
69
+ GET: {
70
+ command: 'getSize'
71
+ }
72
+ },
73
+ '/session/:sessionId/touch/click': {
74
+ POST: {
75
+ command: 'click',
76
+ payloadParams: {
77
+ required: ['element']
78
+ }
79
+ }
80
+ },
81
+ '/session/:sessionId/touch/down': {
82
+ POST: {
83
+ command: 'touchDown',
84
+ payloadParams: {
85
+ required: ['x', 'y']
86
+ }
87
+ }
88
+ },
89
+ '/session/:sessionId/touch/up': {
90
+ POST: {
91
+ command: 'touchUp',
92
+ payloadParams: {
93
+ required: ['x', 'y']
94
+ }
95
+ }
96
+ },
97
+ '/session/:sessionId/touch/move': {
98
+ POST: {
99
+ command: 'touchMove',
100
+ payloadParams: {
101
+ required: ['x', 'y']
102
+ }
103
+ }
104
+ },
105
+ '/session/:sessionId/touch/longclick': {
106
+ POST: {
107
+ command: 'touchLongClick',
108
+ payloadParams: {
109
+ required: ['elements']
110
+ }
111
+ }
112
+ },
113
+ '/session/:sessionId/touch/flick': {
114
+ POST: {
115
+ command: 'flick',
116
+ payloadParams: {
117
+ optional: ['element', 'xspeed', 'yspeed', 'xoffset', 'yoffset', 'speed']
118
+ }
119
+ }
120
+ },
121
+ '/session/:sessionId/touch/perform': {
122
+ POST: {
123
+ command: 'performTouch',
124
+ payloadParams: {
125
+ wrap: 'actions',
126
+ required: ['actions']
127
+ }
128
+ }
129
+ },
130
+ '/session/:sessionId/touch/multi/perform': {
131
+ POST: {
132
+ command: 'performMultiAction',
133
+ payloadParams: {
134
+ required: ['actions'],
135
+ optional: ['elementId']
136
+ }
137
+ }
138
+ },
139
+ '/session/:sessionId/appium/device/lock': {
140
+ POST: {
141
+ command: 'lock',
142
+ payloadParams: {
143
+ optional: ['seconds']
144
+ }
145
+ }
146
+ },
147
+ '/session/:sessionId/appium/device/unlock': {
148
+ POST: {
149
+ command: 'unlock'
150
+ }
151
+ },
152
+ '/session/:sessionId/appium/device/is_locked': {
153
+ POST: {
154
+ command: 'isLocked'
155
+ }
156
+ },
157
+ '/session/:sessionId/appium/start_recording_screen': {
158
+ POST: {
159
+ command: 'startRecordingScreen',
160
+ payloadParams: {
161
+ optional: ['options']
162
+ }
163
+ }
164
+ },
165
+ '/session/:sessionId/appium/stop_recording_screen': {
166
+ POST: {
167
+ command: 'stopRecordingScreen',
168
+ payloadParams: {
169
+ optional: ['options']
170
+ }
171
+ }
172
+ },
173
+ '/session/:sessionId/appium/performanceData/types': {
174
+ POST: {
175
+ command: 'getPerformanceDataTypes'
176
+ }
177
+ },
178
+ '/session/:sessionId/appium/getPerformanceData': {
179
+ POST: {
180
+ command: 'getPerformanceData',
181
+ payloadParams: {
182
+ required: ['packageName', 'dataType'],
183
+ optional: ['dataReadTimeout']
184
+ }
185
+ }
186
+ },
187
+ '/session/:sessionId/appium/device/press_keycode': {
188
+ POST: {
189
+ command: 'pressKeyCode',
190
+ payloadParams: {
191
+ required: ['keycode'],
192
+ optional: ['metastate', 'flags']
193
+ }
194
+ }
195
+ },
196
+ '/session/:sessionId/appium/device/long_press_keycode': {
197
+ POST: {
198
+ command: 'longPressKeyCode',
199
+ payloadParams: {
200
+ required: ['keycode'],
201
+ optional: ['metastate', 'flags']
202
+ }
203
+ }
204
+ },
205
+ '/session/:sessionId/appium/device/finger_print': {
206
+ POST: {
207
+ command: 'fingerprint',
208
+ payloadParams: {
209
+ required: ['fingerprintId']
210
+ }
211
+ }
212
+ },
213
+ '/session/:sessionId/appium/device/send_sms': {
214
+ POST: {
215
+ command: 'sendSMS',
216
+ payloadParams: {
217
+ required: ['phoneNumber', 'message']
218
+ }
219
+ }
220
+ },
221
+ '/session/:sessionId/appium/device/gsm_call': {
222
+ POST: {
223
+ command: 'gsmCall',
224
+ payloadParams: {
225
+ required: ['phoneNumber', 'action']
226
+ }
227
+ }
228
+ },
229
+ '/session/:sessionId/appium/device/gsm_signal': {
230
+ POST: {
231
+ command: 'gsmSignal',
232
+ payloadParams: {
233
+ required: ['signalStrength']
234
+ }
235
+ }
236
+ },
237
+ '/session/:sessionId/appium/device/gsm_voice': {
238
+ POST: {
239
+ command: 'gsmVoice',
240
+ payloadParams: {
241
+ required: ['state']
242
+ }
243
+ }
244
+ },
245
+ '/session/:sessionId/appium/device/power_capacity': {
246
+ POST: {
247
+ command: 'powerCapacity',
248
+ payloadParams: {
249
+ required: ['percent']
250
+ }
251
+ }
252
+ },
253
+ '/session/:sessionId/appium/device/power_ac': {
254
+ POST: {
255
+ command: 'powerAC',
256
+ payloadParams: {
257
+ required: ['state']
258
+ }
259
+ }
260
+ },
261
+ '/session/:sessionId/appium/device/network_speed': {
262
+ POST: {
263
+ command: 'networkSpeed',
264
+ payloadParams: {
265
+ required: ['netspeed']
266
+ }
267
+ }
268
+ },
269
+ '/session/:sessionId/appium/device/keyevent': {
270
+ POST: {
271
+ command: 'keyevent',
272
+ payloadParams: {
273
+ required: ['keycode'],
274
+ optional: ['metastate']
275
+ }
276
+ }
277
+ },
278
+ '/session/:sessionId/appium/device/current_activity': {
279
+ GET: {
280
+ command: 'getCurrentActivity'
281
+ }
282
+ },
283
+ '/session/:sessionId/appium/device/current_package': {
284
+ GET: {
285
+ command: 'getCurrentPackage'
286
+ }
287
+ },
288
+ '/session/:sessionId/appium/device/app_state': {
289
+ POST: {
290
+ command: 'queryAppState',
291
+ payloadParams: {
292
+ required: [['appId'], ['bundleId']]
293
+ }
294
+ }
295
+ },
296
+ '/session/:sessionId/appium/device/toggle_airplane_mode': {
297
+ POST: {
298
+ command: 'toggleFlightMode'
299
+ }
300
+ },
301
+ '/session/:sessionId/appium/device/toggle_data': {
302
+ POST: {
303
+ command: 'toggleData'
304
+ }
305
+ },
306
+ '/session/:sessionId/appium/device/toggle_wifi': {
307
+ POST: {
308
+ command: 'toggleWiFi'
309
+ }
310
+ },
311
+ '/session/:sessionId/appium/device/toggle_location_services': {
312
+ POST: {
313
+ command: 'toggleLocationServices'
314
+ }
315
+ },
316
+ '/session/:sessionId/appium/device/open_notifications': {
317
+ POST: {
318
+ command: 'openNotifications'
319
+ }
320
+ },
321
+ '/session/:sessionId/appium/device/start_activity': {
322
+ POST: {
323
+ command: 'startActivity',
324
+ payloadParams: {
325
+ required: ['appPackage', 'appActivity'],
326
+ optional: ['appWaitPackage', 'appWaitActivity', 'intentAction', 'intentCategory', 'intentFlags', 'optionalIntentArguments', 'dontStopAppOnReset']
327
+ }
328
+ }
329
+ },
330
+ '/session/:sessionId/appium/device/system_bars': {
331
+ GET: {
332
+ command: 'getSystemBars'
333
+ }
334
+ },
335
+ '/session/:sessionId/appium/device/display_density': {
336
+ GET: {
337
+ command: 'getDisplayDensity'
338
+ }
339
+ },
340
+ '/session/:sessionId/appium/app/launch': {
341
+ POST: {
342
+ command: 'launchApp'
343
+ }
344
+ },
345
+ '/session/:sessionId/appium/app/close': {
346
+ POST: {
347
+ command: 'closeApp'
348
+ }
349
+ },
350
+ '/session/:sessionId/appium/app/reset': {
351
+ POST: {
352
+ command: 'reset'
353
+ }
354
+ },
355
+ '/session/:sessionId/appium/app/background': {
356
+ POST: {
357
+ command: 'background',
358
+ payloadParams: {
359
+ required: ['seconds']
360
+ }
361
+ }
362
+ },
363
+ '/session/:sessionId/appium/app/end_test_coverage': {
364
+ POST: {
365
+ command: 'endCoverage',
366
+ payloadParams: {
367
+ required: ['intent', 'path']
368
+ }
369
+ }
370
+ },
371
+ '/session/:sessionId/appium/app/strings': {
372
+ POST: {
373
+ command: 'getStrings',
374
+ payloadParams: {
375
+ optional: ['language', 'stringFile']
376
+ }
377
+ }
378
+ },
379
+ '/session/:sessionId/appium/element/:elementId/value': {
380
+ POST: {
381
+ command: 'setValueImmediate',
382
+ payloadParams: {
383
+ required: ['text']
384
+ }
385
+ }
386
+ },
387
+ '/session/:sessionId/appium/element/:elementId/replace_value': {
388
+ POST: {
389
+ command: 'replaceValue',
390
+ payloadParams: {
391
+ required: ['text']
392
+ }
393
+ }
394
+ }
395
+ };
396
+ exports.newMethodMap = newMethodMap;
397
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJuZXdNZXRob2RNYXAiLCJQT1NUIiwiY29tbWFuZCIsInBheWxvYWRQYXJhbXMiLCJyZXF1aXJlZCIsIkdFVCIsIm9wdGlvbmFsIiwid3JhcCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9tZXRob2QtbWFwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBuZXdNZXRob2RNYXAgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoe1xuICAnL3Nlc3Npb24vOnNlc3Npb25JZC90aW1lb3V0cy9pbXBsaWNpdF93YWl0Jzoge1xuICAgIFBPU1Q6IHsgY29tbWFuZDogJ2ltcGxpY2l0V2FpdCcsIHBheWxvYWRQYXJhbXM6IHsgcmVxdWlyZWQ6IFsnbXMnXSB9IH1cbiAgfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvaW1lL2F2YWlsYWJsZV9lbmdpbmVzJzogeyBHRVQ6IHsgY29tbWFuZDogJ2F2YWlsYWJsZUlNRUVuZ2luZXMnIH0gfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvaW1lL2FjdGl2ZV9lbmdpbmUnOiB7IEdFVDogeyBjb21tYW5kOiAnZ2V0QWN0aXZlSU1FRW5naW5lJyB9IH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL2ltZS9hY3RpdmF0ZWQnOiB7IEdFVDogeyBjb21tYW5kOiAnaXNJTUVBY3RpdmF0ZWQnIH0gfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvaW1lL2RlYWN0aXZhdGUnOiB7IFBPU1Q6IHsgY29tbWFuZDogJ2RlYWN0aXZhdGVJTUVFbmdpbmUnIH0gfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvaW1lL2FjdGl2YXRlJzoge1xuICAgIFBPU1Q6IHtcbiAgICAgIGNvbW1hbmQ6ICdhY3RpdmF0ZUlNRUVuZ2luZScsXG4gICAgICBwYXlsb2FkUGFyYW1zOiB7IHJlcXVpcmVkOiBbJ2VuZ2luZSddIH1cbiAgICB9XG4gIH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL3dpbmRvdy86d2luZG93aGFuZGxlL3NpemUnOiB7IEdFVDogeyBjb21tYW5kOiAnZ2V0V2luZG93U2l6ZScgfSB9LFxuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9rZXlzJzoge1xuICAgIFBPU1Q6IHsgY29tbWFuZDogJ2tleXMnLCBwYXlsb2FkUGFyYW1zOiB7IHJlcXVpcmVkOiBbJ3ZhbHVlJ10gfSB9XG4gIH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL2VsZW1lbnQvOmVsZW1lbnRJZC9sb2NhdGlvbic6IHsgR0VUOiB7IGNvbW1hbmQ6ICdnZXRMb2NhdGlvbicgfSB9LFxuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9lbGVtZW50LzplbGVtZW50SWQvbG9jYXRpb25faW5fdmlldyc6IHsgR0VUOiB7IGNvbW1hbmQ6ICdnZXRMb2NhdGlvbkluVmlldycgfSB9LFxuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9lbGVtZW50LzplbGVtZW50SWQvc2l6ZSc6IHsgR0VUOiB7IGNvbW1hbmQ6ICdnZXRTaXplJyB9IH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL3RvdWNoL2NsaWNrJzoge1xuICAgIFBPU1Q6IHsgY29tbWFuZDogJ2NsaWNrJywgcGF5bG9hZFBhcmFtczogeyByZXF1aXJlZDogWydlbGVtZW50J10gfSB9XG4gIH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL3RvdWNoL2Rvd24nOiB7XG4gICAgUE9TVDogeyBjb21tYW5kOiAndG91Y2hEb3duJywgcGF5bG9hZFBhcmFtczogeyByZXF1aXJlZDogWyd4JywgJ3knXSB9IH1cbiAgfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvdG91Y2gvdXAnOiB7XG4gICAgUE9TVDogeyBjb21tYW5kOiAndG91Y2hVcCcsIHBheWxvYWRQYXJhbXM6IHsgcmVxdWlyZWQ6IFsneCcsICd5J10gfSB9XG4gIH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL3RvdWNoL21vdmUnOiB7XG4gICAgUE9TVDogeyBjb21tYW5kOiAndG91Y2hNb3ZlJywgcGF5bG9hZFBhcmFtczogeyByZXF1aXJlZDogWyd4JywgJ3knXSB9IH1cbiAgfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvdG91Y2gvbG9uZ2NsaWNrJzoge1xuICAgIFBPU1Q6IHtcbiAgICAgIGNvbW1hbmQ6ICd0b3VjaExvbmdDbGljaycsXG4gICAgICBwYXlsb2FkUGFyYW1zOiB7IHJlcXVpcmVkOiBbJ2VsZW1lbnRzJ10gfVxuICAgIH1cbiAgfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvdG91Y2gvZmxpY2snOiB7XG4gICAgUE9TVDoge1xuICAgICAgY29tbWFuZDogJ2ZsaWNrJyxcbiAgICAgIHBheWxvYWRQYXJhbXM6IHtcbiAgICAgICAgb3B0aW9uYWw6IFtcbiAgICAgICAgICAnZWxlbWVudCcsXG4gICAgICAgICAgJ3hzcGVlZCcsXG4gICAgICAgICAgJ3lzcGVlZCcsXG4gICAgICAgICAgJ3hvZmZzZXQnLFxuICAgICAgICAgICd5b2Zmc2V0JyxcbiAgICAgICAgICAnc3BlZWQnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL3RvdWNoL3BlcmZvcm0nOiB7XG4gICAgUE9TVDoge1xuICAgICAgY29tbWFuZDogJ3BlcmZvcm1Ub3VjaCcsXG4gICAgICBwYXlsb2FkUGFyYW1zOiB7IHdyYXA6ICdhY3Rpb25zJywgcmVxdWlyZWQ6IFsnYWN0aW9ucyddIH1cbiAgICB9XG4gIH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL3RvdWNoL211bHRpL3BlcmZvcm0nOiB7XG4gICAgUE9TVDoge1xuICAgICAgY29tbWFuZDogJ3BlcmZvcm1NdWx0aUFjdGlvbicsXG4gICAgICBwYXlsb2FkUGFyYW1zOiB7IHJlcXVpcmVkOiBbJ2FjdGlvbnMnXSwgb3B0aW9uYWw6IFsnZWxlbWVudElkJ10gfVxuICAgIH1cbiAgfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL2RldmljZS9sb2NrJzoge1xuICAgIFBPU1Q6IHsgY29tbWFuZDogJ2xvY2snLCBwYXlsb2FkUGFyYW1zOiB7IG9wdGlvbmFsOiBbJ3NlY29uZHMnXSB9IH1cbiAgfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL2RldmljZS91bmxvY2snOiB7IFBPU1Q6IHsgY29tbWFuZDogJ3VubG9jaycgfSB9LFxuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9hcHBpdW0vZGV2aWNlL2lzX2xvY2tlZCc6IHsgUE9TVDogeyBjb21tYW5kOiAnaXNMb2NrZWQnIH0gfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL3N0YXJ0X3JlY29yZGluZ19zY3JlZW4nOiB7XG4gICAgUE9TVDoge1xuICAgICAgY29tbWFuZDogJ3N0YXJ0UmVjb3JkaW5nU2NyZWVuJyxcbiAgICAgIHBheWxvYWRQYXJhbXM6IHsgb3B0aW9uYWw6IFsnb3B0aW9ucyddIH1cbiAgICB9XG4gIH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9zdG9wX3JlY29yZGluZ19zY3JlZW4nOiB7XG4gICAgUE9TVDoge1xuICAgICAgY29tbWFuZDogJ3N0b3BSZWNvcmRpbmdTY3JlZW4nLFxuICAgICAgcGF5bG9hZFBhcmFtczogeyBvcHRpb25hbDogWydvcHRpb25zJ10gfVxuICAgIH1cbiAgfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL3BlcmZvcm1hbmNlRGF0YS90eXBlcyc6IHsgUE9TVDogeyBjb21tYW5kOiAnZ2V0UGVyZm9ybWFuY2VEYXRhVHlwZXMnIH0gfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL2dldFBlcmZvcm1hbmNlRGF0YSc6IHtcbiAgICBQT1NUOiB7XG4gICAgICBjb21tYW5kOiAnZ2V0UGVyZm9ybWFuY2VEYXRhJyxcbiAgICAgIHBheWxvYWRQYXJhbXM6IHtcbiAgICAgICAgcmVxdWlyZWQ6IFsncGFja2FnZU5hbWUnLCAnZGF0YVR5cGUnXSxcbiAgICAgICAgb3B0aW9uYWw6IFsnZGF0YVJlYWRUaW1lb3V0J11cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9kZXZpY2UvcHJlc3Nfa2V5Y29kZSc6IHtcbiAgICBQT1NUOiB7XG4gICAgICBjb21tYW5kOiAncHJlc3NLZXlDb2RlJyxcbiAgICAgIHBheWxvYWRQYXJhbXM6IHsgcmVxdWlyZWQ6IFsna2V5Y29kZSddLCBvcHRpb25hbDogWydtZXRhc3RhdGUnLCAnZmxhZ3MnXSB9XG4gICAgfVxuICB9LFxuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9hcHBpdW0vZGV2aWNlL2xvbmdfcHJlc3Nfa2V5Y29kZSc6IHtcbiAgICBQT1NUOiB7XG4gICAgICBjb21tYW5kOiAnbG9uZ1ByZXNzS2V5Q29kZScsXG4gICAgICBwYXlsb2FkUGFyYW1zOiB7IHJlcXVpcmVkOiBbJ2tleWNvZGUnXSwgb3B0aW9uYWw6IFsnbWV0YXN0YXRlJywgJ2ZsYWdzJ10gfVxuICAgIH1cbiAgfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL2RldmljZS9maW5nZXJfcHJpbnQnOiB7XG4gICAgUE9TVDoge1xuICAgICAgY29tbWFuZDogJ2ZpbmdlcnByaW50JyxcbiAgICAgIHBheWxvYWRQYXJhbXM6IHsgcmVxdWlyZWQ6IFsnZmluZ2VycHJpbnRJZCddIH1cbiAgICB9XG4gIH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9kZXZpY2Uvc2VuZF9zbXMnOiB7XG4gICAgUE9TVDoge1xuICAgICAgY29tbWFuZDogJ3NlbmRTTVMnLFxuICAgICAgcGF5bG9hZFBhcmFtczogeyByZXF1aXJlZDogWydwaG9uZU51bWJlcicsICdtZXNzYWdlJ10gfVxuICAgIH1cbiAgfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL2RldmljZS9nc21fY2FsbCc6IHtcbiAgICBQT1NUOiB7XG4gICAgICBjb21tYW5kOiAnZ3NtQ2FsbCcsXG4gICAgICBwYXlsb2FkUGFyYW1zOiB7IHJlcXVpcmVkOiBbJ3Bob25lTnVtYmVyJywgJ2FjdGlvbiddIH1cbiAgICB9XG4gIH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9kZXZpY2UvZ3NtX3NpZ25hbCc6IHtcbiAgICBQT1NUOiB7XG4gICAgICBjb21tYW5kOiAnZ3NtU2lnbmFsJyxcbiAgICAgIHBheWxvYWRQYXJhbXM6IHsgcmVxdWlyZWQ6IFsnc2lnbmFsU3RyZW5ndGgnXSB9XG4gICAgfVxuICB9LFxuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9hcHBpdW0vZGV2aWNlL2dzbV92b2ljZSc6IHtcbiAgICBQT1NUOiB7IGNvbW1hbmQ6ICdnc21Wb2ljZScsIHBheWxvYWRQYXJhbXM6IHsgcmVxdWlyZWQ6IFsnc3RhdGUnXSB9IH1cbiAgfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL2RldmljZS9wb3dlcl9jYXBhY2l0eSc6IHtcbiAgICBQT1NUOiB7XG4gICAgICBjb21tYW5kOiAncG93ZXJDYXBhY2l0eScsXG4gICAgICBwYXlsb2FkUGFyYW1zOiB7IHJlcXVpcmVkOiBbJ3BlcmNlbnQnXSB9XG4gICAgfVxuICB9LFxuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9hcHBpdW0vZGV2aWNlL3Bvd2VyX2FjJzoge1xuICAgIFBPU1Q6IHsgY29tbWFuZDogJ3Bvd2VyQUMnLCBwYXlsb2FkUGFyYW1zOiB7IHJlcXVpcmVkOiBbJ3N0YXRlJ10gfSB9XG4gIH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9kZXZpY2UvbmV0d29ya19zcGVlZCc6IHtcbiAgICBQT1NUOiB7XG4gICAgICBjb21tYW5kOiAnbmV0d29ya1NwZWVkJyxcbiAgICAgIHBheWxvYWRQYXJhbXM6IHsgcmVxdWlyZWQ6IFsnbmV0c3BlZWQnXSB9XG4gICAgfVxuICB9LFxuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9hcHBpdW0vZGV2aWNlL2tleWV2ZW50Jzoge1xuICAgIFBPU1Q6IHtcbiAgICAgIGNvbW1hbmQ6ICdrZXlldmVudCcsXG4gICAgICBwYXlsb2FkUGFyYW1zOiB7IHJlcXVpcmVkOiBbJ2tleWNvZGUnXSwgb3B0aW9uYWw6IFsnbWV0YXN0YXRlJ10gfVxuICAgIH1cbiAgfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL2RldmljZS9jdXJyZW50X2FjdGl2aXR5JzogeyBHRVQ6IHsgY29tbWFuZDogJ2dldEN1cnJlbnRBY3Rpdml0eScgfSB9LFxuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9hcHBpdW0vZGV2aWNlL2N1cnJlbnRfcGFja2FnZSc6IHsgR0VUOiB7IGNvbW1hbmQ6ICdnZXRDdXJyZW50UGFja2FnZScgfSB9LFxuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9hcHBpdW0vZGV2aWNlL2FwcF9zdGF0ZSc6IHtcbiAgICBQT1NUOiB7XG4gICAgICBjb21tYW5kOiAncXVlcnlBcHBTdGF0ZScsXG4gICAgICBwYXlsb2FkUGFyYW1zOiB7IHJlcXVpcmVkOiBbWydhcHBJZCddLCBbJ2J1bmRsZUlkJ11dIH1cbiAgICB9XG4gIH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9kZXZpY2UvdG9nZ2xlX2FpcnBsYW5lX21vZGUnOiB7IFBPU1Q6IHsgY29tbWFuZDogJ3RvZ2dsZUZsaWdodE1vZGUnIH0gfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL2RldmljZS90b2dnbGVfZGF0YSc6IHsgUE9TVDogeyBjb21tYW5kOiAndG9nZ2xlRGF0YScgfSB9LFxuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9hcHBpdW0vZGV2aWNlL3RvZ2dsZV93aWZpJzogeyBQT1NUOiB7IGNvbW1hbmQ6ICd0b2dnbGVXaUZpJyB9IH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9kZXZpY2UvdG9nZ2xlX2xvY2F0aW9uX3NlcnZpY2VzJzogeyBQT1NUOiB7IGNvbW1hbmQ6ICd0b2dnbGVMb2NhdGlvblNlcnZpY2VzJyB9IH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJzogeyBQT1NUOiB7IGNvbW1hbmQ6ICdvcGVuTm90aWZpY2F0aW9ucycgfSB9LFxuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9hcHBpdW0vZGV2aWNlL3N0YXJ0X2FjdGl2aXR5Jzoge1xuICAgIFBPU1Q6IHtcbiAgICAgIGNvbW1hbmQ6ICdzdGFydEFjdGl2aXR5JyxcbiAgICAgIHBheWxvYWRQYXJhbXM6IHtcbiAgICAgICAgcmVxdWlyZWQ6IFsnYXBwUGFja2FnZScsICdhcHBBY3Rpdml0eSddLFxuICAgICAgICBvcHRpb25hbDogW1xuICAgICAgICAgICdhcHBXYWl0UGFja2FnZScsXG4gICAgICAgICAgJ2FwcFdhaXRBY3Rpdml0eScsXG4gICAgICAgICAgJ2ludGVudEFjdGlvbicsXG4gICAgICAgICAgJ2ludGVudENhdGVnb3J5JyxcbiAgICAgICAgICAnaW50ZW50RmxhZ3MnLFxuICAgICAgICAgICdvcHRpb25hbEludGVudEFyZ3VtZW50cycsXG4gICAgICAgICAgJ2RvbnRTdG9wQXBwT25SZXNldCdcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL2RldmljZS9zeXN0ZW1fYmFycyc6IHsgR0VUOiB7IGNvbW1hbmQ6ICdnZXRTeXN0ZW1CYXJzJyB9IH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9kZXZpY2UvZGlzcGxheV9kZW5zaXR5JzogeyBHRVQ6IHsgY29tbWFuZDogJ2dldERpc3BsYXlEZW5zaXR5JyB9IH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9hcHAvbGF1bmNoJzogeyBQT1NUOiB7IGNvbW1hbmQ6ICdsYXVuY2hBcHAnIH0gfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL2FwcC9jbG9zZSc6IHsgUE9TVDogeyBjb21tYW5kOiAnY2xvc2VBcHAnIH0gfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL2FwcC9yZXNldCc6IHsgUE9TVDogeyBjb21tYW5kOiAncmVzZXQnIH0gfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL2FwcC9iYWNrZ3JvdW5kJzoge1xuICAgIFBPU1Q6IHtcbiAgICAgIGNvbW1hbmQ6ICdiYWNrZ3JvdW5kJyxcbiAgICAgIHBheWxvYWRQYXJhbXM6IHsgcmVxdWlyZWQ6IFsnc2Vjb25kcyddIH1cbiAgICB9XG4gIH0sXG4gICcvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9hcHAvZW5kX3Rlc3RfY292ZXJhZ2UnOiB7XG4gICAgUE9TVDoge1xuICAgICAgY29tbWFuZDogJ2VuZENvdmVyYWdlJyxcbiAgICAgIHBheWxvYWRQYXJhbXM6IHsgcmVxdWlyZWQ6IFsnaW50ZW50JywgJ3BhdGgnXSB9XG4gICAgfVxuICB9LFxuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9hcHBpdW0vYXBwL3N0cmluZ3MnOiB7XG4gICAgUE9TVDoge1xuICAgICAgY29tbWFuZDogJ2dldFN0cmluZ3MnLFxuICAgICAgcGF5bG9hZFBhcmFtczogeyBvcHRpb25hbDogWydsYW5ndWFnZScsICdzdHJpbmdGaWxlJ10gfVxuICAgIH1cbiAgfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL2VsZW1lbnQvOmVsZW1lbnRJZC92YWx1ZSc6IHtcbiAgICBQT1NUOiB7XG4gICAgICBjb21tYW5kOiAnc2V0VmFsdWVJbW1lZGlhdGUnLFxuICAgICAgcGF5bG9hZFBhcmFtczogeyByZXF1aXJlZDogWyd0ZXh0J10gfVxuICAgIH1cbiAgfSxcbiAgJy9zZXNzaW9uLzpzZXNzaW9uSWQvYXBwaXVtL2VsZW1lbnQvOmVsZW1lbnRJZC9yZXBsYWNlX3ZhbHVlJzoge1xuICAgIFBPU1Q6IHtcbiAgICAgIGNvbW1hbmQ6ICdyZXBsYWNlVmFsdWUnLFxuICAgICAgcGF5bG9hZFBhcmFtczogeyByZXF1aXJlZDogWyd0ZXh0J10gfVxuICAgIH1cbiAgfVxufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBTyxNQUFNQSxZQUFZLEdBQXlCO0VBQ2hELDRDQUE0QyxFQUFFO0lBQzVDQyxJQUFJLEVBQUU7TUFBRUMsT0FBTyxFQUFFLGNBQWM7TUFBRUMsYUFBYSxFQUFFO1FBQUVDLFFBQVEs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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"method-map.js","names":["newMethodMap","POST","command","payloadParams","required","GET","optional","wrap"],"sources":["../../lib/method-map.js"],"sourcesContent":["export const newMethodMap = /** @type {const} */ ({\n '/session/:sessionId/timeouts/implicit_wait': {\n POST: { command: 'implicitWait', payloadParams: { required: ['ms'] } }\n },\n '/session/:sessionId/ime/available_engines': { GET: { command: 'availableIMEEngines' } },\n '/session/:sessionId/ime/active_engine': { GET: { command: 'getActiveIMEEngine' } },\n '/session/:sessionId/ime/activated': { GET: { command: 'isIMEActivated' } },\n '/session/:sessionId/ime/deactivate': { POST: { command: 'deactivateIMEEngine' } },\n '/session/:sessionId/ime/activate': {\n POST: {\n command: 'activateIMEEngine',\n payloadParams: { required: ['engine'] }\n }\n },\n '/session/:sessionId/window/:windowhandle/size': { GET: { command: 'getWindowSize' } },\n '/session/:sessionId/keys': {\n POST: { command: 'keys', payloadParams: { required: ['value'] } }\n },\n '/session/:sessionId/element/:elementId/location': { GET: { command: 'getLocation' } },\n '/session/:sessionId/element/:elementId/location_in_view': { GET: { command: 'getLocationInView' } },\n '/session/:sessionId/element/:elementId/size': { GET: { command: 'getSize' } },\n '/session/:sessionId/touch/click': {\n POST: { command: 'click', payloadParams: { required: ['element'] } }\n },\n '/session/:sessionId/touch/down': {\n POST: { command: 'touchDown', payloadParams: { required: ['x', 'y'] } }\n },\n '/session/:sessionId/touch/up': {\n POST: { command: 'touchUp', payloadParams: { required: ['x', 'y'] } }\n },\n '/session/:sessionId/touch/move': {\n POST: { command: 'touchMove', payloadParams: { required: ['x', 'y'] } }\n },\n '/session/:sessionId/touch/longclick': {\n POST: {\n command: 'touchLongClick',\n payloadParams: { required: ['elements'] }\n }\n },\n '/session/:sessionId/touch/flick': {\n POST: {\n command: 'flick',\n payloadParams: {\n optional: [\n 'element',\n 'xspeed',\n 'yspeed',\n 'xoffset',\n 'yoffset',\n 'speed'\n ]\n }\n }\n },\n '/session/:sessionId/touch/perform': {\n POST: {\n command: 'performTouch',\n payloadParams: { wrap: 'actions', required: ['actions'] }\n }\n },\n '/session/:sessionId/touch/multi/perform': {\n POST: {\n command: 'performMultiAction',\n payloadParams: { required: ['actions'], optional: ['elementId'] }\n }\n },\n '/session/:sessionId/appium/device/lock': {\n POST: { command: 'lock', payloadParams: { optional: ['seconds'] } }\n },\n '/session/:sessionId/appium/device/unlock': { POST: { command: 'unlock' } },\n '/session/:sessionId/appium/device/is_locked': { POST: { command: 'isLocked' } },\n '/session/:sessionId/appium/start_recording_screen': {\n POST: {\n command: 'startRecordingScreen',\n payloadParams: { optional: ['options'] }\n }\n },\n '/session/:sessionId/appium/stop_recording_screen': {\n POST: {\n command: 'stopRecordingScreen',\n payloadParams: { optional: ['options'] }\n }\n },\n '/session/:sessionId/appium/performanceData/types': { POST: { command: 'getPerformanceDataTypes' } },\n '/session/:sessionId/appium/getPerformanceData': {\n POST: {\n command: 'getPerformanceData',\n payloadParams: {\n required: ['packageName', 'dataType'],\n optional: ['dataReadTimeout']\n }\n }\n },\n '/session/:sessionId/appium/device/press_keycode': {\n POST: {\n command: 'pressKeyCode',\n payloadParams: { required: ['keycode'], optional: ['metastate', 'flags'] }\n }\n },\n '/session/:sessionId/appium/device/long_press_keycode': {\n POST: {\n command: 'longPressKeyCode',\n payloadParams: { required: ['keycode'], optional: ['metastate', 'flags'] }\n }\n },\n '/session/:sessionId/appium/device/finger_print': {\n POST: {\n command: 'fingerprint',\n payloadParams: { required: ['fingerprintId'] }\n }\n },\n '/session/:sessionId/appium/device/send_sms': {\n POST: {\n command: 'sendSMS',\n payloadParams: { required: ['phoneNumber', 'message'] }\n }\n },\n '/session/:sessionId/appium/device/gsm_call': {\n POST: {\n command: 'gsmCall',\n payloadParams: { required: ['phoneNumber', 'action'] }\n }\n },\n '/session/:sessionId/appium/device/gsm_signal': {\n POST: {\n command: 'gsmSignal',\n payloadParams: { required: ['signalStrength'] }\n }\n },\n '/session/:sessionId/appium/device/gsm_voice': {\n POST: { command: 'gsmVoice', payloadParams: { required: ['state'] } }\n },\n '/session/:sessionId/appium/device/power_capacity': {\n POST: {\n command: 'powerCapacity',\n payloadParams: { required: ['percent'] }\n }\n },\n '/session/:sessionId/appium/device/power_ac': {\n POST: { command: 'powerAC', payloadParams: { required: ['state'] } }\n },\n '/session/:sessionId/appium/device/network_speed': {\n POST: {\n command: 'networkSpeed',\n payloadParams: { required: ['netspeed'] }\n }\n },\n '/session/:sessionId/appium/device/keyevent': {\n POST: {\n command: 'keyevent',\n payloadParams: { required: ['keycode'], optional: ['metastate'] }\n }\n },\n '/session/:sessionId/appium/device/current_activity': { GET: { command: 'getCurrentActivity' } },\n '/session/:sessionId/appium/device/current_package': { GET: { command: 'getCurrentPackage' } },\n '/session/:sessionId/appium/device/app_state': {\n POST: {\n command: 'queryAppState',\n payloadParams: { required: [['appId'], ['bundleId']] }\n }\n },\n '/session/:sessionId/appium/device/toggle_airplane_mode': { POST: { command: 'toggleFlightMode' } },\n '/session/:sessionId/appium/device/toggle_data': { POST: { command: 'toggleData' } },\n '/session/:sessionId/appium/device/toggle_wifi': { POST: { command: 'toggleWiFi' } },\n '/session/:sessionId/appium/device/toggle_location_services': { POST: { command: 'toggleLocationServices' } },\n '/session/:sessionId/appium/device/open_notifications': { POST: { command: 'openNotifications' } },\n '/session/:sessionId/appium/device/start_activity': {\n POST: {\n command: 'startActivity',\n payloadParams: {\n required: ['appPackage', 'appActivity'],\n optional: [\n 'appWaitPackage',\n 'appWaitActivity',\n 'intentAction',\n 'intentCategory',\n 'intentFlags',\n 'optionalIntentArguments',\n 'dontStopAppOnReset'\n ]\n }\n }\n },\n '/session/:sessionId/appium/device/system_bars': { GET: { command: 'getSystemBars' } },\n '/session/:sessionId/appium/device/display_density': { GET: { command: 'getDisplayDensity' } },\n '/session/:sessionId/appium/app/launch': { POST: { command: 'launchApp' } },\n '/session/:sessionId/appium/app/close': { POST: { command: 'closeApp' } },\n '/session/:sessionId/appium/app/reset': { POST: { command: 'reset' } },\n '/session/:sessionId/appium/app/background': {\n POST: {\n command: 'background',\n payloadParams: { required: ['seconds'] }\n }\n },\n '/session/:sessionId/appium/app/end_test_coverage': {\n POST: {\n command: 'endCoverage',\n payloadParams: { required: ['intent', 'path'] }\n }\n },\n '/session/:sessionId/appium/app/strings': {\n POST: {\n command: 'getStrings',\n payloadParams: { optional: ['language', 'stringFile'] }\n }\n },\n '/session/:sessionId/appium/element/:elementId/value': {\n POST: {\n command: 'setValueImmediate',\n payloadParams: { required: ['text'] }\n }\n },\n '/session/:sessionId/appium/element/:elementId/replace_value': {\n POST: {\n command: 'replaceValue',\n payloadParams: { required: ['text'] }\n }\n }\n});\n"],"mappings":"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"}
package/index.js CHANGED
@@ -6,7 +6,6 @@ import * as commandIndex from './lib/commands/index';
6
6
  import * as webview from './lib/webview-helpers';
7
7
  import * as caps from './lib/desired-caps';
8
8
 
9
-
10
9
  const { AndroidDriver } = driver;
11
10
  const { helpers: webviewHelpers, NATIVE_WIN, WEBVIEW_WIN, WEBVIEW_BASE,
12
11
  CHROMIUM_WIN } = webview;
package/lib/driver.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { BaseDriver, DeviceSettings } from 'appium/driver';
2
2
  import desiredConstraints from './desired-caps';
3
3
  import commands from './commands/index';
4
+ import { newMethodMap } from './method-map';
4
5
  import {
5
6
  helpers, ensureNetworkSpeed,
6
7
  SETTINGS_HELPER_PKG_ID,
@@ -33,6 +34,9 @@ const NO_PROXY = [
33
34
  ];
34
35
 
35
36
  class AndroidDriver extends BaseDriver {
37
+
38
+ static newMethodMap = newMethodMap;
39
+
36
40
  constructor (opts = {}, shouldValidateCaps = true) {
37
41
  super(opts, shouldValidateCaps);
38
42
 
@@ -0,0 +1,219 @@
1
+ export const newMethodMap = /** @type {const} */ ({
2
+ '/session/:sessionId/timeouts/implicit_wait': {
3
+ POST: { command: 'implicitWait', payloadParams: { required: ['ms'] } }
4
+ },
5
+ '/session/:sessionId/ime/available_engines': { GET: { command: 'availableIMEEngines' } },
6
+ '/session/:sessionId/ime/active_engine': { GET: { command: 'getActiveIMEEngine' } },
7
+ '/session/:sessionId/ime/activated': { GET: { command: 'isIMEActivated' } },
8
+ '/session/:sessionId/ime/deactivate': { POST: { command: 'deactivateIMEEngine' } },
9
+ '/session/:sessionId/ime/activate': {
10
+ POST: {
11
+ command: 'activateIMEEngine',
12
+ payloadParams: { required: ['engine'] }
13
+ }
14
+ },
15
+ '/session/:sessionId/window/:windowhandle/size': { GET: { command: 'getWindowSize' } },
16
+ '/session/:sessionId/keys': {
17
+ POST: { command: 'keys', payloadParams: { required: ['value'] } }
18
+ },
19
+ '/session/:sessionId/element/:elementId/location': { GET: { command: 'getLocation' } },
20
+ '/session/:sessionId/element/:elementId/location_in_view': { GET: { command: 'getLocationInView' } },
21
+ '/session/:sessionId/element/:elementId/size': { GET: { command: 'getSize' } },
22
+ '/session/:sessionId/touch/click': {
23
+ POST: { command: 'click', payloadParams: { required: ['element'] } }
24
+ },
25
+ '/session/:sessionId/touch/down': {
26
+ POST: { command: 'touchDown', payloadParams: { required: ['x', 'y'] } }
27
+ },
28
+ '/session/:sessionId/touch/up': {
29
+ POST: { command: 'touchUp', payloadParams: { required: ['x', 'y'] } }
30
+ },
31
+ '/session/:sessionId/touch/move': {
32
+ POST: { command: 'touchMove', payloadParams: { required: ['x', 'y'] } }
33
+ },
34
+ '/session/:sessionId/touch/longclick': {
35
+ POST: {
36
+ command: 'touchLongClick',
37
+ payloadParams: { required: ['elements'] }
38
+ }
39
+ },
40
+ '/session/:sessionId/touch/flick': {
41
+ POST: {
42
+ command: 'flick',
43
+ payloadParams: {
44
+ optional: [
45
+ 'element',
46
+ 'xspeed',
47
+ 'yspeed',
48
+ 'xoffset',
49
+ 'yoffset',
50
+ 'speed'
51
+ ]
52
+ }
53
+ }
54
+ },
55
+ '/session/:sessionId/touch/perform': {
56
+ POST: {
57
+ command: 'performTouch',
58
+ payloadParams: { wrap: 'actions', required: ['actions'] }
59
+ }
60
+ },
61
+ '/session/:sessionId/touch/multi/perform': {
62
+ POST: {
63
+ command: 'performMultiAction',
64
+ payloadParams: { required: ['actions'], optional: ['elementId'] }
65
+ }
66
+ },
67
+ '/session/:sessionId/appium/device/lock': {
68
+ POST: { command: 'lock', payloadParams: { optional: ['seconds'] } }
69
+ },
70
+ '/session/:sessionId/appium/device/unlock': { POST: { command: 'unlock' } },
71
+ '/session/:sessionId/appium/device/is_locked': { POST: { command: 'isLocked' } },
72
+ '/session/:sessionId/appium/start_recording_screen': {
73
+ POST: {
74
+ command: 'startRecordingScreen',
75
+ payloadParams: { optional: ['options'] }
76
+ }
77
+ },
78
+ '/session/:sessionId/appium/stop_recording_screen': {
79
+ POST: {
80
+ command: 'stopRecordingScreen',
81
+ payloadParams: { optional: ['options'] }
82
+ }
83
+ },
84
+ '/session/:sessionId/appium/performanceData/types': { POST: { command: 'getPerformanceDataTypes' } },
85
+ '/session/:sessionId/appium/getPerformanceData': {
86
+ POST: {
87
+ command: 'getPerformanceData',
88
+ payloadParams: {
89
+ required: ['packageName', 'dataType'],
90
+ optional: ['dataReadTimeout']
91
+ }
92
+ }
93
+ },
94
+ '/session/:sessionId/appium/device/press_keycode': {
95
+ POST: {
96
+ command: 'pressKeyCode',
97
+ payloadParams: { required: ['keycode'], optional: ['metastate', 'flags'] }
98
+ }
99
+ },
100
+ '/session/:sessionId/appium/device/long_press_keycode': {
101
+ POST: {
102
+ command: 'longPressKeyCode',
103
+ payloadParams: { required: ['keycode'], optional: ['metastate', 'flags'] }
104
+ }
105
+ },
106
+ '/session/:sessionId/appium/device/finger_print': {
107
+ POST: {
108
+ command: 'fingerprint',
109
+ payloadParams: { required: ['fingerprintId'] }
110
+ }
111
+ },
112
+ '/session/:sessionId/appium/device/send_sms': {
113
+ POST: {
114
+ command: 'sendSMS',
115
+ payloadParams: { required: ['phoneNumber', 'message'] }
116
+ }
117
+ },
118
+ '/session/:sessionId/appium/device/gsm_call': {
119
+ POST: {
120
+ command: 'gsmCall',
121
+ payloadParams: { required: ['phoneNumber', 'action'] }
122
+ }
123
+ },
124
+ '/session/:sessionId/appium/device/gsm_signal': {
125
+ POST: {
126
+ command: 'gsmSignal',
127
+ payloadParams: { required: ['signalStrength'] }
128
+ }
129
+ },
130
+ '/session/:sessionId/appium/device/gsm_voice': {
131
+ POST: { command: 'gsmVoice', payloadParams: { required: ['state'] } }
132
+ },
133
+ '/session/:sessionId/appium/device/power_capacity': {
134
+ POST: {
135
+ command: 'powerCapacity',
136
+ payloadParams: { required: ['percent'] }
137
+ }
138
+ },
139
+ '/session/:sessionId/appium/device/power_ac': {
140
+ POST: { command: 'powerAC', payloadParams: { required: ['state'] } }
141
+ },
142
+ '/session/:sessionId/appium/device/network_speed': {
143
+ POST: {
144
+ command: 'networkSpeed',
145
+ payloadParams: { required: ['netspeed'] }
146
+ }
147
+ },
148
+ '/session/:sessionId/appium/device/keyevent': {
149
+ POST: {
150
+ command: 'keyevent',
151
+ payloadParams: { required: ['keycode'], optional: ['metastate'] }
152
+ }
153
+ },
154
+ '/session/:sessionId/appium/device/current_activity': { GET: { command: 'getCurrentActivity' } },
155
+ '/session/:sessionId/appium/device/current_package': { GET: { command: 'getCurrentPackage' } },
156
+ '/session/:sessionId/appium/device/app_state': {
157
+ POST: {
158
+ command: 'queryAppState',
159
+ payloadParams: { required: [['appId'], ['bundleId']] }
160
+ }
161
+ },
162
+ '/session/:sessionId/appium/device/toggle_airplane_mode': { POST: { command: 'toggleFlightMode' } },
163
+ '/session/:sessionId/appium/device/toggle_data': { POST: { command: 'toggleData' } },
164
+ '/session/:sessionId/appium/device/toggle_wifi': { POST: { command: 'toggleWiFi' } },
165
+ '/session/:sessionId/appium/device/toggle_location_services': { POST: { command: 'toggleLocationServices' } },
166
+ '/session/:sessionId/appium/device/open_notifications': { POST: { command: 'openNotifications' } },
167
+ '/session/:sessionId/appium/device/start_activity': {
168
+ POST: {
169
+ command: 'startActivity',
170
+ payloadParams: {
171
+ required: ['appPackage', 'appActivity'],
172
+ optional: [
173
+ 'appWaitPackage',
174
+ 'appWaitActivity',
175
+ 'intentAction',
176
+ 'intentCategory',
177
+ 'intentFlags',
178
+ 'optionalIntentArguments',
179
+ 'dontStopAppOnReset'
180
+ ]
181
+ }
182
+ }
183
+ },
184
+ '/session/:sessionId/appium/device/system_bars': { GET: { command: 'getSystemBars' } },
185
+ '/session/:sessionId/appium/device/display_density': { GET: { command: 'getDisplayDensity' } },
186
+ '/session/:sessionId/appium/app/launch': { POST: { command: 'launchApp' } },
187
+ '/session/:sessionId/appium/app/close': { POST: { command: 'closeApp' } },
188
+ '/session/:sessionId/appium/app/reset': { POST: { command: 'reset' } },
189
+ '/session/:sessionId/appium/app/background': {
190
+ POST: {
191
+ command: 'background',
192
+ payloadParams: { required: ['seconds'] }
193
+ }
194
+ },
195
+ '/session/:sessionId/appium/app/end_test_coverage': {
196
+ POST: {
197
+ command: 'endCoverage',
198
+ payloadParams: { required: ['intent', 'path'] }
199
+ }
200
+ },
201
+ '/session/:sessionId/appium/app/strings': {
202
+ POST: {
203
+ command: 'getStrings',
204
+ payloadParams: { optional: ['language', 'stringFile'] }
205
+ }
206
+ },
207
+ '/session/:sessionId/appium/element/:elementId/value': {
208
+ POST: {
209
+ command: 'setValueImmediate',
210
+ payloadParams: { required: ['text'] }
211
+ }
212
+ },
213
+ '/session/:sessionId/appium/element/:elementId/replace_value': {
214
+ POST: {
215
+ command: 'replaceValue',
216
+ payloadParams: { required: ['text'] }
217
+ }
218
+ }
219
+ });
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "mobile",
10
10
  "mobile testing"
11
11
  ],
12
- "version": "5.8.6",
12
+ "version": "5.8.7",
13
13
  "author": "Appium Contributors",
14
14
  "license": "Apache-2.0",
15
15
  "repository": {