oxygen-cli 1.22.0 → 1.99.0-alpha.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 (232) hide show
  1. package/CHANGELOG.md +0 -50
  2. package/build/core/OxygenCore.js +56 -145
  3. package/build/errors/OxygenError.js +5 -15
  4. package/build/errors/helper.js +45 -49
  5. package/build/index.js +14 -6
  6. package/build/lib/cli-util.js +19 -19
  7. package/build/lib/cli.js +4 -2
  8. package/build/lib/parallel-launcher.js +333 -0
  9. package/build/lib/param-manager.js +66 -47
  10. package/build/lib/util.js +38 -9
  11. package/build/ox_modules/index.js +1 -97
  12. package/build/ox_modules/module-assert.js +19 -9
  13. package/build/ox_modules/module-dns.js +220 -0
  14. package/build/ox_modules/module-http.js +39 -51
  15. package/build/ox_modules/module-shell.js +19 -75
  16. package/build/ox_modules/module-utils.js +1 -108
  17. package/build/ox_modules/utils.js +1 -357
  18. package/build/reporter/FileReporterBase.js +5 -5
  19. package/build/reporter/ReportAggregator.js +127 -4
  20. package/build/runners/WorkerProcess.js +15 -28
  21. package/build/runners/index.js +2 -6
  22. package/build/runners/oxygen/OxygenWorker.js +8 -8
  23. package/build/runners/oxygen/index.js +17 -18
  24. package/build/runners/oxygen/worker.js +10 -8
  25. package/package.json +12 -46
  26. package/build/lib/img-merge.js +0 -163
  27. package/build/ox_modules/module-db.js +0 -146
  28. package/build/ox_modules/module-email.js +0 -212
  29. package/build/ox_modules/module-eyes.js +0 -189
  30. package/build/ox_modules/module-mailinator.js +0 -207
  31. package/build/ox_modules/module-mob/commands/alertAccept.js +0 -35
  32. package/build/ox_modules/module-mob/commands/alertDismiss.js +0 -35
  33. package/build/ox_modules/module-mob/commands/assertAlert.js +0 -56
  34. package/build/ox_modules/module-mob/commands/assertText.js +0 -45
  35. package/build/ox_modules/module-mob/commands/assertTitle.js +0 -43
  36. package/build/ox_modules/module-mob/commands/assertValue.js +0 -66
  37. package/build/ox_modules/module-mob/commands/back.js +0 -27
  38. package/build/ox_modules/module-mob/commands/clear.js +0 -40
  39. package/build/ox_modules/module-mob/commands/click.js +0 -35
  40. package/build/ox_modules/module-mob/commands/clickHidden.js +0 -52
  41. package/build/ox_modules/module-mob/commands/clickLong.js +0 -34
  42. package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +0 -37
  43. package/build/ox_modules/module-mob/commands/closeApp.js +0 -27
  44. package/build/ox_modules/module-mob/commands/debug.js +0 -26
  45. package/build/ox_modules/module-mob/commands/dragAndDrop.js +0 -38
  46. package/build/ox_modules/module-mob/commands/enableNetwork.js +0 -75
  47. package/build/ox_modules/module-mob/commands/execute.js +0 -32
  48. package/build/ox_modules/module-mob/commands/findElement.js +0 -36
  49. package/build/ox_modules/module-mob/commands/findElements.js +0 -39
  50. package/build/ox_modules/module-mob/commands/getAlertText.js +0 -31
  51. package/build/ox_modules/module-mob/commands/getAppiumLogs.js +0 -26
  52. package/build/ox_modules/module-mob/commands/getBrowserLogs.js +0 -66
  53. package/build/ox_modules/module-mob/commands/getCurrentActivity.js +0 -26
  54. package/build/ox_modules/module-mob/commands/getCurrentPackage.js +0 -26
  55. package/build/ox_modules/module-mob/commands/getDeviceLogs.js +0 -57
  56. package/build/ox_modules/module-mob/commands/getDeviceTime.js +0 -27
  57. package/build/ox_modules/module-mob/commands/getLocation.js +0 -32
  58. package/build/ox_modules/module-mob/commands/getSource.js +0 -26
  59. package/build/ox_modules/module-mob/commands/getText.js +0 -36
  60. package/build/ox_modules/module-mob/commands/getTitle.js +0 -24
  61. package/build/ox_modules/module-mob/commands/getUrl.js +0 -28
  62. package/build/ox_modules/module-mob/commands/getValue.js +0 -50
  63. package/build/ox_modules/module-mob/commands/getWindowHandles.js +0 -27
  64. package/build/ox_modules/module-mob/commands/hideKeyboard.js +0 -33
  65. package/build/ox_modules/module-mob/commands/index.js +0 -594
  66. package/build/ox_modules/module-mob/commands/installApp.js +0 -28
  67. package/build/ox_modules/module-mob/commands/isAppInstalled.js +0 -28
  68. package/build/ox_modules/module-mob/commands/isCheckable.js +0 -31
  69. package/build/ox_modules/module-mob/commands/isChecked.js +0 -31
  70. package/build/ox_modules/module-mob/commands/isClickable.js +0 -31
  71. package/build/ox_modules/module-mob/commands/isExist.js +0 -36
  72. package/build/ox_modules/module-mob/commands/isSelected.js +0 -36
  73. package/build/ox_modules/module-mob/commands/isVisible.js +0 -36
  74. package/build/ox_modules/module-mob/commands/isWebViewContext.js +0 -27
  75. package/build/ox_modules/module-mob/commands/launchApp.js +0 -26
  76. package/build/ox_modules/module-mob/commands/longPressKeyCode.js +0 -30
  77. package/build/ox_modules/module-mob/commands/open.js +0 -43
  78. package/build/ox_modules/module-mob/commands/pause.js +0 -27
  79. package/build/ox_modules/module-mob/commands/removeApp.js +0 -28
  80. package/build/ox_modules/module-mob/commands/resetApp.js +0 -26
  81. package/build/ox_modules/module-mob/commands/scrollIntoElement.js +0 -86
  82. package/build/ox_modules/module-mob/commands/scrollIntoView.js +0 -40
  83. package/build/ox_modules/module-mob/commands/select.js +0 -54
  84. package/build/ox_modules/module-mob/commands/selectFrame.js +0 -53
  85. package/build/ox_modules/module-mob/commands/selectWindow.js +0 -149
  86. package/build/ox_modules/module-mob/commands/sendKeys.js +0 -84
  87. package/build/ox_modules/module-mob/commands/setContext.js +0 -28
  88. package/build/ox_modules/module-mob/commands/setNativeContext.js +0 -26
  89. package/build/ox_modules/module-mob/commands/setTimeout.js +0 -33
  90. package/build/ox_modules/module-mob/commands/setWebViewContext.js +0 -39
  91. package/build/ox_modules/module-mob/commands/shake.js +0 -27
  92. package/build/ox_modules/module-mob/commands/smsClickLink.js +0 -32
  93. package/build/ox_modules/module-mob/commands/smsGetText.js +0 -45
  94. package/build/ox_modules/module-mob/commands/swipe.js +0 -58
  95. package/build/ox_modules/module-mob/commands/swipeElement.js +0 -58
  96. package/build/ox_modules/module-mob/commands/swipeScreen.js +0 -56
  97. package/build/ox_modules/module-mob/commands/takeScreenshot.js +0 -27
  98. package/build/ox_modules/module-mob/commands/tap.js +0 -34
  99. package/build/ox_modules/module-mob/commands/type.js +0 -67
  100. package/build/ox_modules/module-mob/commands/unlockPattern.js +0 -92
  101. package/build/ox_modules/module-mob/commands/waitForExist.js +0 -29
  102. package/build/ox_modules/module-mob/commands/waitForInteractable.js +0 -42
  103. package/build/ox_modules/module-mob/commands/waitForVisible.js +0 -28
  104. package/build/ox_modules/module-mob.js +0 -699
  105. package/build/ox_modules/module-pdf.js +0 -328
  106. package/build/ox_modules/module-proxy.js +0 -324
  107. package/build/ox_modules/module-serial.js +0 -187
  108. package/build/ox_modules/module-soap.js +0 -260
  109. package/build/ox_modules/module-twilio.js +0 -192
  110. package/build/ox_modules/module-web/commands/alertAccept.js +0 -35
  111. package/build/ox_modules/module-web/commands/alertDismiss.js +0 -35
  112. package/build/ox_modules/module-web/commands/assertAlert.js +0 -55
  113. package/build/ox_modules/module-web/commands/assertExist.js +0 -28
  114. package/build/ox_modules/module-web/commands/assertSelectedLabel.js +0 -51
  115. package/build/ox_modules/module-web/commands/assertSelectedValue.js +0 -45
  116. package/build/ox_modules/module-web/commands/assertText.js +0 -45
  117. package/build/ox_modules/module-web/commands/assertTextNotPresent.js +0 -56
  118. package/build/ox_modules/module-web/commands/assertTextPresent.js +0 -52
  119. package/build/ox_modules/module-web/commands/assertTitle.js +0 -42
  120. package/build/ox_modules/module-web/commands/assertValue.js +0 -44
  121. package/build/ox_modules/module-web/commands/back.js +0 -27
  122. package/build/ox_modules/module-web/commands/clear.js +0 -41
  123. package/build/ox_modules/module-web/commands/click.js +0 -112
  124. package/build/ox_modules/module-web/commands/clickHidden.js +0 -79
  125. package/build/ox_modules/module-web/commands/closeWindow.js +0 -25
  126. package/build/ox_modules/module-web/commands/debug.js +0 -25
  127. package/build/ox_modules/module-web/commands/deleteCookies.js +0 -22
  128. package/build/ox_modules/module-web/commands/deselect.js +0 -34
  129. package/build/ox_modules/module-web/commands/doubleClick.js +0 -65
  130. package/build/ox_modules/module-web/commands/dragAndDrop.js +0 -36
  131. package/build/ox_modules/module-web/commands/execute.js +0 -36
  132. package/build/ox_modules/module-web/commands/fileBrowse.js +0 -72
  133. package/build/ox_modules/module-web/commands/findElement.js +0 -35
  134. package/build/ox_modules/module-web/commands/findElements.js +0 -38
  135. package/build/ox_modules/module-web/commands/fullscreenWindow.js +0 -24
  136. package/build/ox_modules/module-web/commands/getAlertText.js +0 -30
  137. package/build/ox_modules/module-web/commands/getAttribute.js +0 -38
  138. package/build/ox_modules/module-web/commands/getBrowserLogs.js +0 -34
  139. package/build/ox_modules/module-web/commands/getCookies.js +0 -23
  140. package/build/ox_modules/module-web/commands/getCssValue.js +0 -38
  141. package/build/ox_modules/module-web/commands/getElementCount.js +0 -29
  142. package/build/ox_modules/module-web/commands/getHTML.js +0 -30
  143. package/build/ox_modules/module-web/commands/getSource.js +0 -26
  144. package/build/ox_modules/module-web/commands/getText.js +0 -36
  145. package/build/ox_modules/module-web/commands/getTitle.js +0 -22
  146. package/build/ox_modules/module-web/commands/getUrl.js +0 -26
  147. package/build/ox_modules/module-web/commands/getValue.js +0 -43
  148. package/build/ox_modules/module-web/commands/getWindowHandles.js +0 -26
  149. package/build/ox_modules/module-web/commands/getWindowSize.js +0 -26
  150. package/build/ox_modules/module-web/commands/getXMLPageSource.js +0 -51
  151. package/build/ox_modules/module-web/commands/index.js +0 -634
  152. package/build/ox_modules/module-web/commands/isAlertPresent.js +0 -31
  153. package/build/ox_modules/module-web/commands/isChecked.js +0 -30
  154. package/build/ox_modules/module-web/commands/isExist.js +0 -36
  155. package/build/ox_modules/module-web/commands/isSelected.js +0 -35
  156. package/build/ox_modules/module-web/commands/isVisible.js +0 -36
  157. package/build/ox_modules/module-web/commands/makeVisible.js +0 -74
  158. package/build/ox_modules/module-web/commands/maximizeWindow.js +0 -24
  159. package/build/ox_modules/module-web/commands/minimizeWindow.js +0 -24
  160. package/build/ox_modules/module-web/commands/newWindow.js +0 -27
  161. package/build/ox_modules/module-web/commands/open.js +0 -42
  162. package/build/ox_modules/module-web/commands/pause.js +0 -26
  163. package/build/ox_modules/module-web/commands/point.js +0 -37
  164. package/build/ox_modules/module-web/commands/pointJS.js +0 -56
  165. package/build/ox_modules/module-web/commands/refresh.js +0 -26
  166. package/build/ox_modules/module-web/commands/rightClick.js +0 -61
  167. package/build/ox_modules/module-web/commands/rightClickActions.js +0 -57
  168. package/build/ox_modules/module-web/commands/scrollToElement.js +0 -33
  169. package/build/ox_modules/module-web/commands/select.js +0 -55
  170. package/build/ox_modules/module-web/commands/selectFrame.js +0 -52
  171. package/build/ox_modules/module-web/commands/selectWindow.js +0 -148
  172. package/build/ox_modules/module-web/commands/sendKeys.js +0 -56
  173. package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +0 -33
  174. package/build/ox_modules/module-web/commands/setTimeout.js +0 -33
  175. package/build/ox_modules/module-web/commands/setWindowSize.js +0 -29
  176. package/build/ox_modules/module-web/commands/takeScreenshot.js +0 -37
  177. package/build/ox_modules/module-web/commands/type.js +0 -52
  178. package/build/ox_modules/module-web/commands/waitForAngular.js +0 -83
  179. package/build/ox_modules/module-web/commands/waitForExist.js +0 -28
  180. package/build/ox_modules/module-web/commands/waitForInteractable.js +0 -31
  181. package/build/ox_modules/module-web/commands/waitForNotExist.js +0 -57
  182. package/build/ox_modules/module-web/commands/waitForNotText.js +0 -45
  183. package/build/ox_modules/module-web/commands/waitForNotValue.js +0 -45
  184. package/build/ox_modules/module-web/commands/waitForText.js +0 -45
  185. package/build/ox_modules/module-web/commands/waitForValue.js +0 -45
  186. package/build/ox_modules/module-web/commands/waitForVisible.js +0 -28
  187. package/build/ox_modules/module-web/commands/waitForWindow.js +0 -118
  188. package/build/ox_modules/module-web.js +0 -909
  189. package/build/ox_modules/module-win/commands/assertText.js +0 -41
  190. package/build/ox_modules/module-win/commands/assertTitle.js +0 -38
  191. package/build/ox_modules/module-win/commands/assertValue.js +0 -62
  192. package/build/ox_modules/module-win/commands/back.js +0 -21
  193. package/build/ox_modules/module-win/commands/clear.js +0 -34
  194. package/build/ox_modules/module-win/commands/click.js +0 -25
  195. package/build/ox_modules/module-win/commands/clickLong.js +0 -30
  196. package/build/ox_modules/module-win/commands/clickMultipleTimes.js +0 -33
  197. package/build/ox_modules/module-win/commands/findElement.js +0 -31
  198. package/build/ox_modules/module-win/commands/findElements.js +0 -31
  199. package/build/ox_modules/module-win/commands/getAppiumLogs.js +0 -22
  200. package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +0 -25
  201. package/build/ox_modules/module-win/commands/getLocation.js +0 -26
  202. package/build/ox_modules/module-win/commands/getSource.js +0 -22
  203. package/build/ox_modules/module-win/commands/getText.js +0 -32
  204. package/build/ox_modules/module-win/commands/getValue.js +0 -46
  205. package/build/ox_modules/module-win/commands/getWindowHandles.js +0 -25
  206. package/build/ox_modules/module-win/commands/index.js +0 -298
  207. package/build/ox_modules/module-win/commands/isCheckable.js +0 -26
  208. package/build/ox_modules/module-win/commands/isChecked.js +0 -26
  209. package/build/ox_modules/module-win/commands/isClickable.js +0 -26
  210. package/build/ox_modules/module-win/commands/isExist.js +0 -32
  211. package/build/ox_modules/module-win/commands/isSelected.js +0 -26
  212. package/build/ox_modules/module-win/commands/isVisible.js +0 -32
  213. package/build/ox_modules/module-win/commands/open.js +0 -24
  214. package/build/ox_modules/module-win/commands/pause.js +0 -23
  215. package/build/ox_modules/module-win/commands/rightClick.js +0 -30
  216. package/build/ox_modules/module-win/commands/selectWindow.js +0 -97
  217. package/build/ox_modules/module-win/commands/sendKeys.js +0 -50
  218. package/build/ox_modules/module-win/commands/setTimeout.js +0 -29
  219. package/build/ox_modules/module-win/commands/takeScreenshot.js +0 -26
  220. package/build/ox_modules/module-win/commands/tap.js +0 -29
  221. package/build/ox_modules/module-win/commands/type.js +0 -38
  222. package/build/ox_modules/module-win/commands/waitForExist.js +0 -25
  223. package/build/ox_modules/module-win/commands/waitForInteractable.js +0 -43
  224. package/build/ox_modules/module-win/commands/waitForVisible.js +0 -24
  225. package/build/ox_modules/module-win.js +0 -367
  226. package/build/ox_services/service-devtools/submodule-network.js +0 -338
  227. package/build/ox_services/service-devtools.js +0 -83
  228. package/build/runners/cucumber/CucumberEventListener.js +0 -181
  229. package/build/runners/cucumber/CucumberReporter.js +0 -277
  230. package/build/runners/cucumber/CucumberWorker.js +0 -337
  231. package/build/runners/cucumber/index.js +0 -159
  232. package/build/runners/cucumber/worker.js +0 -184
