appium-safari-driver 3.0.1 → 3.1.1

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.
@@ -0,0 +1,30 @@
1
+ name: Release
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ branches: [ master ]
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: macos-latest
11
+ steps:
12
+ - uses: actions/checkout@v2
13
+ - name: Use Node.js 14.x
14
+ uses: actions/setup-node@v1
15
+ with:
16
+ node-version: 14.x
17
+ - run: npm install --production
18
+ name: Install prod dependencies
19
+ - run: rm -rf package-lock.json
20
+ - run: npm shrinkwrap
21
+ - run: npm install --no-package-lock
22
+ name: Install dev dependencies
23
+ - run: npm test
24
+ name: Run NPM Test
25
+ - run: npx semantic-release
26
+ env:
27
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
28
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
29
+ name: Release
30
+
package/.releaserc ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "plugins": [
3
+ ["@semantic-release/commit-analyzer", {
4
+ "preset": "angular",
5
+ "releaseRules": [
6
+ {"type": "chore", "release": "patch"}
7
+
8
+ ]
9
+ }],
10
+ "@semantic-release/npm",
11
+ "@semantic-release/release-notes-generator",
12
+ ["@semantic-release/git", {
13
+ "assets": ["docs", "package.json"],
14
+ "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
15
+ }],
16
+ "@semantic-release/github",
17
+ ]
18
+ }
package/README.md CHANGED
@@ -1,6 +1,11 @@
1
1
  Appium Safari Driver
2
2
  ====
3
3
 
