appium-android-driver 5.0.15 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/build/index.js +2 -28
  2. package/build/lib/android-helpers.js +2 -2
  3. package/build/lib/bootstrap.js +6 -6
  4. package/build/lib/commands/actions.js +2 -2
  5. package/build/lib/commands/alert.js +6 -6
  6. package/build/lib/commands/app-management.js +4 -4
  7. package/build/lib/commands/context.js +4 -4
  8. package/build/lib/commands/element.js +2 -2
  9. package/build/lib/commands/emu-console.js +3 -3
  10. package/build/lib/commands/execute.js +5 -5
  11. package/build/lib/commands/file-actions.js +7 -7
  12. package/build/lib/commands/find.js +5 -5
  13. package/build/lib/commands/general.js +7 -7
  14. package/build/lib/commands/ime.js +3 -3
  15. package/build/lib/commands/intent.js +7 -7
  16. package/build/lib/commands/log.js +5 -5
  17. package/build/lib/commands/network.js +3 -3
  18. package/build/lib/commands/recordscreen.js +2 -2
  19. package/build/lib/commands/shell.js +4 -4
  20. package/build/lib/commands/streamscreen.js +2 -2
  21. package/build/lib/commands/touch.js +4 -4
  22. package/build/lib/driver.js +5 -5
  23. package/build/lib/logger.js +2 -2
  24. package/build/lib/uiautomator.js +2 -2
  25. package/build/lib/unlock-helpers.js +2 -2
  26. package/build/lib/webview-helpers.js +2 -2
  27. package/index.js +1 -26
  28. package/lib/android-helpers.js +1 -1
  29. package/lib/bootstrap.js +2 -2
  30. package/lib/commands/actions.js +1 -1
  31. package/lib/commands/alert.js +1 -1
  32. package/lib/commands/app-management.js +2 -2
  33. package/lib/commands/context.js +2 -2
  34. package/lib/commands/element.js +1 -1
  35. package/lib/commands/emu-console.js +1 -1
  36. package/lib/commands/execute.js +1 -1
  37. package/lib/commands/file-actions.js +2 -2
  38. package/lib/commands/find.js +2 -2
  39. package/lib/commands/general.js +2 -2
  40. package/lib/commands/ime.js +1 -1
  41. package/lib/commands/intent.js +1 -1
  42. package/lib/commands/log.js +1 -1
  43. package/lib/commands/network.js +1 -1
  44. package/lib/commands/recordscreen.js +1 -1
  45. package/lib/commands/shell.js +2 -2
  46. package/lib/commands/streamscreen.js +1 -1
  47. package/lib/commands/touch.js +2 -2
  48. package/lib/driver.js +2 -2
  49. package/lib/logger.js +1 -1
  50. package/lib/uiautomator.js +1 -1
  51. package/lib/unlock-helpers.js +1 -1
  52. package/lib/webview-helpers.js +1 -1
  53. package/package.json +5 -3
  54. package/build/lib/server.js +0 -34
  55. package/lib/server.js +0 -14
@@ -15,7 +15,7 @@ var _asyncbox = require("asyncbox");
15
15
 
16
16
  var _lodash = _interopRequireDefault(require("lodash"));
17
17
 
18
- var _support = require("@appium/support");
18
+ var _support = require("appium/support");
19
19
 
20
20
  const PIN_UNLOCK = 'pin';
21
21
  exports.PIN_UNLOCK = PIN_UNLOCK;
@@ -303,4 +303,4 @@ var _default = helpers;
303
303
  exports.default = _default;require('source-map-support').install();
304
304
 
305
305
 