@@ -1,367 +0,0 @@
1
- /*
2
- * Copyright (C) 2015-present CloudBeat Limited
3
- *
4
- * This program is free software: you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License as published by
6
- * the Free Software Foundation, either version 3 of the License, or
7
- * (at your option) any later version.
8
- */
9
- 'use strict';
10
- /**
11
- * @name win
12
- * @description Provides methods for Windows native applications automation.
13
- * @sample **Locators:**
14
- *
15
- * * `/XPATH` - Locates element using an XPath 1.0 expression.
16
- * * `~AccessibilityId` - Locates element by its Accessibility ID. Attribute name in inspect.exe - AutomationId.
17
- * * `name=NAME` - Locates element by its name. Attribute name in inspect.exe - Name.
18
- * * `id=ID` - Locates element by its ID. Attribute name in inspect.exe - RuntimeID.
19
- *
20
- * **Pattern arguments:**
21
- *
22
- * Commands which expect a string matching pattern in their arguments, support following patterns unless specified otherwise:
23
- *
24
- * * `regex:PATTERN` - Match using regular expression.
25
- * * `PATTERN` - Verbatim matching.
26
- */
27
-
28
- Object.defineProperty(exports, "__esModule", {
29
- value: true
30
- });
31
- exports.default = void 0;
32
-
33
- require("source-map-support/register");
34
-
35
- var _url = _interopRequireDefault(require("url"));
36
-
37
- var wdio = _interopRequireWildcard(require("webdriverio"));
38
-
39
- var _WebDriverModule = _interopRequireDefault(require("../core/WebDriverModule"));
40
-
41
- var _utils = _interopRequireDefault(require("./utils"));
42
-
43
- var _helper = _interopRequireDefault(require("../errors/helper"));
44
-
45
- var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
46
-
47
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
48
-
49
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
50
-
51
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
52
-
53
- const MODULE_NAME = 'win';
54
- const DEFAULT_APPIUM_URL = 'http://localhost:4723/wd/hub';
55
- const DEFAULT_APP = 'Root';
56
- const NO_SCREENSHOT_COMMANDS = ['init', 'assertAlert'];
57
- const ACTION_COMMANDS = ['open', 'tap', 'click', 'swipe', 'submit', 'setValue'];
58
- const DEFAULT_WAIT_TIMEOUT = 60 * 1000; // default 60s wait timeout
59
-
60
- const WINDOWS_STANDARD_APP_IDS = {
61
- Calculator: 'Microsoft.WindowsCalculator_8wekyb3d8bbwe!App',
62
- AlarmClock: 'Microsoft.WindowsAlarms_8wekyb3d8bbwe!App',
63
- Notepad: 'C:\\Windows\\System32\\notepad.exe',
64
- Paint: 'C:\\Windows\\System32\\mspaint.exe',
65
- Paint3D: 'Microsoft.MSPaint_8wekyb3d8bbwe!Microsoft.MSPaint',
66
- StickyNotes: 'Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe!App'
67
- };
68
-
69
- class WindowsModule extends _WebDriverModule.default {
70
- constructor(options, context, rs, logger, modules, services) {
71
- super(options, context, rs, logger, modules, services);
72
- this.transactions = {};
73
- this.lastNavigationStartTime = null;
74
- this.networkRequests = null;
75
- this.helpers = {};
76
-
77
- this._loadHelperFunctions(); // support backward compatibility (some module commands might refer to this.OxError and this.errHelper)
78
-
79
-
80
- this.OxError = _OxygenError.default;
81
- this.errHelper = _helper.default; // holds element operation timeout value
82
-
83
- this.waitForTimeout = DEFAULT_WAIT_TIMEOUT;
84
- }
85
-
86
- get name() {
87
- return MODULE_NAME;
88
- }
89
- /**
90
- * @function getDriver
91
- * @summary Returns the underlying WDIO driver.
92
- * @return {Object} WDIO driver.
93
- */
94
-
95
-
96
- getDriver() {
97
- return super.getDriver();
98
- }
99
- /**
100
- * @function getCapabilities
101
- * @summary Returns currently defined capabilities.
102
- * @return {Object} Current capabilities object.
103
- */
104
-
105
-
106
- getCapabilities() {
107
- return this.caps || super.getCapabilities();
108
- }
109
- /**
110
- * @function init
111
- * @summary Initializes a new Appium session.
112
- * @param {String=} caps - Desired capabilities. If not specified capabilities will be taken from suite definition.
113
- * @param {String=} appiumUrl - Remote Appium server URL (default: http://localhost:4723/wd/hub).
114
- */
115
-
116
-
117
- async init(caps, appiumUrl) {
118
- // if reopenSession is true - reinitilize the module
119
- if (this.isInitialized) {
120
- if (this.options.reopenSession !== false) {
121
- // true or false if explisitly set. true on null or undefined.
122
- this.logger.debug('reopenSession is true - reloading the session...');
123
- this.driver.reloadSession();
124
- this._isInitialized = true;
125
- } else {
126
- this.logger.debug('mob.init was called for already initialized module. reopenSession is false so the call is ignored.');
127
- }
128
-
129
- return;
130
- }
131
-
132
- if (!appiumUrl) {
133
- appiumUrl = this.options.appiumUrl || DEFAULT_APPIUM_URL;
134
- } // merge capabilities from context and from init function argument, give preference to context-passed capabilities
135
-
136
-
137
- this.caps = {};
138
-
139
- if (this.ctx.caps) {
140
- this.caps = { ...this.ctx.caps
141
- };
142
- }
143
-
144
- if (caps) {
145
- this.caps = { ...this.caps,
146
- ...caps
147
- };
148
- } // make sure 'app' capability is provided (mandatory for WinAppDriver)
149
-
150
-
151
- if (!this.caps.app) {
152
- this.caps.app = DEFAULT_APP;
153
- } else {
154
- const appCapVal = this.caps.app; // try to resolve 'app' value in the Windows standard app list
155
-
156
- const appNames = Object.keys(WINDOWS_STANDARD_APP_IDS);
157
-
158
- if (appNames.includes(appCapVal)) {
159
- this.caps.app = WINDOWS_STANDARD_APP_IDS[appCapVal];
160
- }
161
- } // set default platformName for WinAppDriver
162
-
163
-
164
- if (!this.caps.platformName) {
165
- this.caps.platformName = 'Windows';
166
- } // set default deviceName for WinAppDriver
167
-
168
-
169
- if (!this.caps.deviceName) {
170
- this.caps.deviceName = 'WindowsPC';
171
- } // set default platformVersion for WinAppDriver
172
-
173
-
174
- if (!this.caps.platformVersion) {
175
- this.caps.platformVersion = '1.0';
176
- } // populate WDIO options
177
-
178
-
179
- const url = _url.default.parse(appiumUrl);
180
-
181
- const protocol = url.protocol.replace(/:$/, '');
182
- const host = url.hostname;
183
- const port = parseInt(url.port || (protocol === 'https' ? 443 : 80));
184
- const path = url.pathname; // auth is needed mostly for cloud providers such as LambdaTest
185
-
186
- if (url.auth) {
187
- const auth = url.auth.split(':');
188
- this.options.wdioOpts = {
189
- user: auth[0],
190
- key: auth[1]
191
- };
192
- }
193
-
194
- var wdioOpts = { ...(this.options.wdioOpts || {}),
195
- protocol: protocol,
196
- hostname: host,
197
- port: port,
198
- path: path,
199
- capabilities: this.caps,
200
- logLevel: 'silent',
201
- runner: 'repl',
202
- waitforTimeout: 5000,
203
- // increase the default 3000
204
- connectionRetryTimeout: 310 * 1000,
205
- connectionRetryCount: 1
206
- };
207
-
208
- try {
209
- this.driver = await wdio.remote(wdioOpts);
210
-
211
- if (this.options.seleniumBrowserTimeout) {
212
- this.driver.seleniumBrowserTimeout = this.options.seleniumBrowserTimeout;
213
- }
214
-
215
- if (this.options.seleniumTimeout) {
216
- this.driver.seleniumTimeout = this.options.seleniumTimeout;
217
- }
218
- } catch (e) {
219
- throw _helper.default.getAppiumInitError(e);
220
- }
221
-
222
- await this.driver.setTimeout({
223
- 'implicit': this.waitForTimeout
224
- });
225
- super.init(this.driver);
226
- }
227
- /**
228
- * @function dispose
229
- * @summary Ends the current session.
230
- */
231
-
232
-
233
- async dispose(status) {
234
- status = status.toUpperCase();
235
-
236
- if (this.driver && this.isInitialized) {
237
- try {
238
- if (!['CANCELED', 'FAILED'].includes(status)) {
239
- if (this.seleniumSessionTimeout) {// ignore
240
- // deleteSession will take 5 min to call
241
- } else {
242
- await this.driver.deleteSession();
243
- }
244
- }
245
- } catch (e) {
246
- this.logger.warn('Error disposing driver: ' + e); // ignore any errors at disposal stage
247
- }
248
-
249
- this.driver = null;
250
- this.lastNavigationStartTime = null;
251
- super.dispose();
252
- }
253
- }
254
- /**
255
- * @summary Opens new transaction.
256
- * @description The transaction will persist till a new one is opened. Transaction names must be
257
- * unique.
258
- * @function transaction
259
- * @param {String} name - The transaction name.
260
- */
261
-
262
-
263
- transaction(name) {
264
- global._lastTransactionName = name;
265
- }
266
- /*
267
- * Private
268
- */
269
-
270
-
271
- _isAction(name) {
272
- return ACTION_COMMANDS.includes(name);
273
- }
274
-
275
- _takeScreenshotSilent(name) {
276
- if (!NO_SCREENSHOT_COMMANDS.includes(name)) {
277
- try {
278
- if (this.driver && this.driver.takeScreenshot) {
279
- return this.driver.takeScreenshot();
280
- }
281
- } catch (e) {
282
- this.logger.error('Cannot get screenshot', e); // ignore
283
- }
284
- }
285
- } // _getLogs(name) {
286
- // if (!NO_LOGS_COMMANDS.includes(name)) {
287
- // return this.getLogs();
288
- // }
289
- // }
290
-
291
-
292
- _adjustAppiumLog(log, src) {
293
- if (!log || typeof log !== 'object') {
294
- return null;
295
- } // TODO: convert log.timestamp from the device time zone to the local one (so we can later correlate between steps and logs)
296
-
297
-
298
- return {
299
- time: log.timestamp,
300
- msg: log.message,
301
- level: log.level,
302
- src: src
303
- };
304
- }
305
-
306
- _iterationStart() {
307
- // clear transaction name saved in previous iteration if any
308
- global._lastTransactionName = null;
309
- }
310
-
311
- _iterationEnd(error) {
312
- if (error && error.type === _helper.default.errorCode.SELENIUM_SESSION_TIMEOUT) {
313
- this.seleniumSessionTimeout = true;
314
- return;
315
- } else {
316
- this.seleniumSessionTimeout = false;
317
- } // ignore the rest if mob module is not initialized
318
-
319
-
320
- if (!this.isInitialized) {
321
- return;
322
- } // collect all Appium logs for this session
323
-
324
-
325
- if (this.options.collectAppiumLogs) {
326
- try {
327
- const logs = this.getAppiumLogs();
328
-
329
- if (logs && Array.isArray(logs)) {
330
- for (var logEntry of logs) {
331
- this.rs.logs.push(this._adjustAppiumLog(logEntry, 'appium'));
332
- }
333
- }
334
- } catch (e) {
335
- // ignore errors
336
- this.logger.error('Cannot retrieve Appium logs.', e);
337
- }
338
- }
339
- }
340
-
341
- _getWdioLocator(locator) {
342
- if (!locator) throw new _OxygenError.default(_helper.default.errorCode.SCRIPT_ERROR, 'Invalid argument - locator not specified');else if (typeof locator === 'object') return locator;else if (locator.indexOf('/') === 0) return locator;else if (locator.indexOf('id=') === 0) return `//*[@id="${locator.substr('id='.length)}"]`;else if (locator.indexOf('name=') === 0) return '[name="' + locator.substr('name='.length) + '"]';
343
- return locator;
344
- }
345
-
346
- _loadHelperFunctions() {
347
- this.helpers.getWdioLocator = this._getWdioLocator;
348
- this.helpers.matchPattern = _utils.default.matchPattern;
349
- this.helpers.getElement = _utils.default.getElement;
350
- this.helpers.getElements = _utils.default.getElements;
351
- this.helpers.getChildElement = _utils.default.getChildElement;
352
- this.helpers.getChildElements = _utils.default.getChildElements;
353
- this.helpers.setTimeoutImplicit = _utils.default.setTimeoutImplicit;
354
- this.helpers.restoreTimeoutImplicit = _utils.default.restoreTimeoutImplicit;
355
- this.helpers.assertArgument = _utils.default.assertArgument;
356
- this.helpers.assertArgumentNonEmptyString = _utils.default.assertArgumentNonEmptyString;
357
- this.helpers.assertArgumentNumber = _utils.default.assertArgumentNumber;
358
- this.helpers.assertArgumentNumberNonNegative = _utils.default.assertArgumentNumberNonNegative;
359
- this.helpers.assertArgumentBool = _utils.default.assertArgumentBool;
360
- this.helpers.assertArgumentBoolOptional = _utils.default.assertArgumentBoolOptional;
361
- this.helpers.assertArgumentTimeout = _utils.default.assertArgumentTimeout;
362
- }
363
-
364
- }
365
-
366
- exports.default = WindowsModule;
367
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13aW4uanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0FQUCIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldJTkRPV1NfU1RBTkRBUkRfQVBQX0lEUyIsIkNhbGN1bGF0b3IiLCJBbGFybUNsb2NrIiwiTm90ZXBhZCIsIlBhaW50IiwiUGFpbnQzRCIsIlN0aWNreU5vdGVzIiwiV2luZG93c01vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0IiwiYXBwaXVtVXJsIiwiaXNJbml0aWFsaXplZCIsInJlb3BlblNlc3Npb24iLCJkZWJ1ZyIsImRyaXZlciIsInJlbG9hZFNlc3Npb24iLCJfaXNJbml0aWFsaXplZCIsImN0eCIsImFwcCIsImFwcENhcFZhbCIsImFwcE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImluY2x1ZGVzIiwicGxhdGZvcm1OYW1lIiwiZGV2aWNlTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5IiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsIndkaW8iLCJyZW1vdGUiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiZSIsImdldEFwcGl1bUluaXRFcnJvciIsInNldFRpbWVvdXQiLCJkaXNwb3NlIiwic3RhdHVzIiwidG9VcHBlckNhc2UiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0IiwiZGVsZXRlU2Vzc2lvbiIsIndhcm4iLCJ0cmFuc2FjdGlvbiIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiX2lzQWN0aW9uIiwiX3Rha2VTY3JlZW5zaG90U2lsZW50IiwidGFrZVNjcmVlbnNob3QiLCJlcnJvciIsIl9hZGp1c3RBcHBpdW1Mb2ciLCJsb2ciLCJzcmMiLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibWVzc2FnZSIsImxldmVsIiwiX2l0ZXJhdGlvblN0YXJ0IiwiX2l0ZXJhdGlvbkVuZCIsInR5cGUiLCJlcnJvckhlbHBlciIsImVycm9yQ29kZSIsIlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCIsImNvbGxlY3RBcHBpdW1Mb2dzIiwibG9ncyIsImdldEFwcGl1bUxvZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJsb2dFbnRyeSIsInB1c2giLCJfZ2V0V2Rpb0xvY2F0b3IiLCJsb2NhdG9yIiwiU0NSSVBUX0VSUk9SIiwiaW5kZXhPZiIsInN1YnN0ciIsImxlbmd0aCIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwibW9kVXRpbHMiLCJnZXRFbGVtZW50IiwiZ2V0RWxlbWVudHMiLCJnZXRDaGlsZEVsZW1lbnQiLCJnZXRDaGlsZEVsZW1lbnRzIiwic2V0VGltZW91dEltcGxpY2l0IiwicmVzdG9yZVRpbWVvdXRJbXBsaWNpdCIsImFzc2VydEFyZ3VtZW50IiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFHQSxNQUFNQSxXQUFXLEdBQUcsS0FBcEI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyw4QkFBM0I7QUFDQSxNQUFNQyxXQUFXLEdBQUcsTUFBcEI7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUFDLE1BQUQsRUFBUyxhQUFULENBQS9CO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLENBQUMsTUFBRCxFQUFRLEtBQVIsRUFBYyxPQUFkLEVBQXNCLE9BQXRCLEVBQThCLFFBQTlCLEVBQXVDLFVBQXZDLENBQXhCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsS0FBSyxJQUFsQyxDLENBQW1EOztBQUNuRCxNQUFNQyx3QkFBd0IsR0FBRztBQUM3QkMsRUFBQUEsVUFBVSxFQUFFLCtDQURpQjtBQUU3QkMsRUFBQUEsVUFBVSxFQUFFLDJDQUZpQjtBQUc3QkMsRUFBQUEsT0FBTyxFQUFFLG9DQUhvQjtBQUk3QkMsRUFBQUEsS0FBSyxFQUFFLG9DQUpzQjtBQUs3QkMsRUFBQUEsT0FBTyxFQUFFLG1EQUxvQjtBQU03QkMsRUFBQUEsV0FBVyxFQUFFO0FBTmdCLENBQWpDOztBQVNlLE1BQU1DLGFBQU4sU0FBNEJDLHdCQUE1QixDQUE0QztBQUN2REMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVVDLE9BQVYsRUFBbUJDLEVBQW5CLEVB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ZUFBeEM7QUFDQSxTQUFLckcsT0FBTCxDQUFhc0csZ0JBQWIsR0FBZ0NKLGVBQVNJLGdCQUF6QztBQUNBLFNBQUt0RyxPQUFMLENBQWF1RyxrQkFBYixHQUFrQ0wsZUFBU0ssa0JBQTNDO0FBQ0EsU0FBS3ZHLE9BQUwsQ0FBYXdHLHNCQUFiLEdBQXNDTixlQUFTTSxzQkFBL0M7QUFDQSxTQUFLeEcsT0FBTCxDQUFheUcsY0FBYixHQUE4QlAsZUFBU08sY0FBdkM7QUFDQSxTQUFLekcsT0FBTCxDQUFhMEcsNEJBQWIsR0FBNENSLGVBQVNRLDRCQUFyRDtBQUNBLFNBQUsxRyxPQUFMLENBQWEyRyxvQkFBYixHQUFvQ1QsZUFBU1Msb0JBQTdDO0FBQ0EsU0FBSzNHLE9BQUwsQ0FBYTRHLCtCQUFiLEdBQStDVixlQUFTVSwrQkFBeEQ7QUFDQSxTQUFLNUcsT0FBTCxDQUFhNkcsa0JBQWIsR0FBa0NYLGVBQVNXLGtCQUEzQztBQUNBLFNBQUs3RyxPQUFMLENBQWE4RywwQkFBYixHQUEwQ1osZUFBU1ksMEJBQW5EO0FBQ0EsU0FBSzlHLE9BQUwsQ0FBYStHLHFCQUFiLEdBQXFDYixlQUFTYSxxQkFBOUM7QUFDSDs7QUEvUnNEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4ndXNlIHN0cmljdCc7XHJcbi8qKlxyXG4gKiBAbmFtZSB3aW5cclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIFdpbmRvd3MgbmF0aXZlIGFwcGxpY2F0aW9ucyBhdXRvbWF0aW9uLlxyXG4gKiBAc2FtcGxlICoqTG9jYXRvcnM6KiogIFxyXG4gKiAgIFxyXG4gKiAgKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogICogYH5BY2Nlc3NpYmlsaXR5SWRgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBBY2Nlc3NpYmlsaXR5IElELiBBdHRyaWJ1dGUgbmFtZSBpbiBpbnNwZWN0LmV4ZSAtIEF1dG9tYXRpb25JZC5cclxuICogICogYG5hbWU9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIG5hbWUuIEF0dHJpYnV0ZSBuYW1lIGluIGluc3BlY3QuZXhlIC0gTmFtZS5cclxuICogICogYGlkPUlEYCAtICBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIElELiBBdHRyaWJ1dGUgbmFtZSBpbiBpbnNwZWN0LmV4ZSAtIFJ1bnRpbWVJRC4gIFxyXG4gKiAgXHJcbiAqICoqUGF0dGVybiBhcmd1bWVudHM6KipcclxuICogIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGEgc3RyaW5nIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlaXIgYXJndW1lbnRzLCBzdXBwb3J0IGZvbGxvd2luZyBwYXR0ZXJucyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogIFxyXG4gKiAgKiBgcmVnZXg6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICAqIGBQQVRURVJOYCAtIFZlcmJhdGltIG1hdGNoaW5nLlxyXG4gKi9cclxuXHJcbmltcG9ydCBVUkwgZnJvbSAndXJsJztcclxuaW1wb3J0ICogYXMgd2RpbyBmcm9tICd3ZWJkcml2ZXJpbyc7XHJcbmltcG9ydCBXZWJEcml2ZXJNb2R1bGUgZnJvbSAnLi4vY29yZS9XZWJEcml2ZXJNb2R1bGUnO1xyXG5pbXBvcnQgbW9kVXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ3dpbic7XHJcbmNvbnN0IERFRkFVTFRfQVBQSVVNX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViJztcclxuY29uc3QgREVGQVVMVF9BUFAgPSAnUm9vdCc7XHJcbmNvbnN0IE5PX1NDUkVFTlNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnXTtcclxuY29uc3QgQUNUSU9OX0NPTU1BTkRTID0gWydvcGVuJywndGFwJywnY2xpY2snLCdzd2lwZScsJ3N1Ym1pdCcsJ3NldFZhbHVlJ107XHJcbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FT1VUID0gNjAgKiAxMDAwOyAgICAgICAgICAgIC8vIGRlZmF1bHQgNjBzIHdhaXQgdGltZW91dFxyXG5jb25zdCBXSU5ET1dTX1NUQU5EQVJEX0FQUF9JRFMgPSB7XHJcbiAgICBDYWxjdWxhdG9yOiAnTWljcm9zb2Z0LldpbmRvd3NDYWxjdWxhdG9yXzh3ZWt5YjNkOGJid2UhQXBwJyxcclxuICAgIEFsYXJtQ2xvY2s6ICdNaWNyb3NvZnQuV2luZG93c0FsYXJtc184d2VreWIzZDhiYndlIUFwcCcsXHJcbiAgICBOb3RlcGFkOiAnQzpcXFxcV2luZG93c1xcXFxTeXN0ZW0zMlxcXFxub3RlcGFkLmV4ZScsXHJcbiAgICBQYWludDogJ0M6XFxcXFdpbmRvd3NcXFxcU3lzdGVtMzJcXFxcbXNwYWludC5leGUnLFxyXG4gICAgUGFpbnQzRDogJ01pY3Jvc29mdC5NU1BhaW50Xzh3ZWt5YjNkOGJid2UhTWljcm9zb2Z0Lk1TUGFpbnQnLFxyXG4gICAgU3RpY2t5Tm90ZXM6ICdNaWNyb3NvZnQuTWljcm9zb2Z0U3RpY2t5Tm90ZXNfOHdla3liM2Q4YmJ3ZSFBcHAnXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaW5kb3dzTW9kdWxlIGV4dGVuZHMgV2ViRHJpdmVyTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0ge307XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5uZXR3b3JrUmVxdWVzdHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2xvYWRIZWxwZXJGdW5jdGlvbnMoKTtcclxuICAgICAgICAvLyBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKHNvbWUgbW9kdWxlIGNvbW1hbmRzIG1pZ2h0IHJlZmVyIHRvIHRoaXMuT3hFcnJvciBhbmQgdGhpcy5lcnJIZWxwZXIpXHJcbiAgICAgICAgdGhpcy5PeEVycm9yID0gT3hFcnJvcjtcclxuICAgICAgICB0aGlzLmVyckhlbHBlciA9IGVyckhlbHBlcjtcclxuICAgICAgICAvLyBob2xkcyBlbGVtZW50IG9wZXJhdGlvbiB0aW1lb3V0IHZhbHVlXHJcbiAgICAgICAgdGhpcy53YWl0Rm9yVGltZW91dCA9IERFRkFVTFRfV0FJVF9USU1FT1VUO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgV0RJTyBkcml2ZXIuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFdESU8gZHJpdmVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcml2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyaXZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBjdXJyZW50bHkgZGVmaW5lZCBjYXBhYmlsaXRpZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHMgfHwgc3VwZXIuZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgQXBwaXVtIHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNhcHMgLSBEZXNpcmVkIGNhcGFiaWxpdGllcy4gSWYgbm90IHNwZWNpZmllZCBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0YWtlbiBmcm9tIHN1aXRlIGRlZmluaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGFwcGl1bVVybCAtIFJlbW90ZSBBcHBpdW0gc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2FwcywgYXBwaXVtVXJsKSB7XHJcbiAgICAgICAgLy8gaWYgcmVvcGVuU2Vzc2lvbiBpcyB0cnVlIC0gcmVpbml0aWxpemUgdGhlIG1vZHVsZVxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZW9wZW5TZXNzaW9uICE9PSBmYWxzZSkgeyAvLyB0cnVlIG9yIGZhbHNlIGlmIGV4cGxpc2l0bHkgc2V0LiB0cnVlIG9uIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3Jlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlbG9hZGluZyB0aGUgc2Vzc2lvbi4uLicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIucmVsb2FkU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnbW9iLmluaXQgd2FzIGNhbGxlZCBmb3IgYWxyZWFkeSBpbml0aWFsaXplZCBtb2R1bGUuIHJlb3BlblNlc3Npb24gaXMgZmFsc2Ugc28gdGhlIGNhbGwgaXMgaWdub3JlZC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWFwcGl1bVVybCkge1xyXG4gICAgICAgICAgICBhcHBpdW1VcmwgPSB0aGlzLm9wdGlvbnMuYXBwaXVtVXJsIHx8IERFRkFVTFRfQVBQSVVNX1VSTDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1lcmdlIGNhcGFiaWxpdGllcyBmcm9tIGNvbnRleHQgYW5kIGZyb20gaW5pdCBmdW5jdGlvbiBhcmd1bWVudCwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGNvbnRleHQtcGFzc2VkIGNhcGFiaWxpdGllc1xyXG4gICAgICAgIHRoaXMuY2FwcyA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jdHguY2FwcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY2FwcywgLi4uY2FwcyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbWFrZSBzdXJlICdhcHAnIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgKG1hbmRhdG9yeSBmb3IgV2luQXBwRHJpdmVyKVxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmFwcCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYXBwID0gREVGQVVMVF9BUFA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBhcHBDYXBWYWwgPSB0aGlzLmNhcHMuYXBwO1xyXG4gICAgICAgICAgICAvLyB0cnkgdG8gcmVzb2x2ZSAnYXBwJyB2YWx1ZSBpbiB0aGUgV2luZG93cyBzdGFuZGFyZCBhcHAgbGlzdFxyXG4gICAgICAgICAgICBjb25zdCBhcHBOYW1lcyA9IE9iamVjdC5rZXlzKFdJTkRPV1NfU1RBTkRBUkRfQVBQX0lEUyk7XHJcbiAgICAgICAgICAgIGlmIChhcHBOYW1lcy5pbmNsdWRlcyhhcHBDYXBWYWwpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcHMuYXBwID0gV0lORE9XU19TVEFOREFSRF9BUFBfSURTW2FwcENhcFZhbF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgcGxhdGZvcm1OYW1lIGZvciBXaW5BcHBEcml2ZXJcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLnBsYXRmb3JtTmFtZSA9ICdXaW5kb3dzJztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgZGV2aWNlTmFtZSBmb3IgV2luQXBwRHJpdmVyXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuZGV2aWNlTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuZGV2aWNlTmFtZSA9ICdXaW5kb3dzUEMnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBwbGF0Zm9ybVZlcnNpb24gZm9yIFdpbkFwcERyaXZlclxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbikge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gJzEuMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHBvcHVsYXRlIFdESU8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5wYXJzZShhcHBpdW1VcmwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgd2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxyXG4gICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHMsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcclxuICAgICAgICAgICAgcnVubmVyOiAncmVwbCcsXHJcbiAgICAgICAgICAgIHdhaXRmb3JUaW1lb3V0OiA1MDAwLCAvLyBpbmNyZWFzZSB0aGUgZGVmYXVsdCAzMDAwXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyID0gYXdhaXQgd2Rpby5yZW1vdGUod2Rpb09wdHMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVyckhlbHBlci5nZXRBcHBpdW1Jbml0RXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHsgJ2ltcGxpY2l0JzogdGhpcy53YWl0Rm9yVGltZW91dCB9KTtcclxuXHJcbiAgICAgICAgc3VwZXIuaW5pdCh0aGlzLmRyaXZlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZGlzcG9zZVxyXG4gICAgICogQHN1bW1hcnkgRW5kcyB0aGUgY3VycmVudCBzZXNzaW9uLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cykge1xyXG4gICAgICAgIHN0YXR1cyA9IHN0YXR1cy50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICghWydDQU5DRUxFRCcsICdGQUlMRUQnXS5pbmNsdWRlcyhzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlU2Vzc2lvbiB3aWxsIHRha2UgNSBtaW4gdG8gY2FsbFxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0Vycm9yIGRpc3Bvc2luZyBkcml2ZXI6ICcgKyBlKTsgICAgLy8gaWdub3JlIGFueSBlcnJvcnMgYXQgZGlzcG9zYWwgc3RhZ2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgT3BlbnMgbmV3IHRyYW5zYWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHBlcnNpc3QgdGlsbCBhIG5ldyBvbmUgaXMgb3BlbmVkLiBUcmFuc2FjdGlvbiBuYW1lcyBtdXN0IGJlXHJcbiAgICAgKiAgICAgICAgICAgICAgdW5pcXVlLlxyXG4gICAgICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSB0cmFuc2FjdGlvbiBuYW1lLlxyXG4gICAgICovXHJcbiAgICB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZVxyXG4gICAgICovXHJcblxyXG4gICAgX2lzQWN0aW9uKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQUNUSU9OX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU2NyZWVuc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlKTtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIF9nZXRMb2dzKG5hbWUpIHtcclxuICAgIC8vICAgICBpZiAoIU5PX0xPR1NfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9ncygpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBfYWRqdXN0QXBwaXVtTG9nKGxvZywgc3JjKSB7XHJcbiAgICAgICAgaWYgKCFsb2cgfHwgdHlwZW9mIGxvZyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGNvbnZlcnQgbG9nLnRpbWVzdGFtcCBmcm9tIHRoZSBkZXZpY2UgdGltZSB6b25lIHRvIHRoZSBsb2NhbCBvbmUgKHNvIHdlIGNhbiBsYXRlciBjb3JyZWxhdGUgYmV0d2VlbiBzdGVwcyBhbmQgbG9ncykgICAgICAgIFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIG1zZzogbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwsXHJcbiAgICAgICAgICAgIHNyYzogc3JjXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uU3RhcnQoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgdHJhbnNhY3Rpb24gbmFtZSBzYXZlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gaWYgYW55XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWdub3JlIHRoZSByZXN0IGlmIG1vYiBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCBBcHBpdW0gbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QXBwaXVtTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IHRoaXMuZ2V0QXBwaXVtTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxvZ0VudHJ5IG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZ0VudHJ5LCAnYXBwaXVtJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBBcHBpdW0gbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcikge1xyXG4gICAgICAgIGlmICghbG9jYXRvcilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGFyZ3VtZW50IC0gbG9jYXRvciBub3Qgc3BlY2lmaWVkJyk7XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGxvY2F0b3IgPT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJy8nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGAvLypbQGlkPVwiJHtsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpfVwiXWA7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCduYW1lPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gJ1tuYW1lPVwiJyArIGxvY2F0b3Iuc3Vic3RyKCduYW1lPScubGVuZ3RoKSArICdcIl0nO1xyXG5cclxuICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEhlbHBlckZ1bmN0aW9ucygpIHtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSB0aGlzLl9nZXRXZGlvTG9jYXRvcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMubWF0Y2hQYXR0ZXJuID0gbW9kVXRpbHMubWF0Y2hQYXR0ZXJuO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0RWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5yZXN0b3JlVGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXI7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50VGltZW91dDtcclxuICAgIH1cclxufVxyXG5cclxuIl19