4
+ [![NPM version](http://img.shields.io/npm/v/appium-safari-driver.svg)](https://npmjs.org/package/appium-safari-driver)
5
+ [![Downloads](http://img.shields.io/npm/dm/appium-safari-driver.svg)](https://npmjs.org/package/appium-safari-driver)
6
+
7
+ [![Release](https://github.com/appium/appium-safari-driver/actions/workflows/publish.js.yml/badge.svg)](https://github.com/appium/appium-safari-driver/actions/workflows/publish.js.yml)
8
+
4
9
  This is Appium driver for automating Safari on [macOS](https://developer.apple.com/documentation/webkit/testing_with_webdriver_in_safari?language=objc) and iOS [since version 13](https://webkit.org/blog/9395/webdriver-is-coming-to-safari-in-ios-13/).
5
10
  The driver only supports Safari automation using [W3C WebDriver protocol](https://www.w3.org/TR/webdriver/).
6
11
  Under the hood this driver is a wrapper/proxy over Apple's `safaridriver` binary. Check the output of `man safaridriver` command to get more details on the supported features and possible pitfalls.
@@ -146,3 +151,4 @@ def test_feature_status_page_filters(driver):
146
151
  npm install
147
152
  gulp watch
148
153
  ```
154
+
package/build/index.js CHANGED
@@ -49,4 +49,4 @@ var _default = _driver.default;
49
49
  exports.default = _default;require('source-map-support').install();
50
50
 
51
51
 
52
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRfSE9TVCIsIkRFRkFVTFRfUE9SVCIsIm1haW4iLCJnZXRBcmdWYWx1ZSIsImFyZ05hbWUiLCJhcmdJbmRleCIsInByb2Nlc3MiLCJhcmd2IiwiaW5kZXhPZiIsInBvcnQiLCJwYXJzZUludCIsImhvc3QiLCJyZXF1aXJlIiwibW9kdWxlIiwiU2FmYXJpRHJpdmVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFlBQVksR0FBRyxXQUFyQjtBQUNBLE1BQU1DLFlBQVksR0FBRyxJQUFyQjs7QUFFQSxlQUFlQyxJQUFmLEdBQXVCO0FBQ3JCLFFBQU1DLFdBQVcsR0FBSUMsT0FBRCxJQUFhO0FBQy9CLFVBQU1DLFFBQVEsR0FBR0MsT0FBTyxDQUFDQyxJQUFSLENBQWFDLE9BQWIsQ0FBcUJKLE9BQXJCLENBQWpCO0FBQ0EsV0FBT0MsUUFBUSxHQUFHLENBQVgsR0FBZUMsT0FBTyxDQUFDQyxJQUFSLENBQWFGLFFBQVEsR0FBRyxDQUF4QixDQUFmLEdBQTRDLElBQW5EO0FBQ0QsR0FIRDs7QUFJQSxRQUFNSSxJQUFJLEdBQUdDLFFBQVEsQ0FBQ1AsV0FBVyxDQUFDLFFBQUQsQ0FBWixFQUF3QixFQUF4QixDQUFSLElBQXVDRixZQUFwRDtBQUNBLFFBQU1VLElBQUksR0FBR1IsV0FBVyxDQUFDLFFBQUQsQ0FBWCxJQUF5QkgsWUFBdEM7QUFDQSxTQUFPLE1BQU0seUJBQVlTLElBQVosRUFBa0JFLElBQWxCLENBQWI7QUFDRDs7QUFFRCxJQUFJQyxPQUFPLENBQUNWLElBQVIsS0FBaUJXLE1BQXJCLEVBQTZCO0FBQzNCLDBCQUFTWCxJQUFUO0FBQ0Q7O2VBRWNZLGUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2FmYXJpRHJpdmVyIGZyb20gJy4vbGliL2RyaXZlcic7XG5pbXBvcnQgeyBzdGFydFNlcnZlciB9IGZyb20gJy4vbGliL3NlcnZlcic7XG5pbXBvcnQgeyBhc3luY2lmeSB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgREVGQVVMVF9IT1NUID0gJ2xvY2FsaG9zdCc7XG5jb25zdCBERUZBVUxUX1BPUlQgPSA0Nzk3O1xuXG5hc3luYyBmdW5jdGlvbiBtYWluICgpIHtcbiAgY29uc3QgZ2V0QXJnVmFsdWUgPSAoYXJnTmFtZSkgPT4ge1xuICAgIGNvbnN0IGFyZ0luZGV4ID0gcHJvY2Vzcy5hcmd2LmluZGV4T2YoYXJnTmFtZSk7XG4gICAgcmV0dXJuIGFyZ0luZGV4ID4gMCA/IHByb2Nlc3MuYXJndlthcmdJbmRleCArIDFdIDogbnVsbDtcbiAgfTtcbiAgY29uc3QgcG9ydCA9IHBhcnNlSW50KGdldEFyZ1ZhbHVlKCctLXBvcnQnKSwgMTApIHx8IERFRkFVTFRfUE9SVDtcbiAgY29uc3QgaG9zdCA9IGdldEFyZ1ZhbHVlKCctLWhvc3QnKSB8fCBERUZBVUxUX0hPU1Q7XG4gIHJldHVybiBhd2FpdCBzdGFydFNlcnZlcihwb3J0LCBob3N0KTtcbn1cblxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGFzeW5jaWZ5KG1haW4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTYWZhcmlEcml2ZXI7XG5leHBvcnQgeyBTYWZhcmlEcml2ZXIsIHN0YXJ0U2VydmVyIH07XG4iXSwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlUm9vdCI6Ii4uIn0=
52
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJERUZBVUxUX0hPU1QiLCJERUZBVUxUX1BPUlQiLCJtYWluIiwiZ2V0QXJnVmFsdWUiLCJhcmdOYW1lIiwiYXJnSW5kZXgiLCJwcm9jZXNzIiwiYXJndiIsImluZGV4T2YiLCJwb3J0IiwicGFyc2VJbnQiLCJob3N0IiwicmVxdWlyZSIsIm1vZHVsZSIsIlNhZmFyaURyaXZlciJdLCJzb3VyY2VSb290IjoiLi4iLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTYWZhcmlEcml2ZXIgZnJvbSAnLi9saWIvZHJpdmVyJztcbmltcG9ydCB7IHN0YXJ0U2VydmVyIH0gZnJvbSAnLi9saWIvc2VydmVyJztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuXG5jb25zdCBERUZBVUxUX0hPU1QgPSAnbG9jYWxob3N0JztcbmNvbnN0IERFRkFVTFRfUE9SVCA9IDQ3OTc7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4gKCkge1xuICBjb25zdCBnZXRBcmdWYWx1ZSA9IChhcmdOYW1lKSA9PiB7XG4gICAgY29uc3QgYXJnSW5kZXggPSBwcm9jZXNzLmFyZ3YuaW5kZXhPZihhcmdOYW1lKTtcbiAgICByZXR1cm4gYXJnSW5kZXggPiAwID8gcHJvY2Vzcy5hcmd2W2FyZ0luZGV4ICsgMV0gOiBudWxsO1xuICB9O1xuICBjb25zdCBwb3J0ID0gcGFyc2VJbnQoZ2V0QXJnVmFsdWUoJy0tcG9ydCcpLCAxMCkgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCBob3N0ID0gZ2V0QXJnVmFsdWUoJy0taG9zdCcpIHx8IERFRkFVTFRfSE9TVDtcbiAgcmV0dXJuIGF3YWl0IHN0YXJ0U2VydmVyKHBvcnQsIGhvc3QpO1xufVxuXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgYXN5bmNpZnkobWFpbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNhZmFyaURyaXZlcjtcbmV4cG9ydCB7IFNhZmFyaURyaXZlciwgc3RhcnRTZXJ2ZXIgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxZQUFZLEdBQUcsV0FBckI7QUFDQSxNQUFNQyxZQUFZLEdBQUcsSUFBckI7O0FBRUEsZUFBZUMsSUFBZixHQUF1QjtFQUNyQixNQUFNQyxXQUFXLEdBQUlDLE9BQUQsSUFBYTtJQUMvQixNQUFNQyxRQUFRLEdBQUdDLE9BQU8sQ0FBQ0MsSUFBUixDQUFhQyxPQUFiLENBQXFCSixPQUFyQixDQUFqQjtJQUNBLE9BQU9DLFFBQVEsR0FBRyxDQUFYLEdBQWVDLE9BQU8sQ0FBQ0MsSUFBUixDQUFhRixRQUFRLEdBQUcsQ0FBeEIsQ0FBZixHQUE0QyxJQUFuRDtFQUNELENBSEQ7O0VBSUEsTUFBTUksSUFBSSxHQUFHQyxRQUFRLENBQUNQLFdBQVcsQ0FBQyxRQUFELENBQVosRUFBd0IsRUFBeEIsQ0FBUixJQUF1Q0YsWUFBcEQ7RUFDQSxNQUFNVSxJQUFJLEdBQUdSLFdBQVcsQ0FBQyxRQUFELENBQVgsSUFBeUJILFlBQXRDO0VBQ0EsT0FBTyxNQUFNLHlCQUFZUyxJQUFaLEVBQWtCRSxJQUFsQixDQUFiO0FBQ0Q7O0FBRUQsSUFBSUMsT0FBTyxDQUFDVixJQUFSLEtBQWlCVyxNQUFyQixFQUE2QjtFQUMzQix3QkFBU1gsSUFBVDtBQUNEOztlQUVjWSxlIn0=
@@ -18,4 +18,4 @@ var _default = commands;
18
18
  exports.default = _default;require('source-map-support').install();
19
19
 
20
20
 
21
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb29raWVzLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiZGVsZXRlQ29va2llcyIsInNhZmFyaSIsInByb3h5IiwiY29tbWFuZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOzs7QUFFQUEsUUFBUSxDQUFDQyxhQUFULEdBQXlCLGVBQWVBLGFBQWYsR0FBZ0M7QUFDdkQsU0FBTyxNQUFNLEtBQUtDLE1BQUwsQ0FBWUMsS0FBWixDQUFrQkMsT0FBbEIsQ0FBMEIsU0FBMUIsRUFBcUMsUUFBckMsQ0FBYjtBQUNELENBRkQ7O2VBS2VKLFEiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBjb21tYW5kcyA9IHt9O1xuXG5jb21tYW5kcy5kZWxldGVDb29raWVzID0gYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ29va2llcyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnNhZmFyaS5wcm94eS5jb21tYW5kKCcvY29va2llJywgJ0RFTEVURScpO1xufTtcblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvY29va2llcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
21
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2Nvb2tpZXMuanMiLCJuYW1lcyI6WyJjb21tYW5kcyIsImRlbGV0ZUNvb2tpZXMiLCJzYWZhcmkiLCJwcm94eSIsImNvbW1hbmQiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvY29tbWFuZHMvY29va2llcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBjb21tYW5kcyA9IHt9O1xuXG5jb21tYW5kcy5kZWxldGVDb29raWVzID0gYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ29va2llcyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnNhZmFyaS5wcm94eS5jb21tYW5kKCcvY29va2llJywgJ0RFTEVURScpO1xufTtcblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxNQUFNQSxRQUFRLEdBQUcsRUFBakI7OztBQUVBQSxRQUFRLENBQUNDLGFBQVQsR0FBeUIsZUFBZUEsYUFBZixHQUFnQztFQUN2RCxPQUFPLE1BQU0sS0FBS0MsTUFBTCxDQUFZQyxLQUFaLENBQWtCQyxPQUFsQixDQUEwQixTQUExQixFQUFxQyxRQUFyQyxDQUFiO0FBQ0QsQ0FGRDs7ZUFLZUosUSJ9
@@ -25,4 +25,4 @@ var _default = commands;
25
25
  exports.default = _default;require('source-map-support').install();
26
26
 
27
27
 
28
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9maW5kLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiZmluZEVsT3JFbHMiLCJzdHJhdGVneSIsInNlbGVjdG9yIiwibXVsdCIsImNvbnRleHQiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsImVuZHBvaW50Iiwic2FmYXJpIiwicHJveHkiLCJjb21tYW5kIiwidXNpbmciLCJ2YWx1ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBR0EsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOzs7QUFHQUEsUUFBUSxDQUFDQyxXQUFULEdBQXVCLGVBQWVBLFdBQWYsQ0FBNEJDLFFBQTVCLEVBQXNDQyxRQUF0QyxFQUFnREMsSUFBaEQsRUFBc0RDLE9BQXRELEVBQStEO0FBQ3BGQSxFQUFBQSxPQUFPLEdBQUdDLGNBQUtDLGFBQUwsQ0FBbUJGLE9BQW5CLENBQVY7QUFDQSxRQUFNRyxRQUFRLEdBQUksV0FBVUgsT0FBTyxHQUFJLElBQUdBLE9BQVEsVUFBZixHQUEyQixFQUFHLEdBQUVELElBQUksR0FBRyxHQUFILEdBQVMsRUFBRyxFQUFuRjtBQUVBLFNBQU8sTUFBTSxLQUFLSyxNQUFMLENBQVlDLEtBQVosQ0FBa0JDLE9BQWxCLENBQTBCSCxRQUExQixFQUFvQyxNQUFwQyxFQUE0QztBQUN2REksSUFBQUEsS0FBSyxFQUFFVixRQURnRDtBQUV2RFcsSUFBQUEsS0FBSyxFQUFFVjtBQUZnRCxHQUE1QyxDQUFiO0FBSUQsQ0FSRDs7ZUFZZUgsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8vIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgbG9va3VwIGJ5IGltYWdlIHdvcmtpbmdcbmNvbW1hbmRzLmZpbmRFbE9yRWxzID0gYXN5bmMgZnVuY3Rpb24gZmluZEVsT3JFbHMgKHN0cmF0ZWd5LCBzZWxlY3RvciwgbXVsdCwgY29udGV4dCkge1xuICBjb250ZXh0ID0gdXRpbC51bndyYXBFbGVtZW50KGNvbnRleHQpO1xuICBjb25zdCBlbmRwb2ludCA9IGAvZWxlbWVudCR7Y29udGV4dCA/IGAvJHtjb250ZXh0fS9lbGVtZW50YCA6ICcnfSR7bXVsdCA/ICdzJyA6ICcnfWA7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuc2FmYXJpLnByb3h5LmNvbW1hbmQoZW5kcG9pbnQsICdQT1NUJywge1xuICAgIHVzaW5nOiBzdHJhdGVneSxcbiAgICB2YWx1ZTogc2VsZWN0b3IsXG4gIH0pO1xufTtcblxuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9maW5kLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
28
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2ZpbmQuanMiLCJuYW1lcyI6WyJjb21tYW5kcyIsImZpbmRFbE9yRWxzIiwic3RyYXRlZ3kiLCJzZWxlY3RvciIsIm11bHQiLCJjb250ZXh0IiwidXRpbCIsInVud3JhcEVsZW1lbnQiLCJlbmRwb2ludCIsInNhZmFyaSIsInByb3h5IiwiY29tbWFuZCIsInVzaW5nIiwidmFsdWUiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uIiwic291cmNlcyI6WyJsaWIvY29tbWFuZHMvZmluZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG4vLyBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIGxvb2t1cCBieSBpbWFnZSB3b3JraW5nXG5jb21tYW5kcy5maW5kRWxPckVscyA9IGFzeW5jIGZ1bmN0aW9uIGZpbmRFbE9yRWxzIChzdHJhdGVneSwgc2VsZWN0b3IsIG11bHQsIGNvbnRleHQpIHtcbiAgY29udGV4dCA9IHV0aWwudW53cmFwRWxlbWVudChjb250ZXh0KTtcbiAgY29uc3QgZW5kcG9pbnQgPSBgL2VsZW1lbnQke2NvbnRleHQgPyBgLyR7Y29udGV4dH0vZWxlbWVudGAgOiAnJ30ke211bHQgPyAncycgOiAnJ31gO1xuXG4gIHJldHVybiBhd2FpdCB0aGlzLnNhZmFyaS5wcm94eS5jb21tYW5kKGVuZHBvaW50LCAnUE9TVCcsIHtcbiAgICB1c2luZzogc3RyYXRlZ3ksXG4gICAgdmFsdWU6IHNlbGVjdG9yLFxuICB9KTtcbn07XG5cblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFHQSxNQUFNQSxRQUFRLEdBQUcsRUFBakI7OztBQUdBQSxRQUFRLENBQUNDLFdBQVQsR0FBdUIsZUFBZUEsV0FBZixDQUE0QkMsUUFBNUIsRUFBc0NDLFFBQXRDLEVBQWdEQyxJQUFoRCxFQUFzREMsT0FBdEQsRUFBK0Q7RUFDcEZBLE9BQU8sR0FBR0MsY0FBS0MsYUFBTCxDQUFtQkYsT0FBbkIsQ0FBVjtFQUNBLE1BQU1HLFFBQVEsR0FBSSxXQUFVSCxPQUFPLEdBQUksSUFBR0EsT0FBUSxVQUFmLEdBQTJCLEVBQUcsR0FBRUQsSUFBSSxHQUFHLEdBQUgsR0FBUyxFQUFHLEVBQW5GO0VBRUEsT0FBTyxNQUFNLEtBQUtLLE1BQUwsQ0FBWUMsS0FBWixDQUFrQkMsT0FBbEIsQ0FBMEJILFFBQTFCLEVBQW9DLE1BQXBDLEVBQTRDO0lBQ3ZESSxLQUFLLEVBQUVWLFFBRGdEO0lBRXZEVyxLQUFLLEVBQUVWO0VBRmdELENBQTVDLENBQWI7QUFJRCxDQVJEOztlQVllSCxRIn0=
@@ -22,4 +22,4 @@ var _default = commands;
22
22
  exports.default = _default;require('source-map-support').install();
23
23
 
24
24
 
25
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9pbmRleC5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsIk9iamVjdCIsImFzc2lnbiIsImZpbmRDbWRzIiwiY29va2llQ21kcyIsInJlY29yZFNjcmVlbkNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjs7QUFDQUMsTUFBTSxDQUFDQyxNQUFQLENBQ0VGLFFBREYsRUFFRUcsYUFGRixFQUdFQyxnQkFIRixFQUlFQyxxQkFKRjtlQVNlTCxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZpbmRDbWRzIGZyb20gJy4vZmluZCc7XG5pbXBvcnQgY29va2llQ21kcyBmcm9tICcuL2Nvb2tpZXMnO1xuaW1wb3J0IHJlY29yZFNjcmVlbkNvbW1hbmRzIGZyb20gJy4vcmVjb3JkLXNjcmVlbic7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5PYmplY3QuYXNzaWduKFxuICBjb21tYW5kcyxcbiAgZmluZENtZHMsXG4gIGNvb2tpZUNtZHMsXG4gIHJlY29yZFNjcmVlbkNvbW1hbmRzLFxuICAvLyBhZGQgb3RoZXIgY29tbWFuZCB0eXBlcyBoZXJlXG4pO1xuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9pbmRleC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
25
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2luZGV4LmpzIiwibmFtZXMiOlsiY29tbWFuZHMiLCJPYmplY3QiLCJhc3NpZ24iLCJmaW5kQ21kcyIsImNvb2tpZUNtZHMiLCJyZWNvcmRTY3JlZW5Db21tYW5kcyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZmluZENtZHMgZnJvbSAnLi9maW5kJztcbmltcG9ydCBjb29raWVDbWRzIGZyb20gJy4vY29va2llcyc7XG5pbXBvcnQgcmVjb3JkU2NyZWVuQ29tbWFuZHMgZnJvbSAnLi9yZWNvcmQtc2NyZWVuJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcbk9iamVjdC5hc3NpZ24oXG4gIGNvbW1hbmRzLFxuICBmaW5kQ21kcyxcbiAgY29va2llQ21kcyxcbiAgcmVjb3JkU2NyZWVuQ29tbWFuZHMsXG4gIC8vIGFkZCBvdGhlciBjb21tYW5kIHR5cGVzIGhlcmVcbik7XG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxRQUFRLEdBQUcsRUFBakI7O0FBQ0FDLE1BQU0sQ0FBQ0MsTUFBUCxDQUNFRixRQURGLEVBRUVHLGFBRkYsRUFHRUMsZ0JBSEYsRUFJRUMscUJBSkY7ZUFTZUwsUSJ9
@@ -15,8 +15,6 @@ var _support = require("@appium/support");
15
15
 
16
16
  var _asyncbox = require("asyncbox");
17
17
 
18
- var _logger = _interopRequireDefault(require("../logger"));
19
-
20
18
  var _nodeSimctl = _interopRequireDefault(require("node-simctl"));
21
19
 
22
20
  const commands = {};
@@ -28,12 +26,6 @@ const DEFAULT_EXT = '.mp4';
28
26
 
29
27
  async function uploadRecordedMedia(localFile, remotePath = null, uploadOptions = {}) {
30
28
  if (_lodash.default.isEmpty(remotePath)) {
31
- const {
32
- size
33
- } = await _support.fs.stat(localFile);
34
-
35
- _logger.default.debug(`The size of the resulting screen recording is ${_support.util.toReadableSizeString(size)}`);
36
-
37
29
  return (await _support.util.toInMemoryBase64(localFile)).toString();
38
30
  }
39
31
 
@@ -73,7 +65,8 @@ process.on('exit', () => {
73
65
  });
74
66
 
75
67
  class ScreenRecorder {
76
- constructor(udid, videoPath, opts = {}) {
68
+ constructor(udid, videoPath, log, opts = {}) {
69
+ this.log = log;
77
70
  this._process = null;
78
71
  this._udid = udid;
79
72
  this._videoPath = videoPath;
@@ -101,7 +94,7 @@ class ScreenRecorder {
101
94
 
102
95
  async _enforceTermination() {
103
96
  if (this.isRunning) {
104
- _logger.default.debug('Force-stopping the currently running video recording');
97
+ this.log.debug('Force-stopping the currently running video recording');
105
98
 
106
99
  try {
107
100
  await this._process.stop('SIGKILL');
@@ -139,14 +132,13 @@ class ScreenRecorder {
139
132
  args,
140
133
  asynchronous: true
141
134
  });
142
-
143
- _logger.default.debug(`Starting video recording with arguments: ${_support.util.quote(args)}`);
135
+ this.log.debug(`Starting video recording with arguments: ${_support.util.quote(args)}`);
144
136
 
145
137
  this._process.on('output', (stdout, stderr) => {
146
138
  const line = _lodash.default.trim(stdout || stderr);
147
139
 
148
140
  if (line) {
149
- _logger.default.debug(`[recordVideo@${this._udid.substring(0, 8)}] ${line}`);
141
+ this.log.debug(`[recordVideo@${this._udid.substring(0, 8)}] ${line}`);
150
142
  }
151
143
  });
152
144
 
@@ -154,11 +146,10 @@ class ScreenRecorder {
154
146
  this._process = null;
155
147
 
156
148
  if (code === 0) {
157
- _logger.default.debug('Screen recording exited without errors');
149
+ this.log.debug('Screen recording exited without errors');
158
150
  } else {
159
151
  await this._enforceTermination();
160
-
161
- _logger.default.warn(`Screen recording exited with error code ${code}, signal ${signal}`);
152
+ this.log.warn(`Screen recording exited with error code ${code}, signal ${signal}`);
162
153
  }
163
154
  });
164
155
 
@@ -177,8 +168,7 @@ class ScreenRecorder {
177
168
  });
178
169
  } catch (e) {
179
170
  await this._enforceTermination();
180
-
181
- _logger.default.errorAndThrow(`The expected screen record file '${this._videoPath}' does not exist after ${STARTUP_TIMEOUT_MS}ms. ` + `Check the server log for more details`);
171
+ this.log.errorAndThrow(`The expected screen record file '${this._videoPath}' does not exist after ${STARTUP_TIMEOUT_MS}ms. ` + `Check the server log for more details`);
182
172
  }
183
173
 
184
174
  this._timer = setTimeout(async () => {
@@ -186,12 +176,11 @@ class ScreenRecorder {
186
176
  try {
187
177
  await this.stop();
188
178
  } catch (e) {
189
- _logger.default.error(e);
179
+ this.log.error(e);
190
180
  }
191
181
  }
192
182
  }, this._timeLimitMs);
193
-
194
- _logger.default.info(`The video recording has started. Will timeout in ${this._timeLimitMs}ms`);
183
+ this.log.info(`The video recording has started. Will timeout in ${this._timeLimitMs}ms`);
195
184
  }
196
185
 
197
186
  async stop(force = false) {
@@ -205,8 +194,7 @@ class ScreenRecorder {
205
194
  }
206
195
 
207
196
  if (!this.isRunning) {
208
- _logger.default.debug('Screen recording is not running. Returning the recently recorded video');
209
-
197
+ this.log.debug('Screen recording is not running. Returning the recently recorded video');
210
198
  return await this.getVideoPath();
211
199
  }
212
200
 
@@ -263,16 +251,14 @@ commands.startRecordingScreen = async function startRecordingScreen(options = {}
263
251
  } = options;
264
252
 
265
253
  if ((_this$_screenRecorder = this._screenRecorder) !== null && _this$_screenRecorder !== void 0 && _this$_screenRecorder.isRunning) {
266
- _logger.default.info('The screen recording is already running');
254
+ this.log.info('The screen recording is already running');
267
255
 
268
256
  if (!forceRestart) {
269
- _logger.default.info('Doing nothing');
270
-
257
+ this.log.info('Doing nothing');
271
258
  return;
272
259
  }
273
260
 
274
- _logger.default.info('Forcing the active screen recording to stop');
275
-
261
+ this.log.info('Forcing the active screen recording to stop');
276
262
  await this._screenRecorder.stop(true);
277
263
  }
278
264
 
@@ -287,7 +273,7 @@ commands.startRecordingScreen = async function startRecordingScreen(options = {}
287
273
  prefix: _support.util.uuidV4().substring(0, 8),
288
274
  suffix: DEFAULT_EXT
289
275
  });
290
- this._screenRecorder = new ScreenRecorder(udid, videoPath, {
276
+ this._screenRecorder = new ScreenRecorder(udid, videoPath, this.log, {
291
277
  timeLimit: parseInt(timeLimit, 10),
292
278
  codec,
293
279
  display,
@@ -304,21 +290,25 @@ commands.startRecordingScreen = async function startRecordingScreen(options = {}
304
290
 
305
291
  commands.stopRecordingScreen = async function stopRecordingScreen(options = {}) {
306
292
  if (!this._screenRecorder) {
307
- _logger.default.info('No screen recording has been started. Doing nothing');
308
-
293
+ this.log.info('No screen recording has been started. Doing nothing');
309
294
  return '';
310
295
  }
311
296
 
312
- _logger.default.debug('Retrieving the resulting video data');
313
-
297
+ this.log.debug('Retrieving the resulting video data');
314
298
  const videoPath = await this._screenRecorder.stop();
315
299
 
316
300
  if (!videoPath) {
317
- _logger.default.info('No video data is found. Returning an empty string');
318
-
301
+ this.log.info('No video data is found. Returning an empty string');
319
302
  return '';
320
303
  }
321
304
 
305
+ if (_lodash.default.isEmpty(options.remotePath)) {
306
+ const {
307
+ size
308
+ } = await _support.fs.stat(videoPath);
309
+ this.log.debug(`The size of the resulting screen recording is ${_support.util.toReadableSizeString(size)}`);
310
+ }
311
+
322
312
  return await uploadRecordedMedia(videoPath, options.remotePath, options);
323
313
  };
324
314
 
@@ -326,4 +316,4 @@ var _default = commands;
326
316
  exports.default = _default;require('source-map-support').install();
327
317
 
328
318
 
329
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9yZWNvcmQtc2NyZWVuLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiU1RBUlRVUF9JTlRFUlZBTF9NUyIsIlNUQVJUVVBfVElNRU9VVF9NUyIsIkRFRkFVTFRfVElNRV9MSU1JVF9NUyIsIlBST0NFU1NfU0hVVERPV05fVElNRU9VVF9NUyIsIkRFRkFVTFRfRVhUIiwidXBsb2FkUmVjb3JkZWRNZWRpYSIsImxvY2FsRmlsZSIsInJlbW90ZVBhdGgiLCJ1cGxvYWRPcHRpb25zIiwiXyIsImlzRW1wdHkiLCJzaXplIiwiZnMiLCJzdGF0IiwibG9nIiwiZGVidWciLCJ1dGlsIiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJ0b0luTWVtb3J5QmFzZTY0IiwidG9TdHJpbmciLCJ1c2VyIiwicGFzcyIsIm1ldGhvZCIsImhlYWRlcnMiLCJmaWxlRmllbGROYW1lIiwiZm9ybUZpZWxkcyIsIm9wdGlvbnMiLCJhdXRoIiwibmV0IiwidXBsb2FkRmlsZSIsIlZJREVPX0ZJTEVTIiwiU2V0IiwicHJvY2VzcyIsIm9uIiwidmlkZW9GaWxlIiwicmltcmFmU3luYyIsImlnbiIsIlNjcmVlblJlY29yZGVyIiwiY29uc3RydWN0b3IiLCJ1ZGlkIiwidmlkZW9QYXRoIiwib3B0cyIsIl9wcm9jZXNzIiwiX3VkaWQiLCJfdmlkZW9QYXRoIiwiX2NvZGVjIiwiY29kZWMiLCJfZGlzcGxheSIsImRpc3BsYXkiLCJfbWFzayIsIm1hc2siLCJfdGltZUxpbWl0TXMiLCJ0aW1lTGltaXQiLCJfdGltZXIiLCJnZXRWaWRlb1BhdGgiLCJleGlzdHMiLCJhZGQiLCJpc1J1bm5pbmciLCJfZW5mb3JjZVRlcm1pbmF0aW9uIiwic3RvcCIsInJpbXJhZiIsImRlbGV0ZSIsInN0YXJ0IiwiYXJncyIsInB1c2giLCJTaW1jdGwiLCJleGVjIiwiYXN5bmNocm9ub3VzIiwicXVvdGUiLCJzdGRvdXQiLCJzdGRlcnIiLCJsaW5lIiwidHJpbSIsInN1YnN0cmluZyIsIm9uY2UiLCJjb2RlIiwic2lnbmFsIiwid2FybiIsIkVycm9yIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImUiLCJlcnJvckFuZFRocm93Iiwic2V0VGltZW91dCIsImVycm9yIiwiaW5mbyIsImZvcmNlIiwiY2xlYXJUaW1lb3V0IiwiZXh0cmFjdFNpbXVsYXRvclVkaWQiLCJjYXBzIiwiYWxsRGV2aWNlcyIsImZsYXRNYXAiLCJ2YWx1ZXMiLCJnZXREZXZpY2VzIiwibmFtZSIsInN0YXRlIiwic2RrIiwidG9Mb3dlciIsInN0YXJ0UmVjb3JkaW5nU2NyZWVuIiwiZm9yY2VSZXN0YXJ0IiwiX3NjcmVlblJlY29yZGVyIiwidGVtcERpciIsInBhdGgiLCJwcmVmaXgiLCJ1dWlkVjQiLCJzdWZmaXgiLCJwYXJzZUludCIsInN0b3BSZWNvcmRpbmdTY3JlZW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsUUFBUSxHQUFHLEVBQWpCO0FBRUEsTUFBTUMsbUJBQW1CLEdBQUcsR0FBNUI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxLQUFLLElBQWhDO0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsS0FBSyxFQUFMLEdBQVUsSUFBeEM7QUFDQSxNQUFNQywyQkFBMkIsR0FBRyxLQUFLLElBQXpDO0FBQ0EsTUFBTUMsV0FBVyxHQUFHLE1BQXBCOztBQUdBLGVBQWVDLG1CQUFmLENBQW9DQyxTQUFwQyxFQUErQ0MsVUFBVSxHQUFHLElBQTVELEVBQWtFQyxhQUFhLEdBQUcsRUFBbEYsRUFBc0Y7QUFDcEYsTUFBSUMsZ0JBQUVDLE9BQUYsQ0FBVUgsVUFBVixDQUFKLEVBQTJCO0FBQ3pCLFVBQU07QUFBQ0ksTUFBQUE7QUFBRCxRQUFTLE1BQU1DLFlBQUdDLElBQUgsQ0FBUVAsU0FBUixDQUFyQjs7QUFDQVEsb0JBQUlDLEtBQUosQ0FBVyxpREFBZ0RDLGNBQUtDLG9CQUFMLENBQTBCTixJQUExQixDQUFnQyxFQUEzRjs7QUFDQSxXQUFPLENBQUMsTUFBTUss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QVY7O0FBQ0EsUUFBTXlCLFNBQVMsR0FBRyxNQUFNLEtBQUs0RCxlQUFMLENBQXFCekMsSUFBckIsRUFBeEI7O0FBQ0EsTUFBSSxDQUFDbkIsU0FBTCxFQUFnQjtBQUNkMUIsb0JBQUl1RSxJQUFKLENBQVMsbURBQVQ7O0FBQ0EsV0FBTyxFQUFQO0FBQ0Q7O0FBQ0QsU0FBTyxNQUFNaEYsbUJBQW1CLENBQUNtQyxTQUFELEVBQVlkLE9BQU8sQ0FBQ25CLFVBQXBCLEVBQWdDbUIsT0FBaEMsQ0FBaEM7QUFDRCxDQWJEOztlQWVlM0IsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsLCBmcywgbmV0LCB0ZW1wRGlyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgU2ltY3RsIGZyb20gJ25vZGUtc2ltY3RsJztcblxuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5jb25zdCBTVEFSVFVQX0lOVEVSVkFMX01TID0gMzAwO1xuY29uc3QgU1RBUlRVUF9USU1FT1VUX01TID0gMTAgKiAxMDAwO1xuY29uc3QgREVGQVVMVF9USU1FX0xJTUlUX01TID0gNjAgKiAxMCAqIDEwMDA7IC8vIDEwIG1pbnV0ZXNcbmNvbnN0IFBST0NFU1NfU0hVVERPV05fVElNRU9VVF9NUyA9IDEwICogMTAwMDtcbmNvbnN0IERFRkFVTFRfRVhUID0gJy5tcDQnO1xuXG5cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZFJlY29yZGVkTWVkaWEgKGxvY2FsRmlsZSwgcmVtb3RlUGF0aCA9IG51bGwsIHVwbG9hZE9wdGlvbnMgPSB7fSkge1xuICBpZiAoXy5pc0VtcHR5KHJlbW90ZVBhdGgpKSB7XG4gICAgY29uc3Qge3NpemV9ID0gYXdhaXQgZnMuc3RhdChsb2NhbEZpbGUpO1xuICAgIGxvZy5kZWJ1ZyhgVGhlIHNpemUgb2YgdGhlIHJlc3VsdGluZyBzY3JlZW4gcmVjb3JkaW5nIGlzICR7dXRpbC50b1JlYWRhYmxlU2l6ZVN0cmluZyhzaXplKX1gKTtcbiAgICByZXR1cm4gKGF3YWl0IHV0aWwudG9Jbk1lbW9yeUJhc2U2NChsb2NhbEZpbGUpKS50b1N0cmluZygpO1xuICB9XG5cbiAgY29uc3Qge3VzZXIsIHBhc3MsIG1ldGhvZCwgaGVhZGVycywgZmlsZUZpZWxkTmFtZSwgZm9ybUZpZWxkc30gPSB1cGxvYWRPcHRpb25zO1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIG1ldGhvZDogbWV0aG9kIHx8ICdQVVQnLFxuICAgIGhlYWRlcnMsXG4gICAgZmlsZUZpZWxkTmFtZSxcbiAgICBmb3JtRmllbGRzLFxuICB9O1xuICBpZiAodXNlciAmJiBwYXNzKSB7XG4gICAgb3B0aW9ucy5hdXRoID0ge3VzZXIsIHBhc3N9O1xuICB9XG4gIGF3YWl0IG5ldC51cGxvYWRGaWxlKGxvY2FsRmlsZSwgcmVtb3RlUGF0aCwgb3B0aW9ucyk7XG4gIHJldHVybiAnJztcbn1cblxuY29uc3QgVklERU9fRklMRVMgPSBuZXcgU2V0KCk7XG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICBmb3IgKGNvbnN0IHZpZGVvRmlsZSBvZiBWSURFT19GSUxFUykge1xuICAgIHRyeSB7XG4gICAgICBmcy5yaW1yYWZTeW5jKHZpZGVvRmlsZSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG59KTtcblxuY2xhc3MgU2NyZWVuUmVjb3JkZXIge1xuICBjb25zdHJ1Y3RvciAodWRpZCwgdmlkZW9QYXRoLCBvcHRzID0ge30pIHtcbiAgICB0aGlzLl9wcm9jZXNzID0gbnVsbDtcbiAgICB0aGlzLl91ZGlkID0gdWRpZDtcbiAgICB0aGlzLl92aWRlb1BhdGggPSB2aWRlb1BhdGg7XG4gICAgdGhpcy5fY29kZWMgPSBvcHRzLmNvZGVjO1xuICAgIHRoaXMuX2Rpc3BsYXkgPSBvcHRzLmRpc3BsYXk7XG4gICAgdGhpcy5fbWFzayA9IG9wdHMubWFzaztcbiAgICB0aGlzLl90aW1lTGltaXRNcyA9IG9wdHMudGltZUxpbWl0ID4gMCA/IG9wdHMudGltZUxpbWl0ICogMTAwMCA6IERFRkFVTFRfVElNRV9MSU1JVF9NUztcbiAgICB0aGlzLl90aW1lciA9IG51bGw7XG4gIH1cblxuICBhc3luYyBnZXRWaWRlb1BhdGggKCkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHModGhpcy5fdmlkZW9QYXRoKSkge1xuICAgICAgVklERU9fRklMRVMuYWRkKHRoaXMuX3ZpZGVvUGF0aCk7XG4gICAgICByZXR1cm4gdGhpcy5fdmlkZW9QYXRoO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEodGhpcy5fcHJvY2Vzcz8uaXNSdW5uaW5nKTtcbiAgfVxuXG4gIGFzeW5jIF9lbmZvcmNlVGVybWluYXRpb24gKCkge1xuICAgIGlmICh0aGlzLmlzUnVubmluZykge1xuICAgICAgbG9nLmRlYnVnKCdGb3JjZS1zdG9wcGluZyB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdmlkZW8gcmVjb3JkaW5nJyk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLl9wcm9jZXNzLnN0b3AoJ1NJR0tJTEwnKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9XG4gICAgdGhpcy5fcHJvY2VzcyA9IG51bGw7XG4gICAgY29uc3QgdmlkZW9QYXRoID0gYXdhaXQgdGhpcy5nZXRWaWRlb1BhdGgoKTtcbiAgICBpZiAodmlkZW9QYXRoKSB7XG4gICAgICBhd2FpdCBmcy5yaW1yYWYodmlkZW9QYXRoKTtcbiAgICAgIFZJREVPX0ZJTEVTLmRlbGV0ZSh2aWRlb1BhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBhc3luYyBzdGFydCAoKSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgIHRoaXMuX3VkaWQsICdyZWNvcmRWaWRlbydcbiAgICBdO1xuICAgIGlmICh0aGlzLl9kaXNwbGF5KSB7XG4gICAgICBhcmdzLnB1c2goJy0tZGlzcGxheScsIHRoaXMuX2Rpc3BsYXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29kZWMpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1jb2RlYycsIHRoaXMuX2NvZGVjKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX21hc2spIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1tYXNrJywgdGhpcy5fbWFzayk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLS1mb3JjZScsIHRoaXMuX3ZpZGVvUGF0aCk7XG4gICAgdGhpcy5fcHJvY2VzcyA9IGF3YWl0IG5ldyBTaW1jdGwoKS5leGVjKCdpbycsIHtcbiAgICAgIGFyZ3MsXG4gICAgICBhc3luY2hyb25vdXM6IHRydWUsXG4gICAgfSk7XG4gICAgbG9nLmRlYnVnKGBTdGFydGluZyB2aWRlbyByZWNvcmRpbmcgd2l0aCBhcmd1bWVudHM6ICR7dXRpbC5xdW90ZShhcmdzKX1gKTtcbiAgICB0aGlzLl9wcm9jZXNzLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgIGNvbnN0IGxpbmUgPSBfLnRyaW0oc3Rkb3V0IHx8IHN0ZGVycik7XG4gICAgICBpZiAobGluZSkge1xuICAgICAgICBsb2cuZGVidWcoYFtyZWNvcmRWaWRlb0Ake3RoaXMuX3VkaWQuc3Vic3RyaW5nKDAsIDgpfV0gJHtsaW5lfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX3Byb2Nlc3Mub25jZSgnZXhpdCcsIGFzeW5jIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgIHRoaXMuX3Byb2Nlc3MgPSBudWxsO1xuICAgICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgICAgbG9nLmRlYnVnKCdTY3JlZW4gcmVjb3JkaW5nIGV4aXRlZCB3aXRob3V0IGVycm9ycycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5fZW5mb3JjZVRlcm1pbmF0aW9uKCk7XG4gICAgICAgIGxvZy53YXJuKGBTY3JlZW4gcmVjb3JkaW5nIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHtjb2RlfSwgc2lnbmFsICR7c2lnbmFsfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3Muc3RhcnQoMCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICEhKGF3YWl0IHRoaXMuZ2V0VmlkZW9QYXRoKCkpO1xuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IFNUQVJUVVBfVElNRU9VVF9NUyxcbiAgICAgICAgaW50ZXJ2YWxNczogU1RBUlRVUF9JTlRFUlZBTF9NUyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2VuZm9yY2VUZXJtaW5hdGlvbigpO1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYFRoZSBleHBlY3RlZCBzY3JlZW4gcmVjb3JkIGZpbGUgJyR7dGhpcy5fdmlkZW9QYXRofScgZG9lcyBub3QgZXhpc3QgYWZ0ZXIgJHtTVEFSVFVQX1RJTUVPVVRfTVN9bXMuIGAgK1xuICAgICAgICBgQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgIH1cbiAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdG9wKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB0aGlzLl90aW1lTGltaXRNcyk7XG4gICAgbG9nLmluZm8oYFRoZSB2aWRlbyByZWNvcmRpbmcgaGFzIHN0YXJ0ZWQuIFdpbGwgdGltZW91dCBpbiAke3RoaXMuX3RpbWVMaW1pdE1zfW1zYCk7XG4gIH1cblxuICBhc3luYyBzdG9wIChmb3JjZSA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuX3RpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChmb3JjZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2VuZm9yY2VUZXJtaW5hdGlvbigpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIGxvZy5kZWJ1ZygnU2NyZWVuIHJlY29yZGluZyBpcyBub3QgcnVubmluZy4gUmV0dXJuaW5nIHRoZSByZWNlbnRseSByZWNvcmRlZCB2aWRlbycpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0VmlkZW9QYXRoKCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3Muc3RvcCgnU0lHSU5UJywgUFJPQ0VTU19TSFVURE9XTl9USU1FT1VUX01TKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLl9lbmZvcmNlVGVybWluYXRpb24oKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2NyZWVuIHJlY29yZGluZyBoYXMgZmFpbGVkIHRvIHN0b3AgYWZ0ZXIgJHtQUk9DRVNTX1NIVVRET1dOX1RJTUVPVVRfTVN9bXNgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWRlb1BhdGgoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0U2ltdWxhdG9yVWRpZCAoY2Fwcykge1xuICBpZiAoY2Fwc1snc2FmYXJpOnVzZVNpbXVsYXRvciddID09PSBmYWxzZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgYWxsRGV2aWNlcyA9IF8uZmxhdE1hcChfLnZhbHVlcyhhd2FpdCBuZXcgU2ltY3RsKCkuZ2V0RGV2aWNlcyhudWxsLCAnaU9TJykpKTtcbiAgZm9yIChjb25zdCB7bmFtZSwgdWRpZCwgc3RhdGUsIHNka30gb2YgYWxsRGV2aWNlcykge1xuICAgIGlmIChzdGF0ZSAhPT0gJ0Jvb3RlZCcpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChfLnRvTG93ZXIoY2Fwc1snc2FmYXJpOmRldmljZVVESUQnXSkgPT09IF8udG9Mb3dlcih1ZGlkKSkge1xuICAgICAgcmV0dXJuIHVkaWQ7XG4gICAgfVxuICAgIGlmIChfLnRvTG93ZXIoY2Fwc1snc2FmYXJpOmRldmljZU5hbWUnXSkgPT09IF8udG9Mb3dlcihuYW1lKSAmJlxuICAgICAgKGNhcHNbJ3NhZmFyaTpwbGF0Zm9ybVZlcnNpb24nXSAmJiBjYXBzWydzYWZhcmk6cGxhdGZvcm1WZXJzaW9uJ10gPT09IHNka1xuICAgICAgICB8fCAhY2Fwc1snc2FmYXJpOnBsYXRmb3JtVmVyc2lvbiddKSkge1xuICAgICAgcmV0dXJuIHVkaWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFydFJlY29yZGluZ09wdGlvbnNcbiAqXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvZGVjIFtoZXZjXSAtIFNwZWNpZmllcyB0aGUgY29kZWMgdHlwZTogXCJoMjY0XCIgb3IgXCJoZXZjXCJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZGlzcGxheSBbaW50ZXJuYWxdIC0gU3VwcG9ydHMgXCJpbnRlcm5hbFwiIG9yIFwiZXh0ZXJuYWxcIi4gRGVmYXVsdCBpcyBcImludGVybmFsXCJcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWFzayAtIEZvciBub24tcmVjdGFuZ3VsYXIgZGlzcGxheXMsIGhhbmRsZSB0aGUgbWFzayBieSBwb2xpY3k6XG4gKiAtIGlnbm9yZWQ6IFRoZSBtYXNrIGlzIGlnbm9yZWQgYW5kIHRoZSB1bm1hc2tlZCBmcmFtZWJ1ZmZlciBpcyBzYXZlZC5cbiAqIC0gYWxwaGE6IE5vdCBzdXBwb3J0ZWQsIGJ1dCByZXRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eTsgdGhlIG1hc2sgaXMgcmVuZGVyZWQgYmxhY2suXG4gKiAtIGJsYWNrOiBUaGUgbWFzayBpcyByZW5kZXJlZCBibGFjay5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bWJlcn0gdGltZUxpbWl0IFs2MDBdIC0gVGhlIG1heGltdW0gcmVjb3JkaW5nIHRpbWUsIGluIHNlY29uZHMuIFRoZSBkZWZhdWx0XG4gKiB2YWx1ZSBpcyA2MDAgc2Vjb25kcyAoMTAgbWludXRlcykuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGZvcmNlUmVzdGFydCBbdHJ1ZV0gLSBXaGV0aGVyIHRvIGlnbm9yZSB0aGUgY2FsbCBpZiBhIHNjcmVlbiByZWNvcmRpbmcgaXMgY3VycmVudGx5IHJ1bm5pbmdcbiAqIChgZmFsc2VgKSBvciB0byBzdGFydCBhIG5ldyByZWNvcmRpbmcgaW1tZWRpYXRlbHkgYW5kIHRlcm1pbmF0ZSB0aGUgZXhpc3Rpbmcgb25lIGlmIHJ1bm5pbmcgKGB0cnVlYCkuXG4gKi9cblxuLyoqXG4gKiBSZWNvcmQgdGhlIFNpbXVsYXRvcidzIGRpc3BsYXkgaW4gYmFja2dyb3VuZCB3aGlsZSB0aGUgYXV0b21hdGVkIHRlc3QgaXMgcnVubmluZy5cbiAqIFRoaXMgbWV0aG9kIHVzZXMgYHhjcnVuIHNpbWN0bCBpbyByZWNvcmRWaWRlb2AgaGVscGVyIHVuZGVyIHRoZSBob29kLlxuICogQ2hlY2sgdGhlIG91dHB1dCBvZiBgeGNydW4gc2ltY3RsIGlvYCBjb21tYW5kIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHs/U3RhcnRSZWNvcmRpbmdPcHRpb25zfSBvcHRpb25zIC0gVGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICogQHRocm93cyB7RXJyb3J9IElmIHNjcmVlbiByZWNvcmRpbmcgaGFzIGZhaWxlZCB0byBzdGFydCBvciBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgZGVzdGluYXRpb24gZGV2aWNlLlxuICovXG5jb21tYW5kcy5zdGFydFJlY29yZGluZ1NjcmVlbiA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0UmVjb3JkaW5nU2NyZWVuIChvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRpbWVMaW1pdCxcbiAgICBjb2RlYyxcbiAgICBkaXNwbGF5LFxuICAgIG1hc2ssXG4gICAgZm9yY2VSZXN0YXJ0ID0gdHJ1ZSxcbiAgfSA9IG9wdGlvbnM7XG4gIGlmICh0aGlzLl9zY3JlZW5SZWNvcmRlcj8uaXNSdW5uaW5nKSB7XG4gICAgbG9nLmluZm8oJ1RoZSBzY3JlZW4gcmVjb3JkaW5nIGlzIGFscmVhZHkgcnVubmluZycpO1xuICAgIGlmICghZm9yY2VSZXN0YXJ0KSB7XG4gICAgICBsb2cuaW5mbygnRG9pbmcgbm90aGluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2cuaW5mbygnRm9yY2luZyB0aGUgYWN0aXZlIHNjcmVlbiByZWNvcmRpbmcgdG8gc3RvcCcpO1xuICAgIGF3YWl0IHRoaXMuX3NjcmVlblJlY29yZGVyLnN0b3AodHJ1ZSk7XG4gIH1cbiAgdGhpcy5fc2NyZWVuUmVjb3JkZXIgPSBudWxsO1xuXG4gIGNvbnN0IHVkaWQgPSBhd2FpdCBleHRyYWN0U2ltdWxhdG9yVWRpZCh0aGlzLmNhcHMpO1xuICBpZiAoIXVkaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZXRlcm1pbmUgU2ltdWxhdG9yIFVESUQgdG8gcmVjb3JkIHRoZSB2aWRlbyBmcm9tLiAnICtcbiAgICAgICdEb3VibGUgY2hlY2sgeW91ciBzZXNzaW9uIGNhcGFiaWxpdGllcycpO1xuICB9XG5cbiAgY29uc3QgdmlkZW9QYXRoID0gYXdhaXQgdGVtcERpci5wYXRoKHtcbiAgICBwcmVmaXg6IHV0aWwudXVpZFY0KCkuc3Vic3RyaW5nKDAsIDgpLFxuICAgIHN1ZmZpeDogREVGQVVMVF9FWFQsXG4gIH0pO1xuICB0aGlzLl9zY3JlZW5SZWNvcmRlciA9IG5ldyBTY3JlZW5SZWNvcmRlcih1ZGlkLCB2aWRlb1BhdGgsIHtcbiAgICB0aW1lTGltaXQ6IHBhcnNlSW50KHRpbWVMaW1pdCwgMTApLFxuICAgIGNvZGVjLFxuICAgIGRpc3BsYXksXG4gICAgbWFzayxcbiAgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5fc2NyZWVuUmVjb3JkZXIuc3RhcnQoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRoaXMuX3NjcmVlblJlY29yZGVyID0gbnVsbDtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0b3BSZWNvcmRpbmdPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSByZW1vdGVQYXRoIC0gVGhlIHBhdGggdG8gdGhlIHJlbW90ZSBsb2NhdGlvbiwgd2hlcmUgdGhlIHJlc3VsdGluZyB2aWRlbyBzaG91bGQgYmUgdXBsb2FkZWQuXG4gKiBUaGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgc3VwcG9ydGVkOiBodHRwL2h0dHBzLCBmdHAuXG4gKiBOdWxsIG9yIGVtcHR5IHN0cmluZyB2YWx1ZSAodGhlIGRlZmF1bHQgc2V0dGluZykgbWVhbnMgdGhlIGNvbnRlbnQgb2YgcmVzdWx0aW5nXG4gKiBmaWxlIHNob3VsZCBiZSBlbmNvZGVkIGFzIEJhc2U2NCBhbmQgcGFzc2VkIGFzIHRoZSBlbmRwb2ludCByZXNwb25zZSB2YWx1ZS5cbiAqIEFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiB0aGUgZ2VuZXJhdGVkIG1lZGlhIGZpbGUgaXMgdG9vIGJpZyB0b1xuICogZml0IGludG8gdGhlIGF2YWlsYWJsZSBwcm9jZXNzIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdXNlciAtIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwYXNzIC0gVGhlIHBhc3N3b3JkIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtZXRob2QgLSBUaGUgaHR0cCBtdWx0aXBhcnQgdXBsb2FkIG1ldGhvZCBuYW1lLiBUaGUgJ1BVVCcgb25lIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7P09iamVjdH0gaGVhZGVycyAtIEFkZGl0aW9uYWwgaGVhZGVycyBtYXBwaW5nIGZvciBtdWx0aXBhcnQgaHR0cChzKSB1cGxvYWRzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZpbGVGaWVsZE5hbWUgW2ZpbGVdIC0gVGhlIG5hbWUgb2YgdGhlIGZvcm0gZmllbGQsIHdoZXJlIHRoZSBmaWxlIGNvbnRlbnQgQkxPQiBzaG91bGQgYmUgc3RvcmVkIGZvclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAocykgdXBsb2Fkc1xuICogQHByb3BlcnR5IHs/T2JqZWN0fEFycmF5PFBhaXI+fSBmb3JtRmllbGRzIC0gQWRkaXRpb25hbCBmb3JtIGZpZWxkcyBmb3IgbXVsdGlwYXJ0IGh0dHAocykgdXBsb2Fkc1xuICovXG5cbi8qKlxuICogU3RvcCByZWNvcmRpbmcgdGhlIHNjcmVlbi5cbiAqIElmIG5vIHNjcmVlbiByZWNvcmRpbmcgaGFzIGJlZW4gc3RhcnRlZCBiZWZvcmUgdGhlbiB0aGUgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7P1N0b3BSZWNvcmRpbmdPcHRpb25zfSBvcHRpb25zIC0gVGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0LWVuY29kZWQgY29udGVudCBvZiB0aGUgcmVjb3JkZWQgbWVkaWEgZmlsZSBpZiAncmVtb3RlUGF0aCdcbiAqIHBhcmFtZXRlciBpcyBmYWxzeSBvciBhbiBlbXB0eSBzdHJpbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIG5hbWUgb2YgYSBtZWRpYSBmaWxlXG4gKiBvciB0aGUgZmlsZSBjb250ZW50IGNhbm5vdCBiZSB1cGxvYWRlZCB0byB0aGUgcmVtb3RlIGxvY2F0aW9uXG4gKiBvciBzY3JlZW4gcmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICovXG5jb21tYW5kcy5zdG9wUmVjb3JkaW5nU2NyZWVuID0gYXN5bmMgZnVuY3Rpb24gc3RvcFJlY29yZGluZ1NjcmVlbiAob3B0aW9ucyA9IHt9KSB7XG4gIGlmICghdGhpcy5fc2NyZWVuUmVjb3JkZXIpIHtcbiAgICBsb2cuaW5mbygnTm8gc2NyZWVuIHJlY29yZGluZyBoYXMgYmVlbiBzdGFydGVkLiBEb2luZyBub3RoaW5nJyk7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdSZXRyaWV2aW5nIHRoZSByZXN1bHRpbmcgdmlkZW8gZGF0YScpO1xuICBjb25zdCB2aWRlb1BhdGggPSBhd2FpdCB0aGlzLl9zY3JlZW5SZWNvcmRlci5zdG9wKCk7XG4gIGlmICghdmlkZW9QYXRoKSB7XG4gICAgbG9nLmluZm8oJ05vIHZpZGVvIGRhdGEgaXMgZm91bmQuIFJldHVybmluZyBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHVwbG9hZFJlY29yZGVkTWVkaWEodmlkZW9QYXRoLCBvcHRpb25zLnJlbW90ZVBhdGgsIG9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9yZWNvcmQtc2NyZWVuLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
319
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL3JlY29yZC1zY3JlZW4uanMiLCJuYW1lcyI6WyJjb21tYW5kcyIsIlNUQVJUVVBfSU5URVJWQUxfTVMiLCJTVEFSVFVQX1RJTUVPVVRfTVMiLCJERUZBVUxUX1RJTUVfTElNSVRfTVMiLCJQUk9DRVNTX1NIVVRET1dOX1RJTUVPVVRfTVMiLCJERUZBVUxUX0VYVCIsInVwbG9hZFJlY29yZGVkTWVkaWEiLCJsb2NhbEZpbGUiLCJyZW1vdGVQYXRoIiwidXBsb2FkT3B0aW9ucyIsIl8iLCJpc0VtcHR5IiwidXRpbCIsInRvSW5NZW1vcnlCYXNlNjQiLCJ0b1N0cmluZyIsInVzZXIiLCJwYXNzIiwibWV0aG9kIiwiaGVhZGVycyIsImZpbGVGaWVsZE5hbWUiLCJmb3JtRmllbGRzIiwib3B0aW9ucyIsImF1dGgiLCJuZXQiLCJ1cGxvYWRGaWxlIiwiVklERU9fRklMRVMiLCJTZXQiLCJwcm9jZXNzIiwib24iLCJ2aWRlb0ZpbGUiLCJmcyIsInJpbXJhZlN5bmMiLCJpZ24iLCJTY3JlZW5SZWNvcmRlciIsImNvbnN0cnVjdG9yIiwidWRpZCIsInZpZGVvUGF0aCIsImxvZyIsIm9wdHMiLCJfcHJvY2VzcyIsIl91ZGlkIiwiX3ZpZGVvUGF0aCIsIl9jb2RlYyIsImNvZGVjIiwiX2Rpc3BsYXkiLCJkaXNwbGF5IiwiX21hc2siLCJtYXNrIiwiX3RpbWVMaW1pdE1zIiwidGltZUxpbWl0IiwiX3RpbWVyIiwiZ2V0VmlkZW9QYXRoIiwiZXhpc3RzIiwiYWRkIiwiaXNSdW5uaW5nIiwiX2VuZm9yY2VUZXJtaW5hdGlvbiIsImRlYnVnIiwic3RvcCIsInJpbXJhZiIsImRlbGV0ZSIsInN0YXJ0IiwiYXJncyIsInB1c2giLCJTaW1jdGwiLCJleGVjIiwiYXN5bmNocm9ub3VzIiwicXVvdGUiLCJzdGRvdXQiLCJzdGRlcnIiLCJsaW5lIiwidHJpbSIsInN1YnN0cmluZyIsIm9uY2UiLCJjb2RlIiwic2lnbmFsIiwid2FybiIsIkVycm9yIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImUiLCJlcnJvckFuZFRocm93Iiwic2V0VGltZW91dCIsImVycm9yIiwiaW5mbyIsImZvcmNlIiwiY2xlYXJUaW1lb3V0IiwiZXh0cmFjdFNpbXVsYXRvclVkaWQiLCJjYXBzIiwiYWxsRGV2aWNlcyIsImZsYXRNYXAiLCJ2YWx1ZXMiLCJnZXREZXZpY2VzIiwibmFtZSIsInN0YXRlIiwic2RrIiwidG9Mb3dlciIsInN0YXJ0UmVjb3JkaW5nU2NyZWVuIiwiZm9yY2VSZXN0YXJ0IiwiX3NjcmVlblJlY29yZGVyIiwidGVtcERpciIsInBhdGgiLCJwcmVmaXgiLCJ1dWlkVjQiLCJzdWZmaXgiLCJwYXJzZUludCIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJzaXplIiwic3RhdCIsInRvUmVhZGFibGVTaXplU3RyaW5nIl0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL2NvbW1hbmRzL3JlY29yZC1zY3JlZW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwsIGZzLCBuZXQsIHRlbXBEaXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBTaW1jdGwgZnJvbSAnbm9kZS1zaW1jdGwnO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmNvbnN0IFNUQVJUVVBfSU5URVJWQUxfTVMgPSAzMDA7XG5jb25zdCBTVEFSVFVQX1RJTUVPVVRfTVMgPSAxMCAqIDEwMDA7XG5jb25zdCBERUZBVUxUX1RJTUVfTElNSVRfTVMgPSA2MCAqIDEwICogMTAwMDsgLy8gMTAgbWludXRlc1xuY29uc3QgUFJPQ0VTU19TSFVURE9XTl9USU1FT1VUX01TID0gMTAgKiAxMDAwO1xuY29uc3QgREVGQVVMVF9FWFQgPSAnLm1wNCc7XG5cblxuYXN5bmMgZnVuY3Rpb24gdXBsb2FkUmVjb3JkZWRNZWRpYSAobG9jYWxGaWxlLCByZW1vdGVQYXRoID0gbnVsbCwgdXBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIGlmIChfLmlzRW1wdHkocmVtb3RlUGF0aCkpIHtcbiAgICByZXR1cm4gKGF3YWl0IHV0aWwudG9Jbk1lbW9yeUJhc2U2NChsb2NhbEZpbGUpKS50b1N0cmluZygpO1xuICB9XG5cbiAgY29uc3Qge3VzZXIsIHBhc3MsIG1ldGhvZCwgaGVhZGVycywgZmlsZUZpZWxkTmFtZSwgZm9ybUZpZWxkc30gPSB1cGxvYWRPcHRpb25zO1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIG1ldGhvZDogbWV0aG9kIHx8ICdQVVQnLFxuICAgIGhlYWRlcnMsXG4gICAgZmlsZUZpZWxkTmFtZSxcbiAgICBmb3JtRmllbGRzLFxuICB9O1xuICBpZiAodXNlciAmJiBwYXNzKSB7XG4gICAgb3B0aW9ucy5hdXRoID0ge3VzZXIsIHBhc3N9O1xuICB9XG4gIGF3YWl0IG5ldC51cGxvYWRGaWxlKGxvY2FsRmlsZSwgcmVtb3RlUGF0aCwgb3B0aW9ucyk7XG4gIHJldHVybiAnJztcbn1cblxuY29uc3QgVklERU9fRklMRVMgPSBuZXcgU2V0KCk7XG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICBmb3IgKGNvbnN0IHZpZGVvRmlsZSBvZiBWSURFT19GSUxFUykge1xuICAgIHRyeSB7XG4gICAgICBmcy5yaW1yYWZTeW5jKHZpZGVvRmlsZSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG59KTtcblxuY2xhc3MgU2NyZWVuUmVjb3JkZXIge1xuICBjb25zdHJ1Y3RvciAodWRpZCwgdmlkZW9QYXRoLCBsb2csIG9wdHMgPSB7fSkge1xuICAgIHRoaXMubG9nID0gbG9nO1xuICAgIHRoaXMuX3Byb2Nlc3MgPSBudWxsO1xuICAgIHRoaXMuX3VkaWQgPSB1ZGlkO1xuICAgIHRoaXMuX3ZpZGVvUGF0aCA9IHZpZGVvUGF0aDtcbiAgICB0aGlzLl9jb2RlYyA9IG9wdHMuY29kZWM7XG4gICAgdGhpcy5fZGlzcGxheSA9IG9wdHMuZGlzcGxheTtcbiAgICB0aGlzLl9tYXNrID0gb3B0cy5tYXNrO1xuICAgIHRoaXMuX3RpbWVMaW1pdE1zID0gb3B0cy50aW1lTGltaXQgPiAwID8gb3B0cy50aW1lTGltaXQgKiAxMDAwIDogREVGQVVMVF9USU1FX0xJTUlUX01TO1xuICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGdldFZpZGVvUGF0aCAoKSB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyh0aGlzLl92aWRlb1BhdGgpKSB7XG4gICAgICBWSURFT19GSUxFUy5hZGQodGhpcy5fdmlkZW9QYXRoKTtcbiAgICAgIHJldHVybiB0aGlzLl92aWRlb1BhdGg7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGdldCBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhISh0aGlzLl9wcm9jZXNzPy5pc1J1bm5pbmcpO1xuICB9XG5cbiAgYXN5bmMgX2VuZm9yY2VUZXJtaW5hdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnRm9yY2Utc3RvcHBpbmcgdGhlIGN1cnJlbnRseSBydW5uaW5nIHZpZGVvIHJlY29yZGluZycpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fcHJvY2Vzcy5zdG9wKCdTSUdLSUxMJyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICAgIHRoaXMuX3Byb2Nlc3MgPSBudWxsO1xuICAgIGNvbnN0IHZpZGVvUGF0aCA9IGF3YWl0IHRoaXMuZ2V0VmlkZW9QYXRoKCk7XG4gICAgaWYgKHZpZGVvUGF0aCkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHZpZGVvUGF0aCk7XG4gICAgICBWSURFT19GSUxFUy5kZWxldGUodmlkZW9QYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICB0aGlzLl91ZGlkLCAncmVjb3JkVmlkZW8nXG4gICAgXTtcbiAgICBpZiAodGhpcy5fZGlzcGxheSkge1xuICAgICAgYXJncy5wdXNoKCctLWRpc3BsYXknLCB0aGlzLl9kaXNwbGF5KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvZGVjKSB7XG4gICAgICBhcmdzLnB1c2goJy0tY29kZWMnLCB0aGlzLl9jb2RlYyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9tYXNrKSB7XG4gICAgICBhcmdzLnB1c2goJy0tbWFzaycsIHRoaXMuX21hc2spO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy0tZm9yY2UnLCB0aGlzLl92aWRlb1BhdGgpO1xuICAgIHRoaXMuX3Byb2Nlc3MgPSBhd2FpdCBuZXcgU2ltY3RsKCkuZXhlYygnaW8nLCB7XG4gICAgICBhcmdzLFxuICAgICAgYXN5bmNocm9ub3VzOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMubG9nLmRlYnVnKGBTdGFydGluZyB2aWRlbyByZWNvcmRpbmcgd2l0aCBhcmd1bWVudHM6ICR7dXRpbC5xdW90ZShhcmdzKX1gKTtcbiAgICB0aGlzLl9wcm9jZXNzLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgIGNvbnN0IGxpbmUgPSBfLnRyaW0oc3Rkb3V0IHx8IHN0ZGVycik7XG4gICAgICBpZiAobGluZSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgW3JlY29yZFZpZGVvQCR7dGhpcy5fdWRpZC5zdWJzdHJpbmcoMCwgOCl9XSAke2xpbmV9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5fcHJvY2Vzcy5vbmNlKCdleGl0JywgYXN5bmMgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgdGhpcy5fcHJvY2VzcyA9IG51bGw7XG4gICAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnU2NyZWVuIHJlY29yZGluZyBleGl0ZWQgd2l0aG91dCBlcnJvcnMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2VuZm9yY2VUZXJtaW5hdGlvbigpO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBTY3JlZW4gcmVjb3JkaW5nIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHtjb2RlfSwgc2lnbmFsICR7c2lnbmFsfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3Muc3RhcnQoMCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICEhKGF3YWl0IHRoaXMuZ2V0VmlkZW9QYXRoKCkpO1xuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IFNUQVJUVVBfVElNRU9VVF9NUyxcbiAgICAgICAgaW50ZXJ2YWxNczogU1RBUlRVUF9JTlRFUlZBTF9NUyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2VuZm9yY2VUZXJtaW5hdGlvbigpO1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGV4cGVjdGVkIHNjcmVlbiByZWNvcmQgZmlsZSAnJHt0aGlzLl92aWRlb1BhdGh9JyBkb2VzIG5vdCBleGlzdCBhZnRlciAke1NUQVJUVVBfVElNRU9VVF9NU31tcy4gYCArXG4gICAgICAgIGBDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgfVxuICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN0b3AoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgdGhpcy5fdGltZUxpbWl0TXMpO1xuICAgIHRoaXMubG9nLmluZm8oYFRoZSB2aWRlbyByZWNvcmRpbmcgaGFzIHN0YXJ0ZWQuIFdpbGwgdGltZW91dCBpbiAke3RoaXMuX3RpbWVMaW1pdE1zfW1zYCk7XG4gIH1cblxuICBhc3luYyBzdG9wIChmb3JjZSA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuX3RpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChmb3JjZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2VuZm9yY2VUZXJtaW5hdGlvbigpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdTY3JlZW4gcmVjb3JkaW5nIGlzIG5vdCBydW5uaW5nLiBSZXR1cm5pbmcgdGhlIHJlY2VudGx5IHJlY29yZGVkIHZpZGVvJyk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWRlb1BhdGgoKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcHJvY2Vzcy5zdG9wKCdTSUdJTlQnLCBQUk9DRVNTX1NIVVRET1dOX1RJTUVPVVRfTVMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2VuZm9yY2VUZXJtaW5hdGlvbigpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY3JlZW4gcmVjb3JkaW5nIGhhcyBmYWlsZWQgdG8gc3RvcCBhZnRlciAke1BST0NFU1NfU0hVVERPV05fVElNRU9VVF9NU31tc2ApO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZGVvUGF0aCgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RTaW11bGF0b3JVZGlkIChjYXBzKSB7XG4gIGlmIChjYXBzWydzYWZhcmk6dXNlU2ltdWxhdG9yJ10gPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBhbGxEZXZpY2VzID0gXy5mbGF0TWFwKF8udmFsdWVzKGF3YWl0IG5ldyBTaW1jdGwoKS5nZXREZXZpY2VzKG51bGwsICdpT1MnKSkpO1xuICBmb3IgKGNvbnN0IHtuYW1lLCB1ZGlkLCBzdGF0ZSwgc2RrfSBvZiBhbGxEZXZpY2VzKSB7XG4gICAgaWYgKHN0YXRlICE9PSAnQm9vdGVkJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKF8udG9Mb3dlcihjYXBzWydzYWZhcmk6ZGV2aWNlVURJRCddKSA9PT0gXy50b0xvd2VyKHVkaWQpKSB7XG4gICAgICByZXR1cm4gdWRpZDtcbiAgICB9XG4gICAgaWYgKF8udG9Mb3dlcihjYXBzWydzYWZhcmk6ZGV2aWNlTmFtZSddKSA9PT0gXy50b0xvd2VyKG5hbWUpICYmXG4gICAgICAoY2Fwc1snc2FmYXJpOnBsYXRmb3JtVmVyc2lvbiddICYmIGNhcHNbJ3NhZmFyaTpwbGF0Zm9ybVZlcnNpb24nXSA9PT0gc2RrXG4gICAgICAgIHx8ICFjYXBzWydzYWZhcmk6cGxhdGZvcm1WZXJzaW9uJ10pKSB7XG4gICAgICByZXR1cm4gdWRpZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0YXJ0UmVjb3JkaW5nT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gY29kZWMgW2hldmNdIC0gU3BlY2lmaWVzIHRoZSBjb2RlYyB0eXBlOiBcImgyNjRcIiBvciBcImhldmNcIlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBkaXNwbGF5IFtpbnRlcm5hbF0gLSBTdXBwb3J0cyBcImludGVybmFsXCIgb3IgXCJleHRlcm5hbFwiLiBEZWZhdWx0IGlzIFwiaW50ZXJuYWxcIlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtYXNrIC0gRm9yIG5vbi1yZWN0YW5ndWxhciBkaXNwbGF5cywgaGFuZGxlIHRoZSBtYXNrIGJ5IHBvbGljeTpcbiAqIC0gaWdub3JlZDogVGhlIG1hc2sgaXMgaWdub3JlZCBhbmQgdGhlIHVubWFza2VkIGZyYW1lYnVmZmVyIGlzIHNhdmVkLlxuICogLSBhbHBoYTogTm90IHN1cHBvcnRlZCwgYnV0IHJldGFpbmVkIGZvciBjb21wYXRpYmlsaXR5OyB0aGUgbWFzayBpcyByZW5kZXJlZCBibGFjay5cbiAqIC0gYmxhY2s6IFRoZSBtYXNrIGlzIHJlbmRlcmVkIGJsYWNrLlxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSB0aW1lTGltaXQgWzYwMF0gLSBUaGUgbWF4aW11bSByZWNvcmRpbmcgdGltZSwgaW4gc2Vjb25kcy4gVGhlIGRlZmF1bHRcbiAqIHZhbHVlIGlzIDYwMCBzZWNvbmRzICgxMCBtaW51dGVzKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZm9yY2VSZXN0YXJ0IFt0cnVlXSAtIFdoZXRoZXIgdG8gaWdub3JlIHRoZSBjYWxsIGlmIGEgc2NyZWVuIHJlY29yZGluZyBpcyBjdXJyZW50bHkgcnVubmluZ1xuICogKGBmYWxzZWApIG9yIHRvIHN0YXJ0IGEgbmV3IHJlY29yZGluZyBpbW1lZGlhdGVseSBhbmQgdGVybWluYXRlIHRoZSBleGlzdGluZyBvbmUgaWYgcnVubmluZyAoYHRydWVgKS5cbiAqL1xuXG4vKipcbiAqIFJlY29yZCB0aGUgU2ltdWxhdG9yJ3MgZGlzcGxheSBpbiBiYWNrZ3JvdW5kIHdoaWxlIHRoZSBhdXRvbWF0ZWQgdGVzdCBpcyBydW5uaW5nLlxuICogVGhpcyBtZXRob2QgdXNlcyBgeGNydW4gc2ltY3RsIGlvIHJlY29yZFZpZGVvYCBoZWxwZXIgdW5kZXIgdGhlIGhvb2QuXG4gKiBDaGVjayB0aGUgb3V0cHV0IG9mIGB4Y3J1biBzaW1jdGwgaW9gIGNvbW1hbmQgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcGFyYW0gez9TdGFydFJlY29yZGluZ09wdGlvbnN9IG9wdGlvbnMgLSBUaGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgc2NyZWVuIHJlY29yZGluZyBoYXMgZmFpbGVkIHRvIHN0YXJ0IG9yIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBkZXN0aW5hdGlvbiBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnN0YXJ0UmVjb3JkaW5nU2NyZWVuID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRSZWNvcmRpbmdTY3JlZW4gKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGltZUxpbWl0LFxuICAgIGNvZGVjLFxuICAgIGRpc3BsYXksXG4gICAgbWFzayxcbiAgICBmb3JjZVJlc3RhcnQgPSB0cnVlLFxuICB9ID0gb3B0aW9ucztcbiAgaWYgKHRoaXMuX3NjcmVlblJlY29yZGVyPy5pc1J1bm5pbmcpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdUaGUgc2NyZWVuIHJlY29yZGluZyBpcyBhbHJlYWR5IHJ1bm5pbmcnKTtcbiAgICBpZiAoIWZvcmNlUmVzdGFydCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnRG9pbmcgbm90aGluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvZy5pbmZvKCdGb3JjaW5nIHRoZSBhY3RpdmUgc2NyZWVuIHJlY29yZGluZyB0byBzdG9wJyk7XG4gICAgYXdhaXQgdGhpcy5fc2NyZWVuUmVjb3JkZXIuc3RvcCh0cnVlKTtcbiAgfVxuICB0aGlzLl9zY3JlZW5SZWNvcmRlciA9IG51bGw7XG5cbiAgY29uc3QgdWRpZCA9IGF3YWl0IGV4dHJhY3RTaW11bGF0b3JVZGlkKHRoaXMuY2Fwcyk7XG4gIGlmICghdWRpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGRldGVybWluZSBTaW11bGF0b3IgVURJRCB0byByZWNvcmQgdGhlIHZpZGVvIGZyb20uICcgK1xuICAgICAgJ0RvdWJsZSBjaGVjayB5b3VyIHNlc3Npb24gY2FwYWJpbGl0aWVzJyk7XG4gIH1cblxuICBjb25zdCB2aWRlb1BhdGggPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe1xuICAgIHByZWZpeDogdXRpbC51dWlkVjQoKS5zdWJzdHJpbmcoMCwgOCksXG4gICAgc3VmZml4OiBERUZBVUxUX0VYVCxcbiAgfSk7XG4gIHRoaXMuX3NjcmVlblJlY29yZGVyID0gbmV3IFNjcmVlblJlY29yZGVyKHVkaWQsIHZpZGVvUGF0aCwgdGhpcy5sb2csIHtcbiAgICB0aW1lTGltaXQ6IHBhcnNlSW50KHRpbWVMaW1pdCwgMTApLFxuICAgIGNvZGVjLFxuICAgIGRpc3BsYXksXG4gICAgbWFzayxcbiAgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5fc2NyZWVuUmVjb3JkZXIuc3RhcnQoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRoaXMuX3NjcmVlblJlY29yZGVyID0gbnVsbDtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0b3BSZWNvcmRpbmdPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSByZW1vdGVQYXRoIC0gVGhlIHBhdGggdG8gdGhlIHJlbW90ZSBsb2NhdGlvbiwgd2hlcmUgdGhlIHJlc3VsdGluZyB2aWRlbyBzaG91bGQgYmUgdXBsb2FkZWQuXG4gKiBUaGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgc3VwcG9ydGVkOiBodHRwL2h0dHBzLCBmdHAuXG4gKiBOdWxsIG9yIGVtcHR5IHN0cmluZyB2YWx1ZSAodGhlIGRlZmF1bHQgc2V0dGluZykgbWVhbnMgdGhlIGNvbnRlbnQgb2YgcmVzdWx0aW5nXG4gKiBmaWxlIHNob3VsZCBiZSBlbmNvZGVkIGFzIEJhc2U2NCBhbmQgcGFzc2VkIGFzIHRoZSBlbmRwb2ludCByZXNwb25zZSB2YWx1ZS5cbiAqIEFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiB0aGUgZ2VuZXJhdGVkIG1lZGlhIGZpbGUgaXMgdG9vIGJpZyB0b1xuICogZml0IGludG8gdGhlIGF2YWlsYWJsZSBwcm9jZXNzIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdXNlciAtIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwYXNzIC0gVGhlIHBhc3N3b3JkIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtZXRob2QgLSBUaGUgaHR0cCBtdWx0aXBhcnQgdXBsb2FkIG1ldGhvZCBuYW1lLiBUaGUgJ1BVVCcgb25lIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7P09iamVjdH0gaGVhZGVycyAtIEFkZGl0aW9uYWwgaGVhZGVycyBtYXBwaW5nIGZvciBtdWx0aXBhcnQgaHR0cChzKSB1cGxvYWRzXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZpbGVGaWVsZE5hbWUgW2ZpbGVdIC0gVGhlIG5hbWUgb2YgdGhlIGZvcm0gZmllbGQsIHdoZXJlIHRoZSBmaWxlIGNvbnRlbnQgQkxPQiBzaG91bGQgYmUgc3RvcmVkIGZvclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHAocykgdXBsb2Fkc1xuICogQHByb3BlcnR5IHs/T2JqZWN0fEFycmF5PFBhaXI+fSBmb3JtRmllbGRzIC0gQWRkaXRpb25hbCBmb3JtIGZpZWxkcyBmb3IgbXVsdGlwYXJ0IGh0dHAocykgdXBsb2Fkc1xuICovXG5cbi8qKlxuICogU3RvcCByZWNvcmRpbmcgdGhlIHNjcmVlbi5cbiAqIElmIG5vIHNjcmVlbiByZWNvcmRpbmcgaGFzIGJlZW4gc3RhcnRlZCBiZWZvcmUgdGhlbiB0aGUgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7P1N0b3BSZWNvcmRpbmdPcHRpb25zfSBvcHRpb25zIC0gVGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0LWVuY29kZWQgY29udGVudCBvZiB0aGUgcmVjb3JkZWQgbWVkaWEgZmlsZSBpZiAncmVtb3RlUGF0aCdcbiAqIHBhcmFtZXRlciBpcyBmYWxzeSBvciBhbiBlbXB0eSBzdHJpbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIG5hbWUgb2YgYSBtZWRpYSBmaWxlXG4gKiBvciB0aGUgZmlsZSBjb250ZW50IGNhbm5vdCBiZSB1cGxvYWRlZCB0byB0aGUgcmVtb3RlIGxvY2F0aW9uXG4gKiBvciBzY3JlZW4gcmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICovXG5jb21tYW5kcy5zdG9wUmVjb3JkaW5nU2NyZWVuID0gYXN5bmMgZnVuY3Rpb24gc3RvcFJlY29yZGluZ1NjcmVlbiAob3B0aW9ucyA9IHt9KSB7XG4gIGlmICghdGhpcy5fc2NyZWVuUmVjb3JkZXIpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdObyBzY3JlZW4gcmVjb3JkaW5nIGhhcyBiZWVuIHN0YXJ0ZWQuIERvaW5nIG5vdGhpbmcnKTtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB0aGlzLmxvZy5kZWJ1ZygnUmV0cmlldmluZyB0aGUgcmVzdWx0aW5nIHZpZGVvIGRhdGEnKTtcbiAgY29uc3QgdmlkZW9QYXRoID0gYXdhaXQgdGhpcy5fc2NyZWVuUmVjb3JkZXIuc3RvcCgpO1xuICBpZiAoIXZpZGVvUGF0aCkge1xuICAgIHRoaXMubG9nLmluZm8oJ05vIHZpZGVvIGRhdGEgaXMgZm91bmQuIFJldHVybmluZyBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShvcHRpb25zLnJlbW90ZVBhdGgpKSB7XG4gICAgY29uc3Qge3NpemV9ID0gYXdhaXQgZnMuc3RhdCh2aWRlb1BhdGgpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBUaGUgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIHNjcmVlbiByZWNvcmRpbmcgaXMgJHt1dGlsLnRvUmVhZGFibGVTaXplU3RyaW5nKHNpemUpfWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB1cGxvYWRSZWNvcmRlZE1lZGlhKHZpZGVvUGF0aCwgb3B0aW9ucy5yZW1vdGVQYXRoLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLFFBQVEsR0FBRyxFQUFqQjtBQUVBLE1BQU1DLG1CQUFtQixHQUFHLEdBQTVCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsS0FBSyxJQUFoQztBQUNBLE1BQU1DLHFCQUFxQixHQUFHLEtBQUssRUFBTCxHQUFVLElBQXhDO0FBQ0EsTUFBTUMsMkJBQTJCLEdBQUcsS0FBSyxJQUF6QztBQUNBLE1BQU1DLFdBQVcsR0FBRyxNQUFwQjs7QUFHQSxlQUFlQyxtQkFBZixDQUFvQ0MsU0FBcEMsRUFBK0NDLFVBQVUsR0FBRyxJQUE1RCxFQUFrRUMsYUFBYSxHQUFHLEVBQWxGLEVBQXNGO0VBQ3BGLElBQUlDLGdCQUFFQyxPQUFGLENBQVVILFVBQVYsQ0FBSixFQUEyQjtJQUN6QixPQUFPLENBQUMsTUFBTUksY0FBS0MsZ0JBQUwsQ0FBc0JOLFNBQXRCLENBQVAsRUFBeUNPLFFBQXpDLEVBQVA7RUFDRDs7RUFFRCxNQUFNO0lBQUNDLElBQUQ7SUFBT0MsSUFBUDtJQUFhQyxNQUFiO0lBQXFCQyxPQUFyQjtJQUE4QkMsYUFBOUI7SUFBNkNDO0VBQTdDLElBQTJEWCxhQUFqRTtFQUNBLE1BQU1ZLE9BQU8sR0FBRztJQUNkSixNQUFNLEVBQUVBLE1BQU0sSUFBSSxLQURKO0lBRWRDLE9BRmM7SUFHZEMsYUFIYztJQUlkQztFQUpjLENBQWhCOztFQU1BLElBQUlMLElBQUksSUFBSUMsSUFBWixFQUFrQjtJQUNoQkssT0FBTyxDQUFDQyxJQUFSLEdBQWU7TUFBQ1AsSUFBRDtNQUFPQztJQUFQLENBQWY7RUFDRDs7RUFDRCxNQUFNTyxhQUFJQyxVQUFKLENBQWVqQixTQUFmLEVBQTBCQyxVQUExQixFQUFzQ2EsT0FBdEMsQ0FBTjtF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
@@ -45,4 +45,4 @@ const desiredCapConstraints = {
45
45
  exports.desiredCapConstraints = desiredCapConstraints;require('source-map-support').install();
46
46
 
47
47
 
48
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kZXNpcmVkLWNhcHMuanMiXSwibmFtZXMiOlsiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiYnJvd3Nlck5hbWUiLCJpc1N0cmluZyIsImJyb3dzZXJWZXJzaW9uIiwiaXNCb29sZWFuIiwiaXNPYmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE1BQU1BLHFCQUFxQixHQUFHO0FBQzVCQyxFQUFBQSxXQUFXLEVBQUU7QUFDWEMsSUFBQUEsUUFBUSxFQUFFO0FBREMsR0FEZTtBQUk1QkMsRUFBQUEsY0FBYyxFQUFFO0FBQ2RELElBQUFBLFFBQVEsRUFBRTtBQURJLEdBSlk7QUFPNUIsNEJBQTBCO0FBQ3hCQSxJQUFBQSxRQUFRLEVBQUU7QUFEYyxHQVBFO0FBVTVCLGlDQUErQjtBQUM3QkEsSUFBQUEsUUFBUSxFQUFFO0FBRG1CLEdBVkg7QUFhNUIseUJBQXVCO0FBQ3JCRSxJQUFBQSxTQUFTLEVBQUU7QUFEVSxHQWJLO0FBZ0I1Qix1QkFBcUI7QUFDbkJGLElBQUFBLFFBQVEsRUFBRTtBQURTLEdBaEJPO0FBbUI1Qix1QkFBcUI7QUFDbkJBLElBQUFBLFFBQVEsRUFBRTtBQURTLEdBbkJPO0FBc0I1Qix1QkFBcUI7QUFDbkJBLElBQUFBLFFBQVEsRUFBRTtBQURTLEdBdEJPO0FBeUI1QixnQ0FBOEI7QUFDNUJFLElBQUFBLFNBQVMsRUFBRTtBQURpQixHQXpCRjtBQTRCNUIsK0JBQTZCO0FBQzNCQSxJQUFBQSxTQUFTLEVBQUU7QUFEZ0IsR0E1QkQ7QUErQjVCLG1CQUFpQjtBQUNmQyxJQUFBQSxRQUFRLEVBQUU7QUFESztBQS9CVyxDQUE5QiIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGRlc2lyZWRDYXBDb25zdHJhaW50cyA9IHtcbiAgYnJvd3Nlck5hbWU6IHtcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbiAgYnJvd3NlclZlcnNpb246IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICAnc2FmYXJpOnBsYXRmb3JtVmVyc2lvbic6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICAnc2FmYXJpOnBsYXRmb3JtQnVpbGRWZXJzaW9uJzoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gICdzYWZhcmk6dXNlU2ltdWxhdG9yJzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICAnc2FmYXJpOmRldmljZVR5cGUnOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgJ3NhZmFyaTpkZXZpY2VOYW1lJzoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gICdzYWZhcmk6ZGV2aWNlVURJRCc6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICAnc2FmYXJpOmF1dG9tYXRpY0luc3BlY3Rpb24nOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gICdzYWZhcmk6YXV0b21hdGljUHJvZmlsaW5nJzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICAnd2Via2l0OldlYlJUQyc6IHtcbiAgICBpc09iamVjdDogdHJ1ZVxuICB9LFxufTtcblxuZXhwb3J0IHsgZGVzaXJlZENhcENvbnN0cmFpbnRzIH07XG4iXSwiZmlsZSI6ImxpYi9kZXNpcmVkLWNhcHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
48
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2Rlc2lyZWQtY2Fwcy5qcyIsIm5hbWVzIjpbImRlc2lyZWRDYXBDb25zdHJhaW50cyIsImJyb3dzZXJOYW1lIiwiaXNTdHJpbmciLCJicm93c2VyVmVyc2lvbiIsImlzQm9vbGVhbiIsImlzT2JqZWN0Il0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2Rlc2lyZWQtY2Fwcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgPSB7XG4gIGJyb3dzZXJOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gIH0sXG4gIGJyb3dzZXJWZXJzaW9uOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgJ3NhZmFyaTpwbGF0Zm9ybVZlcnNpb24nOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgJ3NhZmFyaTpwbGF0Zm9ybUJ1aWxkVmVyc2lvbic6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICAnc2FmYXJpOnVzZVNpbXVsYXRvcic6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgJ3NhZmFyaTpkZXZpY2VUeXBlJzoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gICdzYWZhcmk6ZGV2aWNlTmFtZSc6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICAnc2FmYXJpOmRldmljZVVESUQnOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgJ3NhZmFyaTphdXRvbWF0aWNJbnNwZWN0aW9uJzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICAnc2FmYXJpOmF1dG9tYXRpY1Byb2ZpbGluZyc6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgJ3dlYmtpdDpXZWJSVEMnOiB7XG4gICAgaXNPYmplY3Q6IHRydWVcbiAgfSxcbn07XG5cbmV4cG9ydCB7IGRlc2lyZWRDYXBDb25zdHJhaW50cyB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxNQUFNQSxxQkFBcUIsR0FBRztFQUM1QkMsV0FBVyxFQUFFO0lBQ1hDLFFBQVEsRUFBRTtFQURDLENBRGU7RUFJNUJDLGNBQWMsRUFBRTtJQUNkRCxRQUFRLEVBQUU7RUFESSxDQUpZO0VBTzVCLDBCQUEwQjtJQUN4QkEsUUFBUSxFQUFFO0VBRGMsQ0FQRTtFQVU1QiwrQkFBK0I7SUFDN0JBLFFBQVEsRUFBRTtFQURtQixDQVZIO0VBYTVCLHVCQUF1QjtJQUNyQkUsU0FBUyxFQUFFO0VBRFUsQ0FiSztFQWdCNUIscUJBQXFCO0lBQ25CRixRQUFRLEVBQUU7RUFEUyxDQWhCTztFQW1CNUIscUJBQXFCO0lBQ25CQSxRQUFRLEVBQUU7RUFEUyxDQW5CTztFQXNCNUIscUJBQXFCO0lBQ25CQSxRQUFRLEVBQUU7RUFEUyxDQXRCTztFQXlCNUIsOEJBQThCO0lBQzVCRSxTQUFTLEVBQUU7RUFEaUIsQ0F6QkY7RUE0QjVCLDZCQUE2QjtJQUMzQkEsU0FBUyxFQUFFO0VBRGdCLENBNUJEO0VBK0I1QixpQkFBaUI7SUFDZkMsUUFBUSxFQUFFO0VBREs7QUEvQlcsQ0FBOUIifQ==
@@ -13,8 +13,6 @@ var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
14
  var _baseDriver = require("@appium/base-driver");
15
15
 
16
- var _logger = _interopRequireDefault(require("./logger"));
17
-
18
16
  var _safari = _interopRequireDefault(require("./safari"));
19
17
 
20
18
  var _desiredCaps = require("./desired-caps");
@@ -58,7 +56,7 @@ class SafariDriver extends _baseDriver.BaseDriver {
58
56
 
59
57
  async createSession(...args) {
60
58
  const [sessionId, caps] = await super.createSession(...args);
61
- this.safari = new _safari.default();
59
+ this.safari = new _safari.default(this.log);
62
60
 
63
61
  try {
64
62
  await this.safari.start((0, _utils.formatCapsForServer)(caps));
@@ -75,8 +73,7 @@ class SafariDriver extends _baseDriver.BaseDriver {
75
73
  async deleteSession() {
76
74
  var _this$_screenRecorder, _this$safari;
77
75
 
78
- _logger.default.info('Ending Safari session');
79
-
76
+ this.log.info('Ending Safari session');
80
77
  await ((_this$_screenRecorder = this._screenRecorder) === null || _this$_screenRecorder === void 0 ? void 0 : _this$_screenRecorder.stop(true));
81
78
  await ((_this$safari = this.safari) === null || _this$safari === void 0 ? void 0 : _this$safari.stop());
82
79
  this.resetState();
@@ -89,4 +86,4 @@ var _default = SafariDriver;
89
86
  exports.default = _default;require('source-map-support').install();
90
87
 
91
88
 
92
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiTk9fUFJPWFkiLCJSZWdFeHAiLCJTYWZhcmlEcml2ZXIiLCJCYXNlRHJpdmVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJyZXNldFN0YXRlIiwiY21kIiwiZm4iLCJfIiwidG9QYWlycyIsImNvbW1hbmRzIiwicHJvdG90eXBlIiwic2FmYXJpIiwicHJveHlSZXFSZXMiLCJpc1Byb3h5QWN0aXZlIiwiX3NjcmVlblJlY29yZGVyIiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImNhblByb3h5IiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJjYXBzIiwiU2FmYXJpRHJpdmVyU2VydmVyIiwic3RhcnQiLCJlIiwiZGVsZXRlU2Vzc2lvbiIsInByb3h5IiwiYmluZCIsImxvZyIsImluZm8iLCJzdG9wIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBRyxDQUNmLENBQUMsS0FBRCxFQUFRLElBQUlDLE1BQUosQ0FBVyx3QkFBWCxDQUFSLENBRGUsRUFFZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsd0JBQVgsQ0FBVCxDQUZlLEVBR2YsQ0FBQyxNQUFELEVBQVMsSUFBSUEsTUFBSixDQUFXLDBDQUFYLENBQVQsQ0FIZSxFQUlmLENBQUMsTUFBRCxFQUFTLElBQUlBLE1BQUosQ0FBVyw0QkFBWCxDQUFULENBSmUsRUFNZixDQUFDLFFBQUQsRUFBVyxJQUFJQSxNQUFKLENBQVcseUJBQVgsQ0FBWCxDQU5lLENBQWpCOztBQVNBLE1BQU1DLFlBQU4sU0FBMkJDLHNCQUEzQixDQUFzQztBQUNwQ0MsRUFBQUEsV0FBVyxDQUFFQyxJQUFJLEdBQUcsRUFBVCxFQUFhO0FBQ3RCLFVBQU1BLElBQU47QUFDQSxTQUFLQyxxQkFBTCxHQUE2QkEsa0NBQTdCO0FBQ0EsU0FBS0MsaUJBQUwsR0FBeUIsQ0FDdkIsT0FEdUIsRUFFdkIsVUFGdUIsRUFHdkIsV0FIdUIsRUFJdkIsbUJBSnVCLEVBS3ZCLGNBTHVCLEVBT3ZCLElBUHVCLEVBUXZCLE1BUnVCLENBQXpCO0FBVUEsU0FBS0MsVUFBTDs7QUFFQSxTQUFLLE1BQU0sQ0FBQ0MsR0FBRCxFQUFNQyxFQUFOLENBQVgsSUFBd0JDLGdCQUFFQyxPQUFGLENBQVVDLGNBQVYsQ0FBeEIsRUFBNkM7QUFDM0NYLE1BQUFBLFlBQVksQ0FBQ1ksU0FBYixDQUF1QkwsR0FBdkIsSUFBOEJDLEVBQTlCO0FBQ0Q7QUFDRjs7QUFFREYsRUFBQUEsVUFBVSxHQUFJO0FBQ1osU0FBS08sTUFBTCxHQUFjLElBQWQ7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLElBQW5CO0FBQ0EsU0FBS0MsYUFBTCxHQUFxQixLQUFyQjtBQUNBLFNBQUtDLGVBQUwsR0FBdUIsSUFBdkI7QUFDRDs7QUFFREMsRUFBQUEsV0FBVyxHQUFJO0FBQ2IsV0FBTyxLQUFLRixhQUFaO0FBQ0Q7O0FBRURHLEVBQUFBLGlCQUFpQixHQUFJO0FBQ25CLFdBQU9wQixRQUFQO0FBQ0Q7O0FBRURxQixFQUFBQSxRQUFRLEdBQUk7QUFDVixXQUFPLElBQVA7QUFDRDs7QUFFa0IsUUFBYkMsYUFBYSxDQUFFLEdBQUdDLElBQUwsRUFBVztBQUM1QixVQUFNLENBQUNDLFNBQUQsRUFBWUMsSUFBWixJQUFvQixNQUFNLE1BQU1ILGFBQU4sQ0FBb0IsR0FBR0MsSUFBdkIsQ0FBaEM7QUFDQSxTQUFLUixNQUFMLEdBQWMsSUFBSVcsZUFBSixFQUFkOztBQUNBLFFBQUk7QUFDRixZQUFNLEtBQUtYLE1BQUwsQ0FBWVksS0FBWixDQUFrQixnQ0FBb0JGLElBQXBCLENBQWxCLENBQU47QUFDRCxLQUZELENBRUUsT0FBT0csQ0FBUCxFQUFVO0FBQ1YsWUFBTSxLQUFLQyxhQUFMLEVBQU47QUFDQSxZQUFNRCxDQUFOO0FBQ0Q7O0FBQ0QsU0FBS1osV0FBTCxHQUFtQixLQUFLRCxNQUFMLENBQVllLEtBQVosQ0FBa0JkLFdBQWxCLENBQThCZSxJQUE5QixDQUFtQyxLQUFLaEIsTUFBTCxDQUFZZSxLQUEvQyxDQUFuQjtBQUNBLFNBQUtiLGFBQUwsR0FBcUIsSUFBckI7QUFDQSxXQUFPLENBQUNPLFNBQUQsRUFBWUMsSUFBWixDQUFQO0FBQ0Q7O0FBRWtCLFFBQWJJLGFBQWEsR0FBSTtBQUFBOztBQUNyQkcsb0JBQUlDLElBQUosQ0FBUyx1QkFBVDs7QUFDQSxvQ0FBTSxLQUFLZixlQUFYLDBEQUFNLHNCQUFzQmdCLElBQXRCLENBQTJCLElBQTNCLENBQU47QUFDQSwyQkFBTSxLQUFLbkIsTUFBWCxpREFBTSxhQUFhbUIsSUFBYixFQUFOO0FBQ0EsU0FBSzFCLFVBQUw7QUFFQSxVQUFNLE1BQU1xQixhQUFOLEVBQU47QUFDRDs7QUE3RG1DOztlQWdFdkIzQixZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJhc2VEcml2ZXIgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IFNhZmFyaURyaXZlclNlcnZlciBmcm9tICcuL3NhZmFyaSc7XG5pbXBvcnQgeyBkZXNpcmVkQ2FwQ29uc3RyYWludHMgfSBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQgeyBmb3JtYXRDYXBzRm9yU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2VsZW1lbnRzPyQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50cz8kJyldLFxuXG4gIFsnREVMRVRFJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2Nvb2tpZSQnKV0sXG5dO1xuXG5jbGFzcyBTYWZhcmlEcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAneHBhdGgnLFxuICAgICAgJ3RhZyBuYW1lJyxcbiAgICAgICdsaW5rIHRleHQnLFxuICAgICAgJ3BhcnRpYWwgbGluayB0ZXh0JyxcbiAgICAgICdjc3Mgc2VsZWN0b3InLFxuICAgICAgLy8gTGV0IHRoZXNlIHR3byByZWFjaCBTYWZhcmkgRHJpdmVyIGFuZCBmYWlsIHRoZXJlIHdpdGggYSBwcm9wZXIgZXJyb3IgbWVzc2FnZVxuICAgICAgJ2lkJyxcbiAgICAgICduYW1lJyxcbiAgICBdO1xuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xuXG4gICAgZm9yIChjb25zdCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICAgICAgU2FmYXJpRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG4gICAgfVxuICB9XG5cbiAgcmVzZXRTdGF0ZSAoKSB7XG4gICAgdGhpcy5zYWZhcmkgPSBudWxsO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICAgIHRoaXMuaXNQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX3NjcmVlblJlY29yZGVyID0gbnVsbDtcbiAgfVxuXG4gIHByb3h5QWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1Byb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKCkge1xuICAgIHJldHVybiBOT19QUk9YWTtcbiAgfVxuXG4gIGNhblByb3h5ICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG4gICAgdGhpcy5zYWZhcmkgPSBuZXcgU2FmYXJpRHJpdmVyU2VydmVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuc2FmYXJpLnN0YXJ0KGZvcm1hdENhcHNGb3JTZXJ2ZXIoY2FwcykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuc2FmYXJpLnByb3h5LnByb3h5UmVxUmVzLmJpbmQodGhpcy5zYWZhcmkucHJveHkpO1xuICAgIHRoaXMuaXNQcm94eUFjdGl2ZSA9IHRydWU7XG4gICAgcmV0dXJuIFtzZXNzaW9uSWQsIGNhcHNdO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgbG9nLmluZm8oJ0VuZGluZyBTYWZhcmkgc2Vzc2lvbicpO1xuICAgIGF3YWl0IHRoaXMuX3NjcmVlblJlY29yZGVyPy5zdG9wKHRydWUpO1xuICAgIGF3YWl0IHRoaXMuc2FmYXJpPy5zdG9wKCk7XG4gICAgdGhpcy5yZXNldFN0YXRlKCk7XG5cbiAgICBhd2FpdCBzdXBlci5kZWxldGVTZXNzaW9uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2FmYXJpRHJpdmVyO1xuIl0sImZpbGUiOiJsaWIvZHJpdmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
89
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2RyaXZlci5qcyIsIm5hbWVzIjpbIk5PX1BST1hZIiwiUmVnRXhwIiwiU2FmYXJpRHJpdmVyIiwiQmFzZURyaXZlciIsImNvbnN0cnVjdG9yIiwib3B0cyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsImxvY2F0b3JTdHJhdGVnaWVzIiwicmVzZXRTdGF0ZSIsImNtZCIsImZuIiwiXyIsInRvUGFpcnMiLCJjb21tYW5kcyIsInByb3RvdHlwZSIsInNhZmFyaSIsInByb3h5UmVxUmVzIiwiaXNQcm94eUFjdGl2ZSIsIl9zY3JlZW5SZWNvcmRlciIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwic2Vzc2lvbklkIiwiY2FwcyIsIlNhZmFyaURyaXZlclNlcnZlciIsImxvZyIsInN0YXJ0IiwiZSIsImRlbGV0ZVNlc3Npb24iLCJwcm94eSIsImJpbmQiLCJpbmZvIiwic3RvcCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJhc2VEcml2ZXIgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCBTYWZhcmlEcml2ZXJTZXJ2ZXIgZnJvbSAnLi9zYWZhcmknO1xuaW1wb3J0IHsgZGVzaXJlZENhcENvbnN0cmFpbnRzIH0gZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHsgZm9ybWF0Q2Fwc0ZvclNlcnZlciB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBOT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9lbGVtZW50cz8kJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudHM/JCcpXSxcblxuICBbJ0RFTEVURScsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb29raWUkJyldLFxuXTtcblxuY2xhc3MgU2FmYXJpRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICd0YWcgbmFtZScsXG4gICAgICAnbGluayB0ZXh0JyxcbiAgICAgICdwYXJ0aWFsIGxpbmsgdGV4dCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICAgIC8vIExldCB0aGVzZSB0d28gcmVhY2ggU2FmYXJpIERyaXZlciBhbmQgZmFpbCB0aGVyZSB3aXRoIGEgcHJvcGVyIGVycm9yIG1lc3NhZ2VcbiAgICAgICdpZCcsXG4gICAgICAnbmFtZScsXG4gICAgXTtcbiAgICB0aGlzLnJlc2V0U3RhdGUoKTtcblxuICAgIGZvciAoY29uc3QgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgICAgIFNhZmFyaURyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0U3RhdGUgKCkge1xuICAgIHRoaXMuc2FmYXJpID0gbnVsbDtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gbnVsbDtcbiAgICB0aGlzLmlzUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9zY3JlZW5SZWNvcmRlciA9IG51bGw7XG4gIH1cblxuICBwcm94eUFjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0ICgpIHtcbiAgICByZXR1cm4gTk9fUFJPWFk7XG4gIH1cblxuICBjYW5Qcm94eSAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgY29uc3QgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuICAgIHRoaXMuc2FmYXJpID0gbmV3IFNhZmFyaURyaXZlclNlcnZlcih0aGlzLmxvZyk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuc2FmYXJpLnN0YXJ0KGZvcm1hdENhcHNGb3JTZXJ2ZXIoY2FwcykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuc2FmYXJpLnByb3h5LnByb3h5UmVxUmVzLmJpbmQodGhpcy5zYWZhcmkucHJveHkpO1xuICAgIHRoaXMuaXNQcm94eUFjdGl2ZSA9IHRydWU7XG4gICAgcmV0dXJuIFtzZXNzaW9uSWQsIGNhcHNdO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnRW5kaW5nIFNhZmFyaSBzZXNzaW9uJyk7XG4gICAgYXdhaXQgdGhpcy5fc2NyZWVuUmVjb3JkZXI/LnN0b3AodHJ1ZSk7XG4gICAgYXdhaXQgdGhpcy5zYWZhcmk/LnN0b3AoKTtcbiAgICB0aGlzLnJlc2V0U3RhdGUoKTtcblxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTYWZhcmlEcml2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FB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
@@ -15,4 +15,4 @@ var _default = log;
15
15
  exports.default = _default;require('source-map-support').install();
16
16
 
17
17
 
18
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLFFBQWpCLENBQVo7O2VBRWVGLEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdTYWZhcmknKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sImZpbGUiOiJsaWIvbG9nZ2VyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
18
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignU2FmYXJpJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBRUEsTUFBTUEsR0FBRyxHQUFHQyxnQkFBT0MsU0FBUCxDQUFpQixRQUFqQixDQUFaOztlQUVlRixHIn0=
@@ -25,8 +25,6 @@ var _portscanner = require("portscanner");
25
25
 
26
26
  var _child_process = require("child_process");
27
27
 
28
- const log = _support.logger.getLogger('SafariDriverServer');
29
-
30
28
  const SD_BINARY = 'safaridriver';
31
29
  const STARTUP_TIMEOUT = 10000;
32
30
  const SAFARI_PORT_RANGE = [5100, 5200];
@@ -49,6 +47,7 @@ class SafariProxy extends _baseDriver.JWProxy {
49
47
 
50
48
  class SafariDriverProcess {
51
49
  constructor() {
50
+ this.log = _support.logger.getLogger('SafariDriverProcess');
52
51
  this.port = null;
53
52
  this.proc = null;
54
53
  }
@@ -84,12 +83,12 @@ class SafariDriverProcess {
84
83
  this.proc = new _teen_process.SubProcess(safariBin, ['-p', this.port, '--diagnose']);
85
84
  this.proc.on('output', (stdout, stderr) => {
86
85
  const line = stdout || stderr;
87
- log.debug(`[${SD_BINARY}] ${line}`);
86
+ this.log.debug(`[${SD_BINARY}] ${line}`);
88
87
  });
89
88
  this.proc.on('exit', (code, signal) => {
90
- log.info(`${SD_BINARY} has exited with code ${code}, signal ${signal}`);
89
+ this.log.info(`${SD_BINARY} has exited with code ${code}, signal ${signal}`);
91
90
  });
92
- log.info(`Starting '${safariBin}' on port ${this.port}`);
91
+ this.log.info(`Starting '${safariBin}' on port ${this.port}`);
93
92
  await this.proc.start(0);
94
93
  });
95
94
  }
@@ -114,7 +113,8 @@ process.once('exit', () => {
114
113
  });
115
114
 
116
115
  class SafariDriverServer {
117
- constructor() {
116
+ constructor(log) {
117
+ this.log = log;
118
118
  this.proxy = null;
119
119
  }
120
120
 
@@ -128,6 +128,7 @@ class SafariDriverServer {
128
128
  server: '127.0.0.1',
129
129
  port: SAFARI_DRIVER_PROCESS.port,
130
130
  base: '',
131
+ log: this.log,
131
132
  keepAlive: true
132
133
  });
133
134
  this.proxy.didProcessExit = false;
@@ -175,7 +176,7 @@ class SafariDriverServer {
175
176
  var _this$proxy;
176
177
 
177
178
  if (!this.isRunning) {
178
- log.info(`${SD_BINARY} session cannot be stopped, because the server is not running`);
179
+ this.log.info(`${SD_BINARY} session cannot be stopped, because the server is not running`);
179
180
  return;
180
181
  }
181
182
 
@@ -183,7 +184,7 @@ class SafariDriverServer {
183
184
  try {
184
185
  await this.proxy.command(`/session/${this.proxy.sessionId}`, 'DELETE');
185
186
  } catch (e) {
186
- log.info(`${SD_BINARY} session cannot be deleted. Original error: ${e.message}`);
187
+ this.log.info(`${SD_BINARY} session cannot be deleted. Original error: ${e.message}`);
187
188
  }
188
189
  }
189
190
  }
@@ -194,4 +195,4 @@ var _default = SafariDriverServer;
194
195
  exports.default = _default;require('source-map-support').install();
195
196
 
196
197
 
197
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zYWZhcmkuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiU0RfQklOQVJZIiwiU1RBUlRVUF9USU1FT1VUIiwiU0FGQVJJX1BPUlRfUkFOR0UiLCJTQUZBUklfU0VSVkVSX0dVQVJEIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJwYXRoIiwicmVzb2x2ZSIsIm9zIiwidG1wZGlyIiwidGltZW91dCIsInRyeVJlY292ZXJ5IiwiU2FmYXJpUHJveHkiLCJKV1Byb3h5IiwicHJveHlDb21tYW5kIiwidXJsIiwibWV0aG9kIiwiYm9keSIsImRpZFByb2Nlc3NFeGl0IiwiZXJyb3JzIiwiSW52YWxpZENvbnRleHRFcnJvciIsIlNhZmFyaURyaXZlclByb2Nlc3MiLCJjb25zdHJ1Y3RvciIsInBvcnQiLCJwcm9jIiwiaXNSdW5uaW5nIiwiaW5pdCIsInN0YXJ0UG9ydCIsImVuZFBvcnQiLCJlIiwiRXJyb3IiLCJzYWZhcmlCaW4iLCJmcyIsIndoaWNoIiwiU3ViUHJvY2VzcyIsIm9uIiwic3Rkb3V0Iiwic3RkZXJyIiwibGluZSIsImRlYnVnIiwiY29kZSIsInNpZ25hbCIsImluZm8iLCJzdGFydCIsImtpbGwiLCJzdG9wIiwiaWduIiwiU0FGQVJJX0RSSVZFUl9QUk9DRVNTIiwicHJvY2VzcyIsIm9uY2UiLCJwaWQiLCJTYWZhcmlEcml2ZXJTZXJ2ZXIiLCJwcm94eSIsImNhcHMiLCJzZXJ2ZXIiLCJiYXNlIiwia2VlcEFsaXZlIiwiY29tbWFuZCIsImVyciIsIm1lc3NhZ2UiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwidGVzdCIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInNlc3Npb25JZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlC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RUFBRCxDQURBO0FBRVpDLFFBQUFBLFdBQVcsRUFBRVo7QUFGRDtBQUQ2QixLQUF2QyxDQUFOO0FBTUQ7O0FBRVMsUUFBSlIsSUFBSSxHQUFJO0FBQUE7O0FBQ1osUUFBSSxDQUFDLEtBQUtwQixTQUFWLEVBQXFCO0FBQ25CNUIsTUFBQUEsR0FBRyxDQUFDNkMsSUFBSixDQUFVLEdBQUUxQyxTQUFVLCtEQUF0QjtBQUNBO0FBQ0Q7O0FBRUQsdUJBQUksS0FBS29ELEtBQVQsd0NBQUksWUFBWWMsU0FBaEIsRUFBMkI7QUFDekIsVUFBSTtBQUNGLGNBQU0sS0FBS2QsS0FBTCxDQUFXSyxPQUFYLENBQW9CLFlBQVcsS0FBS0wsS0FBTCxDQUFXYyxTQUFVLEVBQXBELEVBQXVELFFBQXZELENBQU47QUFDRCxPQUZELENBRUUsT0FBT3JDLENBQVAsRUFBVTtBQUNWaEMsUUFBQUEsR0FBRyxDQUFDNkMsSUFBSixDQUFVLEdBQUUxQyxTQUFVLCtDQUE4QzZCLENBQUMsQ0FBQzhCLE9BQVEsRUFBOUU7QUFDRDtBQUNGO0FBQ0Y7O0FBeEVzQjs7ZUEyRVZSLGtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgbG9nZ2VyLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IFN1YlByb2Nlc3MgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignU2FmYXJpRHJpdmVyU2VydmVyJyk7XG5cbmNvbnN0IFNEX0JJTkFSWSA9ICdzYWZhcmlkcml2ZXInO1xuY29uc3QgU1RBUlRVUF9USU1FT1VUID0gMTAwMDA7IC8vIHNlY29uZHNcbmNvbnN0IFNBRkFSSV9QT1JUX1JBTkdFID0gWzUxMDAsIDUyMDBdO1xuLy8gVGhpcyBndWFyZCBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlXG4vLyB3ZSBuZXZlciBydW4gbXVsdGlwbGUgU2FmYXJpIGRyaXZlciBwcm9jZXNzZXMgZm9yIHRoZSBzYW1lIEFwcGl1bSBwcm9jZXNzXG5jb25zdCBTQUZBUklfU0VSVkVSX0dVQVJEID0gdXRpbC5nZXRMb2NrRmlsZUd1YXJkKFxuICBwYXRoLnJlc29sdmUob3MudG1wZGlyKCksICdzYWZhcmlfc2VydmVyX2d1YXJkLmxvY2snKSxcbiAge3RpbWVvdXQ6IDUsIHRyeVJlY292ZXJ5OiB0cnVlfVxuKTtcblxuXG5jbGFzcyBTYWZhcmlQcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBhc3luYyBwcm94eUNvbW1hbmQgKHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIGlmICh0aGlzLmRpZFByb2Nlc3NFeGl0KSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRDb250ZXh0RXJyb3IoXG4gICAgICAgIGAnJHttZXRob2R9ICR7dXJsfScgY2Fubm90IGJlIHByb3hpZWQgdG8gU2FmYXJpIERyaXZlciBzZXJ2ZXIgYmVjYXVzZSBgICtcbiAgICAgICAgJ3RoZSBwcm9jZXNzIGlzIG5vdCBydW5uaW5nIChwcm9iYWJseSBjcmFzaGVkKS4gQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIucHJveHlDb21tYW5kKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxufVxuXG5cbmNsYXNzIFNhZmFyaURyaXZlclByb2Nlc3Mge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICB9XG5cbiAgZ2V0IGlzUnVubmluZyAoKSB7XG4gICAgcmV0dXJuICEhKHRoaXMucHJvYz8uaXNSdW5uaW5nKTtcbiAgfVxuXG4gIGFzeW5jIGluaXQgKCkge1xuICAgIGF3YWl0IFNBRkFSSV9TRVJWRVJfR1VBUkQoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW3N0YXJ0UG9ydCwgZW5kUG9ydF0gPSBTQUZBUklfUE9SVF9SQU5HRTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKHN0YXJ0UG9ydCwgZW5kUG9ydCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGZpbmQgYW55IGZyZWUgcG9ydCBpbiByYW5nZSAke3N0YXJ0UG9ydH0uLiR7ZW5kUG9ydH0uIGAgK1xuICAgICAgICAgIGBEb3VibGUgY2hlY2sgdGhlIHByb2Nlc3NlcyB0aGF0IGFyZSBsb2NraW5nIHBvcnRzIHdpdGhpbiB0aGlzIHJhbmdlIGFuZCB0ZXJtaW5hdGUgYCArXG4gICAgICAgICAgYHRoZXNlIHdoaWNoIGFyZSBub3QgbmVlZGVkIGFueW1vcmVgKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHNhZmFyaUJpbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNhZmFyaUJpbiA9IGF3YWl0IGZzLndoaWNoKFNEX0JJTkFSWSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTRF9CSU5BUll9IGJpbmFyeSBjYW5ub3QgYmUgZm91bmQgaW4gUEFUSC4gYCArXG4gICAgICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgcHJlc2VudCBvbiB5b3VyIHN5c3RlbWApO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9jID0gbmV3IFN1YlByb2Nlc3Moc2FmYXJpQmluLCBbJy1wJywgdGhpcy5wb3J0LCAnLS1kaWFnbm9zZSddKTtcbiAgICAgIHRoaXMucHJvYy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBzdGRvdXQgfHwgc3RkZXJyO1xuICAgICAgICBsb2cuZGVidWcoYFske1NEX0JJTkFSWX1dICR7bGluZX1gKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICBsb2cuaW5mbyhgJHtTRF9CSU5BUll9IGhhcyBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgIH0pO1xuICAgICAgbG9nLmluZm8oYFN0YXJ0aW5nICcke3NhZmFyaUJpbn0nIG9uIHBvcnQgJHt0aGlzLnBvcnR9YCk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoMCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBraWxsICgpIHtcbiAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCdTSUdLSUxMJyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuICB9XG59XG5cbi8vIFNpbmdsZSBzZXJ2ZXIgcHJvY2VzcyBwZXIgQXBwaXVtIGluc3RhbmNlXG5jb25zdCBTQUZBUklfRFJJVkVSX1BST0NFU1MgPSBuZXcgU2FmYXJpRHJpdmVyUHJvY2VzcygpO1xucHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICBpZiAoU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmlzUnVubmluZykge1xuICAgIHRyeSB7XG4gICAgICBleGVjU3luYyhga2lsbCAke1NBRkFSSV9EUklWRVJfUFJPQ0VTUy5wcm9jLnBpZH1gKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbn0pO1xuXG5jbGFzcyBTYWZhcmlEcml2ZXJTZXJ2ZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5wcm94eSA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEoU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmlzUnVubmluZyk7XG4gIH1cblxuICBhc3luYyBzdGFydCAoY2Fwcykge1xuICAgIGF3YWl0IFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5pbml0KCk7XG5cbiAgICB0aGlzLnByb3h5ID0gbmV3IFNhZmFyaVByb3h5KHtcbiAgICAgIHNlcnZlcjogJzEyNy4wLjAuMScsXG4gICAgICBwb3J0OiBTQUZBUklfRFJJVkVSX1BST0NFU1MucG9ydCxcbiAgICAgIGJhc2U6ICcnLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQgPSBmYWxzZTtcbiAgICBTQUZBUklfRFJJVkVSX1BST0NFU1MucHJvYy5vbignZXhpdCcsICgpID0+IHtcbiAgICAgIHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJveHkuZGlkUHJvY2Vzc0V4aXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IFNUQVJUVVBfVElNRU9VVCxcbiAgICAgICAgaW50ZXJ2YWxNczogMTAwMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICgvQ29uZGl0aW9uIHVubWV0Ly50ZXN0KGUubWVzc2FnZSkpIHtcbiAgICAgICAgaWYgKFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5pc1J1bm5pbmcpIHtcbiAgICAgICAgICAvLyBhdm9pZCBcImZyb3plblwiIHByb2Nlc3NlcyxcbiAgICAgICAgICBhd2FpdCBTQUZBUklfRFJJVkVSX1BST0NFU1Mua2lsbCgpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2FmYXJpIERyaXZlciBzZXJ2ZXIgaXMgbm90IGxpc3RlbmluZyB3aXRoaW4gJHtTVEFSVFVQX1RJTUVPVVR9bXMgdGltZW91dC4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBleGVjdXRlZCBtYW51YWxseSBhdCBsZWFzdCBvbmNlIHdpdGggJy0tZW5hYmxlJyBjb21tYW5kIGxpbmUgYXJndW1lbnQuIGAgK1xuICAgICAgICAgIGBDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgICAgICBhbHdheXNNYXRjaDogY2FwcyxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIGxvZy5pbmZvKGAke1NEX0JJTkFSWX0gc2Vzc2lvbiBjYW5ub3QgYmUgc3RvcHBlZCwgYmVjYXVzZSB0aGUgc2VydmVyIGlzIG5vdCBydW5uaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJveHk/LnNlc3Npb25JZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKGAvc2Vzc2lvbi8ke3RoaXMucHJveHkuc2Vzc2lvbklkfWAsICdERUxFVEUnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmluZm8oYCR7U0RfQklOQVJZfSBzZXNzaW9uIGNhbm5vdCBiZSBkZWxldGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNhZmFyaURyaXZlclNlcnZlcjtcbiJdLCJmaWxlIjoibGliL3NhZmFyaS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
198
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3NhZmFyaS5qcyIsIm5hbWVzIjpbIlNEX0JJTkFSWSIsIlNUQVJUVVBfVElNRU9VVCIsIlNBRkFSSV9QT1JUX1JBTkdFIiwiU0FGQVJJX1NFUlZFUl9HVUFSRCIsInV0aWwiLCJnZXRMb2NrRmlsZUd1YXJkIiwicGF0aCIsInJlc29sdmUiLCJvcyIsInRtcGRpciIsInRpbWVvdXQiLCJ0cnlSZWNvdmVyeSIsIlNhZmFyaVByb3h5IiwiSldQcm94eSIsInByb3h5Q29tbWFuZCIsInVybCIsIm1ldGhvZCIsImJvZHkiLCJkaWRQcm9jZXNzRXhpdCIsImVycm9ycyIsIkludmFsaWRDb250ZXh0RXJyb3IiLCJTYWZhcmlEcml2ZXJQcm9jZXNzIiwiY29uc3RydWN0b3IiLCJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJwb3J0IiwicHJvYyIsImlzUnVubmluZyIsImluaXQiLCJzdGFydFBvcnQiLCJlbmRQb3J0IiwiZSIsIkVycm9yIiwic2FmYXJpQmluIiwiZnMiLCJ3aGljaCIsIlN1YlByb2Nlc3MiLCJvbiIsInN0ZG91dCIsInN0ZGVyciIsImxpbmUiLCJkZWJ1ZyIsImNvZGUiLCJzaWduYWwiLCJpbmZvIiwic3RhcnQiLCJraWxsIiwic3RvcCIsImlnbiIsIlNBRkFSSV9EUklWRVJfUFJPQ0VTUyIsInByb2Nlc3MiLCJvbmNlIiwicGlkIiwiU2FmYXJpRHJpdmVyU2VydmVyIiwicHJveHkiLCJjYXBzIiwic2VydmVyIiwiYmFzZSIsImtlZXBBbGl2ZSIsImNvbW1hbmQiLCJlcnIiLCJtZXNzYWdlIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsInRlc3QiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJzZXNzaW9uSWQiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvc2FmYXJpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEpXUHJveHksIGVycm9ycyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgZnMsIGxvZ2dlciwgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBmaW5kQVBvcnROb3RJblVzZSB9IGZyb20gJ3BvcnRzY2FubmVyJztcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5cbmNvbnN0IFNEX0JJTkFSWSA9ICdzYWZhcmlkcml2ZXInO1xuY29uc3QgU1RBUlRVUF9USU1FT1VUID0gMTAwMDA7IC8vIHNlY29uZHNcbmNvbnN0IFNBRkFSSV9QT1JUX1JBTkdFID0gWzUxMDAsIDUyMDBdO1xuLy8gVGhpcyBndWFyZCBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlXG4vLyB3ZSBuZXZlciBydW4gbXVsdGlwbGUgU2FmYXJpIGRyaXZlciBwcm9jZXNzZXMgZm9yIHRoZSBzYW1lIEFwcGl1bSBwcm9jZXNzXG5jb25zdCBTQUZBUklfU0VSVkVSX0dVQVJEID0gdXRpbC5nZXRMb2NrRmlsZUd1YXJkKFxuICBwYXRoLnJlc29sdmUob3MudG1wZGlyKCksICdzYWZhcmlfc2VydmVyX2d1YXJkLmxvY2snKSxcbiAge3RpbWVvdXQ6IDUsIHRyeVJlY292ZXJ5OiB0cnVlfVxuKTtcblxuXG5jbGFzcyBTYWZhcmlQcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBhc3luYyBwcm94eUNvbW1hbmQgKHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIGlmICh0aGlzLmRpZFByb2Nlc3NFeGl0KSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRDb250ZXh0RXJyb3IoXG4gICAgICAgIGAnJHttZXRob2R9ICR7dXJsfScgY2Fubm90IGJlIHByb3hpZWQgdG8gU2FmYXJpIERyaXZlciBzZXJ2ZXIgYmVjYXVzZSBgICtcbiAgICAgICAgJ3RoZSBwcm9jZXNzIGlzIG5vdCBydW5uaW5nIChwcm9iYWJseSBjcmFzaGVkKS4gQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIucHJveHlDb21tYW5kKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxufVxuXG5jbGFzcyBTYWZhcmlEcml2ZXJQcm9jZXNzIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMubG9nID0gbG9nZ2VyLmdldExvZ2dlcignU2FmYXJpRHJpdmVyUHJvY2VzcycpO1xuICAgIHRoaXMucG9ydCA9IG51bGw7XG4gICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgfVxuXG4gIGdldCBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhISh0aGlzLnByb2M/LmlzUnVubmluZyk7XG4gIH1cblxuICBhc3luYyBpbml0ICgpIHtcbiAgICBhd2FpdCBTQUZBUklfU0VSVkVSX0dVQVJEKGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzUnVubmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtzdGFydFBvcnQsIGVuZFBvcnRdID0gU0FGQVJJX1BPUlRfUkFOR0U7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnBvcnQgPSBhd2FpdCBmaW5kQVBvcnROb3RJblVzZShzdGFydFBvcnQsIGVuZFBvcnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBmaW5kIGFueSBmcmVlIHBvcnQgaW4gcmFuZ2UgJHtzdGFydFBvcnR9Li4ke2VuZFBvcnR9LiBgICtcbiAgICAgICAgICBgRG91YmxlIGNoZWNrIHRoZSBwcm9jZXNzZXMgdGhhdCBhcmUgbG9ja2luZyBwb3J0cyB3aXRoaW4gdGhpcyByYW5nZSBhbmQgdGVybWluYXRlIGAgK1xuICAgICAgICAgIGB0aGVzZSB3aGljaCBhcmUgbm90IG5lZWRlZCBhbnltb3JlYCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBzYWZhcmlCaW47XG4gICAgICB0cnkge1xuICAgICAgICBzYWZhcmlCaW4gPSBhd2FpdCBmcy53aGljaChTRF9CSU5BUlkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7U0RfQklOQVJZfSBiaW5hcnkgY2Fubm90IGJlIGZvdW5kIGluIFBBVEguIGAgK1xuICAgICAgICAgIGBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIHByZXNlbnQgb24geW91ciBzeXN0ZW1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvYyA9IG5ldyBTdWJQcm9jZXNzKHNhZmFyaUJpbiwgWyctcCcsIHRoaXMucG9ydCwgJy0tZGlhZ25vc2UnXSk7XG4gICAgICB0aGlzLnByb2Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgICBjb25zdCBsaW5lID0gc3Rkb3V0IHx8IHN0ZGVycjtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFske1NEX0JJTkFSWX1dICR7bGluZX1gKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGAke1NEX0JJTkFSWX0gaGFzIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfSwgc2lnbmFsICR7c2lnbmFsfWApO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyAnJHtzYWZhcmlCaW59JyBvbiBwb3J0ICR7dGhpcy5wb3J0fWApO1xuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KDApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMga2lsbCAoKSB7XG4gICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgnU0lHS0lMTCcpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH1cbiAgfVxufVxuXG4vLyBTaW5nbGUgc2VydmVyIHByb2Nlc3MgcGVyIEFwcGl1bSBpbnN0YW5jZVxuY29uc3QgU0FGQVJJX0RSSVZFUl9QUk9DRVNTID0gbmV3IFNhZmFyaURyaXZlclByb2Nlc3MoKTtcbnByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgaWYgKFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5pc1J1bm5pbmcpIHtcbiAgICB0cnkge1xuICAgICAgZXhlY1N5bmMoYGtpbGwgJHtTQUZBUklfRFJJVkVSX1BST0NFU1MucHJvYy5waWR9YCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG59KTtcblxuY2xhc3MgU2FmYXJpRHJpdmVyU2VydmVyIHtcbiAgY29uc3RydWN0b3IgKGxvZykge1xuICAgIHRoaXMubG9nID0gbG9nO1xuICAgIHRoaXMucHJveHkgPSBudWxsO1xuICB9XG5cbiAgZ2V0IGlzUnVubmluZyAoKSB7XG4gICAgcmV0dXJuICEhKFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5pc1J1bm5pbmcpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKGNhcHMpIHtcbiAgICBhd2FpdCBTQUZBUklfRFJJVkVSX1BST0NFU1MuaW5pdCgpO1xuXG4gICAgdGhpcy5wcm94eSA9IG5ldyBTYWZhcmlQcm94eSh7XG4gICAgICBzZXJ2ZXI6ICcxMjcuMC4wLjEnLFxuICAgICAgcG9ydDogU0FGQVJJX0RSSVZFUl9QUk9DRVNTLnBvcnQsXG4gICAgICBiYXNlOiAnJyxcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5wcm94eS5kaWRQcm9jZXNzRXhpdCA9IGZhbHNlO1xuICAgIFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5wcm9jLm9uKCdleGl0JywgKCkgPT4ge1xuICAgICAgdGhpcy5wcm94eS5kaWRQcm9jZXNzRXhpdCA9IHRydWU7XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAodGhpcy5wcm94eS5kaWRQcm9jZXNzRXhpdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIHdhaXRNczogU1RBUlRVUF9USU1FT1VULFxuICAgICAgICBpbnRlcnZhbE1zOiAxMDAwLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKC9Db25kaXRpb24gdW5tZXQvLnRlc3QoZS5tZXNzYWdlKSkge1xuICAgICAgICBpZiAoU0FGQVJJX0RSSVZFUl9QUk9DRVNTLmlzUnVubmluZykge1xuICAgICAgICAgIC8vIGF2b2lkIFwiZnJvemVuXCIgcHJvY2Vzc2VzLFxuICAgICAgICAgIGF3YWl0IFNBRkFSSV9EUklWRVJfUFJPQ0VTUy5raWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTYWZhcmkgRHJpdmVyIHNlcnZlciBpcyBub3QgbGlzdGVuaW5nIHdpdGhpbiAke1NUQVJUVVBfVElNRU9VVH1tcyB0aW1lb3V0LiBgICtcbiAgICAgICAgICBgTWFrZSBzdXJlIGl0IGhhcyBiZWVuIGV4ZWN1dGVkIG1hbnVhbGx5IGF0IGxlYXN0IG9uY2Ugd2l0aCAnLS1lbmFibGUnIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gYCArXG4gICAgICAgICAgYENoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHNgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5wcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgICAgIGFsd2F5c01hdGNoOiBjYXBzLFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoKSB7XG4gICAgaWYgKCF0aGlzLmlzUnVubmluZykge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgJHtTRF9CSU5BUll9IHNlc3Npb24gY2Fubm90IGJlIHN0b3BwZWQsIGJlY2F1c2UgdGhlIHNlcnZlciBpcyBub3QgcnVubmluZ2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3h5Py5zZXNzaW9uSWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJveHkuY29tbWFuZChgL3Nlc3Npb24vJHt0aGlzLnByb3h5LnNlc3Npb25JZH1gLCAnREVMRVRFJyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYCR7U0RfQklOQVJZfSBzZXNzaW9uIGNhbm5vdCBiZSBkZWxldGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNhZmFyaURyaXZlclNlcnZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxTQUFTLEdBQUcsY0FBbEI7QUFDQSxNQUFNQyxlQUFlLEdBQUcsS0FBeEI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLElBQUQsRUFBTyxJQUFQLENBQTFCOztBQUdBLE1BQU1DLG1CQUFtQixHQUFHQyxjQUFLQyxnQkFBTCxDQUMxQkMsY0FBS0MsT0FBTCxDQUFhQyxZQUFHQyxNQUFILEVBQWIs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
@@ -33,4 +33,4 @@ async function startServer(port, address) {
33
33
  }require('source-map-support').install();
34
34
 
35
35
 
36
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zZXJ2ZXIuanMiXSwibmFtZXMiOlsic3RhcnRTZXJ2ZXIiLCJwb3J0IiwiYWRkcmVzcyIsImQiLCJTYWZhcmlEcml2ZXIiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJzZXJ2ZXIiLCJob3N0bmFtZSIsImxvZyIsImluZm8iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0E7O0FBRUEsZUFBZUEsV0FBZixDQUE0QkMsSUFBNUIsRUFBa0NDLE9BQWxDLEVBQTJDO0FBQ3pDLE1BQUlDLENBQUMsR0FBRyxJQUFJQyxlQUFKLENBQWlCO0FBQUNILElBQUFBLElBQUQ7QUFBT0MsSUFBQUE7QUFBUCxHQUFqQixDQUFSO0FBQ0EsTUFBSUcsd0JBQXdCLEdBQUcsMENBQVdGLENBQVgsQ0FBL0I7QUFDQSxNQUFJRyxNQUFNLEdBQUcsTUFBTSx3QkFBVztBQUFDRCxJQUFBQSx3QkFBRDtBQUEyQkosSUFBQUEsSUFBM0I7QUFBaUNNLElBQUFBLFFBQVEsRUFBRUw7QUFBM0MsR0FBWCxDQUFuQjs7QUFDQU0sa0JBQUlDLElBQUosQ0FBVSwyQ0FBMENQLE9BQVEsSUFBR0QsSUFBSyxFQUFwRTs7QUFDQSxTQUFPSyxNQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7XG4gIHNlcnZlciBhcyBiYXNlU2VydmVyLCByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gYXMgbWFrZVJvdXRlclxufSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCBTYWZhcmlEcml2ZXIgZnJvbSAnLi9kcml2ZXInO1xuXG5hc3luYyBmdW5jdGlvbiBzdGFydFNlcnZlciAocG9ydCwgYWRkcmVzcykge1xuICBsZXQgZCA9IG5ldyBTYWZhcmlEcml2ZXIoe3BvcnQsIGFkZHJlc3N9KTtcbiAgbGV0IHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiA9IG1ha2VSb3V0ZXIoZCk7XG4gIGxldCBzZXJ2ZXIgPSBhd2FpdCBiYXNlU2VydmVyKHtyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sIHBvcnQsIGhvc3RuYW1lOiBhZGRyZXNzfSk7XG4gIGxvZy5pbmZvKGBTYWZhcmlEcml2ZXIgc2VydmVyIGxpc3RlbmluZyBvbiBodHRwOi8vJHthZGRyZXNzfToke3BvcnR9YCk7XG4gIHJldHVybiBzZXJ2ZXI7XG59XG5cbmV4cG9ydCB7IHN0YXJ0U2VydmVyIH07XG4iXSwiZmlsZSI6ImxpYi9zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
36
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3NlcnZlci5qcyIsIm5hbWVzIjpbInN0YXJ0U2VydmVyIiwicG9ydCIsImFkZHJlc3MiLCJkIiwiU2FmYXJpRHJpdmVyIiwicm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIiwic2VydmVyIiwiaG9zdG5hbWUiLCJsb2ciLCJpbmZvIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL3NlcnZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7XG4gIHNlcnZlciBhcyBiYXNlU2VydmVyLCByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gYXMgbWFrZVJvdXRlclxufSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCBTYWZhcmlEcml2ZXIgZnJvbSAnLi9kcml2ZXInO1xuXG5hc3luYyBmdW5jdGlvbiBzdGFydFNlcnZlciAocG9ydCwgYWRkcmVzcykge1xuICBsZXQgZCA9IG5ldyBTYWZhcmlEcml2ZXIoe3BvcnQsIGFkZHJlc3N9KTtcbiAgbGV0IHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiA9IG1ha2VSb3V0ZXIoZCk7XG4gIGxldCBzZXJ2ZXIgPSBhd2FpdCBiYXNlU2VydmVyKHtyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sIHBvcnQsIGhvc3RuYW1lOiBhZGRyZXNzfSk7XG4gIGxvZy5pbmZvKGBTYWZhcmlEcml2ZXIgc2VydmVyIGxpc3RlbmluZyBvbiBodHRwOi8vJHthZGRyZXNzfToke3BvcnR9YCk7XG4gIHJldHVybiBzZXJ2ZXI7XG59XG5cbmV4cG9ydCB7IHN0YXJ0U2VydmVyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0E7O0FBRUEsZUFBZUEsV0FBZixDQUE0QkMsSUFBNUIsRUFBa0NDLE9BQWxDLEVBQTJDO0VBQ3pDLElBQUlDLENBQUMsR0FBRyxJQUFJQyxlQUFKLENBQWlCO0lBQUNILElBQUQ7SUFBT0M7RUFBUCxDQUFqQixDQUFSO0VBQ0EsSUFBSUcsd0JBQXdCLEdBQUcsMENBQVdGLENBQVgsQ0FBL0I7RUFDQSxJQUFJRyxNQUFNLEdBQUcsTUFBTSx3QkFBVztJQUFDRCx3QkFBRDtJQUEyQkosSUFBM0I7SUFBaUNNLFFBQVEsRUFBRUw7RUFBM0MsQ0FBWCxDQUFuQjs7RUFDQU0sZ0JBQUlDLElBQUosQ0FBVSwyQ0FBMENQLE9BQVEsSUFBR0QsSUFBSyxFQUFwRTs7RUFDQSxPQUFPSyxNQUFQO0FBQ0QifQ==