306
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3VubG9jay1oZWxwZXJzLmpzIiwibmFtZXMiOlsiUElOX1VOTE9DSyIsIlBJTl9VTkxPQ0tfS0VZX0VWRU5UIiwiUEFTU1dPUkRfVU5MT0NLIiwiUEFUVEVSTl9VTkxPQ0siLCJGSU5HRVJQUklOVF9VTkxPQ0siLCJVTkxPQ0tfVFlQRVMiLCJLRVlDT0RFX05VTVBBRF9FTlRFUiIsIlVOTE9DS19XQUlUX1RJTUUiLCJJTlBVVF9LRVlTX1dBSVRfVElNRSIsIk5VTUJFUl9aRVJPX0tFWUNPREUiLCJoZWxwZXJzIiwidmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMiLCJjYXBzIiwidW5sb2NrS2V5IiwidW5sb2NrVHlwZSIsIl8iLCJpc05pbCIsIkVycm9yIiwiaW5jbHVkZXMiLCJ0ZXN0IiwidHJpbSIsImZhc3RVbmxvY2siLCJhZGIiLCJvcHRzIiwiY3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwibG9nZ2VyIiwiaW5mbyIsIndhc0xvY2tFbmFibGVkIiwiaXNMb2NrRW5hYmxlZCIsImNsZWFyTG9ja0NyZWRlbnRpYWwiLCJjeWNsZVdha2VVcCIsImRpc21pc3NLZXlndWFyZCIsInNldExvY2tDcmVkZW50aWFsIiwiZW5jb2RlUGFzc3dvcmQiLCJrZXkiLCJyZXBsYWNlIiwic3RyaW5nS2V5VG9BcnIiLCJzcGxpdCIsImZpbmdlcnByaW50VW5sb2NrIiwiZHJpdmVyIiwiY2FwYWJpbGl0aWVzIiwiZ2V0QXBpTGV2ZWwiLCJmaW5nZXJwcmludCIsInNsZWVwIiwicGluVW5sb2NrIiwia2V5cyIsImVscyIsImZpbmRFbE9yRWxzIiwiaXNFbXB0eSIsInBpblVubG9ja1dpdGhLZXlFdmVudCIsInBpbnMiLCJlbCIsInRleHQiLCJnZXRBdHRyaWJ1dGUiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsInBpbiIsImNsaWNrIiwid2FpdEZvclVubG9jayIsImlzU2NyZWVuTG9ja2VkIiwia2V5ZXZlbnQiLCJzaGVsbCIsInBhcnNlSW50IiwicGFzc3dvcmRVbmxvY2siLCJnZXRQYXR0ZXJuS2V5UG9zaXRpb24iLCJpbml0UG9zIiwicGllY2UiLCJjb2xzIiwieFBvcyIsIngiLCJNYXRoIiwicm91bmQiLCJ5UG9zIiwieSIsImNlaWwiLCJnZXRQYXR0ZXJuQWN0aW9ucyIsImFjdGlvbnMiLCJsYXN0UG9zIiwia2V5UG9zIiwicHVzaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJlbGVtZW50IiwibW92ZVRvIiwiZGlmZlgiLCJhYnMiLCJkaWZmWSIsInBhdHRlcm5VbmxvY2siLCJhcGlMZXZlbCIsImdldExvY2F0aW9uIiwic2l6ZSIsImdldFNpemUiLCJ3aWR0aCIsInBlcmZvcm1Ub3VjaCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi91bmxvY2staGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBQSU5fVU5MT0NLID0gJ3Bpbic7XG5jb25zdCBQSU5fVU5MT0NLX0tFWV9FVkVOVCA9ICdwaW5XaXRoS2V5RXZlbnQnO1xuY29uc3QgUEFTU1dPUkRfVU5MT0NLID0gJ3Bhc3N3b3JkJztcbmNvbnN0IFBBVFRFUk5fVU5MT0NLID0gJ3BhdHRlcm4nO1xuY29uc3QgRklOR0VSUFJJTlRfVU5MT0NLID0gJ2ZpbmdlcnByaW50JztcbmNvbnN0IFVOTE9DS19UWVBFUyA9IFtcbiAgUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsIFBBU1NXT1JEX1VOTE9DSyxcbiAgUEFUVEVSTl9VTkxPQ0ssIEZJTkdFUlBSSU5UX1VOTE9DS1xuXTtcbmNvbnN0IEtFWUNPREVfTlVNUEFEX0VOVEVSID0gNjY7XG5jb25zdCBVTkxPQ0tfV0FJVF9USU1FID0gMTAwO1xuY29uc3QgSU5QVVRfS0VZU19XQUlUX1RJTUUgPSAxMDA7XG5jb25zdCBOVU1CRVJfWkVST19LRVlDT0RFID0gNztcblxuY29uc3QgaGVscGVycyA9IHt9O1xuXG5oZWxwZXJzLnZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzID0gZnVuY3Rpb24gdmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMgKGNhcHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdW5sb2NrS2V5LFxuICAgIHVubG9ja1R5cGUsXG4gIH0gPSBjYXBzO1xuICBpZiAoXy5pc05pbCh1bmxvY2tLZXkpIHx8IHVubG9ja0tleSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Egbm9uLWVtcHR5IHVubG9jayBrZXkgdmFsdWUgbXVzdCBiZSBwcm92aWRlZCcpO1xuICB9XG5cbiAgaWYgKFtQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCwgRklOR0VSUFJJTlRfVU5MT0NLXS5pbmNsdWRlcyh1bmxvY2tUeXBlKSkge1xuICAgIGlmICghL15bMC05XSskLy50ZXN0KF8udHJpbSh1bmxvY2tLZXkpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmxvY2sga2V5IHZhbHVlICcke3VubG9ja0tleX0nIG11c3Qgb25seSBjb25zaXN0IG9mIGRpZ2l0c2ApO1xuICAgIH1cbiAgfSBlbHNlIGlmICh1bmxvY2tUeXBlID09PSBQQVRURVJOX1VOTE9DSykge1xuICAgIGlmICghL15bMS05XXsyLDl9JC8udGVzdChfLnRyaW0odW5sb2NrS2V5KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBtdXN0IG9ubHkgaW5jbHVkZSBmcm9tIHR3byB0byBuaW5lIGRpZ2l0cyBpbiByYW5nZSAxLi45YCk7XG4gICAgfVxuICAgIGlmICgvKFsxLTldKS4qP1xcMS8udGVzdChfLnRyaW0odW5sb2NrS2V5KSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBtdXN0IGRlZmluZSBhIHZhbGlkIHBhdHRlcm4gd2hlcmUgcmVwZWF0cyBhcmUgbm90IGFsbG93ZWRgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodW5sb2NrVHlwZSA9PT0gUEFTU1dPUkRfVU5MT0NLKSB7XG4gICAgLy8gRG9udCB0cmltIHBhc3N3b3JkIGtleSwgeW91IGNhbiB1c2UgYmxhbmsgc3BhY2VzIGluIHlvdXIgYW5kcm9pZCBwYXNzd29yZFxuICAgIC8vIMKvXFxfKOODhClfL8KvXG4gICAgaWYgKCEvLns0LH0vZy50ZXN0KHVubG9ja0tleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIG1pbmltdW0gYWxsb3dlZCBsZW5ndGggb2YgdW5sb2NrIGtleSB2YWx1ZSAnJHt1bmxvY2tLZXl9JyBpcyA0IGNoYXJhY3RlcnNgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHVubG9jayB0eXBlICcke3VubG9ja1R5cGV9Jy4gYCArXG4gICAgICBgT25seSB0aGUgZm9sbG93aW5nIHVubG9jayB0eXBlcyBhcmUgc3VwcG9ydGVkOiAke1VOTE9DS19UWVBFU31gKTtcbiAgfVxuICByZXR1cm4gY2Fwcztcbn07XG5cbmhlbHBlcnMuZmFzdFVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIGZhc3RVbmxvY2sgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBjcmVkZW50aWFsLFxuICAgIGNyZWRlbnRpYWxUeXBlLFxuICB9ID0gb3B0cztcbiAgbG9nZ2VyLmluZm8oYFVubG9ja2luZyB0aGUgZGV2aWNlIHZpYSBBREIgdXNpbmcgJHtjcmVkZW50aWFsVHlwZX0gY3JlZGVudGlhbCAnJHtjcmVkZW50aWFsfSdgKTtcbiAgY29uc3Qgd2FzTG9ja0VuYWJsZWQgPSBhd2FpdCBhZGIuaXNMb2NrRW5hYmxlZCgpO1xuICBpZiAod2FzTG9ja0VuYWJsZWQpIHtcbiAgICBhd2FpdCBhZGIuY2xlYXJMb2NrQ3JlZGVudGlhbChjcmVkZW50aWFsKTtcbiAgICAvLyBub3Qgc3VyZSB3aHksIGJ1dCB0aGUgZGV2aWNlJ3Mgc2NyZWVuIHN0aWxsIHJlbWFpbnMgbG9ja2VkXG4gICAgLy8gaWYgYSBwcmVsaW1pbmFyeSB3YWtlIHVwIGN5Y2xlIGhhcyBub3QgYmVlbiBwZXJmb3JtZWRcbiAgICBhd2FpdCBhZGIuY3ljbGVXYWtlVXAoKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuaW5mbygnTm8gYWN0aXZlIGxvY2sgaGFzIGJlZW4gZGV0ZWN0ZWQuIFByb2NlZWRpbmcgdG8gdGhlIGtleWd1YXJkIGRpc21pc3NhbCcpO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmICh3YXNMb2NrRW5hYmxlZCkge1xuICAgICAgYXdhaXQgYWRiLnNldExvY2tDcmVkZW50aWFsKGNyZWRlbnRpYWxUeXBlLCBjcmVkZW50aWFsKTtcbiAgICB9XG4gIH1cbn07XG5cbmhlbHBlcnMuZW5jb2RlUGFzc3dvcmQgPSBmdW5jdGlvbiBlbmNvZGVQYXNzd29yZCAoa2V5KSB7XG4gIHJldHVybiBgJHtrZXl9YC5yZXBsYWNlKC9cXHMvaWcsICclcycpO1xufTtcblxuaGVscGVycy5zdHJpbmdLZXlUb0FyciA9IGZ1bmN0aW9uIHN0cmluZ0tleVRvQXJyIChrZXkpIHtcbiAgcmV0dXJuIGAke2tleX1gLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcnKS5zcGxpdCgvXFxzKi8pO1xufTtcblxuaGVscGVycy5maW5nZXJwcmludFVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIGZpbmdlcnByaW50VW5sb2NrIChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA8IDIzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaW5nZXJwcmludCB1bmxvY2sgb25seSB3b3JrcyBmb3IgQW5kcm9pZCA2KyBlbXVsYXRvcnMnKTtcbiAgfVxuICBhd2FpdCBhZGIuZmluZ2VycHJpbnQoY2FwYWJpbGl0aWVzLnVubG9ja0tleSk7XG4gIGF3YWl0IHNsZWVwKFVOTE9DS19XQUlUX1RJTUUpO1xufTtcblxuaGVscGVycy5waW5VbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBwaW5VbmxvY2sgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byB1bmxvY2sgZGV2aWNlIHVzaW5nIHBpbiAke2NhcGFiaWxpdGllcy51bmxvY2tLZXl9YCk7XG4gIGF3YWl0IGFkYi5kaXNtaXNzS2V5Z3VhcmQoKTtcbiAgY29uc3Qga2V5cyA9IGhlbHBlcnMuc3RyaW5nS2V5VG9BcnIoY2FwYWJpbGl0aWVzLnVubG9ja0tleSk7XG4gIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyMSkge1xuICAgIGNvbnN0IGVscyA9IGF3YWl0IGRyaXZlci5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuc3lzdGVtdWk6aWQvZGlnaXRfdGV4dCcsIHRydWUpO1xuICAgIGlmIChfLmlzRW1wdHkoZWxzKSkge1xuICAgICAgLy8gZmFsbGJhY2sgdG8gcGluIHdpdGgga2V5IGV2ZW50XG4gICAgICByZXR1cm4gYXdhaXQgaGVscGVycy5waW5VbmxvY2tXaXRoS2V5RXZlbnQoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcyk7XG4gICAgfVxuICAgIGNvbnN0IHBpbnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGVscykge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IGRyaXZlci5nZXRBdHRyaWJ1dGUoJ3RleHQnLCB1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgICAgIHBpbnNbdGV4dF0gPSBlbDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwaW4gb2Yga2V5cykge1xuICAgICAgY29uc3QgZWwgPSBwaW5zW3Bpbl07XG4gICAgICBhd2FpdCBkcml2ZXIuY2xpY2sodXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgcGluIG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IGVsID0gYXdhaXQgZHJpdmVyLmZpbmRFbE9yRWxzKCdpZCcsIGBjb20uYW5kcm9pZC5rZXlndWFyZDppZC9rZXkke3Bpbn1gLCBmYWxzZSk7XG4gICAgICBpZiAoZWwgPT09IG51bGwpIHtcbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gcGluIHdpdGgga2V5IGV2ZW50XG4gICAgICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLnBpblVubG9ja1dpdGhLZXlFdmVudChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGRyaXZlci5jbGljayh1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgICB9XG4gIH1cbiAgYXdhaXQgd2FpdEZvclVubG9jayhhZGIpO1xufTtcblxuLyoqXG4gKiBXYWl0IGZvciB0aGUgZGlzcGxheSB0byBiZSB1bmxvY2tlZC5cbiAqIFNvbWUgZGV2aWNlcyBhdXRvbWF0aWNhbGx5IGFjY2VwdCB0eXBlZCAncGluJyBhbmQgJ3Bhc3N3b3JkJyBjb2RlXG4gKiB3aXRob3V0IHByZXNzaW5nIHRoZSBFbnRlciBrZXkuIEJ1dCBzb21lIGRldmljZXMgbmVlZCBpdC5cbiAqIFRoaXMgbWV0aG9kIHdhaXRzIGEgZmV3IHNlY29uZHMgZmlyc3QgZm9yIHN1Y2ggYXV0b21hdGljIGFjY2VwdGFuY2UgY2FzZS5cbiAqIElmIHRoZSBkZXZpY2UgaXMgc3RpbGwgbG9ja2VkLCB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgdHJ5IHRvIHNlbmRcbiAqIHRoZSBlbnRlciBrZXkgY29kZS5cbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIFRoZSBpbnN0YW5jZSBvZiBBREJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2FpdEZvclVubG9jayAoYWRiKSB7XG4gIGF3YWl0IHNsZWVwKFVOTE9DS19XQUlUX1RJTUUpO1xuICBpZiAoIWF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgYWRiLmtleWV2ZW50KEtFWUNPREVfTlVNUEFEX0VOVEVSKTtcbiAgYXdhaXQgc2xlZXAoVU5MT0NLX1dBSVRfVElNRSk7XG59XG5cbmhlbHBlcnMucGluVW5sb2NrV2l0aEtleUV2ZW50ID0gYXN5bmMgZnVuY3Rpb24gcGluVW5sb2NrV2l0aEtleUV2ZW50IChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGxvZ2dlci5pbmZvKGBUcnlpbmcgdG8gdW5sb2NrIGRldmljZSB1c2luZyBwaW4gd2l0aCBrZXljb2RlICR7Y2FwYWJpbGl0aWVzLnVubG9ja0tleX1gKTtcbiAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICBjb25zdCBrZXlzID0gaGVscGVycy5zdHJpbmdLZXlUb0FycihjYXBhYmlsaXRpZXMudW5sb2NrS2V5KTtcblxuICAvLyBTb21lIGRldmljZSBkb2VzIG5vdCBoYXZlIHN5c3RlbSBrZXkgaWRzIGxpa2UgJ2NvbS5hbmRyb2lkLmtleWd1YXJkOmlkL2tleSdcbiAgLy8gVGhlbiwgc2VuZGluZyBrZXlldmVudHMgYXJlIG1vcmUgcmVsaWFibGUgdG8gdW5sb2NrIHRoZSBzY3JlZW4uXG4gIGZvciAoY29uc3QgcGluIG9mIGtleXMpIHtcbiAgICAvLyAncGluJyBpcyBudW1iZXIgKDAtOSkgaW4gc3RyaW5nLlxuICAgIC8vIE51bWJlciAnMCcgaXMga2V5Y29kZSAnNycuIG51bWJlciAnOScgaXMga2V5Y29kZSAnMTYnLlxuICAgIGF3YWl0IGFkYi5zaGVsbChbJ2lucHV0JywgJ2tleWV2ZW50JywgcGFyc2VJbnQocGluLCAxMCkgKyBOVU1CRVJfWkVST19LRVlDT0RFXSk7XG4gIH1cbiAgYXdhaXQgd2FpdEZvclVubG9jayhhZGIsIGRyaXZlcik7XG59O1xuXG5oZWxwZXJzLnBhc3N3b3JkVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gcGFzc3dvcmRVbmxvY2sgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgY29uc3QgeyB1bmxvY2tLZXkgfSA9IGNhcGFiaWxpdGllcztcbiAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byB1bmxvY2sgZGV2aWNlIHVzaW5nIHBhc3N3b3JkICR7dW5sb2NrS2V5fWApO1xuICBhd2FpdCBhZGIuZGlzbWlzc0tleWd1YXJkKCk7XG4gIC8vIFJlcGxhY2UgYmxhbmsgc3BhY2VzIHdpdGggJXNcbiAgY29uc3Qga2V5ID0gaGVscGVycy5lbmNvZGVQYXNzd29yZCh1bmxvY2tLZXkpO1xuICAvLyBXaHkgYWRiID8gSXQgd2FzIGxlc3MgZmxha3lcbiAgYXdhaXQgYWRiLnNoZWxsKFsnaW5wdXQnLCAndGV4dCcsIGtleV0pO1xuICAvLyBXaHkgc2xlZXBzID8gQXZvaWQgc29tZSBmbGFreW5lc3Mgd2FpdGluZyBmb3IgdGhlIGlucHV0IHRvIHJlY2VpdmUgdGhlIGtleXNcbiAgYXdhaXQgc2xlZXAoSU5QVVRfS0VZU19XQUlUX1RJTUUpO1xuICBhd2FpdCBhZGIuc2hlbGwoWydpbnB1dCcsICdrZXlldmVudCcsIEtFWUNPREVfTlVNUEFEX0VOVEVSXSk7XG4gIC8vIFdhaXRzIGEgYml0IGZvciB0aGUgZGV2aWNlIHRvIGJlIHVubG9ja2VkXG4gIGF3YWl0IHdhaXRGb3JVbmxvY2soYWRiLCBkcml2ZXIpO1xufTtcblxuaGVscGVycy5nZXRQYXR0ZXJuS2V5UG9zaXRpb24gPSBmdW5jdGlvbiBnZXRQYXR0ZXJuS2V5UG9zaXRpb24gKGtleSwgaW5pdFBvcywgcGllY2UpIHtcbiAgLypcbiAgSG93IHRoZSBtYXRoIHdvcmtzOlxuICBXZSBoYXZlIDkgYnV0dG9ucyBkaXZpZGVkIGluIDMgY29sdW1ucyBhbmQgMyByb3dzIGluc2lkZSB0aGUgbG9ja1BhdHRlcm5WaWV3LFxuICBldmVyeSBidXR0b24gaGFzIGEgcG9zaXRpb24gb24gdGhlIHNjcmVlbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2NrUGF0dGVyblZpZXcgc2luY2VcbiAgaXQgaXMgdGhlIHBhcmVudCB2aWV3IHJpZ2h0IGF0IHRoZSBtaWRkbGUgb2YgZWFjaCBjb2x1bW4gb3Igcm93LlxuICAqL1xuICBjb25zdCBjb2xzID0gMztcbiAgY29uc3QgcGlucyA9IDk7XG4gIGNvbnN0IHhQb3MgPSAoa2V5LCB4LCBwaWVjZSkgPT4gTWF0aC5yb3VuZCh4ICsgKChrZXkgJSBjb2xzKSB8fCBjb2xzKSAqIHBpZWNlIC0gcGllY2UgLyAyKTtcbiAgY29uc3QgeVBvcyA9IChrZXksIHksIHBpZWNlKSA9PiBNYXRoLnJvdW5kKHkgKyAoTWF0aC5jZWlsKCgoa2V5ICUgcGlucykgfHwgcGlucykgLyBjb2xzKSAqIHBpZWNlIC0gcGllY2UgLyAyKSk7XG4gIHJldHVybiB7XG4gICAgeDogeFBvcyhrZXksIGluaXRQb3MueCwgcGllY2UpLFxuICAgIHk6IHlQb3Moa2V5LCBpbml0UG9zLnksIHBpZWNlKVxuICB9O1xufTtcblxuaGVscGVycy5nZXRQYXR0ZXJuQWN0aW9ucyA9IGZ1bmN0aW9uIGdldFBhdHRlcm5BY3Rpb25zIChrZXlzLCBpbml0UG9zLCBwaWVjZSkge1xuICBjb25zdCBhY3Rpb25zID0gW107XG4gIGxldCBsYXN0UG9zO1xuICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IGtleVBvcyA9IGhlbHBlcnMuZ2V0UGF0dGVybktleVBvc2l0aW9uKGtleSwgaW5pdFBvcywgcGllY2UpO1xuICAgIGlmIChrZXkgPT09IGtleXNbMF0pIHtcbiAgICAgIGFjdGlvbnMucHVzaCh7YWN0aW9uOiAncHJlc3MnLCBvcHRpb25zOiB7ZWxlbWVudDogbnVsbCwgeDoga2V5UG9zLngsIHk6IGtleVBvcy55fX0pO1xuICAgICAgbGFzdFBvcyA9IGtleVBvcztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb3ZlVG8gPSB7eDogMCwgeTogMH07XG4gICAgY29uc3QgZGlmZlggPSBrZXlQb3MueCAtIGxhc3RQb3MueDtcbiAgICBpZiAoZGlmZlggPiAwKSB7XG4gICAgICBtb3ZlVG8ueCA9IHBpZWNlO1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZYKSA+IHBpZWNlKSB7XG4gICAgICAgIG1vdmVUby54ICs9IHBpZWNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlmZlggPCAwKSB7XG4gICAgICBtb3ZlVG8ueCA9IC0xICogcGllY2U7XG4gICAgICBpZiAoTWF0aC5hYnMoZGlmZlgpID4gcGllY2UpIHtcbiAgICAgICAgbW92ZVRvLnggLT0gcGllY2U7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRpZmZZID0ga2V5UG9zLnkgLSBsYXN0UG9zLnk7XG4gICAgaWYgKGRpZmZZID4gMCkge1xuICAgICAgbW92ZVRvLnkgPSBwaWVjZTtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmWSkgPiBwaWVjZSkge1xuICAgICAgICBtb3ZlVG8ueSArPSBwaWVjZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRpZmZZIDwgMCkge1xuICAgICAgbW92ZVRvLnkgPSAtMSAqIHBpZWNlO1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZZKSA+IHBpZWNlKSB7XG4gICAgICAgIG1vdmVUby55IC09IHBpZWNlO1xuICAgICAgfVxuICAgIH1cbiAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgYWN0aW9uOiAnbW92ZVRvJyxcbiAgICAgIG9wdGlvbnM6IHtlbGVtZW50OiBudWxsLCB4OiBtb3ZlVG8ueCArIGxhc3RQb3MueCwgeTogbW92ZVRvLnkgKyBsYXN0UG9zLnl9XG4gICAgfSk7XG4gICAgbGFzdFBvcyA9IGtleVBvcztcbiAgfVxuICBhY3Rpb25zLnB1c2goe2FjdGlvbjogJ3JlbGVhc2UnfSk7XG4gIHJldHVybiBhY3Rpb25zO1xufTtcblxuaGVscGVycy5wYXR0ZXJuVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gcGF0dGVyblVubG9jayAoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcykge1xuICBjb25zdCB7IHVubG9ja0tleSB9ID0gY2FwYWJpbGl0aWVzO1xuICBsb2dnZXIuaW5mbyhgVHJ5aW5nIHRvIHVubG9jayBkZXZpY2UgdXNpbmcgcGF0dGVybiAke3VubG9ja0tleX1gKTtcbiAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICBjb25zdCBrZXlzID0gaGVscGVycy5zdHJpbmdLZXlUb0Fycih1bmxvY2tLZXkpO1xuICAvKiBXZSBzZXQgdGhlIGRldmljZSBwYXR0ZXJuIGJ1dHRvbnMgYXMgbnVtYmVyIG9mIGEgcmVndWxhciBwaG9uZVxuICAgKiAgfCDigKIg4oCiIOKAoiB8ICAgICB8IDEgMiAzIHxcbiAgICogIHwg4oCiIOKAoiDigKIgfCAtLT4gfCA0IDUgNiB8XG4gICAqICB8IOKAoiDigKIg4oCiIHwgICAgIHwgNyA4IDkgfFxuXG4gIFRoZSBwYXR0ZXJuIHZpZXcgYnV0dG9ucyBhcmUgbm90IHNlZWluZyBieSB0aGUgdWlhdXRvbWF0b3Igc2luY2UgdGhleSBhcmVcbiAgaW5jbHVkZWQgaW5zaWRlIGEgRnJhbWVMYXlvdXQsIHNvIHdlIGFyZSBnb2luZyB0byB0cnkgY2xpY2tpbmcgb24gdGhlIGJ1dHRvbnNcbiAgdXNpbmcgdGhlIHBhcmVudCB2aWV3IGJvdW5kcyBhbmQgbWF0aC5cbiAgKi9cbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgY29uc3QgZWwgPSBhd2FpdCBkcml2ZXIuZmluZEVsT3JFbHMoJ2lkJyxcbiAgICBgY29tLmFuZHJvaWQuJHthcGlMZXZlbCA+PSAyMSA/ICdzeXN0ZW11aScgOiAna2V5Z3VhcmQnfTppZC9sb2NrUGF0dGVyblZpZXdgLFxuICAgIGZhbHNlXG4gICk7XG4gIGNvbnN0IGluaXRQb3MgPSBhd2FpdCBkcml2ZXIuZ2V0TG9jYXRpb24odXRpbC51bndyYXBFbGVtZW50KGVsKSk7XG4gIGNvbnN0IHNpemUgPSBhd2FpdCBkcml2ZXIuZ2V0U2l6ZSh1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgLy8gR2V0IGFjdGlvbnMgdG8gcGVyZm9ybVxuICBjb25zdCBhY3Rpb25zID0gaGVscGVycy5nZXRQYXR0ZXJuQWN0aW9ucyhrZXlzLCBpbml0UG9zLCBzaXplLndpZHRoIC8gMyk7XG4gIC8vIFBlcmZvcm0gZ2VzdHVyZVxuICBhd2FpdCBkcml2ZXIucGVyZm9ybVRvdWNoKGFjdGlvbnMpO1xuICAvLyBXYWl0cyBhIGJpdCBmb3IgdGhlIGRldmljZSB0byBiZSB1bmxvY2tlZFxuICBhd2FpdCBzbGVlcChVTkxPQ0tfV0FJVF9USU1FKTtcbn07XG5cbmhlbHBlcnMuUElOX1VOTE9DSyA9IFBJTl9VTkxPQ0s7XG5oZWxwZXJzLlBJTl9VTkxPQ0tfS0VZX0VWRU5UID0gUElOX1VOTE9DS19LRVlfRVZFTlQ7XG5oZWxwZXJzLlBBU1NXT1JEX1VOTE9DSyA9IFBBU1NXT1JEX1VOTE9DSztcbmhlbHBlcnMuUEFUVEVSTl9VTkxPQ0sgPSBQQVRURVJOX1VOTE9DSztcbmhlbHBlcnMuRklOR0VSUFJJTlRfVU5MT0NLID0gRklOR0VSUFJJTlRfVU5MT0NLO1xuXG5leHBvcnQge1xuICBQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCwgUEFTU1dPUkRfVU5MT0NLLCBQQVRURVJOX1VOTE9DSyxcbiAgRklOR0VSUFJJTlRfVU5MT0NLLCBoZWxwZXJzXG59O1xuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUcsS0FBbkI7O0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsaUJBQTdCOztBQUNBLE1BQU1DLGVBQWUsR0FBRyxVQUF4Qjs7QUFDQSxNQUFNQyxjQUFjLEdBQUcsU0FBdkI7O0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsYUFBM0I7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHLENBQ25CTCxVQURtQixFQUNQQyxvQkFETyxFQUNlQyxlQURmLEVBRW5CQyxjQUZtQixFQUVIQyxrQkFGRyxDQUFyQjtBQUlBLE1BQU1FLG9CQUFvQixHQUFHLEVBQTdCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsR0FBekI7QUFDQSxNQUFNQyxvQkFB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
306
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3VubG9jay1oZWxwZXJzLmpzIiwibmFtZXMiOlsiUElOX1VOTE9DSyIsIlBJTl9VTkxPQ0tfS0VZX0VWRU5UIiwiUEFTU1dPUkRfVU5MT0NLIiwiUEFUVEVSTl9VTkxPQ0siLCJGSU5HRVJQUklOVF9VTkxPQ0siLCJVTkxPQ0tfVFlQRVMiLCJLRVlDT0RFX05VTVBBRF9FTlRFUiIsIlVOTE9DS19XQUlUX1RJTUUiLCJJTlBVVF9LRVlTX1dBSVRfVElNRSIsIk5VTUJFUl9aRVJPX0tFWUNPREUiLCJoZWxwZXJzIiwidmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMiLCJjYXBzIiwidW5sb2NrS2V5IiwidW5sb2NrVHlwZSIsIl8iLCJpc05pbCIsIkVycm9yIiwiaW5jbHVkZXMiLCJ0ZXN0IiwidHJpbSIsImZhc3RVbmxvY2siLCJhZGIiLCJvcHRzIiwiY3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwibG9nZ2VyIiwiaW5mbyIsIndhc0xvY2tFbmFibGVkIiwiaXNMb2NrRW5hYmxlZCIsImNsZWFyTG9ja0NyZWRlbnRpYWwiLCJjeWNsZVdha2VVcCIsImRpc21pc3NLZXlndWFyZCIsInNldExvY2tDcmVkZW50aWFsIiwiZW5jb2RlUGFzc3dvcmQiLCJrZXkiLCJyZXBsYWNlIiwic3RyaW5nS2V5VG9BcnIiLCJzcGxpdCIsImZpbmdlcnByaW50VW5sb2NrIiwiZHJpdmVyIiwiY2FwYWJpbGl0aWVzIiwiZ2V0QXBpTGV2ZWwiLCJmaW5nZXJwcmludCIsInNsZWVwIiwicGluVW5sb2NrIiwia2V5cyIsImVscyIsImZpbmRFbE9yRWxzIiwiaXNFbXB0eSIsInBpblVubG9ja1dpdGhLZXlFdmVudCIsInBpbnMiLCJlbCIsInRleHQiLCJnZXRBdHRyaWJ1dGUiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsInBpbiIsImNsaWNrIiwid2FpdEZvclVubG9jayIsImlzU2NyZWVuTG9ja2VkIiwia2V5ZXZlbnQiLCJzaGVsbCIsInBhcnNlSW50IiwicGFzc3dvcmRVbmxvY2siLCJnZXRQYXR0ZXJuS2V5UG9zaXRpb24iLCJpbml0UG9zIiwicGllY2UiLCJjb2xzIiwieFBvcyIsIngiLCJNYXRoIiwicm91bmQiLCJ5UG9zIiwieSIsImNlaWwiLCJnZXRQYXR0ZXJuQWN0aW9ucyIsImFjdGlvbnMiLCJsYXN0UG9zIiwia2V5UG9zIiwicHVzaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJlbGVtZW50IiwibW92ZVRvIiwiZGlmZlgiLCJhYnMiLCJkaWZmWSIsInBhdHRlcm5VbmxvY2siLCJhcGlMZXZlbCIsImdldExvY2F0aW9uIiwic2l6ZSIsImdldFNpemUiLCJ3aWR0aCIsInBlcmZvcm1Ub3VjaCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi91bmxvY2staGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IFBJTl9VTkxPQ0sgPSAncGluJztcbmNvbnN0IFBJTl9VTkxPQ0tfS0VZX0VWRU5UID0gJ3BpbldpdGhLZXlFdmVudCc7XG5jb25zdCBQQVNTV09SRF9VTkxPQ0sgPSAncGFzc3dvcmQnO1xuY29uc3QgUEFUVEVSTl9VTkxPQ0sgPSAncGF0dGVybic7XG5jb25zdCBGSU5HRVJQUklOVF9VTkxPQ0sgPSAnZmluZ2VycHJpbnQnO1xuY29uc3QgVU5MT0NLX1RZUEVTID0gW1xuICBQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCwgUEFTU1dPUkRfVU5MT0NLLFxuICBQQVRURVJOX1VOTE9DSywgRklOR0VSUFJJTlRfVU5MT0NLXG5dO1xuY29uc3QgS0VZQ09ERV9OVU1QQURfRU5URVIgPSA2NjtcbmNvbnN0IFVOTE9DS19XQUlUX1RJTUUgPSAxMDA7XG5jb25zdCBJTlBVVF9LRVlTX1dBSVRfVElNRSA9IDEwMDtcbmNvbnN0IE5VTUJFUl9aRVJPX0tFWUNPREUgPSA3O1xuXG5jb25zdCBoZWxwZXJzID0ge307XG5cbmhlbHBlcnMudmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMgPSBmdW5jdGlvbiB2YWxpZGF0ZVVubG9ja0NhcGFiaWxpdGllcyAoY2FwcyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB1bmxvY2tLZXksXG4gICAgdW5sb2NrVHlwZSxcbiAgfSA9IGNhcHM7XG4gIGlmIChfLmlzTmlsKHVubG9ja0tleSkgfHwgdW5sb2NrS2V5ID09PSAnJykge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBub24tZW1wdHkgdW5sb2NrIGtleSB2YWx1ZSBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gIH1cblxuICBpZiAoW1BJTl9VTkxPQ0ssIFBJTl9VTkxPQ0tfS0VZX0VWRU5ULCBGSU5HRVJQUklOVF9VTkxPQ0tdLmluY2x1ZGVzKHVubG9ja1R5cGUpKSB7XG4gICAgaWYgKCEvXlswLTldKyQvLnRlc3QoXy50cmltKHVubG9ja0tleSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayBrZXkgdmFsdWUgJyR7dW5sb2NrS2V5fScgbXVzdCBvbmx5IGNvbnNpc3Qgb2YgZGlnaXRzYCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHVubG9ja1R5cGUgPT09IFBBVFRFUk5fVU5MT0NLKSB7XG4gICAgaWYgKCEvXlsxLTldezIsOX0kLy50ZXN0KF8udHJpbSh1bmxvY2tLZXkpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmxvY2sga2V5IHZhbHVlICcke3VubG9ja0tleX0nIG11c3Qgb25seSBpbmNsdWRlIGZyb20gdHdvIHRvIG5pbmUgZGlnaXRzIGluIHJhbmdlIDEuLjlgKTtcbiAgICB9XG4gICAgaWYgKC8oWzEtOV0pLio/XFwxLy50ZXN0KF8udHJpbSh1bmxvY2tLZXkpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmxvY2sga2V5IHZhbHVlICcke3VubG9ja0tleX0nIG11c3QgZGVmaW5lIGEgdmFsaWQgcGF0dGVybiB3aGVyZSByZXBlYXRzIGFyZSBub3QgYWxsb3dlZGApO1xuICAgIH1cbiAgfSBlbHNlIGlmICh1bmxvY2tUeXBlID09PSBQQVNTV09SRF9VTkxPQ0spIHtcbiAgICAvLyBEb250IHRyaW0gcGFzc3dvcmQga2V5LCB5b3UgY2FuIHVzZSBibGFuayBzcGFjZXMgaW4geW91ciBhbmRyb2lkIHBhc3N3b3JkXG4gICAgLy8gwq9cXF8o44OEKV8vwq9cbiAgICBpZiAoIS8uezQsfS9nLnRlc3QodW5sb2NrS2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgbWluaW11bSBhbGxvd2VkIGxlbmd0aCBvZiB1bmxvY2sga2V5IHZhbHVlICcke3VubG9ja0tleX0nIGlzIDQgY2hhcmFjdGVyc2ApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdW5sb2NrIHR5cGUgJyR7dW5sb2NrVHlwZX0nLiBgICtcbiAgICAgIGBPbmx5IHRoZSBmb2xsb3dpbmcgdW5sb2NrIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6ICR7VU5MT0NLX1RZUEVTfWApO1xuICB9XG4gIHJldHVybiBjYXBzO1xufTtcblxuaGVscGVycy5mYXN0VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gZmFzdFVubG9jayAoYWRiLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGNyZWRlbnRpYWwsXG4gICAgY3JlZGVudGlhbFR5cGUsXG4gIH0gPSBvcHRzO1xuICBsb2dnZXIuaW5mbyhgVW5sb2NraW5nIHRoZSBkZXZpY2UgdmlhIEFEQiB1c2luZyAke2NyZWRlbnRpYWxUeXBlfSBjcmVkZW50aWFsICcke2NyZWRlbnRpYWx9J2ApO1xuICBjb25zdCB3YXNMb2NrRW5hYmxlZCA9IGF3YWl0IGFkYi5pc0xvY2tFbmFibGVkKCk7XG4gIGlmICh3YXNMb2NrRW5hYmxlZCkge1xuICAgIGF3YWl0IGFkYi5jbGVhckxvY2tDcmVkZW50aWFsKGNyZWRlbnRpYWwpO1xuICAgIC8vIG5vdCBzdXJlIHdoeSwgYnV0IHRoZSBkZXZpY2UncyBzY3JlZW4gc3RpbGwgcmVtYWlucyBsb2NrZWRcbiAgICAvLyBpZiBhIHByZWxpbWluYXJ5IHdha2UgdXAgY3ljbGUgaGFzIG5vdCBiZWVuIHBlcmZvcm1lZFxuICAgIGF3YWl0IGFkYi5jeWNsZVdha2VVcCgpO1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlci5pbmZvKCdObyBhY3RpdmUgbG9jayBoYXMgYmVlbiBkZXRlY3RlZC4gUHJvY2VlZGluZyB0byB0aGUga2V5Z3VhcmQgZGlzbWlzc2FsJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICBhd2FpdCBhZGIuZGlzbWlzc0tleWd1YXJkKCk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHdhc0xvY2tFbmFibGVkKSB7XG4gICAgICBhd2FpdCBhZGIuc2V0TG9ja0NyZWRlbnRpYWwoY3JlZGVudGlhbFR5cGUsIGNyZWRlbnRpYWwpO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy5lbmNvZGVQYXNzd29yZCA9IGZ1bmN0aW9uIGVuY29kZVBhc3N3b3JkIChrZXkpIHtcbiAgcmV0dXJuIGAke2tleX1gLnJlcGxhY2UoL1xccy9pZywgJyVzJyk7XG59O1xuXG5oZWxwZXJzLnN0cmluZ0tleVRvQXJyID0gZnVuY3Rpb24gc3RyaW5nS2V5VG9BcnIgKGtleSkge1xuICByZXR1cm4gYCR7a2V5fWAudHJpbSgpLnJlcGxhY2UoL1xccysvZywgJycpLnNwbGl0KC9cXHMqLyk7XG59O1xuXG5oZWxwZXJzLmZpbmdlcnByaW50VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gZmluZ2VycHJpbnRVbmxvY2sgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbmdlcnByaW50IHVubG9jayBvbmx5IHdvcmtzIGZvciBBbmRyb2lkIDYrIGVtdWxhdG9ycycpO1xuICB9XG4gIGF3YWl0IGFkYi5maW5nZXJwcmludChjYXBhYmlsaXRpZXMudW5sb2NrS2V5KTtcbiAgYXdhaXQgc2xlZXAoVU5MT0NLX1dBSVRfVElNRSk7XG59O1xuXG5oZWxwZXJzLnBpblVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHBpblVubG9jayAoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcykge1xuICBsb2dnZXIuaW5mbyhgVHJ5aW5nIHRvIHVubG9jayBkZXZpY2UgdXNpbmcgcGluICR7Y2FwYWJpbGl0aWVzLnVubG9ja0tleX1gKTtcbiAgYXdhaXQgYWRiLmRpc21pc3NLZXlndWFyZCgpO1xuICBjb25zdCBrZXlzID0gaGVscGVycy5zdHJpbmdLZXlUb0FycihjYXBhYmlsaXRpZXMudW5sb2NrS2V5KTtcbiAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpID49IDIxKSB7XG4gICAgY29uc3QgZWxzID0gYXdhaXQgZHJpdmVyLmZpbmRFbE9yRWxzKCdpZCcsICdjb20uYW5kcm9pZC5zeXN0ZW11aTppZC9kaWdpdF90ZXh0JywgdHJ1ZSk7XG4gICAgaWYgKF8uaXNFbXB0eShlbHMpKSB7XG4gICAgICAvLyBmYWxsYmFjayB0byBwaW4gd2l0aCBrZXkgZXZlbnRcbiAgICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLnBpblVubG9ja1dpdGhLZXlFdmVudChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgICB9XG4gICAgY29uc3QgcGlucyA9IHt9O1xuICAgIGZvciAoY29uc3QgZWwgb2YgZWxzKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgZHJpdmVyLmdldEF0dHJpYnV0ZSgndGV4dCcsIHV0aWwudW53cmFwRWxlbWVudChlbCkpO1xuICAgICAgcGluc1t0ZXh0XSA9IGVsO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBpbiBvZiBrZXlzKSB7XG4gICAgICBjb25zdCBlbCA9IHBpbnNbcGluXTtcbiAgICAgIGF3YWl0IGRyaXZlci5jbGljayh1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBwaW4gb2Yga2V5cykge1xuICAgICAgY29uc3QgZWwgPSBhd2FpdCBkcml2ZXIuZmluZEVsT3JFbHMoJ2lkJywgYGNvbS5hbmRyb2lkLmtleWd1YXJkOmlkL2tleSR7cGlufWAsIGZhbHNlKTtcbiAgICAgIGlmIChlbCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBmYWxsYmFjayB0byBwaW4gd2l0aCBrZXkgZXZlbnRcbiAgICAgICAgcmV0dXJuIGF3YWl0IGhlbHBlcnMucGluVW5sb2NrV2l0aEtleUV2ZW50KGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpO1xuICAgICAgfVxuICAgICAgYXdhaXQgZHJpdmVyLmNsaWNrKHV0aWwudW53cmFwRWxlbWVudChlbCkpO1xuICAgIH1cbiAgfVxuICBhd2FpdCB3YWl0Rm9yVW5sb2NrKGFkYik7XG59O1xuXG4vKipcbiAqIFdhaXQgZm9yIHRoZSBkaXNwbGF5IHRvIGJlIHVubG9ja2VkLlxuICogU29tZSBkZXZpY2VzIGF1dG9tYXRpY2FsbHkgYWNjZXB0IHR5cGVkICdwaW4nIGFuZCAncGFzc3dvcmQnIGNvZGVcbiAqIHdpdGhvdXQgcHJlc3NpbmcgdGhlIEVudGVyIGtleS4gQnV0IHNvbWUgZGV2aWNlcyBuZWVkIGl0LlxuICogVGhpcyBtZXRob2Qgd2FpdHMgYSBmZXcgc2Vjb25kcyBmaXJzdCBmb3Igc3VjaCBhdXRvbWF0aWMgYWNjZXB0YW5jZSBjYXNlLlxuICogSWYgdGhlIGRldmljZSBpcyBzdGlsbCBsb2NrZWQsIHRoZW4gdGhpcyBtZXRob2Qgd2lsbCB0cnkgdG8gc2VuZFxuICogdGhlIGVudGVyIGtleSBjb2RlLlxuICpcbiAqIEBwYXJhbSB7QURCfSBhZGIgVGhlIGluc3RhbmNlIG9mIEFEQlxuICovXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yVW5sb2NrIChhZGIpIHtcbiAgYXdhaXQgc2xlZXAoVU5MT0NLX1dBSVRfVElNRSk7XG4gIGlmICghYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBhZGIua2V5ZXZlbnQoS0VZQ09ERV9OVU1QQURfRU5URVIpO1xuICBhd2FpdCBzbGVlcChVTkxPQ0tfV0FJVF9USU1FKTtcbn1cblxuaGVscGVycy5waW5VbmxvY2tXaXRoS2V5RXZlbnQgPSBhc3luYyBmdW5jdGlvbiBwaW5VbmxvY2tXaXRoS2V5RXZlbnQgKGFkYiwgZHJpdmVyLCBjYXBhYmlsaXRpZXMpIHtcbiAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byB1bmxvY2sgZGV2aWNlIHVzaW5nIHBpbiB3aXRoIGtleWNvZGUgJHtjYXBhYmlsaXRpZXMudW5sb2NrS2V5fWApO1xuICBhd2FpdCBhZGIuZGlzbWlzc0tleWd1YXJkKCk7XG4gIGNvbnN0IGtleXMgPSBoZWxwZXJzLnN0cmluZ0tleVRvQXJyKGNhcGFiaWxpdGllcy51bmxvY2tLZXkpO1xuXG4gIC8vIFNvbWUgZGV2aWNlIGRvZXMgbm90IGhhdmUgc3lzdGVtIGtleSBpZHMgbGlrZSAnY29tLmFuZHJvaWQua2V5Z3VhcmQ6aWQva2V5J1xuICAvLyBUaGVuLCBzZW5kaW5nIGtleWV2ZW50cyBhcmUgbW9yZSByZWxpYWJsZSB0byB1bmxvY2sgdGhlIHNjcmVlbi5cbiAgZm9yIChjb25zdCBwaW4gb2Yga2V5cykge1xuICAgIC8vICdwaW4nIGlzIG51bWJlciAoMC05KSBpbiBzdHJpbmcuXG4gICAgLy8gTnVtYmVyICcwJyBpcyBrZXljb2RlICc3Jy4gbnVtYmVyICc5JyBpcyBrZXljb2RlICcxNicuXG4gICAgYXdhaXQgYWRiLnNoZWxsKFsnaW5wdXQnLCAna2V5ZXZlbnQnLCBwYXJzZUludChwaW4sIDEwKSArIE5VTUJFUl9aRVJPX0tFWUNPREVdKTtcbiAgfVxuICBhd2FpdCB3YWl0Rm9yVW5sb2NrKGFkYiwgZHJpdmVyKTtcbn07XG5cbmhlbHBlcnMucGFzc3dvcmRVbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBwYXNzd29yZFVubG9jayAoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcykge1xuICBjb25zdCB7IHVubG9ja0tleSB9ID0gY2FwYWJpbGl0aWVzO1xuICBsb2dnZXIuaW5mbyhgVHJ5aW5nIHRvIHVubG9jayBkZXZpY2UgdXNpbmcgcGFzc3dvcmQgJHt1bmxvY2tLZXl9YCk7XG4gIGF3YWl0IGFkYi5kaXNtaXNzS2V5Z3VhcmQoKTtcbiAgLy8gUmVwbGFjZSBibGFuayBzcGFjZXMgd2l0aCAlc1xuICBjb25zdCBrZXkgPSBoZWxwZXJzLmVuY29kZVBhc3N3b3JkKHVubG9ja0tleSk7XG4gIC8vIFdoeSBhZGIgPyBJdCB3YXMgbGVzcyBmbGFreVxuICBhd2FpdCBhZGIuc2hlbGwoWydpbnB1dCcsICd0ZXh0Jywga2V5XSk7XG4gIC8vIFdoeSBzbGVlcHMgPyBBdm9pZCBzb21lIGZsYWt5bmVzcyB3YWl0aW5nIGZvciB0aGUgaW5wdXQgdG8gcmVjZWl2ZSB0aGUga2V5c1xuICBhd2FpdCBzbGVlcChJTlBVVF9LRVlTX1dBSVRfVElNRSk7XG4gIGF3YWl0IGFkYi5zaGVsbChbJ2lucHV0JywgJ2tleWV2ZW50JywgS0VZQ09ERV9OVU1QQURfRU5URVJdKTtcbiAgLy8gV2FpdHMgYSBiaXQgZm9yIHRoZSBkZXZpY2UgdG8gYmUgdW5sb2NrZWRcbiAgYXdhaXQgd2FpdEZvclVubG9jayhhZGIsIGRyaXZlcik7XG59O1xuXG5oZWxwZXJzLmdldFBhdHRlcm5LZXlQb3NpdGlvbiA9IGZ1bmN0aW9uIGdldFBhdHRlcm5LZXlQb3NpdGlvbiAoa2V5LCBpbml0UG9zLCBwaWVjZSkge1xuICAvKlxuICBIb3cgdGhlIG1hdGggd29ya3M6XG4gIFdlIGhhdmUgOSBidXR0b25zIGRpdmlkZWQgaW4gMyBjb2x1bW5zIGFuZCAzIHJvd3MgaW5zaWRlIHRoZSBsb2NrUGF0dGVyblZpZXcsXG4gIGV2ZXJ5IGJ1dHRvbiBoYXMgYSBwb3NpdGlvbiBvbiB0aGUgc2NyZWVuIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxvY2tQYXR0ZXJuVmlldyBzaW5jZVxuICBpdCBpcyB0aGUgcGFyZW50IHZpZXcgcmlnaHQgYXQgdGhlIG1pZGRsZSBvZiBlYWNoIGNvbHVtbiBvciByb3cuXG4gICovXG4gIGNvbnN0IGNvbHMgPSAzO1xuICBjb25zdCBwaW5zID0gOTtcbiAgY29uc3QgeFBvcyA9IChrZXksIHgsIHBpZWNlKSA9PiBNYXRoLnJvdW5kKHggKyAoKGtleSAlIGNvbHMpIHx8IGNvbHMpICogcGllY2UgLSBwaWVjZSAvIDIpO1xuICBjb25zdCB5UG9zID0gKGtleSwgeSwgcGllY2UpID0+IE1hdGgucm91bmQoeSArIChNYXRoLmNlaWwoKChrZXkgJSBwaW5zKSB8fCBwaW5zKSAvIGNvbHMpICogcGllY2UgLSBwaWVjZSAvIDIpKTtcbiAgcmV0dXJuIHtcbiAgICB4OiB4UG9zKGtleSwgaW5pdFBvcy54LCBwaWVjZSksXG4gICAgeTogeVBvcyhrZXksIGluaXRQb3MueSwgcGllY2UpXG4gIH07XG59O1xuXG5oZWxwZXJzLmdldFBhdHRlcm5BY3Rpb25zID0gZnVuY3Rpb24gZ2V0UGF0dGVybkFjdGlvbnMgKGtleXMsIGluaXRQb3MsIHBpZWNlKSB7XG4gIGNvbnN0IGFjdGlvbnMgPSBbXTtcbiAgbGV0IGxhc3RQb3M7XG4gIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3Qga2V5UG9zID0gaGVscGVycy5nZXRQYXR0ZXJuS2V5UG9zaXRpb24oa2V5LCBpbml0UG9zLCBwaWVjZSk7XG4gICAgaWYgKGtleSA9PT0ga2V5c1swXSkge1xuICAgICAgYWN0aW9ucy5wdXNoKHthY3Rpb246ICdwcmVzcycsIG9wdGlvbnM6IHtlbGVtZW50OiBudWxsLCB4OiBrZXlQb3MueCwgeToga2V5UG9zLnl9fSk7XG4gICAgICBsYXN0UG9zID0ga2V5UG9zO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG1vdmVUbyA9IHt4OiAwLCB5OiAwfTtcbiAgICBjb25zdCBkaWZmWCA9IGtleVBvcy54IC0gbGFzdFBvcy54O1xuICAgIGlmIChkaWZmWCA+IDApIHtcbiAgICAgIG1vdmVUby54ID0gcGllY2U7XG4gICAgICBpZiAoTWF0aC5hYnMoZGlmZlgpID4gcGllY2UpIHtcbiAgICAgICAgbW92ZVRvLnggKz0gcGllY2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaWZmWCA8IDApIHtcbiAgICAgIG1vdmVUby54ID0gLTEgKiBwaWVjZTtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmWCkgPiBwaWVjZSkge1xuICAgICAgICBtb3ZlVG8ueCAtPSBwaWVjZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGlmZlkgPSBrZXlQb3MueSAtIGxhc3RQb3MueTtcbiAgICBpZiAoZGlmZlkgPiAwKSB7XG4gICAgICBtb3ZlVG8ueSA9IHBpZWNlO1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZZKSA+IHBpZWNlKSB7XG4gICAgICAgIG1vdmVUby55ICs9IHBpZWNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGlmZlkgPCAwKSB7XG4gICAgICBtb3ZlVG8ueSA9IC0xICogcGllY2U7XG4gICAgICBpZiAoTWF0aC5hYnMoZGlmZlkpID4gcGllY2UpIHtcbiAgICAgICAgbW92ZVRvLnkgLT0gcGllY2U7XG4gICAgICB9XG4gICAgfVxuICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICBhY3Rpb246ICdtb3ZlVG8nLFxuICAgICAgb3B0aW9uczoge2VsZW1lbnQ6IG51bGwsIHg6IG1vdmVUby54ICsgbGFzdFBvcy54LCB5OiBtb3ZlVG8ueSArIGxhc3RQb3MueX1cbiAgICB9KTtcbiAgICBsYXN0UG9zID0ga2V5UG9zO1xuICB9XG4gIGFjdGlvbnMucHVzaCh7YWN0aW9uOiAncmVsZWFzZSd9KTtcbiAgcmV0dXJuIGFjdGlvbnM7XG59O1xuXG5oZWxwZXJzLnBhdHRlcm5VbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBwYXR0ZXJuVW5sb2NrIChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKSB7XG4gIGNvbnN0IHsgdW5sb2NrS2V5IH0gPSBjYXBhYmlsaXRpZXM7XG4gIGxvZ2dlci5pbmZvKGBUcnlpbmcgdG8gdW5sb2NrIGRldmljZSB1c2luZyBwYXR0ZXJuICR7dW5sb2NrS2V5fWApO1xuICBhd2FpdCBhZGIuZGlzbWlzc0tleWd1YXJkKCk7XG4gIGNvbnN0IGtleXMgPSBoZWxwZXJzLnN0cmluZ0tleVRvQXJyKHVubG9ja0tleSk7XG4gIC8qIFdlIHNldCB0aGUgZGV2aWNlIHBhdHRlcm4gYnV0dG9ucyBhcyBudW1iZXIgb2YgYSByZWd1bGFyIHBob25lXG4gICAqICB8IOKAoiDigKIg4oCiIHwgICAgIHwgMSAyIDMgfFxuICAgKiAgfCDigKIg4oCiIOKAoiB8IC0tPiB8IDQgNSA2IHxcbiAgICogIHwg4oCiIOKAoiDigKIgfCAgICAgfCA3IDggOSB8XG5cbiAgVGhlIHBhdHRlcm4gdmlldyBidXR0b25zIGFyZSBub3Qgc2VlaW5nIGJ5IHRoZSB1aWF1dG9tYXRvciBzaW5jZSB0aGV5IGFyZVxuICBpbmNsdWRlZCBpbnNpZGUgYSBGcmFtZUxheW91dCwgc28gd2UgYXJlIGdvaW5nIHRvIHRyeSBjbGlja2luZyBvbiB0aGUgYnV0dG9uc1xuICB1c2luZyB0aGUgcGFyZW50IHZpZXcgYm91bmRzIGFuZCBtYXRoLlxuICAqL1xuICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpO1xuICBjb25zdCBlbCA9IGF3YWl0IGRyaXZlci5maW5kRWxPckVscygnaWQnLFxuICAgIGBjb20uYW5kcm9pZC4ke2FwaUxldmVsID49IDIxID8gJ3N5c3RlbXVpJyA6ICdrZXlndWFyZCd9OmlkL2xvY2tQYXR0ZXJuVmlld2AsXG4gICAgZmFsc2VcbiAgKTtcbiAgY29uc3QgaW5pdFBvcyA9IGF3YWl0IGRyaXZlci5nZXRMb2NhdGlvbih1dGlsLnVud3JhcEVsZW1lbnQoZWwpKTtcbiAgY29uc3Qgc2l6ZSA9IGF3YWl0IGRyaXZlci5nZXRTaXplKHV0aWwudW53cmFwRWxlbWVudChlbCkpO1xuICAvLyBHZXQgYWN0aW9ucyB0byBwZXJmb3JtXG4gIGNvbnN0IGFjdGlvbnMgPSBoZWxwZXJzLmdldFBhdHRlcm5BY3Rpb25zKGtleXMsIGluaXRQb3MsIHNpemUud2lkdGggLyAzKTtcbiAgLy8gUGVyZm9ybSBnZXN0dXJlXG4gIGF3YWl0IGRyaXZlci5wZXJmb3JtVG91Y2goYWN0aW9ucyk7XG4gIC8vIFdhaXRzIGEgYml0IGZvciB0aGUgZGV2aWNlIHRvIGJlIHVubG9ja2VkXG4gIGF3YWl0IHNsZWVwKFVOTE9DS19XQUlUX1RJTUUpO1xufTtcblxuaGVscGVycy5QSU5fVU5MT0NLID0gUElOX1VOTE9DSztcbmhlbHBlcnMuUElOX1VOTE9DS19LRVlfRVZFTlQgPSBQSU5fVU5MT0NLX0tFWV9FVkVOVDtcbmhlbHBlcnMuUEFTU1dPUkRfVU5MT0NLID0gUEFTU1dPUkRfVU5MT0NLO1xuaGVscGVycy5QQVRURVJOX1VOTE9DSyA9IFBBVFRFUk5fVU5MT0NLO1xuaGVscGVycy5GSU5HRVJQUklOVF9VTkxPQ0sgPSBGSU5HRVJQUklOVF9VTkxPQ0s7XG5cbmV4cG9ydCB7XG4gIFBJTl9VTkxPQ0ssIFBJTl9VTkxPQ0tfS0VZX0VWRU5ULCBQQVNTV09SRF9VTkxPQ0ssIFBBVFRFUk5fVU5MT0NLLFxuICBGSU5HRVJQUklOVF9VTkxPQ0ssIGhlbHBlcnNcbn07XG5leHBvcnQgZGVmYXVsdCBoZWxwZXJzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFVBQVUsR0FBRyxLQUFuQjs7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxpQkFBN0I7O0FBQ0EsTUFBTUMsZUFBZSxHQUFHLFVBQXhCOztBQUNBLE1BQU1DLGNBQWMsR0FBRyxTQUF2Qjs7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxhQUEzQjs7QUFDQSxNQUFNQyxZQUFZLEdBQUcsQ0FDbkJMLFVBRG1CLEVBQ1BDLG9CQURPLEVBQ2VDLGVBRGYsRUFFbkJDLGNBRm1CLEVBRUhDLGtCQUZHLENBQXJCO0FBSUEsTUFBTUUsb0JBQW9CLEdBQUcsRUFBN0I7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyxHQUF6QjtBQUNBLE1BQU1DLG9CQUFv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
@@ -15,7 +15,7 @@ var _logger = _interopRequireDefault(require("./logger"));
15
15
 
