appium-mac2-driver 0.14.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/build/lib/commands/applescript.js +6 -6
- package/build/lib/commands/execute.js +4 -4
- package/build/lib/commands/find.js +3 -3
- package/build/lib/commands/gestures.js +9 -9
- package/build/lib/commands/record-screen.js +13 -13
- package/build/lib/driver.js +4 -4
- package/build/lib/logger.js +3 -3
- package/build/lib/server.js +4 -4
- package/build/lib/wda-mac.js +19 -19
- package/lib/commands/applescript.js +1 -1
- package/lib/commands/execute.js +1 -1
- package/lib/commands/find.js +1 -1
- package/lib/commands/gestures.js +2 -2
- package/lib/commands/record-screen.js +1 -1
- package/lib/driver.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/server.js +9 -2
- package/lib/wda-mac.js +2 -2
- package/package.json +14 -8
- package/build/index.js +0 -52
package/README.md
CHANGED
|
@@ -13,6 +13,7 @@ On top of standard Appium requirements Mac2 driver also expects the following pr
|
|
|
13
13
|
- macOS 10.15 or later
|
|
14
14
|
- Xcode 12 or later should be installed
|
|
15
15
|
- Xcode Helper app should be enabled for Accessibility access. The app itself could be usually found at `/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Agents/Xcode Helper.app`. In order to enable Accessibility access for it simply open the parent folder in Finder: `open /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Agents/` and drag & drop the `Xcode Helper` app to `Security & Privacy -> Privacy -> Accessibility` list of your `System Preferences`. This action must only be done once.
|
|
16
|
+
- Since the version `1.0.0` this driver is only compatible with Appium 2. Use the `appium driver install mac2` CLI command to add it to your server dist.
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
## Capabilities
|
|
@@ -613,7 +614,7 @@ useDefaultUiInterruptionsHandling | boolean | Whether to use the default XCTest
|
|
|
613
614
|
import pytest
|
|
614
615
|
|
|
615
616
|
from appium import webdriver
|
|
616
|
-
|
|
617
|
+
from appium.webdriver.common.appiumby import AppiumBy
|
|
617
618
|
|
|
618
619
|
@pytest.fixture()
|
|
619
620
|
def driver():
|
|
@@ -628,7 +629,7 @@ def driver():
|
|
|
628
629
|
|
|
629
630
|
|
|
630
631
|
def test_edit_text(driver):
|
|
631
|
-
edit_field = driver.
|
|
632
|
+
edit_field = driver.find_element(by=AppiumBy.CLASS_NAME, value='XCUIElementTypeTextView')
|
|
632
633
|
edit_field.send_keys('hello world')
|
|
633
634
|
assert edit_field.text == 'hello world'
|
|
634
635
|
edit_field.clear()
|
|
@@ -636,7 +637,7 @@ def test_edit_text(driver):
|
|
|
636
637
|
|
|
637
638
|
|
|
638
639
|
def test_sending_custom_keys(driver):
|
|
639
|
-
edit_field = driver.
|
|
640
|
+
edit_field = driver.find_element(by=AppiumBy.CLASS_NAME, value='XCUIElementTypeTextView')
|
|
640
641
|
flagsShift = 1 << 1
|
|
641
642
|
driver.execute_script('macos: keys', {
|
|
642
643
|
'keys': [{
|
|
@@ -648,7 +649,6 @@ def test_sending_custom_keys(driver):
|
|
|
648
649
|
}]
|
|
649
650
|
})
|
|
650
651
|
assert edit_field.text == 'HI'
|
|
651
|
-
|
|
652
652
|
```
|
|
653
653
|
|
|
654
654
|
|
|
@@ -9,7 +9,7 @@ exports.default = exports.commands = void 0;
|
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _support = require("@appium/support");
|
|
13
13
|
|
|
14
14
|
var _teen_process = require("teen_process");
|
|
15
15
|
|
|
@@ -51,17 +51,17 @@ commands.macosExecAppleScript = async function macosExecAppleScript(opts = {}) {
|
|
|
51
51
|
|
|
52
52
|
try {
|
|
53
53
|
if (shouldRunScript) {
|
|
54
|
-
tmpRoot = await
|
|
54
|
+
tmpRoot = await _support.tempDir.openDir();
|
|
55
55
|
|
|
56
56
|
const tmpScriptPath = _path.default.resolve(tmpRoot, 'appium_script.scpt');
|
|
57
57
|
|
|
58
|
-
await
|
|
58
|
+
await _support.fs.writeFile(tmpScriptPath, script, 'utf8');
|
|
59
59
|
args.push(tmpScriptPath);
|
|
60
60
|
} else {
|
|
61
61
|
args.push('-e', command);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
_logger.default.info(`Running ${OSASCRIPT} with arguments: ${
|
|
64
|
+
_logger.default.info(`Running ${OSASCRIPT} with arguments: ${_support.util.quote(args)}`);
|
|
65
65
|
|
|
66
66
|
try {
|
|
67
67
|
const {
|
|
@@ -76,7 +76,7 @@ commands.macosExecAppleScript = async function macosExecAppleScript(opts = {}) {
|
|
|
76
76
|
}
|
|
77
77
|
} finally {
|
|
78
78
|
if (tmpRoot) {
|
|
79
|
-
await
|
|
79
|
+
await _support.fs.rimraf(tmpRoot);
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
};
|
|
@@ -85,4 +85,4 @@ var _default = commands;
|
|
|
85
85
|
exports.default = _default;require('source-map-support').install();
|
|
86
86
|
|
|
87
87
|
|
|
88
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHBsZXNjcmlwdC5qcyJdLCJuYW1lcyI6WyJPU0FTQ1JJUFQiLCJBUFBMRV9TQ1JJUFRfRkVBVFVSRSIsImNvbW1hbmRzIiwibWFjb3NFeGVjQXBwbGVTY3JpcHQiLCJvcHRzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJzY3JpcHQiLCJsYW5ndWFnZSIsImNvbW1hbmQiLCJjd2QiLCJ0aW1lb3V0IiwibG9nIiwiZXJyb3JBbmRUaHJvdyIsInRlc3QiLCJzaG91bGRSdW5TY3JpcHQiLCJhcmdzIiwicHVzaCIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInRtcFNjcmlwdFBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsImZzIiwid3JpdGVGaWxlIiwiaW5mbyIsInV0aWwiLCJxdW90ZSIsInN0ZG91dCIsImUiLCJFcnJvciIsInN0ZGVyciIsIm1lc3NhZ2UiLCJyaW1yYWYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsU0FBUyxHQUFHLFdBQWxCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsY0FBN0I7QUFFQSxNQUFNQyxRQUFRLEdBQUcsRUFBakI7OztBQThCQUEsUUFBUSxDQUFDQyxvQkFBVCxHQUFnQyxlQUFlQSxvQkFBZixDQUFxQ0MsSUFBSSxHQUFHLEVBQTVDLEVBQWdEO0FBQzlFLE9BQUtDLG9CQUFMLENBQTBCSixvQkFBMUI7QUFFQSxRQUFNO0FBQ0pLLElBQUFBLE1BREk7QUFFSkMsSUFBQUEsUUFGSTtBQUdKQyxJQUFBQSxPQUhJO0FBSUpDLElBQUFBLEdBSkk7QUFLSkMsSUFBQUE7QUFMSSxNQU1GTixJQU5KOztBQU9BLE1BQUksQ0FBQ0UsTUFBRCxJQUFXLENBQUNFLE9BQWhCLEVBQXlCO0FBQ3ZCRyxvQkFBSUMsYUFBSixDQUFrQiw4Q0FBbEI7QUFDRDs7QUFDRCxNQUFJLEtBQUtDLElBQUwsQ0FBVUwsT0FBVixDQUFKLEVBQXdCO0FBQ3RCRyxvQkFBSUMsYUFBSixDQUFrQixpREFBbEI7QUFDRDs7QUFFRCxRQUFNRSxlQUFlLEdBQUcsQ0FBQ04sT0FBekI7QUFFQSxRQUFNTyxJQUFJLEdBQUcsRUFBYjs7QUFDQSxNQUFJUixRQUFKLEVBQWM7QUFDWlEsSUFBQUEsSUFBSSxDQUFDQyxJQUFMLENBQVUsSUFBVixFQUFnQlQsUUFBaEI7QUFDRDs7QUFDRCxNQUFJVSxPQUFKOztBQUNBLE1BQUk7QUFDRixRQUFJSCxlQUFKLEVBQXFCO0FBQ25CRyxNQUFBQSxPQUFPLEdBQUcsTUFBTUMsaUJBQVFDLE9BQVIsRUFBaEI7O0FBQ0EsWUFBTUMsYUFBYSxHQUFHQyxjQUFLQyxPQUFMLENBQWFMLE9BQWIsRUFBc0Isb0JBQXRCLENBQXRCOztBQUNBLFlBQU1NLFlBQUdDLFNBQUgsQ0FBYUosYUFBYixFQUE0QmQsTUFBNUIsRUFBb0MsTUFBcEMsQ0FBTjtBQUNBUyxNQUFBQSxJQUFJLENBQUNDLElBQUwsQ0FBVUksYUFBVjtBQUNELEtBTEQsTUFLTztBQUNMTCxNQUFBQSxJQUFJLENBQUNDLElBQUwsQ0FBVSxJQUFWLEVBQWdCUixPQUFoQjtBQUNEOztBQUNERyxvQkFBSWMsSUFBSixDQUFVLFdBQVV6QixTQUFVLG9CQUFtQjBCLGNBQUtDLEtBQUwsQ0FBV1osSUFBWCxDQUFpQixFQUFsRTs7QUFDQSxRQUFJO0FBQ0YsWUFBTTtBQUFDYSxRQUFBQTtBQUFELFVBQVcsTUFBTSx3QkFBSzVCLFNBQUwsRUFBZ0JlLElBQWhCLEVBQXNCO0FBQUNOLFFBQUFBLEdBQUQ7QUFBTUMsUUFBQUE7QUFBTixPQUF0QixDQUF2QjtBQUNBLGFBQU9rQixNQUFQO0FBQ0QsS0FIRCxDQUdFLE9BQU9DLENBQVAsRUFBVTtBQUNWLFlBQU0sSUFBSUMsS0FBSixDQUFVRCxDQUFDLENBQUNFLE1BQUYsSUFBWUYsQ0FBQyxDQUFDRyxPQUF4QixDQUFOO0FBQ0Q7QUFDRixHQWhCRCxTQWdCVTtBQUNSLFFBQUlmLE9BQUosRUFBYTtBQUNYLFlBQU1NLFlBQUdVLE1BQUgsQ0FBVWhCLE9BQVYsQ0FBTjtBQUNEO0FBQ0Y7QUFDRixDQTdDRDs7ZUFnRGVmLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgdGVtcERpciwgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5jb25zdCBPU0FTQ1JJUFQgPSAnb3Nhc2NyaXB0JztcbmNvbnN0IEFQUExFX1NDUklQVF9GRUFUVVJFID0gJ2FwcGxlX3NjcmlwdCc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRXhlY0FwcGxlU2NyaXB0T3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzY3JpcHQgQSB2YWxpZCBBcHBsZVNjcmlwdCB0byBleGVjdXRlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGxhbmd1YWdlIE92ZXJyaWRlcyB0aGUgc2NyaXB0aW5nIGxhbmd1YWdlLiBCYXNpY2FsbHksIHNldHMgdGhlIHZhbHVlIG9mIGAtbGAgY29tbWFuZFxuICogbGluZSBhcmd1bWVudCBvZiBgb3Nhc2NyaXB0YCB0b29sLiBJZiB1bnNldCB0aGUgQXBwbGVTY3JpcHQgbGFuZ3VhZ2UgaXMgYXNzdW1lZC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gY29tbWFuZCBBIHZhbGlkIEFwcGxlU2NyaXB0IGFzIGEgc2luZ2xlIGNvbW1hbmQgKG5vIGxpbmUgYnJlYWtzKSB0byBleGVjdXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHRpbWVvdXQgWzIwMDAwXSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCB1bnRpbCBhIGxvbmctcnVubmluZyBjb21tYW5kIGlzXG4gKiBmaW5pc2hlZC4gQW4gZXJyb3IgaXMgdGhyb3duIGlmIHRoZSBjb21tYW5kIGlzIHN0aWxsIHJ1bm5pbmcgYWZ0ZXIgdGhpcyB0aW1lb3V0IGV4cGlyZXMuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGN3ZCBUaGUgcGF0aCB0byBhbiBleGlzdGluZyBmb2xkZXIsIHdoaWNoIGlzIGdvaW5nIHRvIGJlIHNldCBhcyB0aGVcbiAqIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgY29tbWFuZC9zY3JpcHQgYmVpbmcgZXhlY3V0ZWQuXG4gKi9cblxuLyoqXG4gKiBFeGVjdXRlcyB0aGUgZ2l2ZW4gQXBwbGVTY3JpcHQgY29tbWFuZCBvciBhIHdob2xlIHNjcmlwdCBiYXNlZCBvbiB0aGVcbiAqIGdpdmVuIG9wdGlvbnMuIEVpdGhlciBvZiB0aGVzZSBvcHRpb25zIG11c3QgYmUgcHJvdmlkZWQuIElmIGJvdGggYXJlIHByb3ZpZGVkXG4gKiB0aGVuIHRoZSBgY29tbWFuZGAgb25lIGdldHMgdGhlIHByaW9yaXR5LlxuICogTm90ZSB0aGF0IEFwcGxlU2NyaXB0IGNvbW1hbmQgY2Fubm90IGNvbnRhaW4gbGluZSBicmVha3MuIENvbnNpZGVyIG1ha2luZyBpdFxuICogdG8gYSBzY3JpcHQgaW4gc3VjaCBjYXNlLlxuICogTm90ZSB0aGF0IGJ5IGRlZmF1bHQgQXBwbGVTY3JpcHQgZW5naW5lIGJsb2NrcyBjb21tYW5kcy9zY3JpcHRzIGV4ZWN1dGlvbiBpZiB5b3VyIHNjcmlwdFxuICogaXMgdHJ5aW5nIHRvIGFjY2VzcyBzb21lIHByaXZhdGUgZW50aXRpZXMsIGxpa2UgY2FtZXJhcyBvciB0aGUgZGVza3RvcCBzY3JlZW5cbiAqIGFuZCBubyBwZXJtaXNzaW9ucyB0byBkbyBpdCBhcmUgZ2l2ZW4gdG8gdGhlIHBhcmVudCAoZm9yIGV4YW1wbGUsIEFwcGl1bSBvciBUZXJtaW5hbClcbiAqIHByb2Nlc3MgaW4gU3lzdGVtIFByZWZlcmVuY2VzIC0+IFByaXZhY3kgbGlzdC5cbiAqXG4gKiBAcGFyYW0geyFFeGVjQXBwbGVTY3JpcHRPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYWN0dWFsIHN0ZG91dCBvZiB0aGUgZ2l2ZW4gY29tbWFuZC9zY3JpcHRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZXhpdCBjb2RlIG9mIHRoZSBnaXZlbiBjb21tYW5kL3NjcmlwdCBpcyBub3QgemVyby5cbiAqIFRoZSBhY3R1YWwgc3RkZXJyIG91dHB1dCBpcyBzZXQgdG8gdGhlIGVycm9yIG1lc3NhZ2UgdmFsdWUuXG4gKi9cbmNvbW1hbmRzLm1hY29zRXhlY0FwcGxlU2NyaXB0ID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NFeGVjQXBwbGVTY3JpcHQgKG9wdHMgPSB7fSkge1xuICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKEFQUExFX1NDUklQVF9GRUFUVVJFKTtcblxuICBjb25zdCB7XG4gICAgc2NyaXB0LFxuICAgIGxhbmd1YWdlLFxuICAgIGNvbW1hbmQsXG4gICAgY3dkLFxuICAgIHRpbWVvdXQsXG4gIH0gPSBvcHRzO1xuICBpZiAoIXNjcmlwdCAmJiAhY29tbWFuZCkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KCdBcHBsZVNjcmlwdCBzY3JpcHQvY29tbWFuZCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICB9XG4gIGlmICgvXFxuLy50ZXN0KGNvbW1hbmQpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ0FwcGxlU2NyaXB0IGNvbW1hbmRzIGNhbm5vdCBjb250YWluIGxpbmUgYnJlYWtzJyk7XG4gIH1cbiAgLy8gJ2NvbW1hbmQnIGhhcyBwcmlvcml0eSBvdmVyICdzY3JpcHQnXG4gIGNvbnN0IHNob3VsZFJ1blNjcmlwdCA9ICFjb21tYW5kO1xuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgaWYgKGxhbmd1YWdlKSB7XG4gICAgYXJncy5wdXNoKCctbCcsIGxhbmd1YWdlKTtcbiAgfVxuICBsZXQgdG1wUm9vdDtcbiAgdHJ5IHtcbiAgICBpZiAoc2hvdWxkUnVuU2NyaXB0KSB7XG4gICAgICB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgICBjb25zdCB0bXBTY3JpcHRQYXRoID0gcGF0aC5yZXNvbHZlKHRtcFJvb3QsICdhcHBpdW1fc2NyaXB0LnNjcHQnKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0bXBTY3JpcHRQYXRoLCBzY3JpcHQsICd1dGY4Jyk7XG4gICAgICBhcmdzLnB1c2godG1wU2NyaXB0UGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MucHVzaCgnLWUnLCBjb21tYW5kKTtcbiAgICB9XG4gICAgbG9nLmluZm8oYFJ1bm5pbmcgJHtPU0FTQ1JJUFR9IHdpdGggYXJndW1lbnRzOiAke3V0aWwucXVvdGUoYXJncyl9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhPU0FTQ1JJUFQsIGFyZ3MsIHtjd2QsIHRpbWVvdXR9KTtcbiAgICAgIHJldHVybiBzdGRvdXQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGUuc3RkZXJyIHx8IGUubWVzc2FnZSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGlmICh0bXBSb290KSB7XG4gICAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9hcHBsZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -11,7 +11,7 @@ require("source-map-support/register");
|
|
|
11
11
|
|
|
12
12
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _baseDriver = require("@appium/base-driver");
|
|
15
15
|
|
|
16
16
|
var _logger = _interopRequireDefault(require("../logger"));
|
|
17
17
|
|
|
@@ -50,12 +50,12 @@ commands.execute = async function execute(script, args) {
|
|
|
50
50
|
return await this.executeMacosCommand(script, _lodash.default.isArray(args) ? args[0] : args);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
throw new
|
|
53
|
+
throw new _baseDriver.errors.NotImplementedError();
|
|
54
54
|
};
|
|
55
55
|
|
|
56
56
|
commands.executeMacosCommand = async function executeMacosCommand(command, opts = {}) {
|
|
57
57
|
if (!_lodash.default.has(EXTENSION_COMMANDS_MAPPING, command)) {
|
|
58
|
-
throw new
|
|
58
|
+
throw new _baseDriver.errors.UnknownCommandError(`Unknown extension command "${command}". ` + `Only ${_lodash.default.keys(EXTENSION_COMMANDS_MAPPING)} commands are supported.`);
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
return await this[EXTENSION_COMMANDS_MAPPING[command]](opts);
|
|
@@ -65,4 +65,4 @@ var _default = commands;
|
|
|
65
65
|
exports.default = _default;require('source-map-support').install();
|
|
66
66
|
|
|
67
67
|
|
|
68
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiRVhURU5TSU9OX0NPTU1BTkRTX01BUFBJTkciLCJzZXRWYWx1ZSIsImNsaWNrIiwic2Nyb2xsIiwic3dpcGUiLCJyaWdodENsaWNrIiwiaG92ZXIiLCJkb3VibGVDbGljayIsImNsaWNrQW5kRHJhZyIsImNsaWNrQW5kRHJhZ0FuZEhvbGQiLCJrZXlzIiwidGFwIiwiZG91YmxlVGFwIiwicHJlc3MiLCJwcmVzc0FuZERyYWciLCJwcmVzc0FuZERyYWdBbmRIb2xkIiwic291cmNlIiwibGF1bmNoQXBwIiwiYWN0aXZhdGVBcHAiLCJ0ZXJtaW5hdGVBcHAiLCJxdWVyeUFwcFN0YXRlIiwiYXBwbGVTY3JpcHQiLCJzdGFydFJlY29yZGluZ1NjcmVlbiIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJleGVjdXRlIiwic2NyaXB0IiwiYXJncyIsIm1hdGNoIiwibG9nIiwiaW5mbyIsInJlcGxhY2UiLCJ0cmltIiwiZXhlY3V0ZU1hY29zQ29tbWFuZCIsIl8iLCJpc0FycmF5IiwiZXJyb3JzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImNvbW1hbmQiLCJvcHRzIiwiaGFzIiwiVW5rbm93bkNvbW1hbmRFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxRQUFRLEdBQUcsRUFBakI7QUFFQSxNQUFNQywwQkFBMEIsR0FBRztBQUNqQ0MsRUFBQUEsUUFBUSxFQUFFLGVBRHVCO0FBRWpDQyxFQUFBQSxLQUFLLEVBQUUsWUFGMEI7QUFHakNDLEVBQUFBLE1BQU0sRUFBRSxhQUh5QjtBQUlqQ0MsRUFBQUEsS0FBSyxFQUFFLFlBSjBCO0FBS2pDQyxFQUFBQSxVQUFVLEVBQUUsaUJBTHFCO0FBTWpDQyxFQUFBQSxLQUFLLEVBQUUsWUFOMEI7QUFPakNDLEVBQUFBLFdBQVcsRUFBRSxrQkFQb0I7QUFRakNDLEVBQUFBLFlBQVksRUFBRSxtQkFSbUI7QUFTakNDLEVBQUFBLG1CQUFtQixFQUFFLDBCQVRZO0FBVWpDQyxFQUFBQSxJQUFJLEVBQUUsV0FWMkI7QUFZakNDLEVBQUFBLEdBQUcsRUFBRSxVQVo0QjtBQWFqQ0MsRUFBQUEsU0FBUyxFQUFFLGdCQWJzQjtBQWNqQ0MsRUFBQUEsS0FBSyxFQUFFLFlBZDBCO0FBZWpDQyxFQUFBQSxZQUFZLEVBQUUsbUJBZm1CO0FBZ0JqQ0MsRUFBQUEsbUJBQW1CLEVBQUUsMEJBaEJZO0FBa0JqQ0MsRUFBQUEsTUFBTSxFQUFFLGFBbEJ5QjtBQW9CakNDLEVBQUFBLFNBQVMsRUFBRSxnQkFwQnNCO0FBcUJqQ0MsRUFBQUEsV0FBVyxFQUFFLGtCQXJCb0I7QUFzQmpDQyxFQUFBQSxZQUFZLEVBQUUsbUJBdEJtQjtBQXVCakNDLEVBQUFBLGFBQWEsRUFBRSxvQkF2QmtCO0FBeUJqQ0MsRUFBQUEsV0FBVyxFQUFFLHNCQXpCb0I7QUEyQmpDQyxFQUFBQSxvQkFBb0IsRUFBRSxzQkEzQlc7QUE0QmpDQyxFQUFBQSxtQkFBbUIsRUFBRTtBQTVCWSxDQUFuQzs7QUErQkF4QixRQUFRLENBQUN5QixPQUFULEdBQW1CLGVBQWVBLE9BQWYsQ0FBd0JDLE1BQXhCLEVBQWdDQyxJQUFoQyxFQUFzQztBQUN2RCxNQUFJRCxNQUFNLENBQUNFLEtBQVAsQ0FBYSxTQUFiLENBQUosRUFBNkI7QUFDM0JDLG9CQUFJQyxJQUFKLENBQVUsZ0NBQStCSixNQUFPLEdBQWhEOztBQUNBQSxJQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ0ssT0FBUCxDQUFlLFNBQWYsRUFBMEIsRUFBMUIsRUFBOEJDLElBQTlCLEVBQVQ7QUFDQSxXQUFPLE1BQU0sS0FBS0MsbUJBQUwsQ0FBeUJQLE1BQXpCLEVBQWlDUSxnQkFBRUMsT0FBRixDQUFVUixJQUFWLElBQWtCQSxJQUFJLENBQUMsQ0FBRCxDQUF0QixHQUE0QkEsSUFBN0QsQ0FBYjtBQUNEOztBQUNELFFBQU0sSUFBSVMsbUJBQU9DLG1CQUFYLEVBQU47QUFDRCxDQVBEOztBQVNBckMsUUFBUSxDQUFDaUMsbUJBQVQsR0FBK0IsZUFBZUEsbUJBQWYsQ0FBb0NLLE9BQXBDLEVBQTZDQyxJQUFJLEdBQUcsRUFBcEQsRUFBd0Q7QUFDckYsTUFBSSxDQUFDTCxnQkFBRU0sR0FBRixDQUFNdkMsMEJBQU4sRUFBa0NxQyxPQUFsQyxDQUFMLEVBQWlEO0FBQy9DLFVBQU0sSUFBSUYsbUJBQU9LLG1CQUFYLENBQWdDLDhCQUE2QkgsT0FBUSxLQUF0QyxHQUNsQyxRQUFPSixnQkFBRXZCLElBQUYsQ0FBT1YsMEJBQVAsQ0FBbUMsMEJBRHZDLENBQU47QUFFRDs7QUFDRCxTQUFPLE1BQU0sS0FBS0EsMEJBQTBCLENBQUNxQyxPQUFELENBQS9CLEVBQTBDQyxJQUExQyxDQUFiO0FBQ0QsQ0FORDs7ZUFRZXZDLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbmNvbnN0IEVYVEVOU0lPTl9DT01NQU5EU19NQVBQSU5HID0ge1xuICBzZXRWYWx1ZTogJ21hY29zU2V0VmFsdWUnLFxuICBjbGljazogJ21hY29zQ2xpY2snLFxuICBzY3JvbGw6ICdtYWNvc1Njcm9sbCcsXG4gIHN3aXBlOiAnbWFjb3NTd2lwZScsXG4gIHJpZ2h0Q2xpY2s6ICdtYWNvc1JpZ2h0Q2xpY2snLFxuICBob3ZlcjogJ21hY29zSG92ZXInLFxuICBkb3VibGVDbGljazogJ21hY29zRG91YmxlQ2xpY2snLFxuICBjbGlja0FuZERyYWc6ICdtYWNvc0NsaWNrQW5kRHJhZycsXG4gIGNsaWNrQW5kRHJhZ0FuZEhvbGQ6ICdtYWNvc0NsaWNrQW5kRHJhZ0FuZEhvbGQnLFxuICBrZXlzOiAnbWFjb3NLZXlzJyxcblxuICB0YXA6ICdtYWNvc1RhcCcsXG4gIGRvdWJsZVRhcDogJ21hY29zRG91YmxlVGFwJyxcbiAgcHJlc3M6ICdtYWNvc1ByZXNzJyxcbiAgcHJlc3NBbmREcmFnOiAnbWFjb3NQcmVzc0FuZERyYWcnLFxuICBwcmVzc0FuZERyYWdBbmRIb2xkOiAnbWFjb3NQcmVzc0FuZERyYWdBbmRIb2xkJyxcblxuICBzb3VyY2U6ICdtYWNvc1NvdXJjZScsXG5cbiAgbGF1bmNoQXBwOiAnbWFjb3NMYXVuY2hBcHAnLFxuICBhY3RpdmF0ZUFwcDogJ21hY29zQWN0aXZhdGVBcHAnLFxuICB0ZXJtaW5hdGVBcHA6ICdtYWNvc1Rlcm1pbmF0ZUFwcCcsXG4gIHF1ZXJ5QXBwU3RhdGU6ICdtYWNvc1F1ZXJ5QXBwU3RhdGUnLFxuXG4gIGFwcGxlU2NyaXB0OiAnbWFjb3NFeGVjQXBwbGVTY3JpcHQnLFxuXG4gIHN0YXJ0UmVjb3JkaW5nU2NyZWVuOiAnc3RhcnRSZWNvcmRpbmdTY3JlZW4nLFxuICBzdG9wUmVjb3JkaW5nU2NyZWVuOiAnc3RvcFJlY29yZGluZ1NjcmVlbicsXG59O1xuXG5jb21tYW5kcy5leGVjdXRlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZSAoc2NyaXB0LCBhcmdzKSB7XG4gIGlmIChzY3JpcHQubWF0Y2goL15tYWNvczovKSkge1xuICAgIGxvZy5pbmZvKGBFeGVjdXRpbmcgZXh0ZW5zaW9uIGNvbW1hbmQgJyR7c2NyaXB0fSdgKTtcbiAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgvXm1hY29zOi8sICcnKS50cmltKCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZU1hY29zQ29tbWFuZChzY3JpcHQsIF8uaXNBcnJheShhcmdzKSA/IGFyZ3NbMF0gOiBhcmdzKTtcbiAgfVxuICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbn07XG5cbmNvbW1hbmRzLmV4ZWN1dGVNYWNvc0NvbW1hbmQgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlTWFjb3NDb21tYW5kIChjb21tYW5kLCBvcHRzID0ge30pIHtcbiAgaWYgKCFfLmhhcyhFWFRFTlNJT05fQ09NTUFORFNfTUFQUElORywgY29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gZXh0ZW5zaW9uIGNvbW1hbmQgXCIke2NvbW1hbmR9XCIuIGAgK1xuICAgICAgYE9ubHkgJHtfLmtleXMoRVhURU5TSU9OX0NPTU1BTkRTX01BUFBJTkcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW0VYVEVOU0lPTl9DT01NQU5EU19NQVBQSU5HW2NvbW1hbmRdXShvcHRzKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvZXhlY3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -7,13 +7,13 @@ exports.default = exports.commands = void 0;
|
|
|
7
7
|
|
|
8
8
|
require("source-map-support/register");
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _support = require("@appium/support");
|
|
11
11
|
|
|
12
12
|
const commands = {};
|
|
13
13
|
exports.commands = commands;
|
|
14
14
|
|
|
15
15
|
commands.findElOrEls = async function findElOrEls(strategy, selector, mult, context) {
|
|
16
|
-
context =
|
|
16
|
+
context = _support.util.unwrapElement(context);
|
|
17
17
|
const endpoint = `/element${context ? `/${context}/element` : ''}${mult ? 's' : ''}`;
|
|
18
18
|
|
|
19
19
|
if (strategy === '-ios predicate string') {
|
|
@@ -32,4 +32,4 @@ var _default = commands;
|
|
|
32
32
|
exports.default = _default;require('source-map-support').install();
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9maW5kLmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiZmluZEVsT3JFbHMiLCJzdHJhdGVneSIsInNlbGVjdG9yIiwibXVsdCIsImNvbnRleHQiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsImVuZHBvaW50Iiwid2RhIiwicHJveHkiLCJjb21tYW5kIiwidXNpbmciLCJ2YWx1ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBR0EsTUFBTUEsUUFBUSxHQUFHLEVBQWpCOzs7QUFHQUEsUUFBUSxDQUFDQyxXQUFULEdBQXVCLGVBQWVBLFdBQWYsQ0FBNEJDLFFBQTVCLEVBQXNDQyxRQUF0QyxFQUFnREMsSUFBaEQsRUFBc0RDLE9BQXRELEVBQStEO0FBQ3BGQSxFQUFBQSxPQUFPLEdBQUdDLGNBQUtDLGFBQUwsQ0FBbUJGLE9BQW5CLENBQVY7QUFDQSxRQUFNRyxRQUFRLEdBQUksV0FBVUgsT0FBTyxHQUFJLElBQUdBLE9BQVEsVUFBZixHQUEyQixFQUFHLEdBQUVELElBQUksR0FBRyxHQUFILEdBQVMsRUFBRyxFQUFuRjs7QUFFQSxNQUFJRixRQUFRLEtBQUssdUJBQWpCLEVBQTBDO0FBQ3hDQSxJQUFBQSxRQUFRLEdBQUcsa0JBQVg7QUFDRCxHQUZELE1BRU8sSUFBSUEsUUFBUSxLQUFLLGtCQUFqQixFQUFxQztBQUMxQ0EsSUFBQUEsUUFBUSxHQUFHLGFBQVg7QUFDRDs7QUFFRCxTQUFPLE1BQU0sS0FBS08sR0FBTCxDQUFTQyxLQUFULENBQWVDLE9BQWYsQ0FBdUJILFFBQXZCLEVBQWlDLE1BQWpDLEVBQXlDO0FBQ3BESSxJQUFBQSxLQUFLLEVBQUVWLFFBRDZDO0FBRXBEVyxJQUFBQSxLQUFLLEVBQUVWO0FBRjZDLEdBQXpDLENBQWI7QUFJRCxDQWREOztlQWtCZUgsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8vIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgbG9va3VwIGJ5IGltYWdlIHdvcmtpbmdcbmNvbW1hbmRzLmZpbmRFbE9yRWxzID0gYXN5bmMgZnVuY3Rpb24gZmluZEVsT3JFbHMgKHN0cmF0ZWd5LCBzZWxlY3RvciwgbXVsdCwgY29udGV4dCkge1xuICBjb250ZXh0ID0gdXRpbC51bndyYXBFbGVtZW50KGNvbnRleHQpO1xuICBjb25zdCBlbmRwb2ludCA9IGAvZWxlbWVudCR7Y29udGV4dCA/IGAvJHtjb250ZXh0fS9lbGVtZW50YCA6ICcnfSR7bXVsdCA/ICdzJyA6ICcnfWA7XG5cbiAgaWYgKHN0cmF0ZWd5ID09PSAnLWlvcyBwcmVkaWNhdGUgc3RyaW5nJykge1xuICAgIHN0cmF0ZWd5ID0gJ3ByZWRpY2F0ZSBzdHJpbmcnO1xuICB9IGVsc2UgaWYgKHN0cmF0ZWd5ID09PSAnLWlvcyBjbGFzcyBjaGFpbicpIHtcbiAgICBzdHJhdGVneSA9ICdjbGFzcyBjaGFpbic7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZChlbmRwb2ludCwgJ1BPU1QnLCB7XG4gICAgdXNpbmc6IHN0cmF0ZWd5LFxuICAgIHZhbHVlOiBzZWxlY3RvcixcbiAgfSk7XG59O1xuXG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2ZpbmQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
@@ -7,16 +7,16 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
require("source-map-support/register");
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _support = require("@appium/support");
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _baseDriver = require("@appium/base-driver");
|
|
13
13
|
|
|
14
14
|
const commands = {};
|
|
15
15
|
|
|
16
16
|
function extractUuid(options = {}, keyNames = ['elementId', 'element']) {
|
|
17
17
|
for (const name of keyNames) {
|
|
18
18
|
if (options[name]) {
|
|
19
|
-
const result =
|
|
19
|
+
const result = _support.util.unwrapElement(options[name]);
|
|
20
20
|
|
|
21
21
|
if (result) {
|
|
22
22
|
return result;
|
|
@@ -31,7 +31,7 @@ function requireUuid(options = {}, keyNames = ['elementId', 'element']) {
|
|
|
31
31
|
const result = extractUuid(options, keyNames);
|
|
32
32
|
|
|
33
33
|
if (!result) {
|
|
34
|
-
throw new
|
|
34
|
+
throw new _baseDriver.errors.InvalidArgumentError(`${keyNames[0]} field is mandatory`);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
return result;
|
|
@@ -162,7 +162,7 @@ commands.macosClickAndDrag = async function macosClickAndDrag(opts = {}) {
|
|
|
162
162
|
} = opts;
|
|
163
163
|
const url = sourceUuid && destUuid ? `/wda/element/${sourceUuid}/clickAndDrag` : '/wda/clickAndDrag';
|
|
164
164
|
|
|
165
|
-
const dest = destUuid &&
|
|
165
|
+
const dest = destUuid && _support.util.wrapElement(destUuid);
|
|
166
166
|
|
|
167
167
|
return await this.wda.proxy.command(url, 'POST', {
|
|
168
168
|
startX,
|
|
@@ -190,7 +190,7 @@ commands.macosClickAndDragAndHold = async function macosClickAndDragAndHold(opts
|
|
|
190
190
|
} = opts;
|
|
191
191
|
const url = sourceUuid && destUuid ? `/wda/element/${sourceUuid}/clickAndDragAndHold` : '/wda/clickAndDragAndHold';
|
|
192
192
|
|
|
193
|
-
const dest = destUuid &&
|
|
193
|
+
const dest = destUuid && _support.util.wrapElement(destUuid);
|
|
194
194
|
|
|
195
195
|
return await this.wda.proxy.command(url, 'POST', {
|
|
196
196
|
startX,
|
|
@@ -276,7 +276,7 @@ commands.macosPressAndDrag = async function macosPressAndDrag(opts = {}) {
|
|
|
276
276
|
} = opts;
|
|
277
277
|
const url = sourceUuid && destUuid ? `/wda/element/${sourceUuid}/pressAndDrag` : '/wda/pressAndDrag';
|
|
278
278
|
|
|
279
|
-
const dest = destUuid &&
|
|
279
|
+
const dest = destUuid && _support.util.wrapElement(destUuid);
|
|
280
280
|
|
|
281
281
|
return await this.wda.proxy.command(url, 'POST', {
|
|
282
282
|
startX,
|
|
@@ -304,7 +304,7 @@ commands.macosPressAndDragAndHold = async function macosPressAndDragAndHold(opts
|
|
|
304
304
|
} = opts;
|
|
305
305
|
const url = sourceUuid && destUuid ? `/wda/element/${sourceUuid}/pressAndDragAndHold` : '/wda/pressAndDragAndHold';
|
|
306
306
|
|
|
307
|
-
const dest = destUuid &&
|
|
307
|
+
const dest = destUuid && _support.util.wrapElement(destUuid);
|
|
308
308
|
|
|
309
309
|
return await this.wda.proxy.command(url, 'POST', {
|
|
310
310
|
startX,
|
|
@@ -323,4 +323,4 @@ var _default = commands;
|
|
|
323
323
|
exports.default = _default;require('source-map-support').install();
|
|
324
324
|
|
|
325
325
|
|
|
326
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZXN0dXJlcy5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsImV4dHJhY3RVdWlkIiwib3B0aW9ucyIsImtleU5hbWVzIiwibmFtZSIsInJlc3VsdCIsInV0aWwiLCJ1bndyYXBFbGVtZW50IiwicmVxdWlyZVV1aWQiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1hY29zU2V0VmFsdWUiLCJvcHRzIiwidXVpZCIsInZhbHVlIiwidGV4dCIsImtleU1vZGlmaWVyRmxhZ3MiLCJ3ZGEiLCJwcm94eSIsImNvbW1hbmQiLCJtYWNvc0NsaWNrIiwieCIsInkiLCJ1cmwiLCJtYWNvc1Njcm9sbCIsImRlbHRhWCIsImRlbHRhWSIsIm1hY29zU3dpcGUiLCJkaXJlY3Rpb24iLCJ2ZWxvY2l0eSIsIm1hY29zUmlnaHRDbGljayIsIm1hY29zSG92ZXIiLCJtYWNvc0RvdWJsZUNsaWNrIiwibWFjb3NDbGlja0FuZERyYWciLCJzb3VyY2VVdWlkIiwiZGVzdFV1aWQiLCJzdGFydFgiLCJzdGFydFkiLCJlbmRYIiwiZW5kWSIsImR1cmF0aW9uIiwiZGVzdCIsIndyYXBFbGVtZW50IiwibWFjb3NDbGlja0FuZERyYWdBbmRIb2xkIiwiaG9sZER1cmF0aW9uIiwibWFjb3NLZXlzIiwia2V5cyIsIm1hY29zUHJlc3NBbmRIb2xkIiwibWFjb3NUYXAiLCJtYWNvc0RvdWJsZVRhcCIsIm1hY29zUHJlc3NBbmREcmFnIiwibWFjb3NQcmVzc0FuZERyYWdBbmRIb2xkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQSxNQUFNQSxRQUFRLEdBQUcsRUFBakI7O0FBRUEsU0FBU0MsV0FBVCxDQUFzQkMsT0FBTyxHQUFHLEVBQWhDLEVBQW9DQyxRQUFRLEdBQUcsQ0FBQyxXQUFELEVBQWMsU0FBZCxDQUEvQyxFQUF5RTtBQUN2RSxPQUFLLE1BQU1DLElBQVgsSUFBbUJELFFBQW5CLEVBQTZCO0FBQzNCLFFBQUlELE9BQU8sQ0FB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OztlQXdCZWhCLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuZnVuY3Rpb24gZXh0cmFjdFV1aWQgKG9wdGlvbnMgPSB7fSwga2V5TmFtZXMgPSBbJ2VsZW1lbnRJZCcsICdlbGVtZW50J10pIHtcbiAgZm9yIChjb25zdCBuYW1lIG9mIGtleU5hbWVzKSB7XG4gICAgaWYgKG9wdGlvbnNbbmFtZV0pIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWwudW53cmFwRWxlbWVudChvcHRpb25zW25hbWVdKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVVdWlkIChvcHRpb25zID0ge30sIGtleU5hbWVzID0gWydlbGVtZW50SWQnLCAnZWxlbWVudCddKSB7XG4gIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RVdWlkKG9wdGlvbnMsIGtleU5hbWVzKTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAke2tleU5hbWVzWzBdfSBmaWVsZCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2V0VmFsdWVPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBlbGVtZW50IHRvIHNldCB2YWx1ZSBmb3JcbiAqIEBwcm9wZXJ0eSB7Kn0gdmFsdWUgdmFsdWUgdG8gc2V0LiBDb3VsZCBhbHNvIGJlIGFuIGFycmF5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGV4dCB0ZXh0IHRvIHNldC4gSWYgYm90aCB2YWx1ZSBhbmQgdGV4dCBhcmUgc2V0XG4gKiB0aGVuIGB2YWx1ZWAgaXMgcHJlZmVycmVkXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSB0aGUgZWxlbWVudCB2YWx1ZSBpcyBiZWluZyBzZXQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBTZXQgdmFsdWUgdG8gdGhlIGdpdmVuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge1NldFZhbHVlT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1NldFZhbHVlID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NTZXRWYWx1ZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSByZXF1aXJlVXVpZChvcHRzKTtcbiAgY29uc3QgeyB2YWx1ZSwgdGV4dCwga2V5TW9kaWZpZXJGbGFncyB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7dXVpZH0vdmFsdWVgLCAnUE9TVCcsIHtcbiAgICB2YWx1ZSwgdGV4dCxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2xpY2tPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBlbGVtZW50IHRvIGNsaWNrLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogb3IvYW5kIHggYW5kIHkgbXVzdCBiZSBzZXQuIElmIGJvdGggYXJlIHNldCB0aGVuIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXMgcmVsYXRpdmVcbiAqIGVsZW1lbnQgY29vcmRpbmF0ZXMuIElmIG9ubHkgeCBhbmQgeSBhcmUgc2V0IHRoZW4gdGhlc2UgYXJlIHBhcnNlZCBhc1xuICogYWJzb2x1dGUgY29vcmRpbmF0ZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggY2xpY2sgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgY2xpY2sgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBjbGljayBpcyBwZXJmb3JtZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIGNsaWNrIGdlc3R1cmUgb24gYW4gZWxlbWVudCBvciBieSByZWxhdGl2ZS9hYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7Q2xpY2tPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zQ2xpY2sgPSBhc3luYyBmdW5jdGlvbiBtYWNvc0NsaWNrIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7IHgsIHksIGtleU1vZGlmaWVyRmxhZ3MgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHV1aWQgPyBgL2VsZW1lbnQvJHt1dWlkfS9jbGlja2AgOiAnL3dkYS9jbGljayc7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgeCwgeSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2Nyb2xsT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzY3JvbGxlZC4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIG9yL2FuZCB4IGFuZCB5IG11c3QgYmUgc2V0LiBJZiBib3RoIGFyZSBzZXQgdGhlbiB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFzIHJlbGF0aXZlXG4gKiBlbGVtZW50IGNvb3JkaW5hdGVzLiBJZiBvbmx5IHggYW5kIHkgYXJlIHNldCB0aGVuIHRoZXNlIGFyZSBwYXJzZWQgYXNcbiAqIGFic29sdXRlIGNvb3JkaW5hdGVzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IHNjcm9sbCBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBzY3JvbGwgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IGRlbHRhWCBob3Jpem9udGFsIGRlbHRhIGFzIGZsb2F0IG51bWJlclxuICogQHByb3BlcnR5IHshbnVtYmVyfSBkZWx0YVkgdmVydGljYWwgZGVsdGEgYXMgZmxvYXQgbnVtYmVyXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBzY3JvbGwgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBzY3JvbGwgZ2VzdHVyZSBvbiBhbiBlbGVtZW50IG9yIGJ5IHJlbGF0aXZlL2Fic29sdXRlIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtTY3JvbGxPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zU2Nyb2xsID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NTY3JvbGwgKG9wdHMgPSB7fSkge1xuICBjb25zdCB1dWlkID0gZXh0cmFjdFV1aWQob3B0cyk7XG4gIGNvbnN0IHtcbiAgICB4LCB5LFxuICAgIGRlbHRhWCwgZGVsdGFZLFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L3Njcm9sbGAgOiAnL3dkYS9zY3JvbGwnO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIGRlbHRhWCwgZGVsdGFZLFxuICAgIHgsIHksXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN3aXBlT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzd2lwZWQuIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBvci9hbmQgeCBhbmQgeSBtdXN0IGJlIHNldC4gSWYgYm90aCBhcmUgc2V0IHRoZW4geCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcyByZWxhdGl2ZVxuICogZWxlbWVudCBjb29yZGluYXRlcy4gSWYgb25seSB4IGFuZCB5IGFyZSBzZXQgdGhlbiB0aGVzZSBhcmUgcGFyc2VkIGFzXG4gKiBhYnNvbHV0ZSBjb29yZGluYXRlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCBzd2lwZSBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBzd2lwZSBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gZGlyZWN0aW9uIGVpdGhlciAndXAnLCAnZG93bicsICdsZWZ0JyBvciAncmlnaHQnXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHZlbG9jaXR5IFRoZSB2YWx1ZSBpcyBtZWFzdXJlZCBpbiBwaXhlbHMgcGVyIHNlY29uZCBhbmQgc2FtZVxuICogdmFsdWVzIGNvdWxkIGJlaGF2ZSBkaWZmZXJlbnRseSBvbiBkaWZmZXJlbnQgZGV2aWNlcyBkZXBlbmRpbmcgb24gdGhlaXIgZGlzcGxheVxuICogZGVuc2l0eS4gSGlnaGVyIHZhbHVlcyBtYWtlIHN3aXBlIGdlc3R1cmUgZmFzdGVyICh3aGljaCB1c3VhbGx5IHNjcm9sbHMgbGFyZ2VyXG4gKiBhcmVhcyBpZiB3ZSBhcHBseSBpdCB0byBhIGxpc3QpIGFuZCBsb3dlciB2YWx1ZXMgc2xvdyBpdCBkb3duLlxuICogT25seSB2YWx1ZXMgZ3JlYXRlciB0aGFuIHplcm8gaGF2ZSBlZmZlY3QuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBzY3JvbGwgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBzd2lwZSBnZXN0dXJlIG9uIGFuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge1N3aXBlT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1N3aXBlID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NTd2lwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSBleHRyYWN0VXVpZChvcHRzKTtcbiAgY29uc3Qge1xuICAgIHgsIHksXG4gICAgZGlyZWN0aW9uLFxuICAgIHZlbG9jaXR5LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L3N3aXBlYCA6IGAvd2RhL3N3aXBlYDtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICB4LCB5LFxuICAgIGRpcmVjdGlvbixcbiAgICB2ZWxvY2l0eSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUmlnaHRDbGlja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIHV1aWQgb2YgdGhlIGVsZW1lbnQgdG8gY2xpY2suIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBvci9hbmQgeCBhbmQgeSBtdXN0IGJlIHNldC4gSWYgYm90aCBhcmUgc2V0IHRoZW4geCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcyByZWxhdGl2ZVxuICogZWxlbWVudCBjb29yZGluYXRlcy4gSWYgb25seSB4IGFuZCB5IGFyZSBzZXQgdGhlbiB0aGVzZSBhcmUgcGFyc2VkIGFzXG4gKiBhYnNvbHV0ZSBjb29yZGluYXRlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCBjbGljayBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBjbGljayBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGNsaWNrIGlzIHBlcmZvcm1lZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gcmlnaHQgY2xpY2sgZ2VzdHVyZSBvbiBhbiBlbGVtZW50IG9yIGJ5IHJlbGF0aXZlL2Fic29sdXRlIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtSaWdodENsaWNrT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1JpZ2h0Q2xpY2sgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1JpZ2h0Q2xpY2sgKG9wdHMgPSB7fSkge1xuICBjb25zdCB1dWlkID0gZXh0cmFjdFV1aWQob3B0cyk7XG4gIGNvbnN0IHsgeCwgeSwga2V5TW9kaWZpZXJGbGFncyB9ID0gb3B0cztcbiAgY29uc3QgdXJsID0gdXVpZCA/IGAvd2RhL2VsZW1lbnQvJHt1dWlkfS9yaWdodENsaWNrYCA6ICcvd2RhL3JpZ2h0Q2xpY2snO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIHgsIHksXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEhvdmVyT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBob3Zlci4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIG9yL2FuZCB4IGFuZCB5IG11c3QgYmUgc2V0LiBJZiBib3RoIGFyZSBzZXQgdGhlbiB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFzIHJlbGF0aXZlXG4gKiBlbGVtZW50IGNvb3JkaW5hdGVzLiBJZiBvbmx5IHggYW5kIHkgYXJlIHNldCB0aGVuIHRoZXNlIGFyZSBwYXJzZWQgYXNcbiAqIGFic29sdXRlIGNvb3JkaW5hdGVzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IGNsaWNrIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB5IGNsaWNrIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBrZXlNb2RpZmllckZsYWdzIGlmIHNldCB0aGVuIHRoZSBnaXZlbiBrZXkgbW9kaWZpZXJzIHdpbGwgYmVcbiAqIGFwcGxpZWQgd2hpbGUgaG92ZXIgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBob3ZlciBnZXN0dXJlIG9uIGFuIGVsZW1lbnQgb3IgYnkgcmVsYXRpdmUvYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge0hvdmVyT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc0hvdmVyID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NIb3ZlciAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSBleHRyYWN0VXVpZChvcHRzKTtcbiAgY29uc3QgeyB4LCB5LCBrZXlNb2RpZmllckZsYWdzIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L2hvdmVyYCA6ICcvd2RhL2hvdmVyJztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICB4LCB5LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb3VibGVDbGlja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIHV1aWQgb2YgdGhlIGVsZW1lbnQgdG8gZG91YmxlIGNsaWNrLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogb3IvYW5kIHggYW5kIHkgbXVzdCBiZSBzZXQuIElmIGJvdGggYXJlIHNldCB0aGVuIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXMgcmVsYXRpdmVcbiAqIGVsZW1lbnQgY29vcmRpbmF0ZXMuIElmIG9ubHkgeCBhbmQgeSBhcmUgc2V0IHRoZW4gdGhlc2UgYXJlIHBhcnNlZCBhc1xuICogYWJzb2x1dGUgY29vcmRpbmF0ZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggY2xpY2sgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgY2xpY2sgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBkb3VibGUgY2xpY2sgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBkb3VibGUgY2xpY2sgZ2VzdHVyZSBvbiBhbiBlbGVtZW50IG9yIGJ5IHJlbGF0aXZlL2Fic29sdXRlIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtEb3VibGVDbGlja09wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NEb3VibGVDbGljayA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zRG91YmxlQ2xpY2sgKG9wdHMgPSB7fSkge1xuICBjb25zdCB1dWlkID0gZXh0cmFjdFV1aWQob3B0cyk7XG4gIGNvbnN0IHsgeCwgeSwga2V5TW9kaWZpZXJGbGFncyB9ID0gb3B0cztcbiAgY29uc3QgdXJsID0gdXVpZCA/IGAvd2RhL2VsZW1lbnQvJHt1dWlkfS9kb3VibGVDbGlja2AgOiAnL3dkYS9kb3VibGVDbGljayc7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgeCwgeSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2xpY2tBbmREcmFnT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzb3VyY2VFbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBzdGFydCB0aGUgZHJhZyBmcm9tLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBkZXN0aW5hdGlvbkVsZW1lbnRgIG11c3QgYmUgcHJvdmlkZWQgb3IgYHN0YXJ0WGAsIGBzdGFydFlgLCBgZW5kWGAsIGBlbmRZYCBjb29yZGluYXRlc1xuICogbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGRlc3RpbmF0aW9uRWxlbWVudElkIHV1aWQgb2YgdGhlIGVsZW1lbnQgdG8gZW5kIHRoZSBkcmFnIG9uLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBzb3VyY2VFbGVtZW50YCBtdXN0IGJlIHByb3ZpZGVkIG9yIGBzdGFydFhgLCBgc3RhcnRZYCwgYGVuZFhgLCBgZW5kWWAgY29vcmRpbmF0ZXNcbiAqIG11c3QgYmUgc2V0LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzdGFydFggc3RhcnRpbmcgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WSBzdGFydGluZyBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZW5kWCBlbmRpbmcgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGVuZFkgZW5kaW5nIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBkdXJhdGlvbiBsb25nIGNsaWNrIGR1cmF0aW9uIGluIGZsb2F0IHNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGRyYWcgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBsb25nIGNsaWNrIGFuZCBkcmFnIGdlc3R1cmUgb24gYW4gZWxlbWVudCBvciBieSBhYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7Q2xpY2tBbmREcmFnT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc0NsaWNrQW5kRHJhZyA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zQ2xpY2tBbmREcmFnIChvcHRzID0ge30pIHtcbiAgY29uc3Qgc291cmNlVXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMsIFsnc291cmNlRWxlbWVudElkJywgJ3NvdXJjZUVsZW1lbnQnXSk7XG4gIGNvbnN0IGRlc3RVdWlkID0gZXh0cmFjdFV1aWQob3B0cywgWydkZXN0aW5hdGlvbkVsZW1lbnRJZCcsICdkZXN0aW5hdGlvbkVsZW1lbnQnXSk7XG4gIGNvbnN0IHtcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIGR1cmF0aW9uLFxuICAgIGtleU1vZGlmaWVyRmxhZ3NcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHNvdXJjZVV1aWQgJiYgZGVzdFV1aWRcbiAgICA/IGAvd2RhL2VsZW1lbnQvJHtzb3VyY2VVdWlkfS9jbGlja0FuZERyYWdgXG4gICAgOiAnL3dkYS9jbGlja0FuZERyYWcnO1xuICBjb25zdCBkZXN0ID0gZGVzdFV1aWQgJiYgdXRpbC53cmFwRWxlbWVudChkZXN0VXVpZCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBkdXJhdGlvbixcbiAgICBkZXN0LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDbGlja0FuZERyYWdBbmRIb2xkT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzb3VyY2VFbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBzdGFydCB0aGUgZHJhZyBmcm9tLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBkZXN0aW5hdGlvbkVsZW1lbnRgIG11c3QgYmUgcHJvdmlkZWQgb3IgYHN0YXJ0WGAsIGBzdGFydFlgLCBgZW5kWGAsIGBlbmRZYCBjb29yZGluYXRlc1xuICogbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGRlc3RpbmF0aW9uRWxlbWVudElkIHV1aWQgb2YgdGhlIGVsZW1lbnQgdG8gZW5kIHRoZSBkcmFnIG9uLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBzb3VyY2VFbGVtZW50YCBtdXN0IGJlIHByb3ZpZGVkIG9yIGBzdGFydFhgLCBgc3RhcnRZYCwgYGVuZFhgLCBgZW5kWWAgY29vcmRpbmF0ZXNcbiAqIG11c3QgYmUgc2V0LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzdGFydFggc3RhcnRpbmcgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WSBzdGFydGluZyBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZW5kWCBlbmRpbmcgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGVuZFkgZW5kaW5nIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBkdXJhdGlvbiBsb25nIGNsaWNrIGR1cmF0aW9uIGluIGZsb2F0IHNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdmVsb2NpdHkgZHJhZ2dpbmcgdmVsb2NpdHkgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXG4gKiBJZiBub3QgcHJvdmlkZWQgdGhlbiB0aGUgZGVmYXVsdCB2ZWxvY2l0eSBpcyB1c2VkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZ2VzdHVyZXZlbG9jaXR5XG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBkcmFnIGlzIHBlcmZvcm1lZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gbG9uZyBjbGljaywgZHJhZyBhbmQgaG9sZCBnZXN0dXJlIG9uIGFuIGVsZW1lbnQgb3IgYnkgYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge0NsaWNrQW5kRHJhZ0FuZEhvbGRPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zQ2xpY2tBbmREcmFnQW5kSG9sZCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zQ2xpY2tBbmREcmFnQW5kSG9sZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHNvdXJjZVV1aWQgPSBleHRyYWN0VXVpZChvcHRzLCBbJ3NvdXJjZUVsZW1lbnRJZCcsICdzb3VyY2VFbGVtZW50J10pO1xuICBjb25zdCBkZXN0VXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMsIFsnZGVzdGluYXRpb25FbGVtZW50SWQnLCAnZGVzdGluYXRpb25FbGVtZW50J10pO1xuICBjb25zdCB7XG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBkdXJhdGlvbiwgaG9sZER1cmF0aW9uLFxuICAgIHZlbG9jaXR5LFxuICAgIGtleU1vZGlmaWVyRmxhZ3NcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHNvdXJjZVV1aWQgJiYgZGVzdFV1aWRcbiAgICA/IGAvd2RhL2VsZW1lbnQvJHtzb3VyY2VVdWlkfS9jbGlja0FuZERyYWdBbmRIb2xkYFxuICAgIDogJy93ZGEvY2xpY2tBbmREcmFnQW5kSG9sZCc7XG4gIGNvbnN0IGRlc3QgPSBkZXN0VXVpZCAmJiB1dGlsLndyYXBFbGVtZW50KGRlc3RVdWlkKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIGR1cmF0aW9uLCBob2xkRHVyYXRpb24sXG4gICAgdmVsb2NpdHksXG4gICAgZGVzdCxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gS2V5T3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBrZXkgYSBzdHJpbmcsIHRoYXQgcmVwcmVzZW50cyBhIGtleSB0byB0eXBlIChzZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNTAwNjA0LXR5cGVrZXk/bGFuZ3VhZ2U9b2JqY1xuICogYW5kIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5Ym9hcmRrZXk/bGFuZ3VhZ2U9b2JqYylcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbW9kaWZpZXJGbGFncyBhIHNldCBvZiBtb2RpZmllciBmbGFnc1xuICogKGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFncz9sYW5ndWFnZT1vYmpjKVxuICogdG8gdXNlIHdoZW4gdHlwaW5nIHRoZSBrZXkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBLZXlzT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBzZW5kIGtleXMgdG8uXG4gKiBJZiB0aGUgZWxlbWVudCBpcyBub3QgcHJvdmlkZWQgdGhlbiB0aGUga2V5cyB3aWxsIGJlIHNlbnQgdG8gdGhlIGN1cnJlbnQgYXBwbGljYXRpb24uXG4gKiBAcHJvcGVydHkgeyFBcnJheTxLZXlPcHRpb25zfHN0cmluZz59IGtleXMgQXJyYXkgb2Yga2V5cyB0byB0eXBlLlxuICogRWFjaCBpdGVtIGNvdWxkIGVpdGhlciBiZSBhIHN0cmluZywgdGhhdCByZXByZXNlbnRzIGEga2V5IGl0c2VsZiAoc2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTUwMDYwNC10eXBla2V5P2xhbmd1YWdlPW9iamNcbiAqIGFuZCBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleWJvYXJka2V5P2xhbmd1YWdlPW9iamMpXG4gKiBvciBhIGRpY3Rpb25hcnksIGlmIHRoZSBrZXkgc2hvdWxkIGFsc28gYmUgZW50ZXJlZCB3aXRoIG1vZGlmaWVycy5cbiAqL1xuXG4vKipcbiAqIFNlbmQga2V5cyB0byB0aGUgZ2l2ZW4gZWxlbWVudCBvciB0byB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7S2V5c09wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NLZXlzID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NLZXlzIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7IGtleXMgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHV1aWQgPyBgL3dkYS9lbGVtZW50LyR7dXVpZH0va2V5c2AgOiAnL3dkYS9rZXlzJztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHsga2V5cyB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJlc3NPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBUb3VjaCBCYXIgZWxlbWVudCB0byBiZSBwcmVzc2VkLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogb3IvYW5kIHggYW5kIHkgbXVzdCBiZSBzZXQuIElmIGJvdGggYXJlIHNldCB0aGVuIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXMgcmVsYXRpdmVcbiAqIGVsZW1lbnQgY29vcmRpbmF0ZXMuIElmIG9ubHkgeCBhbmQgeSBhcmUgc2V0IHRoZW4gdGhlc2UgYXJlIHBhcnNlZCBhc1xuICogYWJzb2x1dGUgVG91Y2ggQmFyIGNvb3JkaW5hdGVzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IGxvbmcgY2xpY2sgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgbG9uZyBjbGljayBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gZHVyYXRpb24gdGhlIG51bWJlciBvZiBmbG9hdCBzZWNvbmRzIHRvIGhvbGQgdGhlIG1vdXNlIGJ1dHRvblxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBrZXlNb2RpZmllckZsYWdzIGlmIHNldCB0aGVuIHRoZSBnaXZlbiBrZXkgbW9kaWZpZXJzIHdpbGwgYmVcbiAqIGFwcGxpZWQgd2hpbGUgY2xpY2sgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBwcmVzcyBnZXN0dXJlIG9uIGEgVG91Y2ggQmFyIGVsZW1lbnQgb3IgYnkgcmVsYXRpdmUvYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge1ByZXNzT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1ByZXNzQW5kSG9sZCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zUHJlc3NBbmRIb2xkIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7IHgsIHksIGR1cmF0aW9uLCBrZXlNb2RpZmllckZsYWdzIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L3ByZXNzYCA6ICcvd2RhL3ByZXNzJztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICB4LCB5LFxuICAgIGR1cmF0aW9uLFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUYXBPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBUb3VjaCBCYXIgZWxlbWVudCB0byB0YXAuIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBvci9hbmQgeCBhbmQgeSBtdXN0IGJlIHNldC4gSWYgYm90aCBhcmUgc2V0IHRoZW4geCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcyByZWxhdGl2ZVxuICogZWxlbWVudCBjb29yZGluYXRlcy4gSWYgb25seSB4IGFuZCB5IGFyZSBzZXQgdGhlbiB0aGVzZSBhcmUgcGFyc2VkIGFzXG4gKiBhYnNvbHV0ZSBUb3VjaCBCYXIgY29vcmRpbmF0ZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggY2xpY2sgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgY2xpY2sgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBjbGljayBpcyBwZXJmb3JtZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIHRhcCBnZXN0dXJlIG9uIGEgVG91Y2ggQmFyIGVsZW1lbnQgb3IgYnkgcmVsYXRpdmUvYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge1RhcE9wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NUYXAgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1RhcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSBleHRyYWN0VXVpZChvcHRzKTtcbiAgY29uc3QgeyB4LCB5LCBrZXlNb2RpZmllckZsYWdzIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L3RhcGAgOiAnL3dkYS90YXAnO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIHgsIHksXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERvdWJsZVRhcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIHV1aWQgb2YgdGhlIFRvdWNoIEJhciBlbGVtZW50IHRvIHRhcC4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIG9yL2FuZCB4IGFuZCB5IG11c3QgYmUgc2V0LiBJZiBib3RoIGFyZSBzZXQgdGhlbiB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFzIHJlbGF0aXZlXG4gKiBlbGVtZW50IGNvb3JkaW5hdGVzLiBJZiBvbmx5IHggYW5kIHkgYXJlIHNldCB0aGVuIHRoZXNlIGFyZSBwYXJzZWQgYXNcbiAqIGFic29sdXRlIFRvdWNoIEJhciBjb29yZGluYXRlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCBjbGljayBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBjbGljayBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGNsaWNrIGlzIHBlcmZvcm1lZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gdGFwIGdlc3R1cmUgb24gYSBUb3VjaCBCYXIgZWxlbWVudCBvciBieSByZWxhdGl2ZS9hYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7RG91YmxlVGFwT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc0RvdWJsZVRhcCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zRG91YmxlVGFwIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7IHgsIHksIGtleU1vZGlmaWVyRmxhZ3MgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHV1aWQgPyBgL3dkYS9lbGVtZW50LyR7dXVpZH0vZG91YmxlVGFwYCA6ICcvd2RhL2RvdWJsZVRhcCc7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgeCwgeSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJlc3NBbmREcmFnT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzb3VyY2VFbGVtZW50SWQgdXVpZCBvZiBhIFRvdWNoIEJhciBlbGVtZW50IHRvIHN0YXJ0IHRoZSBkcmFnIGZyb20uIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBhbmQgYGRlc3RpbmF0aW9uRWxlbWVudGAgbXVzdCBiZSBwcm92aWRlZCBvciBgc3RhcnRYYCwgYHN0YXJ0WWAsIGBlbmRYYCwgYGVuZFlgIGNvb3JkaW5hdGVzXG4gKiBtdXN0IGJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZGVzdGluYXRpb25FbGVtZW50SWQgdXVpZCBvZiBhIFRvdWNoIEJhciBlbGVtZW50IHRvIGVuZCB0aGUgZHJhZyBvbi4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIGFuZCBgc291cmNlRWxlbWVudGAgbXVzdCBiZSBwcm92aWRlZCBvciBgc3RhcnRYYCwgYHN0YXJ0WWAsIGBlbmRYYCwgYGVuZFlgIGNvb3JkaW5hdGVzXG4gKiBtdXN0IGJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRYIHN0YXJ0aW5nIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzdGFydFkgc3RhcnRpbmcgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGVuZFggZW5kaW5nIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBlbmRZIGVuZGluZyBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gZHVyYXRpb24gbG9uZyBjbGljayBkdXJhdGlvbiBpbiBmbG9hdCBzZWNvbmRzXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBkcmFnIGlzIHBlcmZvcm1lZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gbG9uZyBwcmVzcyBhbmQgZHJhZyBnZXN0dXJlIG9uIGEgVG91Y2ggQmFyIGVsZW1lbnQgb3IgYnkgYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge1ByZXNzQW5kRHJhZ09wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NQcmVzc0FuZERyYWcgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1ByZXNzQW5kRHJhZyAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHNvdXJjZVV1aWQgPSBleHRyYWN0VXVpZChvcHRzLCBbJ3NvdXJjZUVsZW1lbnRJZCcsICdzb3VyY2VFbGVtZW50J10pO1xuICBjb25zdCBkZXN0VXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMsIFsnZGVzdGluYXRpb25FbGVtZW50SWQnLCAnZGVzdGluYXRpb25FbGVtZW50J10pO1xuICBjb25zdCB7XG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBkdXJhdGlvbixcbiAgICBrZXlNb2RpZmllckZsYWdzXG4gIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSBzb3VyY2VVdWlkICYmIGRlc3RVdWlkXG4gICAgPyBgL3dkYS9lbGVtZW50LyR7c291cmNlVXVpZH0vcHJlc3NBbmREcmFnYFxuICAgIDogJy93ZGEvcHJlc3NBbmREcmFnJztcbiAgY29uc3QgZGVzdCA9IGRlc3RVdWlkICYmIHV0aWwud3JhcEVsZW1lbnQoZGVzdFV1aWQpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIHN0YXJ0WCwgc3RhcnRZLFxuICAgIGVuZFgsIGVuZFksXG4gICAgZHVyYXRpb24sXG4gICAgZGVzdCxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJlc3NBbmREcmFnQW5kSG9sZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gc291cmNlRWxlbWVudElkIHV1aWQgb2YgYSBUb3VjaCBCYXIgZWxlbWVudCB0byBzdGFydCB0aGUgZHJhZyBmcm9tLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBkZXN0aW5hdGlvbkVsZW1lbnRgIG11c3QgYmUgcHJvdmlkZWQgb3IgYHN0YXJ0WGAsIGBzdGFydFlgLCBgZW5kWGAsIGBlbmRZYCBjb29yZGluYXRlc1xuICogbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGRlc3RpbmF0aW9uRWxlbWVudElkIHV1aWQgb2YgYSBUb3VjaCBCYXIgZWxlbWVudCB0byBlbmQgdGhlIGRyYWcgb24uIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBhbmQgYHNvdXJjZUVsZW1lbnRgIG11c3QgYmUgcHJvdmlkZWQgb3IgYHN0YXJ0WGAsIGBzdGFydFlgLCBgZW5kWGAsIGBlbmRZYCBjb29yZGluYXRlc1xuICogbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WCBzdGFydGluZyBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRZIHN0YXJ0aW5nIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBlbmRYIGVuZGluZyBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZW5kWSBlbmRpbmcgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IGR1cmF0aW9uIGxvbmcgY2xpY2sgZHVyYXRpb24gaW4gZmxvYXQgc2Vjb25kc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSB2ZWxvY2l0eSBkcmFnZ2luZyB2ZWxvY2l0eSBpbiBwaXhlbHMgcGVyIHNlY29uZC5cbiAqIElmIG5vdCBwcm92aWRlZCB0aGVuIHRoZSBkZWZhdWx0IHZlbG9jaXR5IGlzIHVzZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlnZXN0dXJldmVsb2NpdHlcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGRyYWcgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBwcmVzcywgZHJhZyBhbmQgaG9sZCBnZXN0dXJlIG9uIGEgVG91Y2ggQmFyIGVsZW1lbnQgb3IgYnkgYWJzb2x1dGUgVG91Y2ggQmFyIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtQcmVzc0FuZERyYWdBbmRIb2xkT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1ByZXNzQW5kRHJhZ0FuZEhvbGQgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1ByZXNzQW5kRHJhZ0FuZEhvbGQgKG9wdHMgPSB7fSkge1xuICBjb25zdCBzb3VyY2VVdWlkID0gZXh0cmFjdFV1aWQob3B0cywgWydzb3VyY2VFbGVtZW50SWQnLCAnc291cmNlRWxlbWVudCddKTtcbiAgY29uc3QgZGVzdFV1aWQgPSBleHRyYWN0VXVpZChvcHRzLCBbJ2Rlc3RpbmF0aW9uRWxlbWVudElkJywgJ2Rlc3RpbmF0aW9uRWxlbWVudCddKTtcbiAgY29uc3Qge1xuICAgIHN0YXJ0WCwgc3RhcnRZLFxuICAgIGVuZFgsIGVuZFksXG4gICAgZHVyYXRpb24sIGhvbGREdXJhdGlvbixcbiAgICB2ZWxvY2l0eSxcbiAgICBrZXlNb2RpZmllckZsYWdzXG4gIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSBzb3VyY2VVdWlkICYmIGRlc3RVdWlkXG4gICAgPyBgL3dkYS9lbGVtZW50LyR7c291cmNlVXVpZH0vcHJlc3NBbmREcmFnQW5kSG9sZGBcbiAgICA6ICcvd2RhL3ByZXNzQW5kRHJhZ0FuZEhvbGQnO1xuICBjb25zdCBkZXN0ID0gZGVzdFV1aWQgJiYgdXRpbC53cmFwRWxlbWVudChkZXN0VXVpZCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBkdXJhdGlvbiwgaG9sZER1cmF0aW9uLFxuICAgIHZlbG9jaXR5LFxuICAgIGRlc3QsXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2dlc3R1cmVzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
326
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZXN0dXJlcy5qcyJdLCJuYW1lcyI6WyJjb21tYW5kcyIsImV4dHJhY3RVdWlkIiwib3B0aW9ucyIsImtleU5hbWVzIiwibmFtZSIsInJlc3VsdCIsInV0aWwiLCJ1bndyYXBFbGVtZW50IiwicmVxdWlyZVV1aWQiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1hY29zU2V0VmFsdWUiLCJvcHRzIiwidXVpZCIsInZhbHVlIiwidGV4dCIsImtleU1vZGlmaWVyRmxhZ3MiLCJ3ZGEiLCJwcm94eSIsImNvbW1hbmQiLCJtYWNvc0NsaWNrIiwieCIsInkiLCJ1cmwiLCJtYWNvc1Njcm9sbCIsImRlbHRhWCIsImRlbHRhWSIsIm1hY29zU3dpcGUiLCJkaXJlY3Rpb24iLCJ2ZWxvY2l0eSIsIm1hY29zUmlnaHRDbGljayIsIm1hY29zSG92ZXIiLCJtYWNvc0RvdWJsZUNsaWNrIiwibWFjb3NDbGlja0FuZERyYWciLCJzb3VyY2VVdWlkIiwiZGVzdFV1aWQiLCJzdGFydFgiLCJzdGFydFkiLCJlbmRYIiwiZW5kWSIsImR1cmF0aW9uIiwiZGVzdCIsIndyYXBFbGVtZW50IiwibWFjb3NDbGlja0FuZERyYWdBbmRIb2xkIiwiaG9sZER1cmF0aW9uIiwibWFjb3NLZXlzIiwia2V5cyIsIm1hY29zUHJlc3NBbmRIb2xkIiwibWFjb3NUYXAiLCJtYWNvc0RvdWJsZVRhcCIsIm1hY29zUHJlc3NBbmREcmFnIiwibWFjb3NQcmVzc0FuZERyYWdBbmRIb2xkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQSxNQUFNQSxRQUFRLEdBQUcsRUFBakI7O0FBRUEsU0FBU0MsV0FBVCxDQUFzQkMsT0FBTyxHQUFHLEVBQWhDLEVBQW9DQyxRQUFRLEdBQUcsQ0FBQyxXQUFELEVBQWMsU0FBZCxDQUEvQyxFQUF5RTtBQUN2RSxPQUFLLE1BQU1DLElBQVgsSUFBbUJELFFBQW5CLEVBQTZCO0FBQzNCLFFBQUlELE9BQU8sQ0FBQ0UsSUFBRCxDQUFYLEVBQW1CO0FBQ2pCLFlBQU1DLE1BQU0sR0FBR0MsY0FBS0MsYUFBTCxDQUFtQkwsT0FBTyxDQUFDRSxJQUFELENBQTFCLENBQWY7O0FBQ0EsVUFBSUMsTUFBSixFQUFZO0FBQ1YsZUFBT0EsTUFBUDtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxTQUFPLElBQVA7QUFDRDs7QUFFRCxTQUFTRyxXQUFULENBQXNCTixPQUFPLEdBQUcsRUFBaEMsRUFBb0NDLFFBQVEsR0FBRyxDQUFDLFdBQUQsRUFBYyxTQUFkLENBQS9DLEVBQXlFO0FBQ3ZFLFFBQU1FLE1BQU0sR0FBR0osV0FBVyxDQUFDQyxPQUFELEVBQVVDLFFBQVYsQ0FBMUI7O0FBQ0EsTUFBSSxDQUFDRSxNQUFMLEVBQWE7QUFDWCxVQUFNLElBQUlJLG1CQUFPQyxvQkFBWCxDQUFpQyxHQUFFUCxRQUFRLENBQUMsQ0FBRCxDQUFJLHFCQUEvQyxDQUFOO0FBQ0Q7O0FBQ0QsU0FBT0UsTUFBUDtBQUNEOztBQW9CREwsUUFBUSxDQUFDVyxhQUFULEdBQXlCLGVBQWVBLGFBQWYsQ0FBOEJDLElBQUksR0FBRyxFQUFyQyxFQUF5QztBQUNoRSxRQUFNQyxJQUFJLEdBQUdMLFdBQVcsQ0FBQ0ksSUFBRCxDQUF4QjtBQUNBLFFBQU07QUFBRUUsSUFBQUEsS0FBRjtBQUFTQyxJQUFBQSxJQUFUO0FBQWVDLElBQUFBO0FBQWYsTUFBb0NKLElBQTFDO0FBQ0EsU0FBTyxNQUFNLEtBQUtLLEdBQUwsQ0FBU0MsS0FBVCxDQUFlQyxPQUFmLENBQXdCLFlBQVdOLElBQUssUUFBeEMsRUFBaUQsTUFBakQsRUFBeUQ7QUFDcEVDLElBQUFBLEtBRG9FO0FBQzdEQyxJQUFBQSxJQUQ2RDtBQUVwRUMsSUFBQUE7QUFGb0UsR0FBekQsQ0FBYjtBQUlELENBUEQ7O0FBNEJBaEIsUUFBUSxDQUFDb0IsVUFBVCxHQUFzQixlQUFlQSxVQUFmLENBQTJCUixJQUFJLEdBQUcsRUFBbEMsRUFBc0M7QUFDMUQsUUFBTUMsSUFBSSxHQUFHWixXQUFXLENBQUNXLElBQUQsQ0FBeEI7QUFDQSxRQUFNO0FBQUVTLElBQUFBLENBQUY7QUFBS0MsSUFBQUEsQ0FBTDtBQUFRTixJQUFBQTtBQUFSLE1BQTZCSixJQUFuQztBQUNBLFFBQU1XLEdBQUcsR0FBR1YsSUFBSSxHQUFJLFlBQVdBLElBQUssUUFBcEIsR0FBOEIsWUFBOUM7QUFDQSxTQUFPLE1BQU0sS0FBS0ksR0FBTCxDQUFTQyxLQUFULENBQWVDLE9BQWYsQ0FBdUJJLEdBQXZCLEVBQTRCLE1BQTVCLEVBQW9DO0FBQy9DRixJQUFBQSxDQUQrQztBQUM1Q0MsSUFBQUEsQ0FENEM7QUFFL0NOLElBQUFBO0FBRitDLEdBQXBDLENBQWI7QUFJRCxDQVJEOztBQStCQWhCLFFBQVEsQ0FBQ3dCLFdBQVQsR0FBdUIsZUFBZUEsV0FBZixDQUE0QlosSUFBSSxHQUFHLEVBQW5DLEVBQXVDO0FBQzVELFFBQU1DLElBQUksR0FBR1osV0FBVyxDQUFDVyxJQUFELENBQXhCO0FBQ0EsUUFBTTtBQUNKUyxJQUFBQSxDQURJO0FBQ0RDLElBQUFBLENBREM7QUFFSkcsSUFBQUEsTUFGSTtBQUVJQyxJQUFBQSxNQUZKO0FBR0pWLElBQUFBO0FBSEksTUFJRkosSUFKSjtBQUtBLFFBQU1XLEdBQUcsR0FBR1YsSUFBSSxHQUFJLGdCQUFlQSxJQUFLLFNBQXhCLEdBQW1DLGFBQW5EO0FBQ0EsU0FBTyxNQUFNLEtBQUtJLEdBQUwsQ0FBU0MsS0FBVCxDQUFlQyxPQUFmLENBQXVCSSxHQUF2QixFQUE0QixNQUE1QixFQUFvQztBQUMvQ0UsSUFBQUEsTUFEK0M7QUFDdkNDLElBQUFBLE1BRHVDO0FBRS9DTCxJQUFBQSxDQUYrQztBQUU1Q0MsSUFBQUEsQ0FGNEM7QUFHL0NOLElBQUFBO0FBSCtDLEdBQXBDLENBQWI7QUFLRCxDQWJEOztBQXdDQWhCLFFBQVEsQ0FBQzJCLFVBQVQsR0FBc0IsZUFBZUEsVUFBZixDQUEyQmYsSUFBSSxHQUFHLEVBQWxDLEVBQXNDO0FBQzFELFFBQU1DLElBQUksR0FBR1osV0FBVyxDQUFDVyxJQUFELENBQXhCO0FBQ0EsUUFBTTtBQUNKUyxJQUFBQSxDQURJO0FBQ0RDLElBQUFBLENBREM7QUFFSk0sSUFBQUEsU0FGSTtBQUdKQyxJQUFBQSxRQUhJO0FBSUpiLElBQUFBO0FBSkksTUFLRkosSUFMSjtBQU1BLFFBQU1XLEdBQUcsR0FBR1YsSUFBSSxHQUFJLGdCQUFlQSxJQUFLLFFBQXhCLEdBQW1DLFlBQW5EO0FBQ0EsU0FBTyxNQUFNLEtBQUtJLEdBQUwsQ0FBU0MsS0FBVCxDQUFlQyxPQUFmLENBQXVCSSxHQUF2QixFQUE0QixNQUE1QixFQUFvQztBQUMvQ0YsSUFBQUEsQ0FEK0M7QUFDNUNDLElBQUFBLENBRDRDO0FBRS9DTSxJQUFBQSxTQUYrQztBQUcvQ0MsSUFBQUEsUUFIK0M7QUFJL0NiLElBQUFBO0FBSitDLEdBQXBDLENBQWI7QUFNRCxDQWZEOztBQW9DQWhCLFFBQVEsQ0FBQzhCLGVBQVQsR0FBMkIsZUFBZUEsZUFBZixDQUFnQ2xCLElBQUksR0FBRyxFQUF2QyxFQUEyQztBQUNwRSxRQUFNQyxJQUFJLEdBQUdaLFdBQVcsQ0FBQ1csSUFBRCxDQUF4QjtBQUNBLFFBQU07QUFBRVMsSUFBQUEsQ0FBRjtBQUFLQyxJQUFBQSxDQUFMO0FBQVFOLElBQUFBO0FBQVIsTUFBNkJKLElBQW5DO0FBQ0EsUUFBTVcsR0FBRyxHQUFHVixJQUFJLEdBQUksZ0JBQWVBLElBQUssYUFBeEIsR0FBdUMsaUJBQXZEO0FBQ0EsU0FBTyxNQUFNLEtBQUtJLEdBQUwsQ0FBU0MsS0FBVCxDQUFlQyxPQUFmLENBQXVCSSxHQUF2QixFQUE0QixNQUE1QixFQUFvQztBQUMvQ0YsSUFBQUEsQ0FEK0M7QUFDNUNDLElBQUFBLENBRDRDO0FBRS9DTixJQUFBQTtBQUYrQyxHQUFwQyxDQUFiO0FBSUQsQ0FSRDs7QUE2QkFoQixRQUFRLENBQUMrQixVQUFULEdBQXNCLGVBQWVBLFVBQWYsQ0FBMkJuQixJQUFJLEdBQUcsRUFBbEMsRUFBc0M7QUFDMUQsUUFBTUMsSUFBSSxHQUFHWixXQUFXLENBQUNXLElBQUQsQ0FBeEI7QUFDQSxRQUFNO0FBQUVTLElBQUFBLENBQUY7QUFBS0MsSUFBQUEsQ0FBTDtBQUFRTixJQUFBQTtBQUFSLE1BQTZCSixJQUFuQztBQUNBLFFBQU1XLEdBQUcsR0FBR1YsSUFBSSxHQUFJLGdCQUFlQSxJQUFLLFFBQXhCLEdBQWtDLFlBQWxEO0FBQ0EsU0FBTyxNQUFNLEtBQUtJLEdBQUwsQ0FBU0MsS0FBVCxDQUFlQyxPQUFmLENBQXVCSSxHQUF2QixFQUE0QixNQUE1QixFQUFvQztBQUMvQ0YsSUFBQUEsQ0FEK0M7QUFDNUNDLElBQUFBLENBRDRDO0FBRS9DTixJQUFBQTtBQUYrQyxHQUFwQyxDQUFiO0FBSUQsQ0FSRDs7QUE2QkFoQixRQUFRLENBQUNnQyxnQkFBVCxHQUE0QixlQUFlQSxnQkFBZixDQUFpQ3BCLElBQUksR0FBRyxFQUF4QyxFQUE0QztBQUN0RSxRQUFNQyxJQUFJLEdBQUdaLFdBQVcsQ0FBQ1csSUFBRCxDQUF4QjtBQUNBLFFBQU07QUFBRVMsSUFBQUEsQ0FBRjtBQUFLQyxJQUFBQSxDQUFMO0FBQVFOLElBQUFBO0FBQVIsTUFBNkJKLElBQW5DO0FBQ0EsUUFBTVcsR0FBRyxHQUFHVixJQUFJLEdBQUksZ0JBQWVBLElBQUssY0FBeEIsR0FBd0Msa0JBQXhEO0FBQ0EsU0FBTyxNQUFNLEtBQUtJLEdBQUwsQ0FBU0MsS0FBVCxDQUFlQyxPQUFmLENBQXVCSSxHQUF2QixFQUE0QixNQUE1QixFQUFvQztBQUMvQ0YsSUFBQUEsQ0FEK0M7QUFDNUNDLElBQUFBLENBRDRDO0FBRS9DTixJQUFBQTtBQUYrQyxHQUFwQyxDQUFiO0FBSUQsQ0FSRDs7QUFrQ0FoQixRQUFRLENBQUNpQyxpQkFBVCxHQUE2QixlQUFlQSxpQkFBZixDQUFrQ3JCLElBQUksR0FBRyxFQUF6QyxFQUE2QztBQUN4RSxRQUFNc0IsVUFBVSxHQUFHakMsV0FBVyxDQUFDVyxJQUFELEVBQU8sQ0FBQyxpQkFBRCxFQUFvQixlQUFwQixDQUFQLENBQTlCO0FBQ0EsUUFBTXVCLFFBQVEsR0FBR2xDLFdBQVcsQ0FBQ1csSUFBRCxFQUFPLENBQUMsc0JBQUQsRUFBeUIsb0JBQXpCLENBQVAsQ0FBNUI7QUFDQSxRQUFNO0FBQ0p3QixJQUFBQSxNQURJO0FBQ0lDLElBQUFBLE1BREo7QUFFSkMsSUFBQUEsSUFGSTtBQUVFQyxJQUFBQSxJQUZGO0FBR0pDLElBQUFBLFFBSEk7QUFJSnhCLElBQUFBO0FBSkksTUFLRkosSUFMSjtBQU1BLFFBQU1XLEdBQUcsR0FBR1csVUFBVSxJQUFJQyxRQUFkLEdBQ1AsZ0JBQWVELFVBQVcsZUFEbkIsR0FFUixtQkFGSjs7QUFHQSxRQUFNTyxJQUFJLEdBQUdOLFFBQVEsSUFBSTdCLGNBQUtvQyxXQUFMLENBQWlCUCxRQUFqQixDQUF6Qjs7QUFDQSxTQUFPLE1BQU0sS0FBS2xCLEdBQUwsQ0FBU0MsS0FBVCxDQUFlQyxPQUFmLENBQXVCSSxHQUF2QixFQUE0QixNQUE1QixFQUFvQztBQUMvQ2EsSUFBQUEsTUFEK0M7QUFDdkNDLElBQUFBLE1BRHVDO0FBRS9DQyxJQUFBQSxJQUYrQztBQUV6Q0MsSUFBQUEsSUFGeUM7QUFHL0NDLElBQUFBLFFBSCtDO0FBSS9DQyxJQUFBQSxJQUorQztBQUsvQ3pCLElBQUFBO0FBTCtDLEdBQXBDLENBQWI7QUFPRCxDQXBCRDs7QUFrREFoQixRQUFRLENBQUMyQyx3QkFBVCxHQUFvQyxlQUFlQSx3QkFBZixDQUF5Qy9CLElBQUksR0FBRyxFQUFoRCxFQUFvRDtBQUN0RixRQUFNc0IsVUFBVSxHQUFHakMsV0FBVyxDQUFDVyxJQUFELEVBQU8sQ0FBQyxpQkFBRCxFQUFvQixlQUFwQixDQUFQLENBQTlCO0FBQ0EsUUFBTXVCLFFBQVEsR0FBR2xDLFdBQVcsQ0FBQ1csSUFBRCxFQUFPLENBQUMsc0JBQUQsRUFBeUIsb0JBQXpCLENBQVAsQ0FBNUI7QUFDQSxRQUFNO0FBQ0p3QixJQUFBQSxNQURJO0FBQ0lDLElBQUFBLE1BREo7QUFFSkMsSUFBQUEsSUFGSTtBQUVFQyxJQUFBQSxJQUZGO0FBR0pDLElBQUFBLFFBSEk7QUFHTUksSUFBQUEsWUFITjtBQUlKZixJQUFBQSxRQUpJO0FBS0piLElBQUFBO0FBTEksTUFNRkosSUFOSjtBQU9BLFFBQU1XLEdBQUcsR0FBR1csVUFBVSxJQUFJQyxRQUFkLEdBQ1AsZ0JBQWVELFVBQVcsc0JBRG5CLEdBRVIsMEJBRko7O0FBR0EsUUFBTU8sSUFBSSxHQUFHTixRQUFRLElBQUk3QixjQUFLb0MsV0FBTCxDQUFpQlAsUUFBakIsQ0FBekI7O0FBQ0EsU0FBTyxNQUFNLEtBQUtsQixHQUFMLENBQVNDLEtBQVQsQ0FBZUMsT0FBZixDQUF1QkksR0FBdkIsRUFBNEIsTUFBNUIsRUFBb0M7QUFDL0NhLElBQUFBLE1BRCtDO0FBQ3ZDQyxJQUFBQSxNQUR1QztBQUUvQ0MsSUFBQUEsSUFGK0M7QUFFekNDLElBQUFBLElBRnlDO0FBRy9DQyxJQUFBQSxRQUgrQztBQUdyQ0ksSUFBQUEsWUFIcUM7QUFJL0NmLElBQUFBLFFBSitDO0FBSy9DWSxJQUFBQSxJQUwrQztBQU0vQ3pCLElBQUFBO0FBTitDLEdBQXBDLENBQWI7QUFRRCxDQXRCRDs7QUFrREFoQixRQUFRLENBQUM2QyxTQUFULEdBQXFCLGVBQWVBLFNBQWYsQ0FBMEJqQyxJQUFJLEdBQUcsRUFBakMsRUFBcUM7QUFDeEQsUUFBTUMsSUFBSSxHQUFHWixXQUFXLENBQUNXLElBQUQsQ0FBeEI7QUFDQSxRQUFNO0FBQUVrQyxJQUFBQTtBQUFGLE1BQVdsQyxJQUFqQjtBQUNBLFFBQU1XLEdBQUcsR0FBR1YsSUFBSSxHQUFJLGdCQUFlQSxJQUFLLE9BQXhCLEdBQWlDLFdBQWpEO0FBQ0EsU0FBTyxNQUFNLEtBQUtJLEdBQUwsQ0FBU0MsS0FBVCxDQUFlQyxPQUFmLENBQXVCSSxHQUF2QixFQUE0QixNQUE1QixFQUFvQztBQUFFdUIsSUFBQUE7QUFBRixHQUFwQyxDQUFiO0FBQ0QsQ0FMRDs7QUEyQkE5QyxRQUFRLENBQUMrQyxpQkFBVCxHQUE2QixlQUFlQSxpQkFBZixDQUFrQ25DLElBQUksR0FBRyxFQUF6QyxFQUE2QztBQUN4RSxRQUFNQyxJQUFJLEdBQUdaLFdBQVcsQ0FBQ1csSUFBRCxDQUF4QjtBQUNBLFFBQU07QUFBRVMsSUFBQUEsQ0FBRjtBQUFLQyxJQUFBQSxDQUFMO0FBQVFrQixJQUFBQSxRQUFSO0FBQWtCeEIsSUFBQUE7QUFBbEIsTUFBdUNKLElBQTdDO0FBQ0EsUUFBTVcsR0FBRyxHQUFHVixJQUFJLEdBQUksZ0JBQWVBLElBQUssUUFBeEIsR0FBa0MsWUFBbEQ7QUFDQSxTQUFPLE1BQU0sS0FBS0ksR0FBTCxDQUFTQyxLQUFULENBQWVDLE9BQWYsQ0FBdUJJLEdBQXZCLEVBQTRCLE1BQTVCLEVBQW9DO0FBQy9DRixJQUFBQSxDQUQrQztBQUM1Q0MsSUFBQUEsQ0FENEM7QUFFL0NrQixJQUFBQSxRQUYrQztBQUcvQ3hCLElBQUFBO0FBSCtDLEdBQXBDLENBQWI7QUFLRCxDQVREOztBQThCQWhCLFFBQVEsQ0FBQ2dELFFBQVQsR0FBb0IsZUFBZUEsUUFBZixDQUF5QnBDLElBQUksR0FBRyxFQUFoQyxFQUFvQztBQUN0RCxRQUFNQyxJQUFJLEdBQUdaLFdBQVcsQ0FBQ1csSUFBRCxDQUF4QjtBQUNBLFFBQU07QUFBRVMsSUFBQUEsQ0FBRjtBQUFLQyxJQUFBQSxDQUFMO0FBQVFOLElBQUFBO0FBQVIsTUFBNkJKLElBQW5DO0FBQ0EsUUFBTVcsR0FBRyxHQUFHVixJQUFJLEdBQUksZ0JBQWVBLElBQUssTUFBeEIsR0FBZ0MsVUFBaEQ7QUFDQSxTQUFPLE1BQU0sS0FBS0ksR0FBTCxDQUFTQyxLQUFULENBQWVDLE9BQWYsQ0FBdUJJLEdBQXZCLEVBQTRCLE1BQTVCLEVBQW9DO0FBQy9DRixJQUFBQSxDQUQrQztBQUM1Q0MsSUFBQUEsQ0FENEM7QUFFL0NOLElBQUFBO0FBRitDLEdBQXBDLENBQWI7QUFJRCxDQVJEOztBQTZCQWhCLFFBQVEsQ0FBQ2lELGNBQVQsR0FBMEIsZUFBZUEsY0FBZixDQUErQnJDLElBQUksR0FBRyxFQUF0QyxFQUEwQztBQUNsRSxRQUFNQyxJQUFJLEdBQUdaLFdBQVcsQ0FBQ1csSUFBRCxDQUF4QjtBQUNBLFFBQU07QUFBRVMsSUFBQUEsQ0FBRjtBQUFLQyxJQUFBQSxDQUFMO0FBQVFOLElBQUFBO0FBQVIsTUFBNkJKLElBQW5DO0FBQ0EsUUFBTVcsR0FBRyxHQUFHVixJQUFJLEdBQUksZ0JBQWVBLElBQUssWUFBeEIsR0FBc0MsZ0JBQXREO0FBQ0EsU0FBTyxNQUFNLEtBQUtJLEdBQUwsQ0FBU0MsS0FBVCxDQUFlQyxPQUFmLENBQXVCSSxHQUF2QixFQUE0QixNQUE1QixFQUFvQztBQUMvQ0YsSUFBQUEsQ0FEK0M7QUFDNUNDLElBQUFBLENBRDRDO0FBRS9DTixJQUFBQTtBQUYrQyxHQUFwQyxDQUFiO0FBSUQsQ0FSRDs7QUFrQ0FoQixRQUFRLENBQUNrRCxpQkFBVCxHQUE2QixlQUFlQSxpQkFBZixDQUFrQ3RDLElBQUksR0FBRyxFQUF6QyxFQUE2QztBQUN4RSxRQUFNc0IsVUFBVSxHQUFHakMsV0FBVyxDQUFDVyxJQUFELEVBQU8sQ0FBQyxpQkFBRCxFQUFvQixlQUFwQixDQUFQLENBQTlCO0FBQ0EsUUFBTXVCLFFBQVEsR0FBR2xDLFdBQVcsQ0FBQ1csSUFBRCxFQUFPLENBQUMsc0JBQUQsRUFBeUIsb0JBQXpCLENBQVAsQ0FBNUI7QUFDQSxRQUFNO0FBQ0p3QixJQUFBQSxNQURJO0FBQ0lDLElBQUFBLE1BREo7QUFFSkMsSUFBQUEsSUFGSTtBQUVFQyxJQUFBQSxJQUZGO0FBR0pDLElBQUFBLFFBSEk7QUFJSnhCLElBQUFBO0FBSkksTUFLRkosSUFMSjtBQU1BLFFBQU1XLEdBQUcsR0FBR1csVUFBVSxJQUFJQyxRQUFkLEdBQ1AsZ0JBQWVELFVBQVcsZUFEbkIsR0FFUixtQkFGSjs7QUFHQSxRQUFNTyxJQUFJLEdBQUdOLFFBQVEsSUFBSTdCLGNBQUtvQyxXQUFMLENBQWlCUCxRQUFqQixDQUF6Qjs7QUFDQSxTQUFPLE1BQU0sS0FBS2xCLEdBQUwsQ0FBU0MsS0FBVCxDQUFlQyxPQUFmLENBQXVCSSxHQUF2QixFQUE0QixNQUE1QixFQUFvQztBQUMvQ2EsSUFBQUEsTUFEK0M7QUFDdkNDLElBQUFBLE1BRHVDO0FBRS9DQyxJQUFBQSxJQUYrQztBQUV6Q0MsSUFBQUEsSUFGeUM7QUFHL0NDLElBQUFBLFFBSCtDO0FBSS9DQyxJQUFBQSxJQUorQztBQUsvQ3pCLElBQUFBO0FBTCtDLEdBQXBDLENBQWI7QUFPRCxDQXBCRDs7QUFrREFoQixRQUFRLENBQUNtRCx3QkFBVCxHQUFvQyxlQUFlQSx3QkFBZixDQUF5Q3ZDLElBQUksR0FBRyxFQUFoRCxFQUFvRDtBQUN0RixRQUFNc0IsVUFBVSxHQUFHakMsV0FBVyxDQUFDVyxJQUFELEVBQU8sQ0FBQyxpQkFBRCxFQUFvQixlQUFwQixDQUFQLENBQTlCO0FBQ0EsUUFBTXVCLFFBQVEsR0FBR2xDLFdBQVcsQ0FBQ1csSUFBRCxFQUFPLENBQUMsc0JBQUQsRUFBeUIsb0JBQXpCLENBQVAsQ0FBNUI7QUFDQSxRQUFNO0FBQ0p3QixJQUFBQSxNQURJO0FBQ0lDLElBQUFBLE1BREo7QUFFSkMsSUFBQUEsSUFGSTtBQUVFQyxJQUFBQSxJQUZGO0FBR0pDLElBQUFBLFFBSEk7QUFHTUksSUFBQUEsWUFITjtBQUlKZixJQUFBQSxRQUpJO0FBS0piLElBQUFBO0FBTEksTUFNRkosSUFOSjtBQU9BLFFBQU1XLEdBQUcsR0FBR1csVUFBVSxJQUFJQyxRQUFkLEdBQ1AsZ0JBQWVELFVBQVcsc0JBRG5CLEdBRVIsMEJBRko7O0FBR0EsUUFBTU8sSUFBSSxHQUFHTixRQUFRLElBQUk3QixjQUFLb0MsV0FBTCxDQUFpQlAsUUFBakIsQ0FBekI7O0FBQ0EsU0FBTyxNQUFNLEtBQUtsQixHQUFMLENBQVNDLEtBQVQsQ0FBZUMsT0FBZixDQUF1QkksR0FBdkIsRUFBNEIsTUFBNUIsRUFBb0M7QUFDL0NhLElBQUFBLE1BRCtDO0FBQ3ZDQyxJQUFBQSxNQUR1QztBQUUvQ0MsSUFBQUEsSUFGK0M7QUFFekNDLElBQUFBLElBRnlDO0FBRy9DQyxJQUFBQSxRQUgrQztBQUdyQ0ksSUFBQUEsWUFIcUM7QUFJL0NmLElBQUFBLFFBSitDO0FBSy9DWSxJQUFBQSxJQUwrQztBQU0vQ3pCLElBQUFBO0FBTitDLEdBQXBDLENBQWI7QUFRRCxDQXRCRDs7ZUF3QmVoQixRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuZnVuY3Rpb24gZXh0cmFjdFV1aWQgKG9wdGlvbnMgPSB7fSwga2V5TmFtZXMgPSBbJ2VsZW1lbnRJZCcsICdlbGVtZW50J10pIHtcbiAgZm9yIChjb25zdCBuYW1lIG9mIGtleU5hbWVzKSB7XG4gICAgaWYgKG9wdGlvbnNbbmFtZV0pIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWwudW53cmFwRWxlbWVudChvcHRpb25zW25hbWVdKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVVdWlkIChvcHRpb25zID0ge30sIGtleU5hbWVzID0gWydlbGVtZW50SWQnLCAnZWxlbWVudCddKSB7XG4gIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RVdWlkKG9wdGlvbnMsIGtleU5hbWVzKTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGAke2tleU5hbWVzWzBdfSBmaWVsZCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2V0VmFsdWVPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBlbGVtZW50IHRvIHNldCB2YWx1ZSBmb3JcbiAqIEBwcm9wZXJ0eSB7Kn0gdmFsdWUgdmFsdWUgdG8gc2V0LiBDb3VsZCBhbHNvIGJlIGFuIGFycmF5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGV4dCB0ZXh0IHRvIHNldC4gSWYgYm90aCB2YWx1ZSBhbmQgdGV4dCBhcmUgc2V0XG4gKiB0aGVuIGB2YWx1ZWAgaXMgcHJlZmVycmVkXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSB0aGUgZWxlbWVudCB2YWx1ZSBpcyBiZWluZyBzZXQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBTZXQgdmFsdWUgdG8gdGhlIGdpdmVuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge1NldFZhbHVlT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1NldFZhbHVlID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NTZXRWYWx1ZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSByZXF1aXJlVXVpZChvcHRzKTtcbiAgY29uc3QgeyB2YWx1ZSwgdGV4dCwga2V5TW9kaWZpZXJGbGFncyB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7dXVpZH0vdmFsdWVgLCAnUE9TVCcsIHtcbiAgICB2YWx1ZSwgdGV4dCxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2xpY2tPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBlbGVtZW50IHRvIGNsaWNrLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogb3IvYW5kIHggYW5kIHkgbXVzdCBiZSBzZXQuIElmIGJvdGggYXJlIHNldCB0aGVuIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXMgcmVsYXRpdmVcbiAqIGVsZW1lbnQgY29vcmRpbmF0ZXMuIElmIG9ubHkgeCBhbmQgeSBhcmUgc2V0IHRoZW4gdGhlc2UgYXJlIHBhcnNlZCBhc1xuICogYWJzb2x1dGUgY29vcmRpbmF0ZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggY2xpY2sgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgY2xpY2sgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBjbGljayBpcyBwZXJmb3JtZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIGNsaWNrIGdlc3R1cmUgb24gYW4gZWxlbWVudCBvciBieSByZWxhdGl2ZS9hYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7Q2xpY2tPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zQ2xpY2sgPSBhc3luYyBmdW5jdGlvbiBtYWNvc0NsaWNrIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7IHgsIHksIGtleU1vZGlmaWVyRmxhZ3MgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHV1aWQgPyBgL2VsZW1lbnQvJHt1dWlkfS9jbGlja2AgOiAnL3dkYS9jbGljayc7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgeCwgeSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2Nyb2xsT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzY3JvbGxlZC4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIG9yL2FuZCB4IGFuZCB5IG11c3QgYmUgc2V0LiBJZiBib3RoIGFyZSBzZXQgdGhlbiB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFzIHJlbGF0aXZlXG4gKiBlbGVtZW50IGNvb3JkaW5hdGVzLiBJZiBvbmx5IHggYW5kIHkgYXJlIHNldCB0aGVuIHRoZXNlIGFyZSBwYXJzZWQgYXNcbiAqIGFic29sdXRlIGNvb3JkaW5hdGVzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IHNjcm9sbCBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBzY3JvbGwgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IGRlbHRhWCBob3Jpem9udGFsIGRlbHRhIGFzIGZsb2F0IG51bWJlclxuICogQHByb3BlcnR5IHshbnVtYmVyfSBkZWx0YVkgdmVydGljYWwgZGVsdGEgYXMgZmxvYXQgbnVtYmVyXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBzY3JvbGwgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBzY3JvbGwgZ2VzdHVyZSBvbiBhbiBlbGVtZW50IG9yIGJ5IHJlbGF0aXZlL2Fic29sdXRlIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtTY3JvbGxPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zU2Nyb2xsID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NTY3JvbGwgKG9wdHMgPSB7fSkge1xuICBjb25zdCB1dWlkID0gZXh0cmFjdFV1aWQob3B0cyk7XG4gIGNvbnN0IHtcbiAgICB4LCB5LFxuICAgIGRlbHRhWCwgZGVsdGFZLFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L3Njcm9sbGAgOiAnL3dkYS9zY3JvbGwnO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIGRlbHRhWCwgZGVsdGFZLFxuICAgIHgsIHksXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN3aXBlT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBiZSBzd2lwZWQuIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBvci9hbmQgeCBhbmQgeSBtdXN0IGJlIHNldC4gSWYgYm90aCBhcmUgc2V0IHRoZW4geCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcyByZWxhdGl2ZVxuICogZWxlbWVudCBjb29yZGluYXRlcy4gSWYgb25seSB4IGFuZCB5IGFyZSBzZXQgdGhlbiB0aGVzZSBhcmUgcGFyc2VkIGFzXG4gKiBhYnNvbHV0ZSBjb29yZGluYXRlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCBzd2lwZSBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBzd2lwZSBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gZGlyZWN0aW9uIGVpdGhlciAndXAnLCAnZG93bicsICdsZWZ0JyBvciAncmlnaHQnXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHZlbG9jaXR5IFRoZSB2YWx1ZSBpcyBtZWFzdXJlZCBpbiBwaXhlbHMgcGVyIHNlY29uZCBhbmQgc2FtZVxuICogdmFsdWVzIGNvdWxkIGJlaGF2ZSBkaWZmZXJlbnRseSBvbiBkaWZmZXJlbnQgZGV2aWNlcyBkZXBlbmRpbmcgb24gdGhlaXIgZGlzcGxheVxuICogZGVuc2l0eS4gSGlnaGVyIHZhbHVlcyBtYWtlIHN3aXBlIGdlc3R1cmUgZmFzdGVyICh3aGljaCB1c3VhbGx5IHNjcm9sbHMgbGFyZ2VyXG4gKiBhcmVhcyBpZiB3ZSBhcHBseSBpdCB0byBhIGxpc3QpIGFuZCBsb3dlciB2YWx1ZXMgc2xvdyBpdCBkb3duLlxuICogT25seSB2YWx1ZXMgZ3JlYXRlciB0aGFuIHplcm8gaGF2ZSBlZmZlY3QuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBzY3JvbGwgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBzd2lwZSBnZXN0dXJlIG9uIGFuIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge1N3aXBlT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1N3aXBlID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NTd2lwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSBleHRyYWN0VXVpZChvcHRzKTtcbiAgY29uc3Qge1xuICAgIHgsIHksXG4gICAgZGlyZWN0aW9uLFxuICAgIHZlbG9jaXR5LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L3N3aXBlYCA6IGAvd2RhL3N3aXBlYDtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICB4LCB5LFxuICAgIGRpcmVjdGlvbixcbiAgICB2ZWxvY2l0eSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUmlnaHRDbGlja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIHV1aWQgb2YgdGhlIGVsZW1lbnQgdG8gY2xpY2suIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBvci9hbmQgeCBhbmQgeSBtdXN0IGJlIHNldC4gSWYgYm90aCBhcmUgc2V0IHRoZW4geCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcyByZWxhdGl2ZVxuICogZWxlbWVudCBjb29yZGluYXRlcy4gSWYgb25seSB4IGFuZCB5IGFyZSBzZXQgdGhlbiB0aGVzZSBhcmUgcGFyc2VkIGFzXG4gKiBhYnNvbHV0ZSBjb29yZGluYXRlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCBjbGljayBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBjbGljayBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGNsaWNrIGlzIHBlcmZvcm1lZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gcmlnaHQgY2xpY2sgZ2VzdHVyZSBvbiBhbiBlbGVtZW50IG9yIGJ5IHJlbGF0aXZlL2Fic29sdXRlIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtSaWdodENsaWNrT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1JpZ2h0Q2xpY2sgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1JpZ2h0Q2xpY2sgKG9wdHMgPSB7fSkge1xuICBjb25zdCB1dWlkID0gZXh0cmFjdFV1aWQob3B0cyk7XG4gIGNvbnN0IHsgeCwgeSwga2V5TW9kaWZpZXJGbGFncyB9ID0gb3B0cztcbiAgY29uc3QgdXJsID0gdXVpZCA/IGAvd2RhL2VsZW1lbnQvJHt1dWlkfS9yaWdodENsaWNrYCA6ICcvd2RhL3JpZ2h0Q2xpY2snO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIHgsIHksXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEhvdmVyT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBob3Zlci4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIG9yL2FuZCB4IGFuZCB5IG11c3QgYmUgc2V0LiBJZiBib3RoIGFyZSBzZXQgdGhlbiB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFzIHJlbGF0aXZlXG4gKiBlbGVtZW50IGNvb3JkaW5hdGVzLiBJZiBvbmx5IHggYW5kIHkgYXJlIHNldCB0aGVuIHRoZXNlIGFyZSBwYXJzZWQgYXNcbiAqIGFic29sdXRlIGNvb3JkaW5hdGVzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IGNsaWNrIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB5IGNsaWNrIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBrZXlNb2RpZmllckZsYWdzIGlmIHNldCB0aGVuIHRoZSBnaXZlbiBrZXkgbW9kaWZpZXJzIHdpbGwgYmVcbiAqIGFwcGxpZWQgd2hpbGUgaG92ZXIgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBob3ZlciBnZXN0dXJlIG9uIGFuIGVsZW1lbnQgb3IgYnkgcmVsYXRpdmUvYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge0hvdmVyT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc0hvdmVyID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NIb3ZlciAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSBleHRyYWN0VXVpZChvcHRzKTtcbiAgY29uc3QgeyB4LCB5LCBrZXlNb2RpZmllckZsYWdzIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L2hvdmVyYCA6ICcvd2RhL2hvdmVyJztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICB4LCB5LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb3VibGVDbGlja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIHV1aWQgb2YgdGhlIGVsZW1lbnQgdG8gZG91YmxlIGNsaWNrLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogb3IvYW5kIHggYW5kIHkgbXVzdCBiZSBzZXQuIElmIGJvdGggYXJlIHNldCB0aGVuIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXMgcmVsYXRpdmVcbiAqIGVsZW1lbnQgY29vcmRpbmF0ZXMuIElmIG9ubHkgeCBhbmQgeSBhcmUgc2V0IHRoZW4gdGhlc2UgYXJlIHBhcnNlZCBhc1xuICogYWJzb2x1dGUgY29vcmRpbmF0ZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggY2xpY2sgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgY2xpY2sgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBkb3VibGUgY2xpY2sgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBkb3VibGUgY2xpY2sgZ2VzdHVyZSBvbiBhbiBlbGVtZW50IG9yIGJ5IHJlbGF0aXZlL2Fic29sdXRlIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtEb3VibGVDbGlja09wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NEb3VibGVDbGljayA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zRG91YmxlQ2xpY2sgKG9wdHMgPSB7fSkge1xuICBjb25zdCB1dWlkID0gZXh0cmFjdFV1aWQob3B0cyk7XG4gIGNvbnN0IHsgeCwgeSwga2V5TW9kaWZpZXJGbGFncyB9ID0gb3B0cztcbiAgY29uc3QgdXJsID0gdXVpZCA/IGAvd2RhL2VsZW1lbnQvJHt1dWlkfS9kb3VibGVDbGlja2AgOiAnL3dkYS9kb3VibGVDbGljayc7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgeCwgeSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2xpY2tBbmREcmFnT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzb3VyY2VFbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBzdGFydCB0aGUgZHJhZyBmcm9tLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBkZXN0aW5hdGlvbkVsZW1lbnRgIG11c3QgYmUgcHJvdmlkZWQgb3IgYHN0YXJ0WGAsIGBzdGFydFlgLCBgZW5kWGAsIGBlbmRZYCBjb29yZGluYXRlc1xuICogbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGRlc3RpbmF0aW9uRWxlbWVudElkIHV1aWQgb2YgdGhlIGVsZW1lbnQgdG8gZW5kIHRoZSBkcmFnIG9uLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBzb3VyY2VFbGVtZW50YCBtdXN0IGJlIHByb3ZpZGVkIG9yIGBzdGFydFhgLCBgc3RhcnRZYCwgYGVuZFhgLCBgZW5kWWAgY29vcmRpbmF0ZXNcbiAqIG11c3QgYmUgc2V0LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzdGFydFggc3RhcnRpbmcgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WSBzdGFydGluZyBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZW5kWCBlbmRpbmcgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGVuZFkgZW5kaW5nIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBkdXJhdGlvbiBsb25nIGNsaWNrIGR1cmF0aW9uIGluIGZsb2F0IHNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGRyYWcgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBsb25nIGNsaWNrIGFuZCBkcmFnIGdlc3R1cmUgb24gYW4gZWxlbWVudCBvciBieSBhYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7Q2xpY2tBbmREcmFnT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc0NsaWNrQW5kRHJhZyA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zQ2xpY2tBbmREcmFnIChvcHRzID0ge30pIHtcbiAgY29uc3Qgc291cmNlVXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMsIFsnc291cmNlRWxlbWVudElkJywgJ3NvdXJjZUVsZW1lbnQnXSk7XG4gIGNvbnN0IGRlc3RVdWlkID0gZXh0cmFjdFV1aWQob3B0cywgWydkZXN0aW5hdGlvbkVsZW1lbnRJZCcsICdkZXN0aW5hdGlvbkVsZW1lbnQnXSk7XG4gIGNvbnN0IHtcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIGR1cmF0aW9uLFxuICAgIGtleU1vZGlmaWVyRmxhZ3NcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHNvdXJjZVV1aWQgJiYgZGVzdFV1aWRcbiAgICA/IGAvd2RhL2VsZW1lbnQvJHtzb3VyY2VVdWlkfS9jbGlja0FuZERyYWdgXG4gICAgOiAnL3dkYS9jbGlja0FuZERyYWcnO1xuICBjb25zdCBkZXN0ID0gZGVzdFV1aWQgJiYgdXRpbC53cmFwRWxlbWVudChkZXN0VXVpZCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBkdXJhdGlvbixcbiAgICBkZXN0LFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDbGlja0FuZERyYWdBbmRIb2xkT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzb3VyY2VFbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBzdGFydCB0aGUgZHJhZyBmcm9tLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBkZXN0aW5hdGlvbkVsZW1lbnRgIG11c3QgYmUgcHJvdmlkZWQgb3IgYHN0YXJ0WGAsIGBzdGFydFlgLCBgZW5kWGAsIGBlbmRZYCBjb29yZGluYXRlc1xuICogbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGRlc3RpbmF0aW9uRWxlbWVudElkIHV1aWQgb2YgdGhlIGVsZW1lbnQgdG8gZW5kIHRoZSBkcmFnIG9uLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBzb3VyY2VFbGVtZW50YCBtdXN0IGJlIHByb3ZpZGVkIG9yIGBzdGFydFhgLCBgc3RhcnRZYCwgYGVuZFhgLCBgZW5kWWAgY29vcmRpbmF0ZXNcbiAqIG11c3QgYmUgc2V0LlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzdGFydFggc3RhcnRpbmcgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WSBzdGFydGluZyBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZW5kWCBlbmRpbmcgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGVuZFkgZW5kaW5nIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHshbnVtYmVyfSBkdXJhdGlvbiBsb25nIGNsaWNrIGR1cmF0aW9uIGluIGZsb2F0IHNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdmVsb2NpdHkgZHJhZ2dpbmcgdmVsb2NpdHkgaW4gcGl4ZWxzIHBlciBzZWNvbmQuXG4gKiBJZiBub3QgcHJvdmlkZWQgdGhlbiB0aGUgZGVmYXVsdCB2ZWxvY2l0eSBpcyB1c2VkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZ2VzdHVyZXZlbG9jaXR5XG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBkcmFnIGlzIHBlcmZvcm1lZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gbG9uZyBjbGljaywgZHJhZyBhbmQgaG9sZCBnZXN0dXJlIG9uIGFuIGVsZW1lbnQgb3IgYnkgYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge0NsaWNrQW5kRHJhZ0FuZEhvbGRPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1hY29zQ2xpY2tBbmREcmFnQW5kSG9sZCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zQ2xpY2tBbmREcmFnQW5kSG9sZCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHNvdXJjZVV1aWQgPSBleHRyYWN0VXVpZChvcHRzLCBbJ3NvdXJjZUVsZW1lbnRJZCcsICdzb3VyY2VFbGVtZW50J10pO1xuICBjb25zdCBkZXN0VXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMsIFsnZGVzdGluYXRpb25FbGVtZW50SWQnLCAnZGVzdGluYXRpb25FbGVtZW50J10pO1xuICBjb25zdCB7XG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBkdXJhdGlvbiwgaG9sZER1cmF0aW9uLFxuICAgIHZlbG9jaXR5LFxuICAgIGtleU1vZGlmaWVyRmxhZ3NcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHNvdXJjZVV1aWQgJiYgZGVzdFV1aWRcbiAgICA/IGAvd2RhL2VsZW1lbnQvJHtzb3VyY2VVdWlkfS9jbGlja0FuZERyYWdBbmRIb2xkYFxuICAgIDogJy93ZGEvY2xpY2tBbmREcmFnQW5kSG9sZCc7XG4gIGNvbnN0IGRlc3QgPSBkZXN0VXVpZCAmJiB1dGlsLndyYXBFbGVtZW50KGRlc3RVdWlkKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICBzdGFydFgsIHN0YXJ0WSxcbiAgICBlbmRYLCBlbmRZLFxuICAgIGR1cmF0aW9uLCBob2xkRHVyYXRpb24sXG4gICAgdmVsb2NpdHksXG4gICAgZGVzdCxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gS2V5T3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBrZXkgYSBzdHJpbmcsIHRoYXQgcmVwcmVzZW50cyBhIGtleSB0byB0eXBlIChzZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNTAwNjA0LXR5cGVrZXk/bGFuZ3VhZ2U9b2JqY1xuICogYW5kIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5Ym9hcmRrZXk/bGFuZ3VhZ2U9b2JqYylcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gbW9kaWZpZXJGbGFncyBhIHNldCBvZiBtb2RpZmllciBmbGFnc1xuICogKGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFncz9sYW5ndWFnZT1vYmpjKVxuICogdG8gdXNlIHdoZW4gdHlwaW5nIHRoZSBrZXkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBLZXlzT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBlbGVtZW50SWQgdXVpZCBvZiB0aGUgZWxlbWVudCB0byBzZW5kIGtleXMgdG8uXG4gKiBJZiB0aGUgZWxlbWVudCBpcyBub3QgcHJvdmlkZWQgdGhlbiB0aGUga2V5cyB3aWxsIGJlIHNlbnQgdG8gdGhlIGN1cnJlbnQgYXBwbGljYXRpb24uXG4gKiBAcHJvcGVydHkgeyFBcnJheTxLZXlPcHRpb25zfHN0cmluZz59IGtleXMgQXJyYXkgb2Yga2V5cyB0byB0eXBlLlxuICogRWFjaCBpdGVtIGNvdWxkIGVpdGhlciBiZSBhIHN0cmluZywgdGhhdCByZXByZXNlbnRzIGEga2V5IGl0c2VsZiAoc2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTUwMDYwNC10eXBla2V5P2xhbmd1YWdlPW9iamNcbiAqIGFuZCBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleWJvYXJka2V5P2xhbmd1YWdlPW9iamMpXG4gKiBvciBhIGRpY3Rpb25hcnksIGlmIHRoZSBrZXkgc2hvdWxkIGFsc28gYmUgZW50ZXJlZCB3aXRoIG1vZGlmaWVycy5cbiAqL1xuXG4vKipcbiAqIFNlbmQga2V5cyB0byB0aGUgZ2l2ZW4gZWxlbWVudCBvciB0byB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7S2V5c09wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NLZXlzID0gYXN5bmMgZnVuY3Rpb24gbWFjb3NLZXlzIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7IGtleXMgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHV1aWQgPyBgL3dkYS9lbGVtZW50LyR7dXVpZH0va2V5c2AgOiAnL3dkYS9rZXlzJztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHsga2V5cyB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJlc3NPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBUb3VjaCBCYXIgZWxlbWVudCB0byBiZSBwcmVzc2VkLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogb3IvYW5kIHggYW5kIHkgbXVzdCBiZSBzZXQuIElmIGJvdGggYXJlIHNldCB0aGVuIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXMgcmVsYXRpdmVcbiAqIGVsZW1lbnQgY29vcmRpbmF0ZXMuIElmIG9ubHkgeCBhbmQgeSBhcmUgc2V0IHRoZW4gdGhlc2UgYXJlIHBhcnNlZCBhc1xuICogYWJzb2x1dGUgVG91Y2ggQmFyIGNvb3JkaW5hdGVzLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB4IGxvbmcgY2xpY2sgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgbG9uZyBjbGljayBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gZHVyYXRpb24gdGhlIG51bWJlciBvZiBmbG9hdCBzZWNvbmRzIHRvIGhvbGQgdGhlIG1vdXNlIGJ1dHRvblxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBrZXlNb2RpZmllckZsYWdzIGlmIHNldCB0aGVuIHRoZSBnaXZlbiBrZXkgbW9kaWZpZXJzIHdpbGwgYmVcbiAqIGFwcGxpZWQgd2hpbGUgY2xpY2sgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBwcmVzcyBnZXN0dXJlIG9uIGEgVG91Y2ggQmFyIGVsZW1lbnQgb3IgYnkgcmVsYXRpdmUvYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge1ByZXNzT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1ByZXNzQW5kSG9sZCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zUHJlc3NBbmRIb2xkIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7IHgsIHksIGR1cmF0aW9uLCBrZXlNb2RpZmllckZsYWdzIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L3ByZXNzYCA6ICcvd2RhL3ByZXNzJztcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2RhLnByb3h5LmNvbW1hbmQodXJsLCAnUE9TVCcsIHtcbiAgICB4LCB5LFxuICAgIGR1cmF0aW9uLFxuICAgIGtleU1vZGlmaWVyRmxhZ3MsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUYXBPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGVsZW1lbnRJZCB1dWlkIG9mIHRoZSBUb3VjaCBCYXIgZWxlbWVudCB0byB0YXAuIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBvci9hbmQgeCBhbmQgeSBtdXN0IGJlIHNldC4gSWYgYm90aCBhcmUgc2V0IHRoZW4geCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcyByZWxhdGl2ZVxuICogZWxlbWVudCBjb29yZGluYXRlcy4gSWYgb25seSB4IGFuZCB5IGFyZSBzZXQgdGhlbiB0aGVzZSBhcmUgcGFyc2VkIGFzXG4gKiBhYnNvbHV0ZSBUb3VjaCBCYXIgY29vcmRpbmF0ZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHggY2xpY2sgWCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHkgY2xpY2sgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBjbGljayBpcyBwZXJmb3JtZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlrZXltb2RpZmllcmZsYWdzXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIHRhcCBnZXN0dXJlIG9uIGEgVG91Y2ggQmFyIGVsZW1lbnQgb3IgYnkgcmVsYXRpdmUvYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge1RhcE9wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NUYXAgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1RhcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHV1aWQgPSBleHRyYWN0VXVpZChvcHRzKTtcbiAgY29uc3QgeyB4LCB5LCBrZXlNb2RpZmllckZsYWdzIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSB1dWlkID8gYC93ZGEvZWxlbWVudC8ke3V1aWR9L3RhcGAgOiAnL3dkYS90YXAnO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIHgsIHksXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERvdWJsZVRhcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZWxlbWVudElkIHV1aWQgb2YgdGhlIFRvdWNoIEJhciBlbGVtZW50IHRvIHRhcC4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIG9yL2FuZCB4IGFuZCB5IG11c3QgYmUgc2V0LiBJZiBib3RoIGFyZSBzZXQgdGhlbiB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFzIHJlbGF0aXZlXG4gKiBlbGVtZW50IGNvb3JkaW5hdGVzLiBJZiBvbmx5IHggYW5kIHkgYXJlIHNldCB0aGVuIHRoZXNlIGFyZSBwYXJzZWQgYXNcbiAqIGFic29sdXRlIFRvdWNoIEJhciBjb29yZGluYXRlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geCBjbGljayBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0geSBjbGljayBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGNsaWNrIGlzIHBlcmZvcm1lZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gdGFwIGdlc3R1cmUgb24gYSBUb3VjaCBCYXIgZWxlbWVudCBvciBieSByZWxhdGl2ZS9hYnNvbHV0ZSBjb29yZGluYXRlc1xuICpcbiAqIEBwYXJhbSB7RG91YmxlVGFwT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc0RvdWJsZVRhcCA9IGFzeW5jIGZ1bmN0aW9uIG1hY29zRG91YmxlVGFwIChvcHRzID0ge30pIHtcbiAgY29uc3QgdXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMpO1xuICBjb25zdCB7IHgsIHksIGtleU1vZGlmaWVyRmxhZ3MgfSA9IG9wdHM7XG4gIGNvbnN0IHVybCA9IHV1aWQgPyBgL3dkYS9lbGVtZW50LyR7dXVpZH0vZG91YmxlVGFwYCA6ICcvd2RhL2RvdWJsZVRhcCc7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgeCwgeSxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJlc3NBbmREcmFnT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzb3VyY2VFbGVtZW50SWQgdXVpZCBvZiBhIFRvdWNoIEJhciBlbGVtZW50IHRvIHN0YXJ0IHRoZSBkcmFnIGZyb20uIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBhbmQgYGRlc3RpbmF0aW9uRWxlbWVudGAgbXVzdCBiZSBwcm92aWRlZCBvciBgc3RhcnRYYCwgYHN0YXJ0WWAsIGBlbmRYYCwgYGVuZFlgIGNvb3JkaW5hdGVzXG4gKiBtdXN0IGJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZGVzdGluYXRpb25FbGVtZW50SWQgdXVpZCBvZiBhIFRvdWNoIEJhciBlbGVtZW50IHRvIGVuZCB0aGUgZHJhZyBvbi4gRWl0aGVyIHRoaXMgcHJvcGVydHlcbiAqIGFuZCBgc291cmNlRWxlbWVudGAgbXVzdCBiZSBwcm92aWRlZCBvciBgc3RhcnRYYCwgYHN0YXJ0WWAsIGBlbmRYYCwgYGVuZFlgIGNvb3JkaW5hdGVzXG4gKiBtdXN0IGJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRYIHN0YXJ0aW5nIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBzdGFydFkgc3RhcnRpbmcgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGVuZFggZW5kaW5nIFggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBlbmRZIGVuZGluZyBZIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7IW51bWJlcn0gZHVyYXRpb24gbG9uZyBjbGljayBkdXJhdGlvbiBpbiBmbG9hdCBzZWNvbmRzXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGtleU1vZGlmaWVyRmxhZ3MgaWYgc2V0IHRoZW4gdGhlIGdpdmVuIGtleSBtb2RpZmllcnMgd2lsbCBiZVxuICogYXBwbGllZCB3aGlsZSBkcmFnIGlzIHBlcmZvcm1lZC4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWtleW1vZGlmaWVyZmxhZ3NcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqL1xuXG4vKipcbiAqIFBlcmZvcm0gbG9uZyBwcmVzcyBhbmQgZHJhZyBnZXN0dXJlIG9uIGEgVG91Y2ggQmFyIGVsZW1lbnQgb3IgYnkgYWJzb2x1dGUgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcGFyYW0ge1ByZXNzQW5kRHJhZ09wdGlvbnN9IG9wdHNcbiAqL1xuY29tbWFuZHMubWFjb3NQcmVzc0FuZERyYWcgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1ByZXNzQW5kRHJhZyAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHNvdXJjZVV1aWQgPSBleHRyYWN0VXVpZChvcHRzLCBbJ3NvdXJjZUVsZW1lbnRJZCcsICdzb3VyY2VFbGVtZW50J10pO1xuICBjb25zdCBkZXN0VXVpZCA9IGV4dHJhY3RVdWlkKG9wdHMsIFsnZGVzdGluYXRpb25FbGVtZW50SWQnLCAnZGVzdGluYXRpb25FbGVtZW50J10pO1xuICBjb25zdCB7XG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBkdXJhdGlvbixcbiAgICBrZXlNb2RpZmllckZsYWdzXG4gIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSBzb3VyY2VVdWlkICYmIGRlc3RVdWlkXG4gICAgPyBgL3dkYS9lbGVtZW50LyR7c291cmNlVXVpZH0vcHJlc3NBbmREcmFnYFxuICAgIDogJy93ZGEvcHJlc3NBbmREcmFnJztcbiAgY29uc3QgZGVzdCA9IGRlc3RVdWlkICYmIHV0aWwud3JhcEVsZW1lbnQoZGVzdFV1aWQpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53ZGEucHJveHkuY29tbWFuZCh1cmwsICdQT1NUJywge1xuICAgIHN0YXJ0WCwgc3RhcnRZLFxuICAgIGVuZFgsIGVuZFksXG4gICAgZHVyYXRpb24sXG4gICAgZGVzdCxcbiAgICBrZXlNb2RpZmllckZsYWdzLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHJlc3NBbmREcmFnQW5kSG9sZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gc291cmNlRWxlbWVudElkIHV1aWQgb2YgYSBUb3VjaCBCYXIgZWxlbWVudCB0byBzdGFydCB0aGUgZHJhZyBmcm9tLiBFaXRoZXIgdGhpcyBwcm9wZXJ0eVxuICogYW5kIGBkZXN0aW5hdGlvbkVsZW1lbnRgIG11c3QgYmUgcHJvdmlkZWQgb3IgYHN0YXJ0WGAsIGBzdGFydFlgLCBgZW5kWGAsIGBlbmRZYCBjb29yZGluYXRlc1xuICogbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGRlc3RpbmF0aW9uRWxlbWVudElkIHV1aWQgb2YgYSBUb3VjaCBCYXIgZWxlbWVudCB0byBlbmQgdGhlIGRyYWcgb24uIEVpdGhlciB0aGlzIHByb3BlcnR5XG4gKiBhbmQgYHNvdXJjZUVsZW1lbnRgIG11c3QgYmUgcHJvdmlkZWQgb3IgYHN0YXJ0WGAsIGBzdGFydFlgLCBgZW5kWGAsIGBlbmRZYCBjb29yZGluYXRlc1xuICogbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IHN0YXJ0WCBzdGFydGluZyBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gc3RhcnRZIHN0YXJ0aW5nIFkgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBlbmRYIGVuZGluZyBYIGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gZW5kWSBlbmRpbmcgWSBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkgeyFudW1iZXJ9IGR1cmF0aW9uIGxvbmcgY2xpY2sgZHVyYXRpb24gaW4gZmxvYXQgc2Vjb25kc1xuICogQHByb3BlcnR5IHs/bnVtYmVyfSB2ZWxvY2l0eSBkcmFnZ2luZyB2ZWxvY2l0eSBpbiBwaXhlbHMgcGVyIHNlY29uZC5cbiAqIElmIG5vdCBwcm92aWRlZCB0aGVuIHRoZSBkZWZhdWx0IHZlbG9jaXR5IGlzIHVzZWQuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlnZXN0dXJldmVsb2NpdHlcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0ga2V5TW9kaWZpZXJGbGFncyBpZiBzZXQgdGhlbiB0aGUgZ2l2ZW4ga2V5IG1vZGlmaWVycyB3aWxsIGJlXG4gKiBhcHBsaWVkIHdoaWxlIGRyYWcgaXMgcGVyZm9ybWVkLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3Vpa2V5bW9kaWZpZXJmbGFnc1xuICogZm9yIG1vcmUgZGV0YWlsc1xuICovXG5cbi8qKlxuICogUGVyZm9ybSBwcmVzcywgZHJhZyBhbmQgaG9sZCBnZXN0dXJlIG9uIGEgVG91Y2ggQmFyIGVsZW1lbnQgb3IgYnkgYWJzb2x1dGUgVG91Y2ggQmFyIGNvb3JkaW5hdGVzXG4gKlxuICogQHBhcmFtIHtQcmVzc0FuZERyYWdBbmRIb2xkT3B0aW9uc30gb3B0c1xuICovXG5jb21tYW5kcy5tYWNvc1ByZXNzQW5kRHJhZ0FuZEhvbGQgPSBhc3luYyBmdW5jdGlvbiBtYWNvc1ByZXNzQW5kRHJhZ0FuZEhvbGQgKG9wdHMgPSB7fSkge1xuICBjb25zdCBzb3VyY2VVdWlkID0gZXh0cmFjdFV1aWQob3B0cywgWydzb3VyY2VFbGVtZW50SWQnLCAnc291cmNlRWxlbWVudCddKTtcbiAgY29uc3QgZGVzdFV1aWQgPSBleHRyYWN0VXVpZChvcHRzLCBbJ2Rlc3RpbmF0aW9uRWxlbWVudElkJywgJ2Rlc3RpbmF0aW9uRWxlbWVudCddKTtcbiAgY29uc3Qge1xuICAgIHN0YXJ0WCwgc3RhcnRZLFxuICAgIGVuZFgsIGVuZFksXG4gICAgZHVyYXRpb24sIGhvbGREdXJhdGlvbixcbiAgICB2ZWxvY2l0eSxcbiAgICBrZXlNb2RpZmllckZsYWdzXG4gIH0gPSBvcHRzO1xuICBjb25zdCB1cmwgPSBzb3VyY2VVdWlkICYmIGRlc3RVdWlkXG4gICAgPyBgL3dkYS9lbGVtZW50LyR7c291cmNlVXVpZH0vcHJlc3NBbmREcmFnQW5kSG9sZGBcbiAgICA6ICcvd2RhL3ByZXNzQW5kRHJhZ0FuZEhvbGQnO1xuICBjb25zdCBkZXN0ID0gZGVzdFV1aWQgJiYgdXRpbC53cmFwRWxlbWVudChkZXN0VXVpZCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndkYS5wcm94eS5jb21tYW5kKHVybCwgJ1BPU1QnLCB7XG4gICAgc3RhcnRYLCBzdGFydFksXG4gICAgZW5kWCwgZW5kWSxcbiAgICBkdXJhdGlvbiwgaG9sZER1cmF0aW9uLFxuICAgIHZlbG9jaXR5LFxuICAgIGRlc3QsXG4gICAga2V5TW9kaWZpZXJGbGFncyxcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2dlc3R1cmVzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|