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,118 +0,0 @@
1
- "use strict";
2
-
3
- require("source-map-support/register");
4
-
5
- /*
6
- * Copyright (C) 2015-present CloudBeat Limited
7
- *
8
- * This program is free software: you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License as published by
10
- * the Free Software Foundation, either version 3 of the License, or
11
- * (at your option) any later version.
12
- */
13
-
14
- /**
15
- * @summary Waits for a window to appear, but doesn't actually switches to it.
16
- * @description `windowLocator` can be:
17
- * - `title=TITLE` Wait for the first window which matches the specified title. `TITLE` can be
18
- * any of the supported string matching patterns(see top of the page).
19
- * - `url=URL` Wait for the first window which matches the specified URL. `URL` can be
20
- * any of the supported string matching patterns(see top of the page).
21
- * @function waitForWindow
22
- * @param {String} windowLocator - A window locator.
23
- * @param {Number=} timeout - Timeout in milliseconds. Default is 60 seconds.
24
- * @example <caption>[javascript] Usage example</caption>
25
- * web.init();//Opens browser session.
26
- * web.open("www.yourwebsite.com");// Opens a website.
27
- * web.waitForWindow("title=Website");//Waits for a window to appear.
28
- */
29
- module.exports = async function (windowLocator, timeout) {
30
- this.helpers.assertArgumentTimeout(timeout, 'timeout');
31
- var currentHandle; // getWindowHandle() could possibly fail if there is no active window,
32
- // so we select the last opened one in such case
33
-
34
- try {
35
- currentHandle = await this.driver.getWindowHandle();
36
- } catch (err) {
37
- var wnds = await this.driver.getWindowHandles();
38
- await this.driver.switchToWindow(wnds[wnds.length - 1]);
39
- currentHandle = await this.driver.getWindowHandle();
40
- }
41
-
42
- if (windowLocator.indexOf('title=') === 0) {
43
- let pattern = windowLocator.substring('title='.length);
44
- timeout = !timeout ? this.waitForTimeout : timeout;
45
- let start = new Date().getTime();
46
-
47
- while (new Date().getTime() - start < timeout) {
48
- let windowHandles = await this.driver.getWindowHandles();
49
-
50
- for (let i = 0; i < windowHandles.length; i++) {
51
- let handle = windowHandles[i];
52
-
53
- try {
54
- await this.driver.switchToWindow(handle);
55
- } catch (err) {
56
- // in case window was closed
57
- continue;
58
- }
59
-
60
- let title = await this.driver.getTitle();
61
-
62
- if (this.helpers.matchPattern(title, pattern)) {
63
- try {
64
- await this.driver.switchToWindow(currentHandle); // return to original window
65
- } catch (err) {
66
- windowHandles = await this.driver.getWindowHandles();
67
- await this.driver.switchToWindow(windowHandles[windowHandles.length - 1]);
68
- }
69
-
70
- return;
71
- }
72
- }
73
-
74
- this.pause(1000);
75
- }
76
-
77
- throw new this.OxError(this.errHelper.errorCode.WINDOW_NOT_FOUND, `Unable to find window: ${windowLocator}`);
78
- } else if (windowLocator.indexOf('url=') === 0) {
79
- let pattern = windowLocator.substring('url='.length);
80
- timeout = !timeout ? this.waitForTimeout : timeout;
81
- let start = new Date().getTime();
82
-
83
- while (new Date().getTime() - start < timeout) {
84
- let windowHandles = await this.driver.getWindowHandles();
85
-
86
- for (let i = 0; i < windowHandles.length; i++) {
87
- let handle = windowHandles[i];
88
-
89
- try {
90
- await this.driver.switchToWindow(handle);
91
- } catch (err) {
92
- // in case window was closed
93
- continue;
94
- }
95
-
96
- let url = await this.driver.getUrl();
97
-
98
- if (this.helpers.matchPattern(url, pattern)) {
99
- try {
100
- await this.driver.switchToWindow(currentHandle); // return to original window
101
- } catch (err) {
102
- windowHandles = await this.driver.getWindowHandles();
103
- await this.driver.switchToWindow(windowHandles[windowHandles.length - 1]);
104
- }
105
-
106
- return;
107
- }
108
- }
109
-
110
- await this.pause(1000);
111
- }
112
-
113
- throw new this.OxError(this.errHelper.errorCode.WINDOW_NOT_FOUND, `Unable to find window: ${windowLocator}`);
114
- } else {
115
- throw new this.OxError(this.errHelper.errorCode.SCRIPT_ERROR, 'Invalid argument - windowLocator.');
116
- }
117
- };
118
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13ZWIvY29tbWFuZHMvd2FpdEZvcldpbmRvdy5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwid2luZG93TG9jYXRvciIsInRpbWVvdXQiLCJoZWxwZXJzIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiY3VycmVudEhhbmRsZSIsImRyaXZlciIsImdldFdpbmRvd0hhbmRsZSIsImVyciIsInduZHMiLCJnZXRXaW5kb3dIYW5kbGVzIiwic3dpdGNoVG9XaW5kb3ciLCJsZW5ndGgiLCJpbmRleE9mIiwicGF0dGVybiIsInN1YnN0cmluZyIsIndhaXRGb3JUaW1lb3V0Iiwic3RhcnQiLCJEYXRlIiwiZ2V0VGltZSIsIndpbmRvd0hhbmRsZXMiLCJpIiwiaGFuZGxlIiwidGl0bGUiLCJnZXRUaXRsZSIsIm1hdGNoUGF0dGVybiIsInBhdXNlIiwiT3hFcnJvciIsImVyckhlbHBlciIsImVycm9yQ29kZSIsIldJTkRPV19OT1RfRk9VTkQiLCJ1cmwiLCJnZXRVcmwiLCJTQ1JJUFRfRVJST1IiXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUIsZ0JBQWVDLGFBQWYsRUFBOEJDLE9BQTlCLEVBQXVDO0FBQ3BELE9BQUtDLE9BQUwsQ0FBYUMscUJBQWIsQ0FBbUNGLE9BQW5DLEVBQTRDLFNBQTVDO0FBQ0EsTUFBSUcsYUFBSixDQUZvRCxDQUlwRDtBQUNBOztBQUNBLE1BQUk7QUFDQUEsSUFBQUEsYUFBYSxHQUFHLE1BQU0sS0FBS0MsTUFBTCxDQUFZQyxlQUFaLEVBQXRCO0FBQ0gsR0FGRCxDQUVFLE9BQU9DLEdBQVAsRUFBWTtBQUNWLFFBQUlDLElBQUksR0FBRyxNQUFNLEtBQUtILE1BQUwsQ0FBWUksZ0JBQVosRUFBakI7QUFDQSxVQUFNLEtBQUtKLE1BQUwsQ0FBWUssY0FBWixDQUEyQkYsSUFBSSxDQUFDQSxJQUFJLENBQUNHLE1BQUwsR0FBYyxDQUFmLENBQS9CLENBQU47QUFDQVAsSUFBQUEsYUFBYSxHQUFHLE1BQU0sS0FBS0MsTUFBTCxDQUFZQyxlQUFaLEVBQXRCO0FBQ0g7O0FBRUQsTUFBSU4sYUFBYSxDQUFDWSxPQUFkLENBQXNCLFFBQXRCLE1BQW9DLENBQXhDLEVBQTJDO0FBQ3ZDLFFBQUlDLE9BQU8sR0FBR2IsYUFBYSxDQUFDYyxTQUFkLENBQXdCLFNBQVNILE1BQWpDLENBQWQ7QUFDQVYsSUFBQUEsT0FBTyxHQUFHLENBQUNBLE9BQUQsR0FBVyxLQUFLYyxjQUFoQixHQUFpQ2QsT0FBM0M7QUFDQSxRQUFJZSxLQUFLLEdBQUksSUFBSUMsSUFBSixFQUFELENBQWFDLE9BQWIsRUFBWjs7QUFDQSxXQUFRLElBQUlELElBQUosRUFBRCxDQUFhQyxPQUFiLEtBQXlCRixLQUF6QixHQUFpQ2YsT0FBeEMsRUFBaUQ7QUFDN0MsVUFBSWtCLGFBQWEsR0FBRyxNQUFNLEtBQUtkLE1BQUwsQ0FBWUksZ0JBQVosRUFBMUI7O0FBQ0EsV0FBSyxJQUFJVyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRCxhQUFhLENBQUNSLE1BQWxDLEVBQTBDUyxDQUFDLEVBQTNDLEVBQStDO0FBQzNDLFlBQUlDLE1BQU0sR0FBR0YsYUFBYSxDQUFDQyxDQUFELENBQTFCOztBQUNBLFlBQUk7QUFDQSxnQkFBTSxLQUFLZixNQUFMLENBQVlLLGNBQVosQ0FBMkJXLE1BQTNCLENBQU47QUFDSCxTQUZELENBRUUsT0FBT2QsR0FBUCxFQUFZO0FBQUU7QUFDWjtBQUNIOztBQUNELFlBQUllLEtBQUssR0FBRyxNQUFNLEtBQUtqQixNQUFMLENBQVlrQixRQUFaLEVBQWxCOztBQUNBLFlBQUksS0FBS3JCLE9BQUwsQ0FBYXNCLFlBQWIsQ0FBMEJGLEtBQTFCLEVBQWlDVCxPQUFqQyxDQUFKLEVBQStDO0FBQzNDLGNBQUk7QUFDQSxrQkFBTSxLQUFLUixNQUFMLENBQVlLLGNBQVosQ0FBMkJOLGFBQTNCLENBQU4sQ0FEQSxDQUNrRDtBQUNyRCxXQUZELENBRUUsT0FBT0csR0FBUCxFQUFZO0FBQ1ZZLFlBQUFBLGFBQWEsR0FBRyxNQUFNLEtBQUtkLE1BQUwsQ0FBWUksZ0JBQVosRUFBdEI7QUFDQSxrQkFBTSxLQUFLSixNQUFMLENBQVlLLGNBQVosQ0FBMkJTLGFBQWEsQ0FBQ0EsYUFBYSxDQUFDUixNQUFkLEdBQXVCLENBQXhCLENBQXhDLENBQU47QUFDSDs7QUFDRDtBQUNIO0FBQ0o7O0FBQ0QsV0FBS2MsS0FBTCxDQUFXLElBQVg7QUFDSDs7QUFDRCxVQUFNLElBQUksS0FBS0MsT0FBVCxDQUFpQixLQUFLQyxTQUFMLENBQWVDLFNBQWYsQ0FBeUJDLGdCQUExQyxFQUE2RCwwQkFBeUI3QixhQUFjLEVBQXBHLENBQU47QUFDSCxHQTNCRCxNQTJCTyxJQUFJQSxhQUFhLENBQUNZLE9BQWQsQ0FBc0IsTUFBdEIsTUFBa0MsQ0FBdEMsRUFBeUM7QUFDNUMsUUFBSUMsT0FBTyxHQUFHYixhQUFhLENBQUNjLFNBQWQsQ0FBd0IsT0FBT0gsTUFBL0IsQ0FBZDtBQUNBVixJQUFBQSxPQUFPLEdBQUcsQ0FBQ0EsT0FBRCxHQUFXLEtBQUtjLGNBQWhCLEdBQWlDZCxPQUEzQztBQUNBLFFBQUllLEtBQUssR0FBSSxJQUFJQyxJQUFKLEVBQUQsQ0FBYUMsT0FBYixFQUFaOztBQUNBLFdBQVEsSUFBSUQsSUFBSixFQUFELENBQWFDLE9BQWIsS0FBeUJGLEtBQXpCLEdBQWlDZixPQUF4QyxFQUFpRDtBQUM3QyxVQUFJa0IsYUFBYSxHQUFHLE1BQU0sS0FBS2QsTUFBTCxDQUFZSSxnQkFBWixFQUExQjs7QUFDQSxXQUFLLElBQUlXLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdELGFBQWEsQ0FBQ1IsTUFBbEMsRUFBMENTLENBQUMsRUFBM0MsRUFBK0M7QUFDM0MsWUFBSUMsTUFBTSxHQUFHRixhQUFhLENBQUNDLENBQUQsQ0FBMUI7O0FBQ0EsWUFBSTtBQUNBLGdCQUFNLEtBQUtmLE1BQUwsQ0FBWUssY0FBWixDQUEyQlcsTUFBM0IsQ0FBTjtBQUNILFNBRkQsQ0FFRSxPQUFPZCxHQUFQLEVBQVk7QUFBRTtBQUNaO0FBQ0g7O0FBQ0QsWUFBSXVCLEdBQUcsR0FBRyxNQUFNLEtBQUt6QixNQUFMLENBQVkwQixNQUFaLEVBQWhCOztBQUNBLFlBQUksS0FBSzdCLE9BQUwsQ0FBYXNCLFlBQWIsQ0FBMEJNLEdBQTFCLEVBQStCakIsT0FBL0IsQ0FBSixFQUE2QztBQUN6QyxjQUFJO0FBQ0Esa0JBQU0sS0FBS1IsTUFBTCxDQUFZSyxjQUFaLENBQTJCTixhQUEzQixDQUFOLENBREEsQ0FDa0Q7QUFDckQsV0FGRCxDQUVFLE9BQU9HLEdBQVAsRUFBWTtBQUNWWSxZQUFBQSxhQUFhLEdBQUcsTUFBTSxLQUFLZCxNQUFMLENBQVlJLGdCQUFaLEVBQXRCO0FBQ0Esa0JBQU0sS0FBS0osTUFBTCxDQUFZSyxjQUFaLENBQTJCUyxhQUFhLENBQUNBLGFBQWEsQ0FBQ1IsTUFBZCxHQUF1QixDQUF4QixDQUF4QyxDQUFOO0FBQ0g7O0FBQ0Q7QUFDSDtBQUNKOztBQUNELFlBQU0sS0FBS2MsS0FBTCxDQUFXLElBQVgsQ0FBTjtBQUNIOztBQUNELFVBQU0sSUFBSSxLQUFLQyxPQUFULENBQWlCLEtBQUtDLFNBQUwsQ0FBZUMsU0FBZixDQUF5QkMsZ0JBQTFDLEVBQTZELDBCQUF5QjdCLGFBQWMsRUFBcEcsQ0FBTjtBQUNILEdBM0JNLE1BMkJBO0FBQ0gsVUFBTSxJQUFJLEtBQUswQixPQUFULENBQWlCLEtBQUtDLFNBQUwsQ0FBZUMsU0FBZixDQUF5QkksWUFBMUMsRUFBd0QsbUNBQXhELENBQU47QUFDSDtBQUNKLENBdkVEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4gLyoqXHJcbiAgKiBAc3VtbWFyeSBXYWl0cyBmb3IgYSB3aW5kb3cgdG8gYXBwZWFyLCBidXQgZG9lc24ndCBhY3R1YWxseSBzd2l0Y2hlcyB0byBpdC5cclxuICAqIEBkZXNjcmlwdGlvbiBgd2luZG93TG9jYXRvcmAgY2FuIGJlOiAgXHJcbiAgKiAtIGB0aXRsZT1USVRMRWAgV2FpdCBmb3IgdGhlIGZpcnN0IHdpbmRvdyB3aGljaCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgdGl0bGUuIGBUSVRMRWAgY2FuIGJlIFxyXG4gICogYW55IG9mIHRoZSBzdXBwb3J0ZWQgIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJucyhzZWUgdG9wIG9mIHRoZSBwYWdlKS4gIFxyXG4gICogLSBgdXJsPVVSTGAgV2FpdCBmb3IgdGhlIGZpcnN0IHdpbmRvdyB3aGljaCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgVVJMLiBgVVJMYCBjYW4gYmUgXHJcbiAgKiBhbnkgb2YgdGhlIHN1cHBvcnRlZCBzdHJpbmcgbWF0Y2hpbmcgcGF0dGVybnMoc2VlIHRvcCBvZiB0aGUgcGFnZSkuXHJcbiAgKiBAZnVuY3Rpb24gd2FpdEZvcldpbmRvd1xyXG4gICogQHBhcmFtIHtTdHJpbmd9IHdpbmRvd0xvY2F0b3IgLSBBIHdpbmRvdyBsb2NhdG9yLlxyXG4gICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dCBpbiBtaWxsaXNlY29uZHMuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cclxuICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gKiB3ZWIuaW5pdCgpOy8vT3BlbnMgYnJvd3NlciBzZXNzaW9uLlxyXG4gKiB3ZWIub3BlbihcInd3dy55b3Vyd2Vic2l0ZS5jb21cIik7Ly8gT3BlbnMgYSB3ZWJzaXRlLlxyXG4gKiB3ZWIud2FpdEZvcldpbmRvdyhcInRpdGxlPVdlYnNpdGVcIik7Ly9XYWl0cyBmb3IgYSB3aW5kb3cgdG8gYXBwZWFyLlxyXG4gICovXHJcbm1vZHVsZS5leHBvcnRzID0gYXN5bmMgZnVuY3Rpb24od2luZG93TG9jYXRvciwgdGltZW91dCkge1xyXG4gICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgdmFyIGN1cnJlbnRIYW5kbGU7XHJcblxyXG4gICAgLy8gZ2V0V2luZG93SGFuZGxlKCkgY291bGQgcG9zc2libHkgZmFpbCBpZiB0aGVyZSBpcyBubyBhY3RpdmUgd2luZG93LFxyXG4gICAgLy8gc28gd2Ugc2VsZWN0IHRoZSBsYXN0IG9wZW5lZCBvbmUgaW4gc3VjaCBjYXNlXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGN1cnJlbnRIYW5kbGUgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRXaW5kb3dIYW5kbGUoKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIHZhciB3bmRzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0V2luZG93SGFuZGxlcygpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnN3aXRjaFRvV2luZG93KHduZHNbd25kcy5sZW5ndGggLSAxXSk7XHJcbiAgICAgICAgY3VycmVudEhhbmRsZSA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFdpbmRvd0hhbmRsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3dMb2NhdG9yLmluZGV4T2YoJ3RpdGxlPScpID09PSAwKSB7XHJcbiAgICAgICAgbGV0IHBhdHRlcm4gPSB3aW5kb3dMb2NhdG9yLnN1YnN0cmluZygndGl0bGU9Jy5sZW5ndGgpO1xyXG4gICAgICAgIHRpbWVvdXQgPSAhdGltZW91dCA/IHRoaXMud2FpdEZvclRpbWVvdXQgOiB0aW1lb3V0O1xyXG4gICAgICAgIGxldCBzdGFydCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgd2hpbGUgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSBzdGFydCA8IHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgbGV0IHdpbmRvd0hhbmRsZXMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRXaW5kb3dIYW5kbGVzKCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2luZG93SGFuZGxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGhhbmRsZSA9IHdpbmRvd0hhbmRsZXNbaV07XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnN3aXRjaFRvV2luZG93KGhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsgLy8gaW4gY2FzZSB3aW5kb3cgd2FzIGNsb3NlZFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0VGl0bGUoKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhlbHBlcnMubWF0Y2hQYXR0ZXJuKHRpdGxlLCBwYXR0ZXJuKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnN3aXRjaFRvV2luZG93KGN1cnJlbnRIYW5kbGUpOyAgLy8gcmV0dXJuIHRvIG9yaWdpbmFsIHdpbmRvd1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dIYW5kbGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0V2luZG93SGFuZGxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zd2l0Y2hUb1dpbmRvdyh3aW5kb3dIYW5kbGVzW3dpbmRvd0hhbmRsZXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wYXVzZSgxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IHRoaXMuT3hFcnJvcih0aGlzLmVyckhlbHBlci5lcnJvckNvZGUuV0lORE9XX05PVF9GT1VORCwgYFVuYWJsZSB0byBmaW5kIHdpbmRvdzogJHt3aW5kb3dMb2NhdG9yfWApO1xyXG4gICAgfSBlbHNlIGlmICh3aW5kb3dMb2NhdG9yLmluZGV4T2YoJ3VybD0nKSA9PT0gMCkge1xyXG4gICAgICAgIGxldCBwYXR0ZXJuID0gd2luZG93TG9jYXRvci5zdWJzdHJpbmcoJ3VybD0nLmxlbmd0aCk7XHJcbiAgICAgICAgdGltZW91dCA9ICF0aW1lb3V0ID8gdGhpcy53YWl0Rm9yVGltZW91dCA6IHRpbWVvdXQ7XHJcbiAgICAgICAgbGV0IHN0YXJ0ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcclxuICAgICAgICB3aGlsZSAoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHN0YXJ0IDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBsZXQgd2luZG93SGFuZGxlcyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFdpbmRvd0hhbmRsZXMoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3aW5kb3dIYW5kbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGFuZGxlID0gd2luZG93SGFuZGxlc1tpXTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc3dpdGNoVG9XaW5kb3coaGFuZGxlKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgeyAvLyBpbiBjYXNlIHdpbmRvdyB3YXMgY2xvc2VkXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0VXJsKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oZWxwZXJzLm1hdGNoUGF0dGVybih1cmwsIHBhdHRlcm4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc3dpdGNoVG9XaW5kb3coY3VycmVudEhhbmRsZSk7ICAvLyByZXR1cm4gdG8gb3JpZ2luYWwgd2luZG93XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd0hhbmRsZXMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRXaW5kb3dIYW5kbGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnN3aXRjaFRvV2luZG93KHdpbmRvd0hhbmRsZXNbd2luZG93SGFuZGxlcy5sZW5ndGggLSAxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBhdXNlKDEwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgdGhpcy5PeEVycm9yKHRoaXMuZXJySGVscGVyLmVycm9yQ29kZS5XSU5ET1dfTk9UX0ZPVU5ELCBgVW5hYmxlIHRvIGZpbmQgd2luZG93OiAke3dpbmRvd0xvY2F0b3J9YCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyB0aGlzLk94RXJyb3IodGhpcy5lcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSB3aW5kb3dMb2NhdG9yLicpO1xyXG4gICAgfVxyXG59OyJdfQ==