16
16
  var _axios = _interopRequireDefault(require("axios"));
17
17
 
18
- var _support = require("@appium/support");
18
+ var _support = require("appium/support");
19
19
 
20
20
  var _portscanner = require("portscanner");
21
21
 
@@ -452,4 +452,4 @@ var _default = helpers;
452
452
  exports.default = _default;require('source-map-support').install();
453
453
 
454
454
 
455
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3dlYnZpZXctaGVscGVycy5qcyIsIm5hbWVzIjpbIk5BVElWRV9XSU4iLCJXRUJWSUVXX1dJTiIsIkNIUk9NSVVNX1dJTiIsIldFQlZJRVdfQkFTRSIsIldFQlZJRVdfUElEX1BBVFRFUk4iLCJSZWdFeHAiLCJXRUJWSUVXX1BLR19QQVRURVJOIiwiREVWVE9PTFNfU09DS0VUX1BBVFRFUk4iLCJDUk9TU1dBTEtfU09DS0VUX1BBVFRFUk4iLCJDSFJPTUlVTV9ERVZUT09MU19TT0NLRVQiLCJDSFJPTUVfUEFDS0FHRV9OQU1FIiwiS05PV05fQ0hST01FX1BBQ0tBR0VfTkFNRVMiLCJERVZUT09MU19QT1JUU19SQU5HRSIsIldFQlZJRVdTX0RFVEFJTFNfQ0FDSEUiLCJMUlUiLCJtYXgiLCJ1cGRhdGVBZ2VPbkdldCIsIkNEUF9SRVFfVElNRU9VVCIsIkRFVlRPT0xTX1BPUlRfQUxMT0NBVElPTl9HVUFSRCIsInV0aWwiLCJnZXRMb2NrRmlsZUd1YXJkIiwicGF0aCIsInJlc29sdmUiLCJvcyIsInRtcGRpciIsInRpbWVvdXQiLCJ0cnlSZWNvdmVyeSIsImhlbHBlcnMiLCJ0b0RldGFpbHNDYWNoZUtleSIsImFkYiIsIndlYnZpZXciLCJjdXJEZXZpY2VJZCIsImdldFBvdGVudGlhbFdlYnZpZXdQcm9jcyIsIm91dCIsInNoZWxsIiwibmFtZXMiLCJhbGxNYXRjaGVzIiwibGluZSIsInNwbGl0IiwiZmxhZ3MiLCJzdCIsInNvY2tQYXRoIiwidHJpbSIsInN0YXJ0c1dpdGgiLCJwdXNoIiwidGVzdCIsIl8iLCJpc0VtcHR5IiwibG9nZ2VyIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwibGVuZ3RoIiwicGx1cmFsaXplIiwidW5pcSIsIndlYnZpZXdzRnJvbVByb2NzIiwiZGV2aWNlU29ja2V0Iiwic29ja2V0TmFtZXMiLCJ3ZWJ2aWV3cyIsInNvY2tldE5hbWUiLCJwcm9jIiwic29ja2V0TmFtZU1hdGNoIiwiZXhlYyIsImNyb3Nzd2Fsa01hdGNoIiwiYWxsb2NhdGVEZXZ0b29sc1BvcnQiLCJ3ZWJ2aWV3RGV2dG9vbHNQb3J0IiwicmVtb3RlUG9ydCIsInJlcGxhY2UiLCJzdGFydFBvcnQiLCJlbmRQb3J0IiwibG9jYWxQb3J0IiwiZmluZEFQb3J0Tm90SW5Vc2UiLCJlIiwiRXJyb3IiLCJhZGJFeGVjIiwiY29sbGVjdFdlYnZpZXdzRGV0YWlscyIsIndlYnZpZXdzTWFwcGluZyIsIm9wdHMiLCJlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyIsImVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiIsImluZm8iLCJkZXRhaWxDb2xsZWN0b3JzIiwiaXRlbSIsImNkcEluZm8iLCJwYWdlcyIsImNkcExpc3QiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsIkIiLCJhbGwiLCJheGlvcyIsInVybCIsImRhdGEiLCJwcm9jRnJvbVdlYnZpZXciLCJwaWRNYXRjaCIsInBpZCIsInBrZyIsImdldE5hbWVCeVBpZCIsInBhcnNlV2Vidmlld05hbWVzIiwiaXNDaHJvbWVTZXNzaW9uIiwicmVzdWx0Iiwid2Vidmlld05hbWUiLCJnZXRXZWJWaWV3c01hcHBpbmciLCJhbmRyb2lkRGV2aWNlU29ja2V0Iiwid2Vidmlld01hcHBpbmciLCJ3dk5hbWUiLCJwcm9jZXNzIiwidW5kZWZpbmVkIiwicGtnTWF0Y2giLCJuYW1lIiwiaWQiLCJ3YXJuIiwibWVzc2FnZSIsImtleSIsInNldCIsImhhcyIsImRlbCIsImdldFdlYnZpZXdEZXRhaWxzIiwiZ2V0IiwiY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyIsImRldmljZUlkIiwid2ViVmlld0RldGFpbHMiLCJjYXBzIiwiY2hyb21lT3B0aW9ucyIsImFuZHJvaWRQYWNrYWdlIiwiYXBwUGFja2FnZSIsImlzQm9vbGVhbiIsImNocm9tZVVzZVJ1bm5pbmdBcHAiLCJhbmRyb2lkVXNlUnVubmluZ0FwcCIsImNocm9tZUFuZHJvaWRQYWNrYWdlIiwiY2hyb21lQW5kcm9pZEFjdGl2aXR5IiwiYW5kcm9pZEFjdGl2aXR5IiwiY2hyb21lQW5kcm9pZFByb2Nlc3MiLCJhbmRyb2lkUHJvY2VzcyIsInRvTG93ZXIiLCJicm93c2VyTmFtZSIsImFwcEFjdGl2aXR5IiwicGFnZUxvYWRTdHJhdGVneSIsImlzQ2hyb21lIiwiaW5jbHVkZXMiLCJhbmRyb2lkRGV2aWNlU2VyaWFsIiwiaXNQbGFpbk9iamVjdCIsImxvZ2dpbmdQcmVmcyIsImNocm9tZUxvZ2dpbmdQcmVmcyIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsIm5ld1ByZWYiLCJwZXJmb3JtYW5jZSIsIk9iamVjdCIsImFzc2lnbiIsIkFyZ3VtZW50cyIsImFyZ3MiLCJwcm90ZWN0ZWRDYXBOYW1lcyIsIm9wdCIsInZhbCIsInRvUGFpcnMiLCJpc1VuZGVmaW5lZCIsIm9wdE5hbWUiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvd2Vidmlldy1oZWxwZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IExSVSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuXG5jb25zdCBOQVRJVkVfV0lOID0gJ05BVElWRV9BUFAnO1xuY29uc3QgV0VCVklFV19XSU4gPSAnV0VCVklFVyc7XG5jb25zdCBDSFJPTUlVTV9XSU4gPSAnQ0hST01JVU0nO1xuY29uc3QgV0VCVklFV19CQVNFID0gYCR7V0VCVklFV19XSU59X2A7XG5jb25zdCBXRUJWSUVXX1BJRF9QQVRURVJOID0gbmV3IFJlZ0V4cChgXiR7V0VCVklFV19CQVNFfShcXFxcZCspYCk7XG5jb25zdCBXRUJWSUVXX1BLR19QQVRURVJOID0gbmV3IFJlZ0V4cChgXiR7V0VCVklFV19CQVNFfShbXlxcXFxkXFxcXHNdW1xcXFx3Ll0qKWApO1xuY29uc3QgREVWVE9PTFNfU09DS0VUX1BBVFRFUk4gPSAvQFtcXHcuXStfZGV2dG9vbHNfcmVtb3RlXz8oXFxkKyk/XFxiLztcbmNvbnN0IENST1NTV0FMS19TT0NLRVRfUEFUVEVSTiA9IC9AKFtcXHcuXSspX2RldnRvb2xzX3JlbW90ZVxcYi87XG5jb25zdCBDSFJPTUlVTV9ERVZUT09MU19TT0NLRVQgPSAnY2hyb21lX2RldnRvb2xzX3JlbW90ZSc7XG5jb25zdCBDSFJPTUVfUEFDS0FHRV9OQU1FID0gJ2NvbS5hbmRyb2lkLmNocm9tZSc7XG5jb25zdCBLTk9XTl9DSFJPTUVfUEFDS0FHRV9OQU1FUyA9IFtcbiAgQ0hST01FX1BBQ0tBR0VfTkFNRSxcbiAgJ2NvbS5jaHJvbWUuYmV0YScsXG4gICdjb20uY2hyb21lLmRldicsXG4gICdjb20uY2hyb21lLmNhbmFyeScsXG5dO1xuY29uc3QgREVWVE9PTFNfUE9SVFNfUkFOR0UgPSBbMTA5MDAsIDExMDAwXTtcbmNvbnN0IFdFQlZJRVdTX0RFVEFJTFNfQ0FDSEUgPSBuZXcgTFJVKHtcbiAgbWF4OiAxMDAsXG4gIHVwZGF0ZUFnZU9uR2V0OiB0cnVlLFxufSk7XG5jb25zdCBDRFBfUkVRX1RJTUVPVVQgPSAyMDAwOyAvLyBtc1xuY29uc3QgREVWVE9PTFNfUE9SVF9BTExPQ0FUSU9OX0dVQVJEID0gdXRpbC5nZXRMb2NrRmlsZUd1YXJkKFxuICBwYXRoLnJlc29sdmUob3MudG1wZGlyKCksICdhbmRyb2lkX2RldnRvb2xzX3BvcnRfZ3VhcmQnKSxcbiAge3RpbWVvdXQ6IDcsIHRyeVJlY292ZXJ5OiB0cnVlfVxuKTtcblxuY29uc3QgaGVscGVycyA9IHt9O1xuXG5mdW5jdGlvbiB0b0RldGFpbHNDYWNoZUtleSAoYWRiLCB3ZWJ2aWV3KSB7XG4gIHJldHVybiBgJHthZGI/LmN1ckRldmljZUlkfToke3dlYnZpZXd9YDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldHMgYSBsaXN0IG9mIGFuZHJvaWQgc3lzdGVtIHByb2Nlc3NlcyBhbmQgcmV0dXJucyBvbmVzXG4gKiB0aGF0IGxvb2sgbGlrZSB3ZWJ2aWV3c1xuICogU2VlIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9jaHJvbWUvYnJvd3Nlci9kZXZ0b29scy9kZXZpY2UvYW5kcm9pZF9kZXZpY2VfaW5mb19xdWVyeS5jY1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBhZGIgLSBhbiBBREIgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn0gLSBhIGxpc3Qgb2YgbWF0Y2hpbmcgd2VidmlldyBzb2NrZXQgbmFtZXMgKGluY2x1ZGluZyB0aGUgbGVhZGluZyAnQCcpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBvdGVudGlhbFdlYnZpZXdQcm9jcyAoYWRiKSB7XG4gIGNvbnN0IG91dCA9IGF3YWl0IGFkYi5zaGVsbChbJ2NhdCcsICcvcHJvYy9uZXQvdW5peCddKTtcbiAgY29uc3QgbmFtZXMgPSBbXTtcbiAgY29uc3QgYWxsTWF0Y2hlcyA9IFtdO1xuICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3V0LnNwbGl0KCdcXG4nKSkge1xuICAgIC8vIE51bSBSZWZDb3VudCBQcm90b2NvbCBGbGFncyBUeXBlIFN0IElub2RlIFBhdGhcbiAgICBjb25zdCBbLCwsIGZsYWdzLCwgc3QsLCBzb2NrUGF0aF0gPSBsaW5lLnRyaW0oKS5zcGxpdCgvXFxzKy8pO1xuICAgIGlmICghc29ja1BhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoc29ja1BhdGguc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICBhbGxNYXRjaGVzLnB1c2gobGluZS50cmltKCkpO1xuICAgIH1cbiAgICBpZiAoZmxhZ3MgIT09ICcwMDAxMDAwMCcgfHwgc3QgIT09ICcwMScpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIURFVlRPT0xTX1NPQ0tFVF9QQVRURVJOLnRlc3Qoc29ja1BhdGgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBuYW1lcy5wdXNoKHNvY2tQYXRoKTtcbiAgfVxuICBpZiAoXy5pc0VtcHR5KG5hbWVzKSkge1xuICAgIGxvZ2dlci5kZWJ1ZygnRm91bmQgbm8gYWN0aXZlIGRldnRvb2xzIHNvY2tldHMnKTtcbiAgICBpZiAoIV8uaXNFbXB0eShhbGxNYXRjaGVzKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBPdGhlciBzb2NrZXRzIGFyZTogJHtKU09OLnN0cmluZ2lmeShhbGxNYXRjaGVzLCBudWxsLCAyKX1gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBQYXJzZWQgJHtuYW1lcy5sZW5ndGh9IGFjdGl2ZSBkZXZ0b29scyAke3V0aWwucGx1cmFsaXplKCdzb2NrZXQnLCBuYW1lcy5sZW5ndGgsIGZhbHNlKX06IGAgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkobmFtZXMpKTtcbiAgfVxuICAvLyBzb21ldGltZXMgdGhlIHdlYnZpZXcgcHJvY2VzcyBzaG93cyB1cCBtdWx0aXBsZSB0aW1lcyBwZXIgYXBwXG4gIHJldHVybiBfLnVuaXEobmFtZXMpO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFdlYnZpZXdQcm9jXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvYyAtIFRoZSB3ZWJ2aWV3IHByb2Nlc3MgbmFtZSAoYXMgcmV0dXJuZWQgYnlcbiAqIGdldFBvdGVudGlhbFdlYnZpZXdQcm9jc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHdlYnZpZXcgLSBUaGUgYWN0dWFsIHdlYnZpZXcgY29udGV4dCBuYW1lXG4gKi9cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgYSBsaXN0IG9mIHN5c3RlbSBwcm9jZXNzZXMgdGhhdCBsb29rIGxpa2Ugd2Vidmlld3MsXG4gKiBhbmQgcmV0dXJucyB0aGVtIGFsb25nIHdpdGggdGhlIHdlYnZpZXcgY29udGV4dCBuYW1lIGFwcHJvcHJpYXRlIGZvciBpdC5cbiAqIElmIHdlIHBhc3MgaW4gYSBkZXZpY2VTb2NrZXQsIHdlIG9ubHkgYXR0ZW1wdCB0byBmaW5kIHdlYnZpZXdzIHdoaWNoIG1hdGNoXG4gKiB0aGF0IHNvY2tldCBuYW1lICh0aGlzIGlzIGZvciBhcHBzIHdoaWNoIGVtYmVkIENocm9taXVtLCB3aGljaCBpc24ndCB0aGVcbiAqIHNhbWUgYXMgY2hyb21lLWJhY2tlZCB3ZWJ2aWV3cykuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGFkYiAtIGFuIEFEQiBpbnN0YW5jZVxuICogQHBhcmFtIHs/c3RyaW5nfSBkZXZpY2VTb2NrZXQgLSB0aGUgZXhwbGljdGx5LW5hbWVkIGRldmljZSBzb2NrZXQgdG8gdXNlXG4gKlxuICogQHJldHVybiB7QXJyYXkuPFdlYnZpZXdQcm9jPn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2Vidmlld3NGcm9tUHJvY3MgKGFkYiwgZGV2aWNlU29ja2V0ID0gbnVsbCkge1xuICBjb25zdCBzb2NrZXROYW1lcyA9IGF3YWl0IGdldFBvdGVudGlhbFdlYnZpZXdQcm9jcyhhZGIpO1xuICBjb25zdCB3ZWJ2aWV3cyA9IFtdO1xuICBmb3IgKGNvbnN0IHNvY2tldE5hbWUgb2Ygc29ja2V0TmFtZXMpIHtcbiAgICBpZiAoZGV2aWNlU29ja2V0ID09PSBDSFJPTUlVTV9ERVZUT09MU19TT0NLRVQgJiYgc29ja2V0TmFtZSA9PT0gYEAke2RldmljZVNvY2tldH1gKSB7XG4gICAgICB3ZWJ2aWV3cy5wdXNoKHtcbiAgICAgICAgcHJvYzogc29ja2V0TmFtZSxcbiAgICAgICAgd2VidmlldzogQ0hST01JVU1fV0lOLFxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXROYW1lTWF0Y2ggPSBERVZUT09MU19TT0NLRVRfUEFUVEVSTi5leGVjKHNvY2tldE5hbWUpO1xuICAgIGlmICghc29ja2V0TmFtZU1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgY3Jvc3N3YWxrTWF0Y2ggPSBDUk9TU1dBTEtfU09DS0VUX1BBVFRFUk4uZXhlYyhzb2NrZXROYW1lKTtcbiAgICBpZiAoIXNvY2tldE5hbWVNYXRjaFsxXSAmJiAhY3Jvc3N3YWxrTWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChkZXZpY2VTb2NrZXQgJiYgc29ja2V0TmFtZSA9PT0gYEAke2RldmljZVNvY2tldH1gIHx8ICFkZXZpY2VTb2NrZXQpIHtcbiAgICAgIHdlYnZpZXdzLnB1c2goe1xuICAgICAgICBwcm9jOiBzb2NrZXROYW1lLFxuICAgICAgICB3ZWJ2aWV3OiBzb2NrZXROYW1lTWF0Y2hbMV1cbiAgICAgICAgICA/IGAke1dFQlZJRVdfQkFTRX0ke3NvY2tldE5hbWVNYXRjaFsxXX1gXG4gICAgICAgICAgOiBgJHtXRUJWSUVXX0JBU0V9JHtjcm9zc3dhbGtNYXRjaFsxXX1gLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB3ZWJ2aWV3cztcbn1cblxuLyoqXG4gKiBBbGxvY2F0ZXMgYSBsb2NhbCBwb3J0IGZvciBkZXZ0b29scyBjb21tdW5pY2F0aW9uXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiBBREIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb2NrZXROYW1lIFRoZSByZW1vdGUgVW5peCBzb2NrZXQgbmFtZVxuICogQHBhcmFtIHs/bnVtYmVyfSB3ZWJ2aWV3RGV2dG9vbHNQb3J0IFRoZSBsb2NhbCBwb3J0IG51bWJlciBvciBudWxsIHRvIGFwcGx5XG4gKiBhdXRvZGV0ZWN0aW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbG9jYWwgcG9ydCBudW1iZXIgaWYgdGhlIHJlbW90ZSBzb2NrZXQgaGFzIGJlZW4gZm9yd2FyZGVkXG4gKiBzdWNjZXNzZnVsbHkgb3IgYG51bGxgIG90aGVyd2lzZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBhbGxvY2F0aW5nIHRoZSBsb2NhbCBwb3J0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFsbG9jYXRlRGV2dG9vbHNQb3J0IChhZGIsIHNvY2tldE5hbWUsIHdlYnZpZXdEZXZ0b29sc1BvcnQgPSBudWxsKSB7XG4gIC8vIHNvY2tldCBuYW1lcyBjb21lIHdpdGggJ0AnLCBidXQgdGhpcyBzaG91bGQgbm90IGJlIGEgcGFydCBvZiB0aGUgYWJzdHJhY3RcbiAgLy8gcmVtb3RlIHBvcnQsIHNvIHJlbW92ZSBpdFxuICBjb25zdCByZW1vdGVQb3J0ID0gc29ja2V0TmFtZS5yZXBsYWNlKC9eQC8sICcnKTtcbiAgbGV0IFtzdGFydFBvcnQsIGVuZFBvcnRdID0gREVWVE9PTFNfUE9SVFNfUkFOR0U7XG4gIGlmICh3ZWJ2aWV3RGV2dG9vbHNQb3J0KSB7XG4gICAgZW5kUG9ydCA9IHdlYnZpZXdEZXZ0b29sc1BvcnQgKyAoZW5kUG9ydCAtIHN0YXJ0UG9ydCk7XG4gICAgc3RhcnRQb3J0ID0gd2Vidmlld0RldnRvb2xzUG9ydDtcbiAgfVxuICBsb2dnZXIuZGVidWcoYEZvcndhcmRpbmcgcmVtb3RlIHBvcnQgJHtyZW1vdGVQb3J0fSB0byBhIGxvY2FsIGAgK1xuICAgIGBwb3J0IGluIHJhbmdlICR7c3RhcnRQb3J0fS4uJHtlbmRQb3J0fWApO1xuICBpZiAoIXdlYnZpZXdEZXZ0b29sc1BvcnQpIHtcbiAgICBsb2dnZXIuZGVidWcoYFlvdSBjb3VsZCB1c2UgdGhlICd3ZWJ2aWV3RGV2dG9vbHNQb3J0JyBjYXBhYmlsaXR5IHRvIGN1c3RvbWl6ZSBgICtcbiAgICAgIGB0aGUgc3RhcnRpbmcgcG9ydCBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgREVWVE9PTFNfUE9SVF9BTExPQ0FUSU9OX0dVQVJEKGFzeW5jICgpID0+IHtcbiAgICBsZXQgbG9jYWxQb3J0O1xuICAgIHRyeSB7XG4gICAgICBsb2NhbFBvcnQgPSBhd2FpdCBmaW5kQVBvcnROb3RJblVzZShzdGFydFBvcnQsIGVuZFBvcnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgYW55IGZyZWUgcG9ydCB0byBmb3J3YXJkIHRoZSBEZXZ0b29scyBzb2NrZXQgYCArXG4gICAgICAgIGBpbiByYW5nZSAke3N0YXJ0UG9ydH0uLiR7ZW5kUG9ydH0uIFlvdSBjb3VsZCBzZXQgdGhlIHN0YXJ0aW5nIHBvcnQgbnVtYmVyIGAgK1xuICAgICAgICBgbWFudWFsbHkgYnkgcHJvdmlkaW5nIHRoZSAnd2Vidmlld0RldnRvb2xzUG9ydCcgY2FwYWJpbGl0eWApO1xuICAgIH1cbiAgICBhd2FpdCBhZGIuYWRiRXhlYyhbJ2ZvcndhcmQnLCBgdGNwOiR7bG9jYWxQb3J0fWAsIGBsb2NhbGFic3RyYWN0OiR7cmVtb3RlUG9ydH1gXSk7XG4gICAgcmV0dXJuIGxvY2FsUG9ydDtcbiAgfSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gV2Vidmlld1Byb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvYyBUaGUgbmFtZSBvZiB0aGUgRGV2dG9vbHMgVW5peCBzb2NrZXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3ZWJ2aWV3IFRoZSB3ZWIgdmlldyBhbGlhcy4gTG9va3MgbGlrZSBgV0VCVklFV19gXG4gKiBwcmVmaXggcGx1cyBQSUQgb3IgcGFja2FnZSBuYW1lXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGluZm8gV2VidmlldyBpbmZvcm1hdGlvbiBhcyBpdCBpcyByZXRyaWV2ZWQgYnlcbiAqIC9qc29uL3ZlcnNpb24gQ0RQIGVuZHBvaW50XG4gKiBAcHJvcGVydHkgez9BcnJheTxPYmplY3Q+fSBwYWdlcyBXZWJ2aWV3IHBhZ2VzIGxpc3QgYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi9saXN0IENEUCBlbmRwb2ludFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRGV0YWlsQ29sbGVjdGlvbk9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ3xudW1iZXJ9IHdlYnZpZXdEZXZ0b29sc1BvcnQgVGhlIHN0YXJ0aW5nIHBvcnQgdG8gdXNlIGZvciB3ZWJ2aWV3IHBhZ2VcbiAqIHByZXNlbmNlIGNoZWNrIChpZiBub3QgdGhlIGRlZmF1bHQgb2YgOTIyMikuXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyBXaGV0aGVyIHRvIGNoZWNrIGZvciB3ZWJ2aWV3XG4gKiBwYWdlcyBwcmVzZW5jZVxuICogQHByb3BlcnR5IHtib29sZWFufSBlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24gV2hldGhlciB0byBjb2xsZWN0XG4gKiB3ZWIgdmlldyBkZXRhaWxzIGFuZCBzZW5kIHRoZW0gdG8gQ2hyb21lZHJpdmVyIGNvbnN0cnVjdG9yLCBzbyBpdCBjb3VsZFxuICogc2VsZWN0IGEgYmluYXJ5IG1vcmUgcHJlY2lzZWx5IGJhc2VkIG9uIHRoaXMgaW5mby5cbiAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSB3cmFwcGVyIGZvciBDaHJvbWUgRGVidWdnZXIgUHJvdG9jb2wgZGF0YSBjb2xsZWN0aW9uLlxuICogTm8gZXJyb3IgaXMgdGhyb3duIGlmIENEUCByZXF1ZXN0IGZhaWxzIC0gaW4gc3VjaCBjYXNlIG5vIGRhdGEgd2lsbCBiZVxuICogcmVjb3JkZWQgaW50byB0aGUgY29ycmVzcG9uZGluZyBgd2Vidmlld3NNYXBwaW5nYCBpdGVtLlxuICpcbiAqIEBwYXJhbSB7QURCfSBhZGIgVGhlIEFEQiBpbnN0YW5jZVxuICogQHBhcmFtIHtBcnJheTxXZWJ2aWV3UHJvcHM+fSB3ZWJ2aWV3c01hcHBpbmcgVGhlIGN1cnJlbnQgd2Vidmlld3MgbWFwcGluZ1xuICogISEhIEVhY2ggaXRlbSBvZiB0aGlzIGFycmF5IGdldHMgbXV0YXRlZCAoYGluZm9gL2BwYWdlc2AgcHJvcGVydGllcyBnZXQgYWRkZWRcbiAqIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBgb3B0c2ApIGlmIHRoZSByZXF1ZXN0ZWQgZGV0YWlscyBoYXZlIGJlZW5cbiAqIHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgZm9yIGl0ICEhIVxuICogQHBhcmFtIHtEZXRhaWxDb2xsZWN0aW9uT3B0aW9uc30gb3B0cyBJZiBib3RoIGBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlc2AgYW5kXG4gKiBgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uYCBwcm9wZXJ0aWVzIGFyZSBmYWxzeSB0aGVuIG5vIGRldGFpbHMgY29sbGVjdGlvblxuICogaXMgcGVyZm9ybWVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RXZWJ2aWV3c0RldGFpbHMgKGFkYiwgd2Vidmlld3NNYXBwaW5nLCBvcHRzID0ge30pIHtcbiAgaWYgKF8uaXNFbXB0eSh3ZWJ2aWV3c01hcHBpbmcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIHdlYnZpZXdEZXZ0b29sc1BvcnQgPSBudWxsLFxuICAgIGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzID0gbnVsbCxcbiAgICBlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24gPSBudWxsLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzKSB7XG4gICAgbG9nZ2VyLmluZm8oYE5vdCBjaGVja2luZyB3aGV0aGVyIHdlYnZpZXdzIGhhdmUgYWN0aXZlIHBhZ2VzOyB1c2UgdGhlIGAgK1xuICAgICAgYCdlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcycgY2FwIHRvIHR1cm4gdGhpcyBjaGVjayBvbmApO1xuICB9XG5cbiAgaWYgKCFlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24pIHtcbiAgICBsb2dnZXIuaW5mbyhgTm90IGNvbGxlY3Rpbmcgd2ViIHZpZXcgZGV0YWlscy4gRGV0YWlscyBjb2xsZWN0aW9uIG1pZ2h0IGhlbHAgYCArXG4gICAgICBgdG8gbWFrZSBDaHJvbWVkcml2ZXIgaW5pdGlhbGl6YXRpb24gbW9yZSBwcmVjaXNlLiBVc2UgdGhlICdlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24nIGAgK1xuICAgICAgYGNhcCB0byB0dXJuIGl0IG9uYCk7XG4gIH1cblxuICBpZiAoIWVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzICYmICFlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDb25uZWN0IHRvIGVhY2ggZGV2dG9vbHMgc29ja2V0IGFuZCByZXRyaWV2ZSB3ZWIgdmlldyBkZXRhaWxzXG4gIGxvZ2dlci5kZWJ1ZyhgQ29sbGVjdGluZyBDRFAgZGF0YSBvZiAke3V0aWwucGx1cmFsaXplKCd3ZWJ2aWV3Jywgd2Vidmlld3NNYXBwaW5nLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gIGNvbnN0IGRldGFpbENvbGxlY3RvcnMgPSBbXTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIHdlYnZpZXdzTWFwcGluZykge1xuICAgIGRldGFpbENvbGxlY3RvcnMucHVzaCgoYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IGxvY2FsUG9ydDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvY2FsUG9ydCA9IGF3YWl0IGFsbG9jYXRlRGV2dG9vbHNQb3J0KGFkYiwgaXRlbS5wcm9jLCB3ZWJ2aWV3RGV2dG9vbHNQb3J0KTtcbiAgICAgICAgaWYgKGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbikge1xuICAgICAgICAgIGl0ZW0uaW5mbyA9IGF3YWl0IGNkcEluZm8obG9jYWxQb3J0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMpIHtcbiAgICAgICAgICBpdGVtLnBhZ2VzID0gYXdhaXQgY2RwTGlzdChsb2NhbFBvcnQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChsb2NhbFBvcnQpIHtcbiAgICAgICAgICBhd2FpdCBhZGIucmVtb3ZlUG9ydEZvcndhcmQobG9jYWxQb3J0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKCkpO1xuICB9XG4gIGF3YWl0IEIuYWxsKGRldGFpbENvbGxlY3RvcnMpO1xuICBsb2dnZXIuZGVidWcoYENEUCBkYXRhIGNvbGxlY3Rpb24gY29tcGxldGVkYCk7XG59XG5cbi8vIGh0dHBzOi8vY2hyb21lZGV2dG9vbHMuZ2l0aHViLmlvL2RldnRvb2xzLXByb3RvY29sL1xuYXN5bmMgZnVuY3Rpb24gY2RwTGlzdCAobG9jYWxQb3J0KSB7XG4gIHJldHVybiAoYXdhaXQgYXhpb3Moe1xuICAgIHVybDogYGh0dHA6Ly8xMjcuMC4wLjE6JHtsb2NhbFBvcnR9L2pzb24vbGlzdGAsXG4gICAgdGltZW91dDogQ0RQX1JFUV9USU1FT1VULFxuICB9KSkuZGF0YTtcbn1cblxuLy8gaHR0cHM6Ly9jaHJvbWVkZXZ0b29scy5naXRodWIuaW8vZGV2dG9vbHMtcHJvdG9jb2wvXG5hc3luYyBmdW5jdGlvbiBjZHBJbmZvIChsb2NhbFBvcnQpIHtcbiAgcmV0dXJuIChhd2FpdCBheGlvcyh7XG4gICAgdXJsOiBgaHR0cDovLzEyNy4wLjAuMToke2xvY2FsUG9ydH0vanNvbi92ZXJzaW9uYCxcbiAgICB0aW1lb3V0OiBDRFBfUkVRX1RJTUVPVVQsXG4gIH0pKS5kYXRhO1xufVxuXG4vKipcbiAqIFRha2UgYSB3ZWJ2aWV3IG5hbWUgbGlrZSBXRUJWSUVXXzQyOTYgYW5kIHVzZSAnYWRiIHNoZWxsIHBzJyB0byBmaWd1cmUgb3V0XG4gKiB3aGljaCBhcHAgcGFja2FnZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhhdCB3ZWJ2aWV3LiBPbmUgb2YgdGhlIHJlYXNvbnMgd2VcbiAqIHdhbnQgdG8gZG8gdGhpcyBpcyB0byBtYWtlIHN1cmUgd2UncmUgbGlzdGluZyB3ZWJ2aWV3cyBmb3IgdGhlIGFjdHVhbCBBVVQsXG4gKiBub3Qgc29tZSBvdGhlciBydW5uaW5nIGFwcFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBhZGIgLSBhbiBBREIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSB3ZWJ2aWV3IC0gYSB3ZWJ2aWV3IHByb2Nlc3MgbmFtZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIHBhY2thZ2UgbmFtZSBvZiB0aGUgYXBwIHJ1bm5pbmcgdGhlIHdlYnZpZXdcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHJldHJpZXZpbmcgdGhlIHByb2Nlc3MgbmFtZVxuICovXG5oZWxwZXJzLnByb2NGcm9tV2VidmlldyA9IGFzeW5jIGZ1bmN0aW9uIHByb2NGcm9tV2VidmlldyAoYWRiLCB3ZWJ2aWV3KSB7XG4gIGNvbnN0IHBpZE1hdGNoID0gV0VCVklFV19QSURfUEFUVEVSTi5leGVjKHdlYnZpZXcpO1xuICBpZiAoIXBpZE1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBQSUQgZm9yIHdlYnZpZXcgJyR7d2Vidmlld30nYCk7XG4gIH1cblxuICBjb25zdCBwaWQgPSBwaWRNYXRjaFsxXTtcbiAgbG9nZ2VyLmRlYnVnKGAke3dlYnZpZXd9IG1hcHBlZCB0byBwaWQgJHtwaWR9YCk7XG4gIGxvZ2dlci5kZWJ1ZyhgR2V0dGluZyBwcm9jZXNzIG5hbWUgZm9yIHdlYnZpZXcgJyR7d2Vidmlld30nYCk7XG4gIGNvbnN0IHBrZyA9IGF3YWl0IGFkYi5nZXROYW1lQnlQaWQocGlkKTtcbiAgbG9nZ2VyLmRlYnVnKGBHb3QgcHJvY2VzcyBuYW1lOiAnJHtwa2d9J2ApO1xuICByZXR1cm4gcGtnO1xufTtcblxuLyoqXG4gKiBQYXJzZSB3ZWJ2aWV3IG5hbWVzIGZvciBnZXRDb250ZXh0c1xuICpcbiAqIEBwYXJhbSB7QXJyYXk8V2Vidmlld3NNYXBwaW5nPn0gd2Vidmlld3NNYXBwaW5nIFNlZSBub3RlIG9uIGdldFdlYlZpZXdzTWFwcGluZ1xuICogQHBhcmFtIHtHZXRXZWJ2aWV3c09wdHN9IG9wdHMgU2VlIG5vdGUgb24gZ2V0V2ViVmlld3NNYXBwaW5nXG4gKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn0gLSBhIGxpc3Qgb2Ygd2VidmlldyBuYW1lc1xuICovXG5oZWxwZXJzLnBhcnNlV2Vidmlld05hbWVzID0gZnVuY3Rpb24gcGFyc2VXZWJ2aWV3TmFtZXMgKHdlYnZpZXdzTWFwcGluZywge1xuICBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyA9IHRydWUsXG4gIGlzQ2hyb21lU2Vzc2lvbiA9IGZhbHNlXG59ID0ge30pIHtcbiAgaWYgKGlzQ2hyb21lU2Vzc2lvbikge1xuICAgIHJldHVybiBbQ0hST01JVU1fV0lOXTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGNvbnN0IHt3ZWJ2aWV3LCBwYWdlcywgcHJvYywgd2Vidmlld05hbWV9IG9mIHdlYnZpZXdzTWFwcGluZykge1xuICAgIGlmIChlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyAmJiBwYWdlcz8ubGVuZ3RoID09PSAwKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgU2tpcHBpbmcgdGhlIHdlYnZpZXcgJyR7d2Vidmlld30nIGF0ICcke3Byb2N9JyBgICtcbiAgICAgICAgYHNpbmNlIGl0IGhhcyByZXBvcnRlZCBoYXZpbmcgemVybyBwYWdlc2ApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICh3ZWJ2aWV3TmFtZSkge1xuICAgICAgcmVzdWx0LnB1c2god2Vidmlld05hbWUpO1xuICAgIH1cbiAgfVxuICBsb2dnZXIuZGVidWcoYEZvdW5kICR7dXRpbC5wbHVyYWxpemUoJ3dlYnZpZXcnLCByZXN1bHQubGVuZ3RoLCB0cnVlKX06ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gR2V0V2Vidmlld3NPcHRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYW5kcm9pZERldmljZVNvY2tldCBbbnVsbF0gLSBkZXZpY2Ugc29ja2V0IG5hbWVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMgW3RydWVdIC0gd2hldGhlciB0byBjaGVjayBmb3Igd2Vidmlld1xuICogcGFnZSBwcmVzZW5jZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdlYnZpZXdEZXZ0b29sc1BvcnQgWzkyMjJdIC0gcG9ydCB0byB1c2UgZm9yIHdlYnZpZXcgcGFnZVxuICogcHJlc2VuY2UgY2hlY2suXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiBbdHJ1ZV0gLSB3aGV0aGVyIHRvIGNvbGxlY3RcbiAqIHdlYiB2aWV3IGRldGFpbHMgYW5kIHNlbmQgdGhlbSB0byBDaHJvbWVkcml2ZXIgY29uc3RydWN0b3IsIHNvIGl0IGNvdWxkXG4gKiBzZWxlY3QgYSBiaW5hcnkgbW9yZSBwcmVjaXNlbHkgYmFzZWQgb24gdGhpcyBpbmZvLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gV2Vidmlld3NNYXBwaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvYyBTZWUgbm90ZSBvbiBXZWJ2aWV3UHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3ZWJ2aWV3IFNlZSBub3RlIG9uIFdlYnZpZXdQcm9wc1xuICogQHByb3BlcnR5IHs/T2JqZWN0fSBpbmZvIFNlZSBub3RlIG9uIFdlYnZpZXdQcm9wc1xuICogQHByb3BlcnR5IHs/QXJyYXk8T2JqZWN0Pn0gcGFnZXMgU2VlIG5vdGUgb24gV2Vidmlld1Byb3BzXG4gKiBAcHJvcGVyeSB7P3N0cmluZ30gd2Vidmlld05hbWUgQW4gYWN0dWFsIHdlYnZpZXcgbmFtZSBmb3Igc3dpdGNoaW5nIGNvbnRleHRcbiAqL1xuXG4vKipcbiAqIEdldCBhIGxpc3Qgb2YgYXZhaWxhYmxlIHdlYnZpZXdzIG1hcHBpbmcgYnkgaW50cm9zcGVjdGluZyBwcm9jZXNzZXMgd2l0aCBhZGIsXG4gKiB3aGVyZSB3ZWJ2aWV3cyBhcmUgbGlzdGVkLiBJdCdzIHBvc3NpYmxlIHRvIHBhc3MgaW4gYSAnZGV2aWNlU29ja2V0JyBhcmcsIHdoaWNoXG4gKiBsaW1pdHMgdGhlIHdlYnZpZXcgcG9zc2liaWxpdGllcyB0byB0aGUgb25lIHJ1bm5pbmcgb24gdGhlIENocm9taXVtIGRldnRvb2xzXG4gKiBzb2NrZXQgd2UncmUgaW50ZXJlc3RlZCBpbiAoc2VlIG5vdGUgb24gd2Vidmlld3NGcm9tUHJvY3MpLiBXZSBjYW4gYWxzb1xuICogZGlyZWN0IHRoaXMgbWV0aG9kIHRvIHZlcmlmeSB3aGV0aGVyIGEgcGFydGljdWxhciB3ZWJ2aWV3IHByb2Nlc3MgYWN0dWFsbHlcbiAqIGhhcyBhbnkgcGFnZXMgKGlmIGEgcHJvY2VzcyBleGlzdHMgYnV0IG5vIHBhZ2VzIGFyZSBmb3VuZCwgQ2hyb21lZHJpdmVyIHdpbGxcbiAqIG5vdCBhY3R1YWxseSBiZSBhYmxlIHRvIGNvbm5lY3QgdG8gaXQsIHNvIHRoaXMgc2VydmVzIGFzIGEgZ3VhcmQgZm9yIHRoYXRcbiAqIHN0cmFuZ2UgZmFpbHVyZSBtb2RlKS4gVGhlIHN0cmF0ZWd5IGZvciBjaGVja2luZyB3aGV0aGVyIGFueSBwYWdlcyBhcmVcbiAqIGFjdGl2ZSBpbnZvbHZlcyBzZW5kaW5nIGEgcmVxdWVzdCB0byB0aGUgcmVtb3RlIGRlYnVnIHNlcnZlciBvbiB0aGUgZGV2aWNlLFxuICogaGVuY2UgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IHRoZSBwb3J0IG9uIHRoZSBob3N0IG1hY2hpbmUgd2hpY2hcbiAqIHNob3VsZCBiZSB1c2VkIGZvciB0aGlzIGNvbW11bmljYXRpb24uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGFkYiAtIGFuIEFEQiBpbnN0YW5jZVxuICogQHBhcmFtIHtHZXRXZWJ2aWV3c09wdHN9IG9wdHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxXZWJ2aWV3c01hcHBpbmc+fSB3ZWJ2aWV3c01hcHBpbmdcbiAqL1xuaGVscGVycy5nZXRXZWJWaWV3c01hcHBpbmcgPSBhc3luYyBmdW5jdGlvbiBnZXRXZWJWaWV3c01hcHBpbmcgKGFkYiwge1xuICBhbmRyb2lkRGV2aWNlU29ja2V0ID0gbnVsbCxcbiAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMgPSB0cnVlLFxuICB3ZWJ2aWV3RGV2dG9vbHNQb3J0ID0gbnVsbCxcbiAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uID0gdHJ1ZVxufSA9IHt9KSB7XG4gIGxvZ2dlci5kZWJ1ZygnR2V0dGluZyBhIGxpc3Qgb2YgYXZhaWxhYmxlIHdlYnZpZXdzJyk7XG4gIGNvbnN0IHdlYnZpZXdzTWFwcGluZyA9IGF3YWl0IHdlYnZpZXdzRnJvbVByb2NzKGFkYiwgYW5kcm9pZERldmljZVNvY2tldCk7XG5cbiAgYXdhaXQgY29sbGVjdFdlYnZpZXdzRGV0YWlscyhhZGIsIHdlYnZpZXdzTWFwcGluZywge1xuICAgIGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzLFxuICAgIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbixcbiAgICB3ZWJ2aWV3RGV2dG9vbHNQb3J0LFxuICB9KTtcblxuICBmb3IgKGNvbnN0IHdlYnZpZXdNYXBwaW5nIG9mIHdlYnZpZXdzTWFwcGluZykge1xuICAgIGNvbnN0IHt3ZWJ2aWV3LCBpbmZvfSA9IHdlYnZpZXdNYXBwaW5nO1xuICAgIHdlYnZpZXdNYXBwaW5nLndlYnZpZXdOYW1lID0gbnVsbDtcblxuICAgIGxldCB3dk5hbWUgPSB3ZWJ2aWV3O1xuICAgIGxldCBwcm9jZXNzID0gdW5kZWZpbmVkO1xuICAgIGlmICghYW5kcm9pZERldmljZVNvY2tldCkge1xuICAgICAgY29uc3QgcGtnTWF0Y2ggPSBXRUJWSUVXX1BLR19QQVRURVJOLmV4ZWMod2Vidmlldyk7XG4gICAgICB0cnkge1xuICAgICAgICAvLyB3ZWIgdmlldyBuYW1lIGNvdWxkIGVpdGhlciBiZSBzdWZmaXhlZCB3aXRoIFBJRCBvciB0aGUgcGFja2FnZSBuYW1lXG4gICAgICAgIC8vIHBhY2thZ2UgbmFtZXMgY291bGQgbm90IHN0YXJ0IHdpdGggYSBkaWdpdFxuICAgICAgICBjb25zdCBwa2cgPSBwa2dNYXRjaCA/IHBrZ01hdGNoWzFdIDogYXdhaXQgaGVscGVycy5wcm9jRnJvbVdlYnZpZXcoYWRiLCB3ZWJ2aWV3KTtcbiAgICAgICAgd3ZOYW1lID0gYCR7V0VCVklFV19CQVNFfSR7cGtnfWA7XG4gICAgICAgIGNvbnN0IHBpZE1hdGNoID0gV0VCVklFV19QSURfUEFUVEVSTi5leGVjKHdlYnZpZXcpO1xuICAgICAgICBwcm9jZXNzID0ge1xuICAgICAgICAgIG5hbWU6IHBrZyxcbiAgICAgICAgICBpZDogcGlkTWF0Y2ggPyBwaWRNYXRjaFsxXSA6IG51bGwsXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGUubWVzc2FnZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdlYnZpZXdNYXBwaW5nLndlYnZpZXdOYW1lID0gd3ZOYW1lO1xuICAgIGNvbnN0IGtleSA9IHRvRGV0YWlsc0NhY2hlS2V5KGFkYiwgd3ZOYW1lKTtcbiAgICBpZiAoaW5mbyB8fCBwcm9jZXNzKSB7XG4gICAgICBXRUJWSUVXU19ERVRBSUxTX0NBQ0hFLnNldChrZXksIHsgaW5mbywgcHJvY2VzcyB9KTtcbiAgICB9IGVsc2UgaWYgKFdFQlZJRVdTX0RFVEFJTFNfQ0FDSEUuaGFzKGtleSkpIHtcbiAgICAgIFdFQlZJRVdTX0RFVEFJTFNfQ0FDSEUuZGVsKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB3ZWJ2aWV3c01hcHBpbmc7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFByb2Nlc3NJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSBUaGUgcHJvY2VzcyBuYW1lXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGlkIFRoZSBwcm9jZXNzIGlkIChpZiBjb3VsZCBiZSByZXRyaWV2ZWQpXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBXZWJWaWV3RGV0YWlsc1xuICogQHByb3BlcnR5IHs/UHJvY2Vzc0luZm99IHByb2Nlc3MgLSBXZWIgdmlldyBwcm9jZXNzIGRldGFpbHNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBpbmZvIC0gV2ViIHZpZXcgZGV0YWlscyBhcyByZXR1cm5lZCBieSAvanNvbi92ZXJzaW9uIENEUCBlbmRwb2ludCwgZm9yIGV4YW1wbGU6XG4gKiB7XG4gKiAgXCJCcm93c2VyXCI6IFwiQ2hyb21lLzcyLjAuMzYwMS4wXCIsXG4gKiAgXCJQcm90b2NvbC1WZXJzaW9uXCI6IFwiMS4zXCIsXG4gKiAgXCJVc2VyLUFnZW50XCI6IFwiTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTNfNikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzcyLjAuMzYwMS4wIFNhZmFyaS81MzcuMzZcIixcbiAqICBcIlY4LVZlcnNpb25cIjogXCI3LjIuMjMzXCIsXG4gKiAgXCJXZWJLaXQtVmVyc2lvblwiOiBcIjUzNy4zNiAoQGNmZWRlOWRiMWQxNTRkZTA0NjhjYjA1Mzg0NzlmMzRjMDc1NWEwZjQpXCIsXG4gKiAgXCJ3ZWJTb2NrZXREZWJ1Z2dlclVybFwiOiBcIndzOi8vbG9jYWxob3N0OjkyMjIvZGV2dG9vbHMvYnJvd3Nlci9iMGI4YTRmYi1iYjE3LTQzNTktOTUzMy1hOGQ5ZjM5MDhiZDhcIlxuICogfVxuICovXG5cbi8qKlxuICogUmV0cmlldmVzIHdlYiB2aWV3IGRldGFpbHMgcHJldmlvdXNseSBjYWNoZWQgYnkgYGdldFdlYnZpZXdzYCBjYWxsXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiBBREIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSB3ZWJ2aWV3IFRoZSBuYW1lIG9mIHRoZSB3ZWIgdmlld1xuICogQHJldHVybnMgez9XZWJWaWV3RGV0YWlsc30gRWl0aGVyIGB1bmRlZmluZWRgIG9yIHRoZSByZWNlbnQgd2ViIHZpZXcgZGV0YWlsc1xuICovXG5oZWxwZXJzLmdldFdlYnZpZXdEZXRhaWxzID0gZnVuY3Rpb24gZ2V0V2Vidmlld0RldGFpbHMgKGFkYiwgd2Vidmlldykge1xuICBjb25zdCBrZXkgPSB0b0RldGFpbHNDYWNoZUtleShhZGIsIHdlYnZpZXcpO1xuICByZXR1cm4gV0VCVklFV1NfREVUQUlMU19DQUNIRS5nZXQoa2V5KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIENocm9tZSBkcml2ZXIgY2FwYWJpbGl0aWVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZFxuICogQXBwaXVtIGNhcGFiaWxpdGllc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIFVzZXItcHJvdmlkZWQgY2FwYWJpbGl0aWVzIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IGRldmljZUlkIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBBbmRyb2lkIGRldmljZSB1bmRlciB0ZXN0XG4gKiBAcGFyYW0gez9XZWJWaWV3RGV0YWlsc30gd2ViVmlld0RldGFpbHNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBjYXBhYmlsaXRpZXMgb2JqZWN0LlxuICogU2VlIGh0dHBzOi8vY2hyb21lZHJpdmVyLmNocm9taXVtLm9yZy9jYXBhYmlsaXRpZXMgZm9yIG1vcmUgZGV0YWlscy5cbiAqL1xuaGVscGVycy5jcmVhdGVDaHJvbWVkcml2ZXJDYXBzID0gZnVuY3Rpb24gY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyAob3B0cywgZGV2aWNlSWQsIHdlYlZpZXdEZXRhaWxzKSB7XG4gIGNvbnN0IGNhcHMgPSB7IGNocm9tZU9wdGlvbnM6IHt9IH07XG5cbiAgY29uc3QgYW5kcm9pZFBhY2thZ2UgPSBvcHRzLmNocm9tZU9wdGlvbnM/LmFuZHJvaWRQYWNrYWdlXG4gICAgfHwgb3B0cy5hcHBQYWNrYWdlXG4gICAgfHwgd2ViVmlld0RldGFpbHM/LmluZm8/LlsnQW5kcm9pZC1QYWNrYWdlJ107XG4gIGlmIChhbmRyb2lkUGFja2FnZSkge1xuICAgIC8vIGNocm9tZWRyaXZlciByYWlzZXMgYW4gaW52YWxpZCBhcmd1bWVudCBlcnJvciB3aGVuIGFuZHJvaWRQYWNrYWdlIGlzICdudWxsJ1xuICAgIGNhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkUGFja2FnZSA9IGFuZHJvaWRQYWNrYWdlO1xuICB9XG4gIGlmIChfLmlzQm9vbGVhbihvcHRzLmNocm9tZVVzZVJ1bm5pbmdBcHApKSB7XG4gICAgY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRVc2VSdW5uaW5nQXBwID0gb3B0cy5jaHJvbWVVc2VSdW5uaW5nQXBwO1xuICB9XG4gIGlmIChvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlKSB7XG4gICAgY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRQYWNrYWdlID0gb3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZTtcbiAgfVxuICBpZiAob3B0cy5jaHJvbWVBbmRyb2lkQWN0aXZpdHkpIHtcbiAgICBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZEFjdGl2aXR5ID0gb3B0cy5jaHJvbWVBbmRyb2lkQWN0aXZpdHk7XG4gIH1cbiAgaWYgKG9wdHMuY2hyb21lQW5kcm9pZFByb2Nlc3MpIHtcbiAgICBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFByb2Nlc3MgPSBvcHRzLmNocm9tZUFuZHJvaWRQcm9jZXNzO1xuICB9IGVsc2UgaWYgKHdlYlZpZXdEZXRhaWxzPy5wcm9jZXNzPy5uYW1lICYmIHdlYlZpZXdEZXRhaWxzPy5wcm9jZXNzPy5pZCkge1xuICAgIGNhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkUHJvY2VzcyA9IHdlYlZpZXdEZXRhaWxzLnByb2Nlc3MubmFtZTtcbiAgfVxuICBpZiAoXy50b0xvd2VyKG9wdHMuYnJvd3Nlck5hbWUpID09PSAnY2hyb21pdW0td2VidmlldycpIHtcbiAgICBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZEFjdGl2aXR5ID0gb3B0cy5hcHBBY3Rpdml0eTtcbiAgfVxuICBpZiAob3B0cy5wYWdlTG9hZFN0cmF0ZWd5KSB7XG4gICAgY2Fwcy5wYWdlTG9hZFN0cmF0ZWd5ID0gb3B0cy5wYWdlTG9hZFN0cmF0ZWd5O1xuICB9XG4gIGNvbnN0IGlzQ2hyb21lID0gXy50b0xvd2VyKGNhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkUGFja2FnZSkgPT09ICdjaHJvbWUnO1xuICBpZiAoXy5pbmNsdWRlcyhLTk9XTl9DSFJPTUVfUEFDS0FHRV9OQU1FUywgY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRQYWNrYWdlKSB8fCBpc0Nocm9tZSkge1xuICAgIC8vIGlmIHdlIGhhdmUgZXh0cmFjdGVkIHBhY2thZ2UgZnJvbSBjb250ZXh0IG5hbWUsIGl0IGNvdWxkIGNvbWUgaW4gYXMgYmFyZVxuICAgIC8vIFwiY2hyb21lXCIsIGFuZCBzbyB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoZSBkZXRhaWxzIGFyZSBjb3JyZWN0LCBpbmNsdWRpbmdcbiAgICAvLyBub3QgdXNpbmcgYW4gYWN0aXZpdHkgb3IgcHJvY2VzcyBpZFxuICAgIGlmIChpc0Nocm9tZSkge1xuICAgICAgY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRQYWNrYWdlID0gQ0hST01FX1BBQ0tBR0VfTkFNRTtcbiAgICB9XG4gICAgZGVsZXRlIGNhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkQWN0aXZpdHk7XG4gICAgZGVsZXRlIGNhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkUHJvY2VzcztcbiAgfVxuICAvLyBhZGQgZGV2aWNlIGlkIGZyb20gYWRiXG4gIGNhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkRGV2aWNlU2VyaWFsID0gZGV2aWNlSWQ7XG5cbiAgaWYgKF8uaXNQbGFpbk9iamVjdChvcHRzLmxvZ2dpbmdQcmVmcykgfHwgXy5pc1BsYWluT2JqZWN0KG9wdHMuY2hyb21lTG9nZ2luZ1ByZWZzKSkge1xuICAgIGlmIChvcHRzLmxvZ2dpbmdQcmVmcykge1xuICAgICAgbG9nZ2VyLndhcm4oYFRoZSAnbG9nZ2luZ1ByZWZzJyBjYXAgaXMgZGVwcmVjYXRlZDsgdXNlIHRoZSAnY2hyb21lTG9nZ2luZ1ByZWZzJyBjYXAgaW5zdGVhZGApO1xuICAgIH1cbiAgICBjYXBzLmxvZ2dpbmdQcmVmcyA9IG9wdHMuY2hyb21lTG9nZ2luZ1ByZWZzIHx8IG9wdHMubG9nZ2luZ1ByZWZzO1xuICB9XG4gIGlmIChvcHRzLmVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZykge1xuICAgIGxvZ2dlci53YXJuKGBUaGUgJ2VuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZycgY2FwIGlzIGRlcHJlY2F0ZWQ7IHNpbXBseSB1c2UgYCArXG4gICAgICBgdGhlICdjaHJvbWVMb2dnaW5nUHJlZnMnIGNhcCBpbnN0ZWFkLCB3aXRoIGEgJ3BlcmZvcm1hbmNlJyBrZXkgc2V0IHRvICdBTEwnYCk7XG4gICAgY29uc3QgbmV3UHJlZiA9IHtwZXJmb3JtYW5jZTogJ0FMTCd9O1xuICAgIC8vIGRvbid0IG92ZXJ3cml0ZSBvdGhlciBsb2dnaW5nIHByZWZzIHRoYXQgaGF2ZSBiZWVuIHNlbnQgaW4gaWYgdGhleSBleGlzdFxuICAgIGNhcHMubG9nZ2luZ1ByZWZzID0gY2Fwcy5sb2dnaW5nUHJlZnNcbiAgICAgID8gT2JqZWN0LmFzc2lnbih7fSwgY2Fwcy5sb2dnaW5nUHJlZnMsIG5ld1ByZWYpXG4gICAgICA6IG5ld1ByZWY7XG4gIH1cblxuICBpZiAob3B0cy5jaHJvbWVPcHRpb25zPy5Bcmd1bWVudHMpIHtcbiAgICAvLyBtZXJnZSBgQXJndW1lbnRzYCBhbmQgYGFyZ3NgXG4gICAgb3B0cy5jaHJvbWVPcHRpb25zLmFyZ3MgPSBbLi4uKG9wdHMuY2hyb21lT3B0aW9ucy5hcmdzIHx8IFtdKSwgLi4ub3B0cy5jaHJvbWVPcHRpb25zLkFyZ3VtZW50c107XG4gICAgZGVsZXRlIG9wdHMuY2hyb21lT3B0aW9ucy5Bcmd1bWVudHM7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoJ1ByZWNhbGN1bGF0ZWQgQ2hyb21lZHJpdmVyIGNhcGFiaWxpdGllczogJyArXG4gICAgSlNPTi5zdHJpbmdpZnkoY2Fwcy5jaHJvbWVPcHRpb25zLCBudWxsLCAyKSk7XG5cbiAgY29uc3QgcHJvdGVjdGVkQ2FwTmFtZXMgPSBbXTtcbiAgZm9yIChjb25zdCBbb3B0LCB2YWxdIG9mIF8udG9QYWlycyhvcHRzLmNocm9tZU9wdGlvbnMpKSB7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQoY2Fwcy5jaHJvbWVPcHRpb25zW29wdF0pKSB7XG4gICAgICBjYXBzLmNocm9tZU9wdGlvbnNbb3B0XSA9IHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvdGVjdGVkQ2FwTmFtZXMucHVzaChvcHQpO1xuICAgIH1cbiAgfVxuICBpZiAoIV8uaXNFbXB0eShwcm90ZWN0ZWRDYXBOYW1lcykpIHtcbiAgICBsb2dnZXIuaW5mbygnVGhlIGZvbGxvd2luZyBDaHJvbWVkcml2ZXIgY2FwYWJpbGl0aWVzIGNhbm5vdCBiZSBvdmVycmlkZGVuICcgK1xuICAgICAgJ2J5IHRoZSBwcm92aWRlZCBjaHJvbWVPcHRpb25zOicpO1xuICAgIGZvciAoY29uc3Qgb3B0TmFtZSBvZiBwcm90ZWN0ZWRDYXBOYW1lcykge1xuICAgICAgbG9nZ2VyLmluZm8oYCAgJHtvcHROYW1lfSAoJHtKU09OLnN0cmluZ2lmeShvcHRzLmNocm9tZU9wdGlvbnNbb3B0TmFtZV0pfSlgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2Fwcztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhlbHBlcnM7XG5leHBvcnQgeyBoZWxwZXJzLCBOQVRJVkVfV0lOLCBXRUJWSUVXX1dJTiwgV0VCVklFV19CQVNFLCBDSFJPTUlVTV9XSU4sIEtOT1dOX0NIUk9NRV9QQUNLQUdFX05BTUVTIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHLFlBQW5COztBQUNBLE1BQU1DLFdBQVcsR0FBRyxTQUFwQjs7QUFDQSxNQUFNQyxZQUFZLEdBQUcsVUFBckI7O0FBQ0EsTUFBTUMsWUFBWSxHQUFJLEdB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
455
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3dlYnZpZXctaGVscGVycy5qcyIsIm5hbWVzIjpbIk5BVElWRV9XSU4iLCJXRUJWSUVXX1dJTiIsIkNIUk9NSVVNX1dJTiIsIldFQlZJRVdfQkFTRSIsIldFQlZJRVdfUElEX1BBVFRFUk4iLCJSZWdFeHAiLCJXRUJWSUVXX1BLR19QQVRURVJOIiwiREVWVE9PTFNfU09DS0VUX1BBVFRFUk4iLCJDUk9TU1dBTEtfU09DS0VUX1BBVFRFUk4iLCJDSFJPTUlVTV9ERVZUT09MU19TT0NLRVQiLCJDSFJPTUVfUEFDS0FHRV9OQU1FIiwiS05PV05fQ0hST01FX1BBQ0tBR0VfTkFNRVMiLCJERVZUT09MU19QT1JUU19SQU5HRSIsIldFQlZJRVdTX0RFVEFJTFNfQ0FDSEUiLCJMUlUiLCJtYXgiLCJ1cGRhdGVBZ2VPbkdldCIsIkNEUF9SRVFfVElNRU9VVCIsIkRFVlRPT0xTX1BPUlRfQUxMT0NBVElPTl9HVUFSRCIsInV0aWwiLCJnZXRMb2NrRmlsZUd1YXJkIiwicGF0aCIsInJlc29sdmUiLCJvcyIsInRtcGRpciIsInRpbWVvdXQiLCJ0cnlSZWNvdmVyeSIsImhlbHBlcnMiLCJ0b0RldGFpbHNDYWNoZUtleSIsImFkYiIsIndlYnZpZXciLCJjdXJEZXZpY2VJZCIsImdldFBvdGVudGlhbFdlYnZpZXdQcm9jcyIsIm91dCIsInNoZWxsIiwibmFtZXMiLCJhbGxNYXRjaGVzIiwibGluZSIsInNwbGl0IiwiZmxhZ3MiLCJzdCIsInNvY2tQYXRoIiwidHJpbSIsInN0YXJ0c1dpdGgiLCJwdXNoIiwidGVzdCIsIl8iLCJpc0VtcHR5IiwibG9nZ2VyIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwibGVuZ3RoIiwicGx1cmFsaXplIiwidW5pcSIsIndlYnZpZXdzRnJvbVByb2NzIiwiZGV2aWNlU29ja2V0Iiwic29ja2V0TmFtZXMiLCJ3ZWJ2aWV3cyIsInNvY2tldE5hbWUiLCJwcm9jIiwic29ja2V0TmFtZU1hdGNoIiwiZXhlYyIsImNyb3Nzd2Fsa01hdGNoIiwiYWxsb2NhdGVEZXZ0b29sc1BvcnQiLCJ3ZWJ2aWV3RGV2dG9vbHNQb3J0IiwicmVtb3RlUG9ydCIsInJlcGxhY2UiLCJzdGFydFBvcnQiLCJlbmRQb3J0IiwibG9jYWxQb3J0IiwiZmluZEFQb3J0Tm90SW5Vc2UiLCJlIiwiRXJyb3IiLCJhZGJFeGVjIiwiY29sbGVjdFdlYnZpZXdzRGV0YWlscyIsIndlYnZpZXdzTWFwcGluZyIsIm9wdHMiLCJlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyIsImVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiIsImluZm8iLCJkZXRhaWxDb2xsZWN0b3JzIiwiaXRlbSIsImNkcEluZm8iLCJwYWdlcyIsImNkcExpc3QiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsIkIiLCJhbGwiLCJheGlvcyIsInVybCIsImRhdGEiLCJwcm9jRnJvbVdlYnZpZXciLCJwaWRNYXRjaCIsInBpZCIsInBrZyIsImdldE5hbWVCeVBpZCIsInBhcnNlV2Vidmlld05hbWVzIiwiaXNDaHJvbWVTZXNzaW9uIiwicmVzdWx0Iiwid2Vidmlld05hbWUiLCJnZXRXZWJWaWV3c01hcHBpbmciLCJhbmRyb2lkRGV2aWNlU29ja2V0Iiwid2Vidmlld01hcHBpbmciLCJ3dk5hbWUiLCJwcm9jZXNzIiwidW5kZWZpbmVkIiwicGtnTWF0Y2giLCJuYW1lIiwiaWQiLCJ3YXJuIiwibWVzc2FnZSIsImtleSIsInNldCIsImhhcyIsImRlbCIsImdldFdlYnZpZXdEZXRhaWxzIiwiZ2V0IiwiY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyIsImRldmljZUlkIiwid2ViVmlld0RldGFpbHMiLCJjYXBzIiwiY2hyb21lT3B0aW9ucyIsImFuZHJvaWRQYWNrYWdlIiwiYXBwUGFja2FnZSIsImlzQm9vbGVhbiIsImNocm9tZVVzZVJ1bm5pbmdBcHAiLCJhbmRyb2lkVXNlUnVubmluZ0FwcCIsImNocm9tZUFuZHJvaWRQYWNrYWdlIiwiY2hyb21lQW5kcm9pZEFjdGl2aXR5IiwiYW5kcm9pZEFjdGl2aXR5IiwiY2hyb21lQW5kcm9pZFByb2Nlc3MiLCJhbmRyb2lkUHJvY2VzcyIsInRvTG93ZXIiLCJicm93c2VyTmFtZSIsImFwcEFjdGl2aXR5IiwicGFnZUxvYWRTdHJhdGVneSIsImlzQ2hyb21lIiwiaW5jbHVkZXMiLCJhbmRyb2lkRGV2aWNlU2VyaWFsIiwiaXNQbGFpbk9iamVjdCIsImxvZ2dpbmdQcmVmcyIsImNocm9tZUxvZ2dpbmdQcmVmcyIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsIm5ld1ByZWYiLCJwZXJmb3JtYW5jZSIsIk9iamVjdCIsImFzc2lnbiIsIkFyZ3VtZW50cyIsImFyZ3MiLCJwcm90ZWN0ZWRDYXBOYW1lcyIsIm9wdCIsInZhbCIsInRvUGFpcnMiLCJpc1VuZGVmaW5lZCIsIm9wdE5hbWUiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvd2Vidmlldy1oZWxwZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5cbmNvbnN0IE5BVElWRV9XSU4gPSAnTkFUSVZFX0FQUCc7XG5jb25zdCBXRUJWSUVXX1dJTiA9ICdXRUJWSUVXJztcbmNvbnN0IENIUk9NSVVNX1dJTiA9ICdDSFJPTUlVTSc7XG5jb25zdCBXRUJWSUVXX0JBU0UgPSBgJHtXRUJWSUVXX1dJTn1fYDtcbmNvbnN0IFdFQlZJRVdfUElEX1BBVFRFUk4gPSBuZXcgUmVnRXhwKGBeJHtXRUJWSUVXX0JBU0V9KFxcXFxkKylgKTtcbmNvbnN0IFdFQlZJRVdfUEtHX1BBVFRFUk4gPSBuZXcgUmVnRXhwKGBeJHtXRUJWSUVXX0JBU0V9KFteXFxcXGRcXFxcc11bXFxcXHcuXSopYCk7XG5jb25zdCBERVZUT09MU19TT0NLRVRfUEFUVEVSTiA9IC9AW1xcdy5dK19kZXZ0b29sc19yZW1vdGVfPyhcXGQrKT9cXGIvO1xuY29uc3QgQ1JPU1NXQUxLX1NPQ0tFVF9QQVRURVJOID0gL0AoW1xcdy5dKylfZGV2dG9vbHNfcmVtb3RlXFxiLztcbmNvbnN0IENIUk9NSVVNX0RFVlRPT0xTX1NPQ0tFVCA9ICdjaHJvbWVfZGV2dG9vbHNfcmVtb3RlJztcbmNvbnN0IENIUk9NRV9QQUNLQUdFX05BTUUgPSAnY29tLmFuZHJvaWQuY2hyb21lJztcbmNvbnN0IEtOT1dOX0NIUk9NRV9QQUNLQUdFX05BTUVTID0gW1xuICBDSFJPTUVfUEFDS0FHRV9OQU1FLFxuICAnY29tLmNocm9tZS5iZXRhJyxcbiAgJ2NvbS5jaHJvbWUuZGV2JyxcbiAgJ2NvbS5jaHJvbWUuY2FuYXJ5Jyxcbl07XG5jb25zdCBERVZUT09MU19QT1JUU19SQU5HRSA9IFsxMDkwMCwgMTEwMDBdO1xuY29uc3QgV0VCVklFV1NfREVUQUlMU19DQUNIRSA9IG5ldyBMUlUoe1xuICBtYXg6IDEwMCxcbiAgdXBkYXRlQWdlT25HZXQ6IHRydWUsXG59KTtcbmNvbnN0IENEUF9SRVFfVElNRU9VVCA9IDIwMDA7IC8vIG1zXG5jb25zdCBERVZUT09MU19QT1JUX0FMTE9DQVRJT05fR1VBUkQgPSB1dGlsLmdldExvY2tGaWxlR3VhcmQoXG4gIHBhdGgucmVzb2x2ZShvcy50bXBkaXIoKSwgJ2FuZHJvaWRfZGV2dG9vbHNfcG9ydF9ndWFyZCcpLFxuICB7dGltZW91dDogNywgdHJ5UmVjb3Zlcnk6IHRydWV9XG4pO1xuXG5jb25zdCBoZWxwZXJzID0ge307XG5cbmZ1bmN0aW9uIHRvRGV0YWlsc0NhY2hlS2V5IChhZGIsIHdlYnZpZXcpIHtcbiAgcmV0dXJuIGAke2FkYj8uY3VyRGV2aWNlSWR9OiR7d2Vidmlld31gO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBhIGxpc3Qgb2YgYW5kcm9pZCBzeXN0ZW0gcHJvY2Vzc2VzIGFuZCByZXR1cm5zIG9uZXNcbiAqIHRoYXQgbG9vayBsaWtlIHdlYnZpZXdzXG4gKiBTZWUgaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL2Nocm9tZS9icm93c2VyL2RldnRvb2xzL2RldmljZS9hbmRyb2lkX2RldmljZV9pbmZvX3F1ZXJ5LmNjXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGFkYiAtIGFuIEFEQiBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fSAtIGEgbGlzdCBvZiBtYXRjaGluZyB3ZWJ2aWV3IHNvY2tldCBuYW1lcyAoaW5jbHVkaW5nIHRoZSBsZWFkaW5nICdAJylcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UG90ZW50aWFsV2Vidmlld1Byb2NzIChhZGIpIHtcbiAgY29uc3Qgb3V0ID0gYXdhaXQgYWRiLnNoZWxsKFsnY2F0JywgJy9wcm9jL25ldC91bml4J10pO1xuICBjb25zdCBuYW1lcyA9IFtdO1xuICBjb25zdCBhbGxNYXRjaGVzID0gW107XG4gIGZvciAoY29uc3QgbGluZSBvZiBvdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgLy8gTnVtIFJlZkNvdW50IFByb3RvY29sIEZsYWdzIFR5cGUgU3QgSW5vZGUgUGF0aFxuICAgIGNvbnN0IFssLCwgZmxhZ3MsLCBzdCwsIHNvY2tQYXRoXSA9IGxpbmUudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG4gICAgaWYgKCFzb2NrUGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChzb2NrUGF0aC5zdGFydHNXaXRoKCdAJykpIHtcbiAgICAgIGFsbE1hdGNoZXMucHVzaChsaW5lLnRyaW0oKSk7XG4gICAgfVxuICAgIGlmIChmbGFncyAhPT0gJzAwMDEwMDAwJyB8fCBzdCAhPT0gJzAxJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghREVWVE9PTFNfU09DS0VUX1BBVFRFUk4udGVzdChzb2NrUGF0aCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG5hbWVzLnB1c2goc29ja1BhdGgpO1xuICB9XG4gIGlmIChfLmlzRW1wdHkobmFtZXMpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdGb3VuZCBubyBhY3RpdmUgZGV2dG9vbHMgc29ja2V0cycpO1xuICAgIGlmICghXy5pc0VtcHR5KGFsbE1hdGNoZXMpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYE90aGVyIHNvY2tldHMgYXJlOiAke0pTT04uc3RyaW5naWZ5KGFsbE1hdGNoZXMsIG51bGwsIDIpfWApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuZGVidWcoYFBhcnNlZCAke25hbWVzLmxlbmd0aH0gYWN0aXZlIGRldnRvb2xzICR7dXRpbC5wbHVyYWxpemUoJ3NvY2tldCcsIG5hbWVzLmxlbmd0aCwgZmFsc2UpfTogYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShuYW1lcykpO1xuICB9XG4gIC8vIHNvbWV0aW1lcyB0aGUgd2VidmlldyBwcm9jZXNzIHNob3dzIHVwIG11bHRpcGxlIHRpbWVzIHBlciBhcHBcbiAgcmV0dXJuIF8udW5pcShuYW1lcyk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gV2Vidmlld1Byb2NcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm9jIC0gVGhlIHdlYnZpZXcgcHJvY2VzcyBuYW1lIChhcyByZXR1cm5lZCBieVxuICogZ2V0UG90ZW50aWFsV2Vidmlld1Byb2NzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gd2VidmlldyAtIFRoZSBhY3R1YWwgd2VidmlldyBjb250ZXh0IG5hbWVcbiAqL1xuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyBhIGxpc3Qgb2Ygc3lzdGVtIHByb2Nlc3NlcyB0aGF0IGxvb2sgbGlrZSB3ZWJ2aWV3cyxcbiAqIGFuZCByZXR1cm5zIHRoZW0gYWxvbmcgd2l0aCB0aGUgd2VidmlldyBjb250ZXh0IG5hbWUgYXBwcm9wcmlhdGUgZm9yIGl0LlxuICogSWYgd2UgcGFzcyBpbiBhIGRldmljZVNvY2tldCwgd2Ugb25seSBhdHRlbXB0IHRvIGZpbmQgd2Vidmlld3Mgd2hpY2ggbWF0Y2hcbiAqIHRoYXQgc29ja2V0IG5hbWUgKHRoaXMgaXMgZm9yIGFwcHMgd2hpY2ggZW1iZWQgQ2hyb21pdW0sIHdoaWNoIGlzbid0IHRoZVxuICogc2FtZSBhcyBjaHJvbWUtYmFja2VkIHdlYnZpZXdzKS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gYWRiIC0gYW4gQURCIGluc3RhbmNlXG4gKiBAcGFyYW0gez9zdHJpbmd9IGRldmljZVNvY2tldCAtIHRoZSBleHBsaWN0bHktbmFtZWQgZGV2aWNlIHNvY2tldCB0byB1c2VcbiAqXG4gKiBAcmV0dXJuIHtBcnJheS48V2Vidmlld1Byb2M+fVxuICovXG5hc3luYyBmdW5jdGlvbiB3ZWJ2aWV3c0Zyb21Qcm9jcyAoYWRiLCBkZXZpY2VTb2NrZXQgPSBudWxsKSB7XG4gIGNvbnN0IHNvY2tldE5hbWVzID0gYXdhaXQgZ2V0UG90ZW50aWFsV2Vidmlld1Byb2NzKGFkYik7XG4gIGNvbnN0IHdlYnZpZXdzID0gW107XG4gIGZvciAoY29uc3Qgc29ja2V0TmFtZSBvZiBzb2NrZXROYW1lcykge1xuICAgIGlmIChkZXZpY2VTb2NrZXQgPT09IENIUk9NSVVNX0RFVlRPT0xTX1NPQ0tFVCAmJiBzb2NrZXROYW1lID09PSBgQCR7ZGV2aWNlU29ja2V0fWApIHtcbiAgICAgIHdlYnZpZXdzLnB1c2goe1xuICAgICAgICBwcm9jOiBzb2NrZXROYW1lLFxuICAgICAgICB3ZWJ2aWV3OiBDSFJPTUlVTV9XSU4sXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHNvY2tldE5hbWVNYXRjaCA9IERFVlRPT0xTX1NPQ0tFVF9QQVRURVJOLmV4ZWMoc29ja2V0TmFtZSk7XG4gICAgaWYgKCFzb2NrZXROYW1lTWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBjcm9zc3dhbGtNYXRjaCA9IENST1NTV0FMS19TT0NLRVRfUEFUVEVSTi5leGVjKHNvY2tldE5hbWUpO1xuICAgIGlmICghc29ja2V0TmFtZU1hdGNoWzFdICYmICFjcm9zc3dhbGtNYXRjaCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGRldmljZVNvY2tldCAmJiBzb2NrZXROYW1lID09PSBgQCR7ZGV2aWNlU29ja2V0fWAgfHwgIWRldmljZVNvY2tldCkge1xuICAgICAgd2Vidmlld3MucHVzaCh7XG4gICAgICAgIHByb2M6IHNvY2tldE5hbWUsXG4gICAgICAgIHdlYnZpZXc6IHNvY2tldE5hbWVNYXRjaFsxXVxuICAgICAgICAgID8gYCR7V0VCVklFV19CQVNFfSR7c29ja2V0TmFtZU1hdGNoWzFdfWBcbiAgICAgICAgICA6IGAke1dFQlZJRVdfQkFTRX0ke2Nyb3Nzd2Fsa01hdGNoWzFdfWAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHdlYnZpZXdzO1xufVxuXG4vKipcbiAqIEFsbG9jYXRlcyBhIGxvY2FsIHBvcnQgZm9yIGRldnRvb2xzIGNvbW11bmljYXRpb25cbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEFEQiBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvY2tldE5hbWUgVGhlIHJlbW90ZSBVbml4IHNvY2tldCBuYW1lXG4gKiBAcGFyYW0gez9udW1iZXJ9IHdlYnZpZXdEZXZ0b29sc1BvcnQgVGhlIGxvY2FsIHBvcnQgbnVtYmVyIG9yIG51bGwgdG8gYXBwbHlcbiAqIGF1dG9kZXRlY3Rpb25cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBsb2NhbCBwb3J0IG51bWJlciBpZiB0aGUgcmVtb3RlIHNvY2tldCBoYXMgYmVlbiBmb3J3YXJkZWRcbiAqIHN1Y2Nlc3NmdWxseSBvciBgbnVsbGAgb3RoZXJ3aXNlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGFsbG9jYXRpbmcgdGhlIGxvY2FsIHBvcnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYWxsb2NhdGVEZXZ0b29sc1BvcnQgKGFkYiwgc29ja2V0TmFtZSwgd2Vidmlld0RldnRvb2xzUG9ydCA9IG51bGwpIHtcbiAgLy8gc29ja2V0IG5hbWVzIGNvbWUgd2l0aCAnQCcsIGJ1dCB0aGlzIHNob3VsZCBub3QgYmUgYSBwYXJ0IG9mIHRoZSBhYnN0cmFjdFxuICAvLyByZW1vdGUgcG9ydCwgc28gcmVtb3ZlIGl0XG4gIGNvbnN0IHJlbW90ZVBvcnQgPSBzb2NrZXROYW1lLnJlcGxhY2UoL15ALywgJycpO1xuICBsZXQgW3N0YXJ0UG9ydCwgZW5kUG9ydF0gPSBERVZUT09MU19QT1JUU19SQU5HRTtcbiAgaWYgKHdlYnZpZXdEZXZ0b29sc1BvcnQpIHtcbiAgICBlbmRQb3J0ID0gd2Vidmlld0RldnRvb2xzUG9ydCArIChlbmRQb3J0IC0gc3RhcnRQb3J0KTtcbiAgICBzdGFydFBvcnQgPSB3ZWJ2aWV3RGV2dG9vbHNQb3J0O1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhgRm9yd2FyZGluZyByZW1vdGUgcG9ydCAke3JlbW90ZVBvcnR9IHRvIGEgbG9jYWwgYCArXG4gICAgYHBvcnQgaW4gcmFuZ2UgJHtzdGFydFBvcnR9Li4ke2VuZFBvcnR9YCk7XG4gIGlmICghd2Vidmlld0RldnRvb2xzUG9ydCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgWW91IGNvdWxkIHVzZSB0aGUgJ3dlYnZpZXdEZXZ0b29sc1BvcnQnIGNhcGFiaWxpdHkgdG8gY3VzdG9taXplIGAgK1xuICAgICAgYHRoZSBzdGFydGluZyBwb3J0IG51bWJlcmApO1xuICB9XG4gIHJldHVybiBhd2FpdCBERVZUT09MU19QT1JUX0FMTE9DQVRJT05fR1VBUkQoYXN5bmMgKCkgPT4ge1xuICAgIGxldCBsb2NhbFBvcnQ7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsUG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKHN0YXJ0UG9ydCwgZW5kUG9ydCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhbnkgZnJlZSBwb3J0IHRvIGZvcndhcmQgdGhlIERldnRvb2xzIHNvY2tldCBgICtcbiAgICAgICAgYGluIHJhbmdlICR7c3RhcnRQb3J0fS4uJHtlbmRQb3J0fS4gWW91IGNvdWxkIHNldCB0aGUgc3RhcnRpbmcgcG9ydCBudW1iZXIgYCArXG4gICAgICAgIGBtYW51YWxseSBieSBwcm92aWRpbmcgdGhlICd3ZWJ2aWV3RGV2dG9vbHNQb3J0JyBjYXBhYmlsaXR5YCk7XG4gICAgfVxuICAgIGF3YWl0IGFkYi5hZGJFeGVjKFsnZm9yd2FyZCcsIGB0Y3A6JHtsb2NhbFBvcnR9YCwgYGxvY2FsYWJzdHJhY3Q6JHtyZW1vdGVQb3J0fWBdKTtcbiAgICByZXR1cm4gbG9jYWxQb3J0O1xuICB9KTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBXZWJ2aWV3UHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm9jIFRoZSBuYW1lIG9mIHRoZSBEZXZ0b29scyBVbml4IHNvY2tldFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHdlYnZpZXcgVGhlIHdlYiB2aWV3IGFsaWFzLiBMb29rcyBsaWtlIGBXRUJWSUVXX2BcbiAqIHByZWZpeCBwbHVzIFBJRCBvciBwYWNrYWdlIG5hbWVcbiAqIEBwcm9wZXJ0eSB7P09iamVjdH0gaW5mbyBXZWJ2aWV3IGluZm9ybWF0aW9uIGFzIGl0IGlzIHJldHJpZXZlZCBieVxuICogL2pzb24vdmVyc2lvbiBDRFAgZW5kcG9pbnRcbiAqIEBwcm9wZXJ0eSB7P0FycmF5PE9iamVjdD59IHBhZ2VzIFdlYnZpZXcgcGFnZXMgbGlzdCBhcyBpdCBpcyByZXRyaWV2ZWQgYnlcbiAqIC9qc29uL2xpc3QgQ0RQIGVuZHBvaW50XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXRhaWxDb2xsZWN0aW9uT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfG51bWJlcn0gd2Vidmlld0RldnRvb2xzUG9ydCBUaGUgc3RhcnRpbmcgcG9ydCB0byB1c2UgZm9yIHdlYnZpZXcgcGFnZVxuICogcHJlc2VuY2UgY2hlY2sgKGlmIG5vdCB0aGUgZGVmYXVsdCBvZiA5MjIyKS5cbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzIFdoZXRoZXIgdG8gY2hlY2sgZm9yIHdlYnZpZXdcbiAqIHBhZ2VzIHByZXNlbmNlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiBXaGV0aGVyIHRvIGNvbGxlY3RcbiAqIHdlYiB2aWV3IGRldGFpbHMgYW5kIHNlbmQgdGhlbSB0byBDaHJvbWVkcml2ZXIgY29uc3RydWN0b3IsIHNvIGl0IGNvdWxkXG4gKiBzZWxlY3QgYSBiaW5hcnkgbW9yZSBwcmVjaXNlbHkgYmFzZWQgb24gdGhpcyBpbmZvLlxuICovXG5cbi8qKlxuICogVGhpcyBpcyBhIHdyYXBwZXIgZm9yIENocm9tZSBEZWJ1Z2dlciBQcm90b2NvbCBkYXRhIGNvbGxlY3Rpb24uXG4gKiBObyBlcnJvciBpcyB0aHJvd24gaWYgQ0RQIHJlcXVlc3QgZmFpbHMgLSBpbiBzdWNoIGNhc2Ugbm8gZGF0YSB3aWxsIGJlXG4gKiByZWNvcmRlZCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGB3ZWJ2aWV3c01hcHBpbmdgIGl0ZW0uXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiBUaGUgQURCIGluc3RhbmNlXG4gKiBAcGFyYW0ge0FycmF5PFdlYnZpZXdQcm9wcz59IHdlYnZpZXdzTWFwcGluZyBUaGUgY3VycmVudCB3ZWJ2aWV3cyBtYXBwaW5nXG4gKiAhISEgRWFjaCBpdGVtIG9mIHRoaXMgYXJyYXkgZ2V0cyBtdXRhdGVkIChgaW5mb2AvYHBhZ2VzYCBwcm9wZXJ0aWVzIGdldCBhZGRlZFxuICogYmFzZWQgb24gdGhlIHByb3ZpZGVkIGBvcHRzYCkgaWYgdGhlIHJlcXVlc3RlZCBkZXRhaWxzIGhhdmUgYmVlblxuICogc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBmb3IgaXQgISEhXG4gKiBAcGFyYW0ge0RldGFpbENvbGxlY3Rpb25PcHRpb25zfSBvcHRzIElmIGJvdGggYGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzYCBhbmRcbiAqIGBlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb25gIHByb3BlcnRpZXMgYXJlIGZhbHN5IHRoZW4gbm8gZGV0YWlscyBjb2xsZWN0aW9uXG4gKiBpcyBwZXJmb3JtZWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29sbGVjdFdlYnZpZXdzRGV0YWlscyAoYWRiLCB3ZWJ2aWV3c01hcHBpbmcsIG9wdHMgPSB7fSkge1xuICBpZiAoXy5pc0VtcHR5KHdlYnZpZXdzTWFwcGluZykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7XG4gICAgd2Vidmlld0RldnRvb2xzUG9ydCA9IG51bGwsXG4gICAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMgPSBudWxsLFxuICAgIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiA9IG51bGwsXG4gIH0gPSBvcHRzO1xuXG4gIGlmICghZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMpIHtcbiAgICBsb2dnZXIuaW5mbyhgTm90IGNoZWNraW5nIHdoZXRoZXIgd2Vidmlld3MgaGF2ZSBhY3RpdmUgcGFnZXM7IHVzZSB0aGUgYCArXG4gICAgICBgJ2Vuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzJyBjYXAgdG8gdHVybiB0aGlzIGNoZWNrIG9uYCk7XG4gIH1cblxuICBpZiAoIWVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbikge1xuICAgIGxvZ2dlci5pbmZvKGBOb3QgY29sbGVjdGluZyB3ZWIgdmlldyBkZXRhaWxzLiBEZXRhaWxzIGNvbGxlY3Rpb24gbWlnaHQgaGVscCBgICtcbiAgICAgIGB0byBtYWtlIENocm9tZWRyaXZlciBpbml0aWFsaXphdGlvbiBtb3JlIHByZWNpc2UuIFVzZSB0aGUgJ2VuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbicgYCArXG4gICAgICBgY2FwIHRvIHR1cm4gaXQgb25gKTtcbiAgfVxuXG4gIGlmICghZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMgJiYgIWVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENvbm5lY3QgdG8gZWFjaCBkZXZ0b29scyBzb2NrZXQgYW5kIHJldHJpZXZlIHdlYiB2aWV3IGRldGFpbHNcbiAgbG9nZ2VyLmRlYnVnKGBDb2xsZWN0aW5nIENEUCBkYXRhIG9mICR7dXRpbC5wbHVyYWxpemUoJ3dlYnZpZXcnLCB3ZWJ2aWV3c01hcHBpbmcubGVuZ3RoLCB0cnVlKX1gKTtcbiAgY29uc3QgZGV0YWlsQ29sbGVjdG9ycyA9IFtdO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2Vidmlld3NNYXBwaW5nKSB7XG4gICAgZGV0YWlsQ29sbGVjdG9ycy5wdXNoKChhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgbG9jYWxQb3J0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9jYWxQb3J0ID0gYXdhaXQgYWxsb2NhdGVEZXZ0b29sc1BvcnQoYWRiLCBpdGVtLnByb2MsIHdlYnZpZXdEZXZ0b29sc1BvcnQpO1xuICAgICAgICBpZiAoZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uKSB7XG4gICAgICAgICAgaXRlbS5pbmZvID0gYXdhaXQgY2RwSW5mbyhsb2NhbFBvcnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcykge1xuICAgICAgICAgIGl0ZW0ucGFnZXMgPSBhd2FpdCBjZHBMaXN0KGxvY2FsUG9ydCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGxvY2FsUG9ydCkge1xuICAgICAgICAgIGF3YWl0IGFkYi5yZW1vdmVQb3J0Rm9yd2FyZChsb2NhbFBvcnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoKSk7XG4gIH1cbiAgYXdhaXQgQi5hbGwoZGV0YWlsQ29sbGVjdG9ycyk7XG4gIGxvZ2dlci5kZWJ1ZyhgQ0RQIGRhdGEgY29sbGVjdGlvbiBjb21wbGV0ZWRgKTtcbn1cblxuLy8gaHR0cHM6Ly9jaHJvbWVkZXZ0b29scy5naXRodWIuaW8vZGV2dG9vbHMtcHJvdG9jb2wvXG5hc3luYyBmdW5jdGlvbiBjZHBMaXN0IChsb2NhbFBvcnQpIHtcbiAgcmV0dXJuIChhd2FpdCBheGlvcyh7XG4gICAgdXJsOiBgaHR0cDovLzEyNy4wLjAuMToke2xvY2FsUG9ydH0vanNvbi9saXN0YCxcbiAgICB0aW1lb3V0OiBDRFBfUkVRX1RJTUVPVVQsXG4gIH0pKS5kYXRhO1xufVxuXG4vLyBodHRwczovL2Nocm9tZWRldnRvb2xzLmdpdGh1Yi5pby9kZXZ0b29scy1wcm90b2NvbC9cbmFzeW5jIGZ1bmN0aW9uIGNkcEluZm8gKGxvY2FsUG9ydCkge1xuICByZXR1cm4gKGF3YWl0IGF4aW9zKHtcbiAgICB1cmw6IGBodHRwOi8vMTI3LjAuMC4xOiR7bG9jYWxQb3J0fS9qc29uL3ZlcnNpb25gLFxuICAgIHRpbWVvdXQ6IENEUF9SRVFfVElNRU9VVCxcbiAgfSkpLmRhdGE7XG59XG5cbi8qKlxuICogVGFrZSBhIHdlYnZpZXcgbmFtZSBsaWtlIFdFQlZJRVdfNDI5NiBhbmQgdXNlICdhZGIgc2hlbGwgcHMnIHRvIGZpZ3VyZSBvdXRcbiAqIHdoaWNoIGFwcCBwYWNrYWdlIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHdlYnZpZXcuIE9uZSBvZiB0aGUgcmVhc29ucyB3ZVxuICogd2FudCB0byBkbyB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB3ZSdyZSBsaXN0aW5nIHdlYnZpZXdzIGZvciB0aGUgYWN0dWFsIEFVVCxcbiAqIG5vdCBzb21lIG90aGVyIHJ1bm5pbmcgYXBwXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGFkYiAtIGFuIEFEQiBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHdlYnZpZXcgLSBhIHdlYnZpZXcgcHJvY2VzcyBuYW1lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgcGFja2FnZSBuYW1lIG9mIHRoZSBhcHAgcnVubmluZyB0aGUgd2Vidmlld1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcmV0cmlldmluZyB0aGUgcHJvY2VzcyBuYW1lXG4gKi9cbmhlbHBlcnMucHJvY0Zyb21XZWJ2aWV3ID0gYXN5bmMgZnVuY3Rpb24gcHJvY0Zyb21XZWJ2aWV3IChhZGIsIHdlYnZpZXcpIHtcbiAgY29uc3QgcGlkTWF0Y2ggPSBXRUJWSUVXX1BJRF9QQVRURVJOLmV4ZWMod2Vidmlldyk7XG4gIGlmICghcGlkTWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIFBJRCBmb3Igd2VidmlldyAnJHt3ZWJ2aWV3fSdgKTtcbiAgfVxuXG4gIGNvbnN0IHBpZCA9IHBpZE1hdGNoWzFdO1xuICBsb2dnZXIuZGVidWcoYCR7d2Vidmlld30gbWFwcGVkIHRvIHBpZCAke3BpZH1gKTtcbiAgbG9nZ2VyLmRlYnVnKGBHZXR0aW5nIHByb2Nlc3MgbmFtZSBmb3Igd2VidmlldyAnJHt3ZWJ2aWV3fSdgKTtcbiAgY29uc3QgcGtnID0gYXdhaXQgYWRiLmdldE5hbWVCeVBpZChwaWQpO1xuICBsb2dnZXIuZGVidWcoYEdvdCBwcm9jZXNzIG5hbWU6ICcke3BrZ30nYCk7XG4gIHJldHVybiBwa2c7XG59O1xuXG4vKipcbiAqIFBhcnNlIHdlYnZpZXcgbmFtZXMgZm9yIGdldENvbnRleHRzXG4gKlxuICogQHBhcmFtIHtBcnJheTxXZWJ2aWV3c01hcHBpbmc+fSB3ZWJ2aWV3c01hcHBpbmcgU2VlIG5vdGUgb24gZ2V0V2ViVmlld3NNYXBwaW5nXG4gKiBAcGFyYW0ge0dldFdlYnZpZXdzT3B0c30gb3B0cyBTZWUgbm90ZSBvbiBnZXRXZWJWaWV3c01hcHBpbmdcbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fSAtIGEgbGlzdCBvZiB3ZWJ2aWV3IG5hbWVzXG4gKi9cbmhlbHBlcnMucGFyc2VXZWJ2aWV3TmFtZXMgPSBmdW5jdGlvbiBwYXJzZVdlYnZpZXdOYW1lcyAod2Vidmlld3NNYXBwaW5nLCB7XG4gIGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzID0gdHJ1ZSxcbiAgaXNDaHJvbWVTZXNzaW9uID0gZmFsc2Vcbn0gPSB7fSkge1xuICBpZiAoaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgcmV0dXJuIFtDSFJPTUlVTV9XSU5dO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAoY29uc3Qge3dlYnZpZXcsIHBhZ2VzLCBwcm9jLCB3ZWJ2aWV3TmFtZX0gb2Ygd2Vidmlld3NNYXBwaW5nKSB7XG4gICAgaWYgKGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzICYmIHBhZ2VzPy5sZW5ndGggPT09IDApIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBTa2lwcGluZyB0aGUgd2VidmlldyAnJHt3ZWJ2aWV3fScgYXQgJyR7cHJvY30nIGAgK1xuICAgICAgICBgc2luY2UgaXQgaGFzIHJlcG9ydGVkIGhhdmluZyB6ZXJvIHBhZ2VzYCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHdlYnZpZXdOYW1lKSB7XG4gICAgICByZXN1bHQucHVzaCh3ZWJ2aWV3TmFtZSk7XG4gICAgfVxuICB9XG4gIGxvZ2dlci5kZWJ1ZyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnd2VidmlldycsIHJlc3VsdC5sZW5ndGgsIHRydWUpfTogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBHZXRXZWJ2aWV3c09wdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhbmRyb2lkRGV2aWNlU29ja2V0IFtudWxsXSAtIGRldmljZSBzb2NrZXQgbmFtZVxuICogQHByb3BlcnR5IHtib29sZWFufSBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyBbdHJ1ZV0gLSB3aGV0aGVyIHRvIGNoZWNrIGZvciB3ZWJ2aWV3XG4gKiBwYWdlIHByZXNlbmNlXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2Vidmlld0RldnRvb2xzUG9ydCBbOTIyMl0gLSBwb3J0IHRvIHVzZSBmb3Igd2VidmlldyBwYWdlXG4gKiBwcmVzZW5jZSBjaGVjay5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uIFt0cnVlXSAtIHdoZXRoZXIgdG8gY29sbGVjdFxuICogd2ViIHZpZXcgZGV0YWlscyBhbmQgc2VuZCB0aGVtIHRvIENocm9tZWRyaXZlciBjb25zdHJ1Y3Rvciwgc28gaXQgY291bGRcbiAqIHNlbGVjdCBhIGJpbmFyeSBtb3JlIHByZWNpc2VseSBiYXNlZCBvbiB0aGlzIGluZm8uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBXZWJ2aWV3c01hcHBpbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm9jIFNlZSBub3RlIG9uIFdlYnZpZXdQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHdlYnZpZXcgU2VlIG5vdGUgb24gV2Vidmlld1Byb3BzXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGluZm8gU2VlIG5vdGUgb24gV2Vidmlld1Byb3BzXG4gKiBAcHJvcGVydHkgez9BcnJheTxPYmplY3Q+fSBwYWdlcyBTZWUgbm90ZSBvbiBXZWJ2aWV3UHJvcHNcbiAqIEBwcm9wZXJ5IHs/c3RyaW5nfSB3ZWJ2aWV3TmFtZSBBbiBhY3R1YWwgd2VidmlldyBuYW1lIGZvciBzd2l0Y2hpbmcgY29udGV4dFxuICovXG5cbi8qKlxuICogR2V0IGEgbGlzdCBvZiBhdmFpbGFibGUgd2Vidmlld3MgbWFwcGluZyBieSBpbnRyb3NwZWN0aW5nIHByb2Nlc3NlcyB3aXRoIGFkYixcbiAqIHdoZXJlIHdlYnZpZXdzIGFyZSBsaXN0ZWQuIEl0J3MgcG9zc2libGUgdG8gcGFzcyBpbiBhICdkZXZpY2VTb2NrZXQnIGFyZywgd2hpY2hcbiAqIGxpbWl0cyB0aGUgd2VidmlldyBwb3NzaWJpbGl0aWVzIHRvIHRoZSBvbmUgcnVubmluZyBvbiB0aGUgQ2hyb21pdW0gZGV2dG9vbHNcbiAqIHNvY2tldCB3ZSdyZSBpbnRlcmVzdGVkIGluIChzZWUgbm90ZSBvbiB3ZWJ2aWV3c0Zyb21Qcm9jcykuIFdlIGNhbiBhbHNvXG4gKiBkaXJlY3QgdGhpcyBtZXRob2QgdG8gdmVyaWZ5IHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHdlYnZpZXcgcHJvY2VzcyBhY3R1YWxseVxuICogaGFzIGFueSBwYWdlcyAoaWYgYSBwcm9jZXNzIGV4aXN0cyBidXQgbm8gcGFnZXMgYXJlIGZvdW5kLCBDaHJvbWVkcml2ZXIgd2lsbFxuICogbm90IGFjdHVhbGx5IGJlIGFibGUgdG8gY29ubmVjdCB0byBpdCwgc28gdGhpcyBzZXJ2ZXMgYXMgYSBndWFyZCBmb3IgdGhhdFxuICogc3RyYW5nZSBmYWlsdXJlIG1vZGUpLiBUaGUgc3RyYXRlZ3kgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW55IHBhZ2VzIGFyZVxuICogYWN0aXZlIGludm9sdmVzIHNlbmRpbmcgYSByZXF1ZXN0IHRvIHRoZSByZW1vdGUgZGVidWcgc2VydmVyIG9uIHRoZSBkZXZpY2UsXG4gKiBoZW5jZSBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgdGhlIHBvcnQgb24gdGhlIGhvc3QgbWFjaGluZSB3aGljaFxuICogc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMgY29tbXVuaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gYWRiIC0gYW4gQURCIGluc3RhbmNlXG4gKiBAcGFyYW0ge0dldFdlYnZpZXdzT3B0c30gb3B0c1xuICpcbiAqIEByZXR1cm4ge0FycmF5PFdlYnZpZXdzTWFwcGluZz59IHdlYnZpZXdzTWFwcGluZ1xuICovXG5oZWxwZXJzLmdldFdlYlZpZXdzTWFwcGluZyA9IGFzeW5jIGZ1bmN0aW9uIGdldFdlYlZpZXdzTWFwcGluZyAoYWRiLCB7XG4gIGFuZHJvaWREZXZpY2VTb2NrZXQgPSBudWxsLFxuICBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyA9IHRydWUsXG4gIHdlYnZpZXdEZXZ0b29sc1BvcnQgPSBudWxsLFxuICBlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24gPSB0cnVlXG59ID0ge30pIHtcbiAgbG9nZ2VyLmRlYnVnKCdHZXR0aW5nIGEgbGlzdCBvZiBhdmFpbGFibGUgd2Vidmlld3MnKTtcbiAgY29uc3Qgd2Vidmlld3NNYXBwaW5nID0gYXdhaXQgd2Vidmlld3NGcm9tUHJvY3MoYWRiLCBhbmRyb2lkRGV2aWNlU29ja2V0KTtcblxuICBhd2FpdCBjb2xsZWN0V2Vidmlld3NEZXRhaWxzKGFkYiwgd2Vidmlld3NNYXBwaW5nLCB7XG4gICAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMsXG4gICAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uLFxuICAgIHdlYnZpZXdEZXZ0b29sc1BvcnQsXG4gIH0pO1xuXG4gIGZvciAoY29uc3Qgd2Vidmlld01hcHBpbmcgb2Ygd2Vidmlld3NNYXBwaW5nKSB7XG4gICAgY29uc3Qge3dlYnZpZXcsIGluZm99ID0gd2Vidmlld01hcHBpbmc7XG4gICAgd2Vidmlld01hcHBpbmcud2Vidmlld05hbWUgPSBudWxsO1xuXG4gICAgbGV0IHd2TmFtZSA9IHdlYnZpZXc7XG4gICAgbGV0IHByb2Nlc3MgPSB1bmRlZmluZWQ7XG4gICAgaWYgKCFhbmRyb2lkRGV2aWNlU29ja2V0KSB7XG4gICAgICBjb25zdCBwa2dNYXRjaCA9IFdFQlZJRVdfUEtHX1BBVFRFUk4uZXhlYyh3ZWJ2aWV3KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHdlYiB2aWV3IG5hbWUgY291bGQgZWl0aGVyIGJlIHN1ZmZpeGVkIHdpdGggUElEIG9yIHRoZSBwYWNrYWdlIG5hbWVcbiAgICAgICAgLy8gcGFja2FnZSBuYW1lcyBjb3VsZCBub3Qgc3RhcnQgd2l0aCBhIGRpZ2l0XG4gICAgICAgIGNvbnN0IHBrZyA9IHBrZ01hdGNoID8gcGtnTWF0Y2hbMV0gOiBhd2FpdCBoZWxwZXJzLnByb2NGcm9tV2VidmlldyhhZGIsIHdlYnZpZXcpO1xuICAgICAgICB3dk5hbWUgPSBgJHtXRUJWSUVXX0JBU0V9JHtwa2d9YDtcbiAgICAgICAgY29uc3QgcGlkTWF0Y2ggPSBXRUJWSUVXX1BJRF9QQVRURVJOLmV4ZWMod2Vidmlldyk7XG4gICAgICAgIHByb2Nlc3MgPSB7XG4gICAgICAgICAgbmFtZTogcGtnLFxuICAgICAgICAgIGlkOiBwaWRNYXRjaCA/IHBpZE1hdGNoWzFdIDogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oZS5tZXNzYWdlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2Vidmlld01hcHBpbmcud2Vidmlld05hbWUgPSB3dk5hbWU7XG4gICAgY29uc3Qga2V5ID0gdG9EZXRhaWxzQ2FjaGVLZXkoYWRiLCB3dk5hbWUpO1xuICAgIGlmIChpbmZvIHx8IHByb2Nlc3MpIHtcbiAgICAgIFdFQlZJRVdTX0RFVEFJTFNfQ0FDSEUuc2V0KGtleSwgeyBpbmZvLCBwcm9jZXNzIH0pO1xuICAgIH0gZWxzZSBpZiAoV0VCVklFV1NfREVUQUlMU19DQUNIRS5oYXMoa2V5KSkge1xuICAgICAgV0VCVklFV1NfREVUQUlMU19DQUNIRS5kZWwoa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHdlYnZpZXdzTWFwcGluZztcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJvY2Vzc0luZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIFRoZSBwcm9jZXNzIG5hbWVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaWQgVGhlIHByb2Nlc3MgaWQgKGlmIGNvdWxkIGJlIHJldHJpZXZlZClcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFdlYlZpZXdEZXRhaWxzXG4gKiBAcHJvcGVydHkgez9Qcm9jZXNzSW5mb30gcHJvY2VzcyAtIFdlYiB2aWV3IHByb2Nlc3MgZGV0YWlsc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGluZm8gLSBXZWIgdmlldyBkZXRhaWxzIGFzIHJldHVybmVkIGJ5IC9qc29uL3ZlcnNpb24gQ0RQIGVuZHBvaW50LCBmb3IgZXhhbXBsZTpcbiAqIHtcbiAqICBcIkJyb3dzZXJcIjogXCJDaHJvbWUvNzIuMC4zNjAxLjBcIixcbiAqICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjNcIixcbiAqICBcIlVzZXItQWdlbnRcIjogXCJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xM182KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNzIuMC4zNjAxLjAgU2FmYXJpLzUzNy4zNlwiLFxuICogIFwiVjgtVmVyc2lvblwiOiBcIjcuMi4yMzNcIixcbiAqICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2IChAY2ZlZGU5ZGIxZDE1NGRlMDQ2OGNiMDUzODQ3OWYzNGMwNzU1YTBmNClcIixcbiAqICBcIndlYlNvY2tldERlYnVnZ2VyVXJsXCI6IFwid3M6Ly9sb2NhbGhvc3Q6OTIyMi9kZXZ0b29scy9icm93c2VyL2IwYjhhNGZiLWJiMTctNDM1OS05NTMzLWE4ZDlmMzkwOGJkOFwiXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgd2ViIHZpZXcgZGV0YWlscyBwcmV2aW91c2x5IGNhY2hlZCBieSBgZ2V0V2Vidmlld3NgIGNhbGxcbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEFEQiBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHdlYnZpZXcgVGhlIG5hbWUgb2YgdGhlIHdlYiB2aWV3XG4gKiBAcmV0dXJucyB7P1dlYlZpZXdEZXRhaWxzfSBFaXRoZXIgYHVuZGVmaW5lZGAgb3IgdGhlIHJlY2VudCB3ZWIgdmlldyBkZXRhaWxzXG4gKi9cbmhlbHBlcnMuZ2V0V2Vidmlld0RldGFpbHMgPSBmdW5jdGlvbiBnZXRXZWJ2aWV3RGV0YWlscyAoYWRiLCB3ZWJ2aWV3KSB7XG4gIGNvbnN0IGtleSA9IHRvRGV0YWlsc0NhY2hlS2V5KGFkYiwgd2Vidmlldyk7XG4gIHJldHVybiBXRUJWSUVXU19ERVRBSUxTX0NBQ0hFLmdldChrZXkpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgQ2hyb21lIGRyaXZlciBjYXBhYmlsaXRpZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkXG4gKiBBcHBpdW0gY2FwYWJpbGl0aWVzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgVXNlci1wcm92aWRlZCBjYXBhYmlsaXRpZXMgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gZGV2aWNlSWQgVGhlIGlkZW50aWZpZXIgb2YgdGhlIEFuZHJvaWQgZGV2aWNlIHVuZGVyIHRlc3RcbiAqIEBwYXJhbSB7P1dlYlZpZXdEZXRhaWxzfSB3ZWJWaWV3RGV0YWlsc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGNhcGFiaWxpdGllcyBvYmplY3QuXG4gKiBTZWUgaHR0cHM6Ly9jaHJvbWVkcml2ZXIuY2hyb21pdW0ub3JnL2NhcGFiaWxpdGllcyBmb3IgbW9yZSBkZXRhaWxzLlxuICovXG5oZWxwZXJzLmNyZWF0ZUNocm9tZWRyaXZlckNhcHMgPSBmdW5jdGlvbiBjcmVhdGVDaHJvbWVkcml2ZXJDYXBzIChvcHRzLCBkZXZpY2VJZCwgd2ViVmlld0RldGFpbHMpIHtcbiAgY29uc3QgY2FwcyA9IHsgY2hyb21lT3B0aW9uczoge30gfTtcblxuICBjb25zdCBhbmRyb2lkUGFja2FnZSA9IG9wdHMuY2hyb21lT3B0aW9ucz8uYW5kcm9pZFBhY2thZ2VcbiAgICB8fCBvcHRzLmFwcFBhY2thZ2VcbiAgICB8fCB3ZWJWaWV3RGV0YWlscz8uaW5mbz8uWydBbmRyb2lkLVBhY2thZ2UnXTtcbiAgaWYgKGFuZHJvaWRQYWNrYWdlKSB7XG4gICAgLy8gY2hyb21lZHJpdmVyIHJhaXNlcyBhbiBpbnZhbGlkIGFyZ3VtZW50IGVycm9yIHdoZW4gYW5kcm9pZFBhY2thZ2UgaXMgJ251bGwnXG4gICAgY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRQYWNrYWdlID0gYW5kcm9pZFBhY2thZ2U7XG4gIH1cbiAgaWYgKF8uaXNCb29sZWFuKG9wdHMuY2hyb21lVXNlUnVubmluZ0FwcCkpIHtcbiAgICBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFVzZVJ1bm5pbmdBcHAgPSBvcHRzLmNocm9tZVVzZVJ1bm5pbmdBcHA7XG4gIH1cbiAgaWYgKG9wdHMuY2hyb21lQW5kcm9pZFBhY2thZ2UpIHtcbiAgICBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFBhY2thZ2UgPSBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlO1xuICB9XG4gIGlmIChvcHRzLmNocm9tZUFuZHJvaWRBY3Rpdml0eSkge1xuICAgIGNhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkQWN0aXZpdHkgPSBvcHRzLmNocm9tZUFuZHJvaWRBY3Rpdml0eTtcbiAgfVxuICBpZiAob3B0cy5jaHJvbWVBbmRyb2lkUHJvY2Vzcykge1xuICAgIGNhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkUHJvY2VzcyA9IG9wdHMuY2hyb21lQW5kcm9pZFByb2Nlc3M7XG4gIH0gZWxzZSBpZiAod2ViVmlld0RldGFpbHM/LnByb2Nlc3M/Lm5hbWUgJiYgd2ViVmlld0RldGFpbHM/LnByb2Nlc3M/LmlkKSB7XG4gICAgY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRQcm9jZXNzID0gd2ViVmlld0RldGFpbHMucHJvY2Vzcy5uYW1lO1xuICB9XG4gIGlmIChfLnRvTG93ZXIob3B0cy5icm93c2VyTmFtZSkgPT09ICdjaHJvbWl1bS13ZWJ2aWV3Jykge1xuICAgIGNhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkQWN0aXZpdHkgPSBvcHRzLmFwcEFjdGl2aXR5O1xuICB9XG4gIGlmIChvcHRzLnBhZ2VMb2FkU3RyYXRlZ3kpIHtcbiAgICBjYXBzLnBhZ2VMb2FkU3RyYXRlZ3kgPSBvcHRzLnBhZ2VMb2FkU3RyYXRlZ3k7XG4gIH1cbiAgY29uc3QgaXNDaHJvbWUgPSBfLnRvTG93ZXIoY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRQYWNrYWdlKSA9PT0gJ2Nocm9tZSc7XG4gIGlmIChfLmluY2x1ZGVzKEtOT1dOX0NIUk9NRV9QQUNLQUdFX05BTUVTLCBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFBhY2thZ2UpIHx8IGlzQ2hyb21lKSB7XG4gICAgLy8gaWYgd2UgaGF2ZSBleHRyYWN0ZWQgcGFja2FnZSBmcm9tIGNvbnRleHQgbmFtZSwgaXQgY291bGQgY29tZSBpbiBhcyBiYXJlXG4gICAgLy8gXCJjaHJvbWVcIiwgYW5kIHNvIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhlIGRldGFpbHMgYXJlIGNvcnJlY3QsIGluY2x1ZGluZ1xuICAgIC8vIG5vdCB1c2luZyBhbiBhY3Rpdml0eSBvciBwcm9jZXNzIGlkXG4gICAgaWYgKGlzQ2hyb21lKSB7XG4gICAgICBjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFBhY2thZ2UgPSBDSFJPTUVfUEFDS0FHRV9OQU1FO1xuICAgIH1cbiAgICBkZWxldGUgY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRBY3Rpdml0eTtcbiAgICBkZWxldGUgY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRQcm9jZXNzO1xuICB9XG4gIC8vIGFkZCBkZXZpY2UgaWQgZnJvbSBhZGJcbiAgY2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWREZXZpY2VTZXJpYWwgPSBkZXZpY2VJZDtcblxuICBpZiAoXy5pc1BsYWluT2JqZWN0KG9wdHMubG9nZ2luZ1ByZWZzKSB8fCBfLmlzUGxhaW5PYmplY3Qob3B0cy5jaHJvbWVMb2dnaW5nUHJlZnMpKSB7XG4gICAgaWYgKG9wdHMubG9nZ2luZ1ByZWZzKSB7XG4gICAgICBsb2dnZXIud2FybihgVGhlICdsb2dnaW5nUHJlZnMnIGNhcCBpcyBkZXByZWNhdGVkOyB1c2UgdGhlICdjaHJvbWVMb2dnaW5nUHJlZnMnIGNhcCBpbnN0ZWFkYCk7XG4gICAgfVxuICAgIGNhcHMubG9nZ2luZ1ByZWZzID0gb3B0cy5jaHJvbWVMb2dnaW5nUHJlZnMgfHwgb3B0cy5sb2dnaW5nUHJlZnM7XG4gIH1cbiAgaWYgKG9wdHMuZW5hYmxlUGVyZm9ybWFuY2VMb2dnaW5nKSB7XG4gICAgbG9nZ2VyLndhcm4oYFRoZSAnZW5hYmxlUGVyZm9ybWFuY2VMb2dnaW5nJyBjYXAgaXMgZGVwcmVjYXRlZDsgc2ltcGx5IHVzZSBgICtcbiAgICAgIGB0aGUgJ2Nocm9tZUxvZ2dpbmdQcmVmcycgY2FwIGluc3RlYWQsIHdpdGggYSAncGVyZm9ybWFuY2UnIGtleSBzZXQgdG8gJ0FMTCdgKTtcbiAgICBjb25zdCBuZXdQcmVmID0ge3BlcmZvcm1hbmNlOiAnQUxMJ307XG4gICAgLy8gZG9uJ3Qgb3ZlcndyaXRlIG90aGVyIGxvZ2dpbmcgcHJlZnMgdGhhdCBoYXZlIGJlZW4gc2VudCBpbiBpZiB0aGV5IGV4aXN0XG4gICAgY2Fwcy5sb2dnaW5nUHJlZnMgPSBjYXBzLmxvZ2dpbmdQcmVmc1xuICAgICAgPyBPYmplY3QuYXNzaWduKHt9LCBjYXBzLmxvZ2dpbmdQcmVmcywgbmV3UHJlZilcbiAgICAgIDogbmV3UHJlZjtcbiAgfVxuXG4gIGlmIChvcHRzLmNocm9tZU9wdGlvbnM/LkFyZ3VtZW50cykge1xuICAgIC8vIG1lcmdlIGBBcmd1bWVudHNgIGFuZCBgYXJnc2BcbiAgICBvcHRzLmNocm9tZU9wdGlvbnMuYXJncyA9IFsuLi4ob3B0cy5jaHJvbWVPcHRpb25zLmFyZ3MgfHwgW10pLCAuLi5vcHRzLmNocm9tZU9wdGlvbnMuQXJndW1lbnRzXTtcbiAgICBkZWxldGUgb3B0cy5jaHJvbWVPcHRpb25zLkFyZ3VtZW50cztcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZygnUHJlY2FsY3VsYXRlZCBDaHJvbWVkcml2ZXIgY2FwYWJpbGl0aWVzOiAnICtcbiAgICBKU09OLnN0cmluZ2lmeShjYXBzLmNocm9tZU9wdGlvbnMsIG51bGwsIDIpKTtcblxuICBjb25zdCBwcm90ZWN0ZWRDYXBOYW1lcyA9IFtdO1xuICBmb3IgKGNvbnN0IFtvcHQsIHZhbF0gb2YgXy50b1BhaXJzKG9wdHMuY2hyb21lT3B0aW9ucykpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChjYXBzLmNocm9tZU9wdGlvbnNbb3B0XSkpIHtcbiAgICAgIGNhcHMuY2hyb21lT3B0aW9uc1tvcHRdID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm90ZWN0ZWRDYXBOYW1lcy5wdXNoKG9wdCk7XG4gICAgfVxuICB9XG4gIGlmICghXy5pc0VtcHR5KHByb3RlY3RlZENhcE5hbWVzKSkge1xuICAgIGxvZ2dlci5pbmZvKCdUaGUgZm9sbG93aW5nIENocm9tZWRyaXZlciBjYXBhYmlsaXRpZXMgY2Fubm90IGJlIG92ZXJyaWRkZW4gJyArXG4gICAgICAnYnkgdGhlIHByb3ZpZGVkIGNocm9tZU9wdGlvbnM6Jyk7XG4gICAgZm9yIChjb25zdCBvcHROYW1lIG9mIHByb3RlY3RlZENhcE5hbWVzKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgICAke29wdE5hbWV9ICgke0pTT04uc3RyaW5naWZ5KG9wdHMuY2hyb21lT3B0aW9uc1tvcHROYW1lXSl9KWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjYXBzO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbmV4cG9ydCB7IGhlbHBlcnMsIE5BVElWRV9XSU4sIFdFQlZJRVdfV0lOLCBXRUJWSUVXX0JBU0UsIENIUk9NSVVNX1dJTiwgS05PV05fQ0hST01FX1BBQ0tBR0VfTkFNRVMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUcsWUFBbkI7O0FBQ0EsTUFBTUMsV0FBVyxHQUFHLFNBQXBCOztBQUNBLE1BQU1DLFlBQVksR0FBRyxVQUFyQjs7QUFDQSxNQUFNQyxZQUFZLEdBQUksR0FB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
package/index.js CHANGED
@@ -1,30 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
  // transpile:main
3
-
4
- import { asyncify } from 'asyncbox';
5
- import * as server from './lib/server';
6
-
7
-
8
- const { startServer } = server;
9
-
10
- const DEFAULT_HOST = 'localhost';
11
- const DEFAULT_PORT = 4723;
12
-
13
- async function main () {
14
- const getArgValue = (argName) => {
15
- const argIndex = process.argv.indexOf(argName);
16
- return argIndex > 0 ? process.argv[argIndex + 1] : null;
17
- };
18
- const port = parseInt(getArgValue('--port'), 10) || DEFAULT_PORT;
19
- const host = getArgValue('--host') || DEFAULT_HOST;
20
- return await startServer(port, host);
21
- }
22
-
23
- if (require.main === module) {
24
- asyncify(main);
25
- }
26
-
27
-
28
3
  import * as driver from './lib/driver';
29
4
  import * as androidHelperIndex from './lib/android-helpers';
30
5
  import * as commandIndex from './lib/commands/index';
@@ -42,7 +17,7 @@ const { helpers: androidHelpers, SETTINGS_HELPER_PKG_ID } = androidHelperIndex;
42
17
 
43
18
  export default AndroidDriver;
44
19
  export {
45
- androidHelpers, androidCommands, AndroidDriver, startServer,
20
+ androidHelpers, androidCommands, AndroidDriver,
46
21
  commonCapConstraints, webviewHelpers, NATIVE_WIN, WEBVIEW_WIN,
47
22
  WEBVIEW_BASE, CHROMIUM_WIN, SETTINGS_HELPER_PKG_ID,
48
23
  };
@@ -2,7 +2,7 @@ import _ from 'lodash';
2
2
  import path from 'path';
3
3
  import { retry, waitForCondition } from 'asyncbox';
4
4
  import logger from './logger';
5
- import { fs, util } from '@appium/support';
5
+ import { fs, util } from 'appium/support';
6
6
  import { path as settingsApkPath } from 'io.appium.settings';
7
7
  import Bootstrap from './bootstrap';
8
8
  import B from 'bluebird';
package/lib/bootstrap.js CHANGED
@@ -2,9 +2,9 @@ import UiAutomator from './uiautomator';
2
2
  import net from 'net';
3
3
  import path from 'path';
4
4
  import _ from 'lodash';
5
- import { errorFromCode } from '@appium/base-driver';
5
+ import { errorFromCode } from 'appium/driver';
6
6
  import B from 'bluebird';
7
- import { logger } from '@appium/support';
7
+ import { logger } from 'appium/support';
8
8
 
9
9
 
10
10
  const log = logger.getLogger('AndroidBootstrap');
@@ -1,5 +1,5 @@
1
1
  import androidHelpers from '../android-helpers';
2
- import { fs, util, tempDir} from '@appium/support';
2
+ import { fs, util, tempDir} from 'appium/support';
3
3
  import path from 'path';
4
4
  import B from 'bluebird';
5
5
  import jimp from 'jimp';
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable require-await */
2
- import { errors } from '@appium/base-driver';
2
+ import { errors } from 'appium/driver';
3
3
 
4
4
  let commands = {}, helpers = {}, extensions = {};
5
5
 
@@ -1,8 +1,8 @@
1
1
  import _ from 'lodash';
2
2
  import { waitForCondition } from 'asyncbox';
3
- import { util } from '@appium/support';
3
+ import { util } from 'appium/support';
4
4
  import { APP_STATE } from '../android-helpers';
5
- import { errors } from '@appium/base-driver';
5
+ import { errors } from 'appium/driver';
6
6
 
7
7
  const APP_EXTENSIONS = ['.apk', '.apks'];
8
8
 
@@ -2,8 +2,8 @@ import _ from 'lodash';
2
2
  import Chromedriver from 'appium-chromedriver';
3
3
  import PortFinder from 'portfinder';
4
4
  import B from 'bluebird';
5
- import { util } from '@appium/support';
6
- import { errors } from '@appium/base-driver';
5
+ import { util } from 'appium/support';
6
+ import { errors } from 'appium/driver';
7
7
  import {
8
8
  default as webviewHelpers,
9
9
  NATIVE_WIN, WEBVIEW_BASE, WEBVIEW_WIN, CHROMIUM_WIN, KNOWN_CHROME_PACKAGE_NAMES
@@ -1,6 +1,6 @@
1
1
  import androidHelpers from '../android-helpers';
2
2
  import { retryInterval } from 'asyncbox';
3
- import { util } from '@appium/support';
3
+ import { util } from 'appium/support';
4
4
 
5
5
 
6
6
  let commands = {}, helpers = {}, extensions = {};
@@ -1,4 +1,4 @@
1
- import { errors } from '@appium/base-driver';
1
+ import { errors } from 'appium/driver';
2
2
 
3
3
  const EMU_CONSOLE_FEATURE = 'emulator_console';
4
4
 
@@ -1,5 +1,5 @@
1
1
  import _ from 'lodash';
2
- import { errors, PROTOCOLS } from '@appium/base-driver';
2
+ import { errors, PROTOCOLS } from 'appium/driver';
3
3
 
4
4
  const extensions = {};
5
5
 
@@ -1,7 +1,7 @@
1
1
  import _ from 'lodash';
2
- import { fs, util, zip, tempDir } from '@appium/support';
2
+ import { fs, util, zip, tempDir } from 'appium/support';
3
3
  import path from 'path';
4
- import { errors } from '@appium/base-driver';
4
+ import { errors } from 'appium/driver';
5
5
 
6
6
 
7
7
  const CONTAINER_PATH_MARKER = '@';
@@ -1,5 +1,5 @@
1
1
  import _ from 'lodash';
2
- import { errors, isErrorType } from '@appium/base-driver';
2
+ import { errors, isErrorType } from 'appium/driver';
3
3
 
4
4
 
5
5
  let helpers = {}, extensions = {};
@@ -44,7 +44,7 @@ helpers.findElOrEls = async function findElOrEls (strategy, selector, mult, cont
44
44
 
45
45
  // now we have to inspect the error to determine if it is a no such
46
46
  // element error, based on the shape of the error object from
47
- // @appium/base-driver
47
+ // appium/driver
48
48
  if (isErrorType(err, errors.NoSuchElementError)) {
49
49
  // we are fine with this, just indicate a retry
50
50
  return false;
@@ -1,9 +1,9 @@
1
1
  import _ from 'lodash';
2
2
  import androidHelpers from '../android-helpers';
3
- import { util } from '@appium/support';
3
+ import { util } from 'appium/support';
4
4
  import moment from 'moment';
5
5
  import { longSleep } from 'asyncbox';
6
- import { errors } from '@appium/base-driver';
6
+ import { errors } from 'appium/driver';
7
7
 
8
8
  const MOMENT_FORMAT_ISO8601 = 'YYYY-MM-DDTHH:mm:ssZ';
9
9
 
@@ -1,4 +1,4 @@
1
- import { errors } from '@appium/base-driver';
1
+ import { errors } from 'appium/driver';
2
2
 
3
3
  let commands = {}, helpers = {}, extensions = {};
4
4
 
@@ -1,5 +1,5 @@
1
1
  import _ from 'lodash';
2
- import { errors } from '@appium/base-driver';
2
+ import { errors } from 'appium/driver';
3
3
 
4
4
  const NO_VALUE_ARG_TYPE = 'sn';
5
5
  const SUPPORTED_EXTRA_TYPES = [
@@ -2,7 +2,7 @@ import log from '../logger';
2
2
  import os from 'os';
3
3
  import _ from 'lodash';
4
4
  import WebSocket from 'ws';
5
- import { DEFAULT_WS_PATHNAME_PREFIX, BaseDriver } from '@appium/base-driver';
5
+ import { DEFAULT_WS_PATHNAME_PREFIX, BaseDriver } from 'appium/driver';
6
6
 
7
7
  const GET_SERVER_LOGS_FEATURE = 'get_server_logs';
8
8
 
@@ -1,5 +1,5 @@
1
1
  import _ from 'lodash';
2
- import { errors } from '@appium/base-driver';
2
+ import { errors } from 'appium/driver';
3
3
  import B from 'bluebird';
4
4
 
5
5
  let commands = {}, helpers = {}, extensions = {};
@@ -1,6 +1,6 @@
1
1
  import _ from 'lodash';
2
2
  import { waitForCondition } from 'asyncbox';
3
- import { util, fs, net, tempDir, system, timing } from '@appium/support';
3
+ import { util, fs, net, tempDir, system, timing } from 'appium/support';
4
4
  import { exec } from 'teen_process';
5
5
  import path from 'path';
6
6
 
@@ -1,7 +1,7 @@
1
1
  import _ from 'lodash';
2
2
  import { exec } from 'teen_process';
3
- import { util } from '@appium/support';
4
- import { errors } from '@appium/base-driver';
3
+ import { util } from 'appium/support';
4
+ import { errors } from 'appium/driver';
5
5
 
6
6
  const ADB_SHELL_FEATURE = 'adb_shell';
7
7
 
@@ -1,5 +1,5 @@
1
1
  import _ from 'lodash';
2
- import { fs, system, logger, util } from '@appium/support';
2
+ import { fs, system, logger, util } from 'appium/support';
3
3
  import { exec, SubProcess } from 'teen_process';
4
4
  import { checkPortStatus } from 'portscanner';
5
5
  import http from 'http';
@@ -1,9 +1,9 @@
1
1
  import _ from 'lodash';
2
2
  import androidHelpers from '../android-helpers';
3
3
  import B from 'bluebird';
4
- import { errors, isErrorType } from '@appium/base-driver';
4
+ import { errors, isErrorType } from 'appium/driver';
5
5
  import { asyncmap } from 'asyncbox';
6
- import { util } from '@appium/support';
6
+ import { util } from 'appium/support';
7
7
 
8
8
  let commands = {}, helpers = {}, extensions = {};
9
9