appium-webdriveragent 3.16.0 → 3.17.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/PrivateHeaders/XCTest/XCTestManager_ManagerInterface-Protocol.h +4 -2
- package/PrivateHeaders/XCTest/XCUIScreen.h +4 -3
- package/WebDriverAgent.xcodeproj/project.xcworkspace/xcuserdata/kazuaki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/WebDriverAgent.xcodeproj/project.xcworkspace/xcuserdata/kazuaki.xcuserdatad/WorkspaceSettings.xcsettings +20 -0
- package/WebDriverAgent.xcodeproj/xcuserdata/kazuaki.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +3191 -0
- package/WebDriverAgent.xcodeproj/xcuserdata/{elf.xcuserdatad → kazuaki.xcuserdatad}/xcschemes/xcschememanagement.plist +35 -12
- package/WebDriverAgentLib/Utilities/FBMjpegServer.m +1 -1
- package/WebDriverAgentLib/Utilities/FBScreenshot.h +1 -1
- package/WebDriverAgentLib/Utilities/FBScreenshot.m +3 -3
- package/WebDriverAgentRunner-Runner.app.zip +0 -0
- package/build/index.js +6 -4
- package/build/lib/check-dependencies.js +1 -1
- package/build/lib/constants.js +1 -1
- package/build/lib/utils.js +10 -10
- package/build/lib/webdriveragent.js +2 -2
- package/build/lib/xcodebuild.js +1 -1
- package/package.json +1 -1
- package/PrivateHeaders/.DS_Store +0 -0
- package/WebDriverAgent.xcodeproj/project.xcworkspace/xcuserdata/elf.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/WebDriverAgent.xcodeproj/xcuserdata/elf.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +0 -91
- package/WebDriverAgentLib/.DS_Store +0 -0
- package/WebDriverAgentLib/Utilities/LRUCache/.DS_Store +0 -0
- package/WebDriverAgentLib/Vendor/.DS_Store +0 -0
- package/WebDriverAgentRunner/.DS_Store +0 -0
- package/WebDriverAgentTests/IntegrationApp/Resources/.DS_Store +0 -0
|
@@ -4,55 +4,78 @@
|
|
|
4
4
|
<dict>
|
|
5
5
|
<key>SchemeUserState</key>
|
|
6
6
|
<dict>
|
|
7
|
+
<key>IntegrationApp.xcscheme</key>
|
|
8
|
+
<dict>
|
|
9
|
+
<key>orderHint</key>
|
|
10
|
+
<integer>3</integer>
|
|
11
|
+
</dict>
|
|
7
12
|
<key>IntegrationApp.xcscheme_^#shared#^_</key>
|
|
8
13
|
<dict>
|
|
9
14
|
<key>orderHint</key>
|
|
10
|
-
<integer>
|
|
15
|
+
<integer>5</integer>
|
|
11
16
|
</dict>
|
|
12
17
|
<key>IntegrationTests_1.xcscheme_^#shared#^_</key>
|
|
13
18
|
<dict>
|
|
14
19
|
<key>orderHint</key>
|
|
15
|
-
<integer>
|
|
20
|
+
<integer>6</integer>
|
|
16
21
|
</dict>
|
|
17
22
|
<key>IntegrationTests_2.xcscheme_^#shared#^_</key>
|
|
18
23
|
<dict>
|
|
19
24
|
<key>orderHint</key>
|
|
20
|
-
<integer>
|
|
25
|
+
<integer>7</integer>
|
|
21
26
|
</dict>
|
|
22
27
|
<key>IntegrationTests_3.xcscheme_^#shared#^_</key>
|
|
23
28
|
<dict>
|
|
24
29
|
<key>orderHint</key>
|
|
25
|
-
<integer>
|
|
30
|
+
<integer>8</integer>
|
|
26
31
|
</dict>
|
|
27
|
-
<key>WebDriverAgentLib
|
|
32
|
+
<key>WebDriverAgentLib.xcscheme_^#shared#^_</key>
|
|
28
33
|
<dict>
|
|
29
34
|
<key>orderHint</key>
|
|
30
|
-
<integer>
|
|
35
|
+
<integer>0</integer>
|
|
31
36
|
</dict>
|
|
32
|
-
<key>
|
|
37
|
+
<key>WebDriverAgentLib_tvOS copy.xcscheme_^#shared#^_</key>
|
|
33
38
|
<dict>
|
|
34
39
|
<key>orderHint</key>
|
|
35
|
-
<integer>
|
|
40
|
+
<integer>10</integer>
|
|
36
41
|
</dict>
|
|
37
42
|
<key>WebDriverAgentLib_tvOS.xcscheme_^#shared#^_</key>
|
|
38
43
|
<dict>
|
|
39
44
|
<key>orderHint</key>
|
|
40
|
-
<integer>
|
|
45
|
+
<integer>3</integer>
|
|
46
|
+
</dict>
|
|
47
|
+
<key>WebDriverAgentLib_watchOS.xcscheme_^#shared#^_</key>
|
|
48
|
+
<dict>
|
|
49
|
+
<key>orderHint</key>
|
|
50
|
+
<integer>10</integer>
|
|
41
51
|
</dict>
|
|
42
52
|
<key>WebDriverAgentRunner-nodebug.xcscheme_^#shared#^_</key>
|
|
43
53
|
<dict>
|
|
44
54
|
<key>orderHint</key>
|
|
45
|
-
<integer>
|
|
55
|
+
<integer>2</integer>
|
|
46
56
|
</dict>
|
|
47
57
|
<key>WebDriverAgentRunner.xcscheme_^#shared#^_</key>
|
|
48
58
|
<dict>
|
|
49
59
|
<key>orderHint</key>
|
|
50
|
-
<integer>
|
|
60
|
+
<integer>1</integer>
|
|
51
61
|
</dict>
|
|
52
62
|
<key>WebDriverAgentRunner_tvOS.xcscheme_^#shared#^_</key>
|
|
53
63
|
<dict>
|
|
54
64
|
<key>orderHint</key>
|
|
55
|
-
<integer>
|
|
65
|
+
<integer>4</integer>
|
|
66
|
+
</dict>
|
|
67
|
+
<key>WebDriverAgentRunner_watchOS.xcscheme_^#shared#^_</key>
|
|
68
|
+
<dict>
|
|
69
|
+
<key>orderHint</key>
|
|
70
|
+
<integer>9</integer>
|
|
71
|
+
</dict>
|
|
72
|
+
</dict>
|
|
73
|
+
<key>SuppressBuildableAutocreation</key>
|
|
74
|
+
<dict>
|
|
75
|
+
<key>72F9A2AB26B5121A00A27636</key>
|
|
76
|
+
<dict>
|
|
77
|
+
<key>primary</key>
|
|
78
|
+
<true/>
|
|
56
79
|
</dict>
|
|
57
80
|
</dict>
|
|
58
81
|
</dict>
|
|
@@ -33,7 +33,7 @@ static const char *QUEUE_NAME = "JPEG Screenshots Provider Queue";
|
|
|
33
33
|
@property (nonatomic, readonly) NSMutableArray<GCDAsyncSocket *> *listeningClients;
|
|
34
34
|
@property (nonatomic, readonly) mach_timebase_info_data_t timebaseInfo;
|
|
35
35
|
@property (nonatomic, readonly) FBImageIOScaler *imageScaler;
|
|
36
|
-
@property (nonatomic, readonly)
|
|
36
|
+
@property (nonatomic, readonly) long long mainScreenID;
|
|
37
37
|
|
|
38
38
|
@end
|
|
39
39
|
|
|
@@ -51,7 +51,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
51
51
|
@param error If there is an error, upon return contains an NSError object that describes the problem.
|
|
52
52
|
@return Device screenshot as PNG- or JPG-encoded data or nil in case of failure
|
|
53
53
|
*/
|
|
54
|
-
+ (nullable NSData *)takeInOriginalResolutionWithScreenID:(
|
|
54
|
+
+ (nullable NSData *)takeInOriginalResolutionWithScreenID:(long long)screenID
|
|
55
55
|
compressionQuality:(CGFloat)compressionQuality
|
|
56
56
|
uti:(NSString *)uti
|
|
57
57
|
timeout:(NSTimeInterval)timeout
|
|
@@ -123,7 +123,7 @@ NSString *formatTimeInterval(NSTimeInterval interval) {
|
|
|
123
123
|
return screenshotData;
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
-
+ (NSData *)takeWithScreenID:(
|
|
126
|
+
+ (NSData *)takeWithScreenID:(long long)screenID
|
|
127
127
|
scale:(CGFloat)scale
|
|
128
128
|
compressionQuality:(CGFloat)compressionQuality
|
|
129
129
|
rect:(CGRect)rect
|
|
@@ -146,7 +146,7 @@ NSString *formatTimeInterval(NSTimeInterval interval) {
|
|
|
146
146
|
error:error];
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
+ (NSData *)takeInOriginalResolutionWithScreenID:(
|
|
149
|
+
+ (NSData *)takeInOriginalResolutionWithScreenID:(long long)screenID
|
|
150
150
|
compressionQuality:(CGFloat)compressionQuality
|
|
151
151
|
uti:(NSString *)uti
|
|
152
152
|
timeout:(NSTimeInterval)timeout
|
|
@@ -254,7 +254,7 @@ NSString *formatTimeInterval(NSTimeInterval interval) {
|
|
|
254
254
|
return imageEncoding;
|
|
255
255
|
}
|
|
256
256
|
|
|
257
|
-
+ (nullable id)screenshotRequestWithScreenID:(
|
|
257
|
+
+ (nullable id)screenshotRequestWithScreenID:(long long)screenID
|
|
258
258
|
rect:(struct CGRect)rect
|
|
259
259
|
uti:(NSString *)uti
|
|
260
260
|
compressionQuality:(CGFloat)compressionQuality
|
|
Binary file
|
package/build/index.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
8
|
-
exports.
|
|
6
|
+
exports.resetTestProcesses = exports.checkForDependencies = exports.bundleWDASim = exports.WebDriverAgent = exports.WDA_RUNNER_BUNDLE_ID = exports.WDA_BUNDLE_ID = exports.WDA_BASE_URL = exports.PROJECT_FILE = exports.NoSessionProxy = exports.BOOTSTRAP_PATH = void 0;
|
|
9
7
|
|
|
10
8
|
require("source-map-support/register");
|
|
11
9
|
|
|
@@ -21,6 +19,10 @@ var utils = _interopRequireWildcard(require("./lib/utils"));
|
|
|
21
19
|
|
|
22
20
|
var _asyncbox = require("asyncbox");
|
|
23
21
|
|
|
22
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
23
|
+
|
|
24
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
25
|
+
|
|
24
26
|
const {
|
|
25
27
|
checkForDependencies,
|
|
26
28
|
bundleWDASim
|
|
@@ -57,4 +59,4 @@ if (require.main === module) {
|
|
|
57
59
|
}require('source-map-support').install();
|
|
58
60
|
|
|
59
61
|
|
|
60
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImNoZWNrRm9yRGVwZW5kZW5jaWVzIiwiYnVuZGxlV0RBU2ltIiwiZGVwZW5kZW5jaWVzIiwiTm9TZXNzaW9uUHJveHkiLCJwcm94aWVzIiwiV2ViRHJpdmVyQWdlbnQiLCJkcml2ZXIiLCJXREFfQlVORExFX0lEIiwiQk9PVFNUUkFQX1BBVEgiLCJXREFfQkFTRV9VUkwiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIlBST0pFQ1RfRklMRSIsImNvbnN0YW50cyIsInJlc2V0VGVzdFByb2Nlc3NlcyIsInV0aWxzIiwicmVxdWlyZSIsIm1haW4iLCJtb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFHQSxNQUFNO0FBQUVBLEVBQUFBLG9CQUFGO0FBQXdCQyxFQUFBQTtBQUF4QixJQUF5Q0MsWUFBL0M7OztBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFxQkMsT0FBM0I7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQXFCQyxNQUEzQjs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBLGFBQUY7QUFBaUJDLEVBQUFBLGNBQWpCO0FBQWlDQyxFQUFBQSxZQUFqQztBQUErQ0MsRUFBQUEsb0JBQS9DO0FBQXFFQyxFQUFBQTtBQUFyRSxJQUFzRkMsU0FBNUY7Ozs7OztBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUF5QkMsS0FBL0I7OztBQUlBLElBQUlDLE9BQU8sQ0FBQ0MsSUFBUixLQUFpQkMsTUFBckIsRUFBNkI7QUFDM0IsMEJBQVNqQixvQkFBVDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZGVwZW5kZW5jaWVzIGZyb20gJy4vbGliL2NoZWNrLWRlcGVuZGVuY2llcyc7XG5pbXBvcnQgKiBhcyBwcm94aWVzIGZyb20gJy4vbGliL25vLXNlc3Npb24tcHJveHknO1xuaW1wb3J0ICogYXMgZHJpdmVyIGZyb20gJy4vbGliL3dlYmRyaXZlcmFnZW50JztcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgYXN5bmNpZnkgfSBmcm9tICdhc3luY2JveCc7XG5cblxuY29uc3QgeyBjaGVja0ZvckRlcGVuZGVuY2llcywgYnVuZGxlV0RBU2ltIH0gPSBkZXBlbmRlbmNpZXM7XG5jb25zdCB7IE5vU2Vzc2lvblByb3h5IH0gPSBwcm94aWVzO1xuY29uc3QgeyBXZWJEcml2ZXJBZ2VudCB9ID0gZHJpdmVyO1xuY29uc3QgeyBXREFfQlVORExFX0lELCBCT09UU1RSQVBfUEFUSCwgV0RBX0JBU0VfVVJMLCBXREFfUlVOTkVSX0JVTkRMRV9JRCwgUFJPSkVDVF9GSUxFIH0gPSBjb25zdGFudHM7XG5jb25zdCB7IHJlc2V0VGVzdFByb2Nlc3NlcyB9ID0gdXRpbHM7XG5cblxuLy8gV2hlbiBydW4gYXMgYSBjb21tYW5kIGxpbmUgdXRpbGl0eSwgdGhpcyBzaG91bGQgY2hlY2sgZm9yIHRoZSBkZXBlbmRlbmNpZXNcbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBhc3luY2lmeShjaGVja0ZvckRlcGVuZGVuY2llcyk7XG59XG5cbmV4cG9ydCB7XG4gIFdlYkRyaXZlckFnZW50LFxuICBOb1Nlc3Npb25Qcm94eSxcbiAgY2hlY2tGb3JEZXBlbmRlbmNpZXMsIGJ1bmRsZVdEQVNpbSxcbiAgcmVzZXRUZXN0UHJvY2Vzc2VzLFxuICBCT09UU1RSQVBfUEFUSCwgV0RBX0JVTkRMRV9JRCxcbiAgV0RBX1JVTk5FUl9CVU5ETEVfSUQsIFBST0pFQ1RfRklMRSxcbiAgV0RBX0JBU0VfVVJMLFxufTtcbiJdLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi4ifQ==
|
|
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.checkForDependencies = checkForDependencies;
|
|
9
8
|
exports.bundleWDASim = bundleWDASim;
|
|
9
|
+
exports.checkForDependencies = checkForDependencies;
|
|
10
10
|
|
|
11
11
|
require("source-map-support/register");
|
|
12
12
|
|
package/build/lib/constants.js
CHANGED
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.WDA_UPGRADE_TIMESTAMP_PATH = exports.WDA_SCRIPTS_ROOT = exports.
|
|
8
|
+
exports.WDA_UPGRADE_TIMESTAMP_PATH = exports.WDA_SCRIPTS_ROOT = exports.WDA_SCHEME = exports.WDA_RUNNER_BUNDLE_ID = exports.WDA_RUNNER_APP = exports.WDA_PROJECT = exports.WDA_BUNDLE_ID = exports.WDA_BASE_URL = exports.SDK_SIMULATOR = exports.SDK_DEVICE = exports.PROJECT_FILE = exports.PLATFORM_NAME_TVOS = exports.PLATFORM_NAME_IOS = exports.BOOTSTRAP_PATH = void 0;
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
package/build/lib/utils.js
CHANGED
|
@@ -5,21 +5,21 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
9
|
-
exports.resetProjectFile = resetProjectFile;
|
|
10
|
-
exports.setRealDeviceSecurity = setRealDeviceSecurity;
|
|
8
|
+
exports.generateXcodeConfigFile = generateXcodeConfigFile;
|
|
11
9
|
exports.getAdditionalRunContent = getAdditionalRunContent;
|
|
10
|
+
exports.getPIDsListeningOnPort = getPIDsListeningOnPort;
|
|
11
|
+
exports.getWDAUpgradeTimestamp = getWDAUpgradeTimestamp;
|
|
12
12
|
exports.getXctestrunFileName = getXctestrunFileName;
|
|
13
|
-
exports.generateXcodeConfigFile = generateXcodeConfigFile;
|
|
14
|
-
exports.setXctestrunFile = setXctestrunFile;
|
|
15
13
|
exports.getXctestrunFilePath = getXctestrunFilePath;
|
|
14
|
+
exports.isTvOS = isTvOS;
|
|
15
|
+
exports.killAppUsingPattern = killAppUsingPattern;
|
|
16
16
|
exports.killProcess = killProcess;
|
|
17
17
|
exports.randomInt = randomInt;
|
|
18
|
-
exports.
|
|
18
|
+
exports.resetProjectFile = resetProjectFile;
|
|
19
19
|
exports.resetTestProcesses = resetTestProcesses;
|
|
20
|
-
exports.
|
|
21
|
-
exports.
|
|
22
|
-
exports.
|
|
20
|
+
exports.setRealDeviceSecurity = setRealDeviceSecurity;
|
|
21
|
+
exports.setXctestrunFile = setXctestrunFile;
|
|
22
|
+
exports.updateProjectFile = updateProjectFile;
|
|
23
23
|
|
|
24
24
|
require("source-map-support/register");
|
|
25
25
|
|
|
@@ -314,4 +314,4 @@ async function getPIDsListeningOnPort(port, filteringFunc = null) {
|
|
|
314
314
|
}require('source-map-support').install();
|
|
315
315
|
|
|
316
316
|
|
|
317
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJST09UX0RJUiIsInBhdGgiLCJiYXNlbmFtZSIsIl9fZGlybmFtZSIsInJlc29sdmUiLCJwcm9jZXNzIiwiZW52IiwiTk9fUFJFQ09NUElMRSIsIlBST0pFQ1RfRklMRSIsImdldFBJRHNVc2luZ1BhdHRlcm4iLCJwYXR0ZXJuIiwiYXJncyIsInN0ZG91dCIsInNwbGl0IiwibWFwIiwieCIsInBhcnNlSW50IiwiZmlsdGVyIiwiXyIsImlzSW50ZWdlciIsImVyciIsImxvZyIsImRlYnVnIiwiam9pbiIsImNvZGUiLCJraWxsQXBwVXNpbmdQYXR0ZXJuIiwicGdyZXBQYXR0ZXJuIiwic2lnbmFscyIsInNpZ25hbCIsIm1hdGNoZWRQaWRzIiwiaXNFbXB0eSIsIm1lc3NhZ2UiLCJsYXN0IiwicGlkQ2hlY2tQcm9taXNlcyIsInBpZCIsInRoZW4iLCJjYXRjaCIsIkIiLCJhbGwiLCJldmVyeSIsIndhaXRNcyIsImludGVydmFsTXMiLCJpZ24iLCJpc1R2T1MiLCJwbGF0Zm9ybU5hbWUiLCJ0b0xvd2VyIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwicmVwbGFjZUluRmlsZSIsImZpbGUiLCJmaW5kIiwicmVwbGFjZSIsImNvbnRlbnRzIiwiZnMiLCJyZWFkRmlsZSIsIm5ld0NvbnRlbnRzIiwid3JpdGVGaWxlIiwidXBkYXRlUHJvamVjdEZpbGUiLCJhZ2VudFBhdGgiLCJuZXdCdW5kbGVJZCIsInByb2plY3RGaWxlUGF0aCIsImNvcHlGaWxlIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJ3YXJuIiwicmVzZXRQcm9qZWN0RmlsZSIsImV4aXN0cyIsIm12Iiwic2V0UmVhbERldmljZVNlY3VyaXR5Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImdlbmVyYXRlWGNvZGVDb25maWdGaWxlIiwib3JnSWQiLCJzaWduaW5nSWQiLCJ4Y2NvbmZpZ1BhdGgiLCJ0ZW1wRGlyIiwic2V0WGN0ZXN0cnVuRmlsZSIsImRldmljZUluZm8iLCJzZGtWZXJzaW9uIiwiYm9vdHN0cmFwUGF0aCIsIndkYVJlbW90ZVBvcnQiLCJ4Y3Rlc3RydW5GaWxlUGF0aCIsImdldFhjdGVzdHJ1bkZpbGVQYXRoIiwieGN0ZXN0UnVuQ29udGVudCIsInBsaXN0IiwicGFyc2VQbGlzdEZpbGUiLCJ1cGRhdGVXREFQb3J0IiwiZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQiLCJuZXdYY3Rlc3RSdW5Db250ZW50IiwibWVyZ2UiLCJ1cGRhdGVQbGlzdEZpbGUiLCJydW5uZXIiLCJFbnZpcm9ubWVudFZhcmlhYmxlcyIsIlVTRV9QT1JUIiwic2RrQmFzZWQiLCJ1ZGlkIiwicGxhdGZvcm1CYXNlZCIsInBsYXRmb3JtVmVyc2lvbiIsImZpbGVQYXRoIiwidmVyc2lvbiIsImluZm8iLCJvcmlnaW5hbFhjdGVzdHJ1bkZpbGUiLCJnZXRYY3Rlc3RydW5GaWxlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJpc1JlYWxEZXZpY2UiLCJraWxsUHJvY2VzcyIsIm5hbWUiLCJwcm9jIiwiaXNSdW5uaW5nIiwic3RvcCIsImluY2x1ZGVzIiwicmFuZG9tSW50IiwibG93IiwiaGlnaCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImdldFdEQVVwZ3JhZGVUaW1lc3RhbXAiLCJwYWNrYWdlTWFuaWZlc3QiLCJtdGltZSIsInN0YXQiLCJnZXRUaW1lIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwiaXNTaW11bGF0b3IiLCJwcm9jZXNzUGF0dGVybnMiLCJwdXNoIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInBvcnQiLCJmaWx0ZXJpbmdGdW5jIiwicmVzdWx0IiwidHJpbSIsImUiLCJzdGRlcnIiLCJpc0Z1bmN0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHQyxjQUFLQyxR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LENBQUMsQ0FBQzNHLElBQUYsS0FBVyxDQUFmLEVBQWtCO0FBRWhCLGVBQU8sS0FBUDtBQUNEOztBQUNELFlBQU0yRyxDQUFOO0FBQ0Q7O0FBQ0QsV0FBTyxNQUFNSCxhQUFhLENBQUNwSCxNQUFELENBQTFCO0FBQ0QsR0FaWSxDQUFiO0FBYUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgdGVtcERpciwgcGxpc3QgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgV0RBX1JVTk5FUl9CVU5ETEVfSUQsIFBMQVRGT1JNX05BTUVfVFZPUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5cbmNvbnN0IFJPT1RfRElSID0gcGF0aC5iYXNlbmFtZShfX2Rpcm5hbWUpID09PSAnbGliJ1xuICA/IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsIHByb2Nlc3MuZW52Lk5PX1BSRUNPTVBJTEUgPyAnLi4nIDogJy4uLy4uJylcbiAgOiBfX2Rpcm5hbWU7XG5jb25zdCBQUk9KRUNUX0ZJTEUgPSAncHJvamVjdC5wYnhwcm9qJztcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UElEc1VzaW5nUGF0dGVybiAocGF0dGVybikge1xuICBjb25zdCBhcmdzID0gW1xuICAgICctaWYnLCAvLyBjYXNlIGluc2Vuc2l0aXZlLCBmdWxsIGNtZGxpbmUgbWF0Y2hcbiAgICBwYXR0ZXJuLFxuICBdO1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygncGdyZXAnLCBhcmdzKTtcbiAgICByZXR1cm4gc3Rkb3V0LnNwbGl0KC9cXHMrLylcbiAgICAgIC5tYXAoKHgpID0+IHBhcnNlSW50KHgsIDEwKSlcbiAgICAgIC5maWx0ZXIoXy5pc0ludGVnZXIpXG4gICAgICAubWFwKCh4KSA9PiBgJHt4fWApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYCdwZ3JlcCAke2FyZ3Muam9pbignICcpfScgZGlkbid0IGRldGVjdCBhbnkgbWF0Y2hpbmcgcHJvY2Vzc2VzLiBSZXR1cm4gY29kZTogJHtlcnIuY29kZX1gKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24ga2lsbEFwcFVzaW5nUGF0dGVybiAocGdyZXBQYXR0ZXJuKSB7XG4gIGNvbnN0IHNpZ25hbHMgPSBbMiwgMTUsIDldO1xuICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBzaWduYWxzKSB7XG4gICAgY29uc3QgbWF0Y2hlZFBpZHMgPSBhd2FpdCBnZXRQSURzVXNpbmdQYXR0ZXJuKHBncmVwUGF0dGVybik7XG4gICAgaWYgKF8uaXNFbXB0eShtYXRjaGVkUGlkcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYXJncyA9IFtgLSR7c2lnbmFsfWAsIC4uLm1hdGNoZWRQaWRzXTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYygna2lsbCcsIGFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmRlYnVnKGBraWxsICR7YXJncy5qb2luKCcgJyl9IC0+ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGlmIChzaWduYWwgPT09IF8ubGFzdChzaWduYWxzKSkge1xuICAgICAgLy8gdGhlcmUgaXMgbm8gbmVlZCB0byB3YWl0IGFmdGVyIFNJR0tJTExcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwaWRDaGVja1Byb21pc2VzID0gbWF0Y2hlZFBpZHNcbiAgICAgICAgICAubWFwKChwaWQpID0+IGV4ZWMoJ2tpbGwnLCBbJy0wJywgcGlkXSlcbiAgICAgICAgICAgIC8vIHRoZSBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlXG4gICAgICAgICAgICAudGhlbigoKSA9PiBmYWxzZSlcbiAgICAgICAgICAgIC8vIHRoZSBwcm9jZXNzIGlzIGRlYWRcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB0cnVlKVxuICAgICAgICAgICk7XG4gICAgICAgIHJldHVybiAoYXdhaXQgQi5hbGwocGlkQ2hlY2tQcm9taXNlcykpXG4gICAgICAgICAgLmV2ZXJ5KCh4KSA9PiB4ID09PSB0cnVlKTtcbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiAxMDAwLFxuICAgICAgICBpbnRlcnZhbE1zOiAxMDAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIC8vIHRyeSB0aGUgbmV4dCBzaWduYWxcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm1OYW1lIGlzIHR2T1NcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbGF0Zm9ybU5hbWUgVGhlIG5hbWUgb2YgdGhlIHBsYXRvcm1cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm1OYW1lIGlzIHR2T1NcbiAqL1xuZnVuY3Rpb24gaXNUdk9TIChwbGF0Zm9ybU5hbWUpIHtcbiAgcmV0dXJuIF8udG9Mb3dlcihwbGF0Zm9ybU5hbWUpID09PSBfLnRvTG93ZXIoUExBVEZPUk1fTkFNRV9UVk9TKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUluRmlsZSAoZmlsZSwgZmluZCwgcmVwbGFjZSkge1xuICBsZXQgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlLCAndXRmOCcpO1xuXG4gIGxldCBuZXdDb250ZW50cyA9IGNvbnRlbnRzLnJlcGxhY2UoZmluZCwgcmVwbGFjZSk7XG4gIGlmIChuZXdDb250ZW50cyAhPT0gY29udGVudHMpIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZSwgbmV3Q29udGVudHMsICd1dGY4Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBVcGRhdGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgcHJvamVjdCBidW5kbGUgSUQgd2l0aCBuZXdCdW5kbGVJZC5cbiAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgcHJvamVjdCBmaWxlIGlzIGluIHRoZSBjb3JyZWN0IHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFnZW50UGF0aCAtIFBhdGggdG8gdGhlIC54Y29kZXByb2ogZGlyZWN0b3J5LlxuICogQHBhcmFtIHtzdHJpbmd9IG5ld0J1bmRsZUlkIHRoZSBuZXcgYnVuZGxlIElEIHVzZWQgdG8gdXBkYXRlLlxuICovXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVQcm9qZWN0RmlsZSAoYWdlbnRQYXRoLCBuZXdCdW5kbGVJZCkge1xuICBsZXQgcHJvamVjdEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGFnZW50UGF0aCwgUFJPSkVDVF9GSUxFKTtcbiAgdHJ5IHtcbiAgICAvLyBBc3N1bWluZyBwcm9qZWN0RmlsZVBhdGggaXMgaW4gdGhlIGNvcnJlY3Qgc3RhdGUsIGNyZWF0ZSAub2xkIGZyb20gcHJvamVjdEZpbGVQYXRoXG4gICAgYXdhaXQgZnMuY29weUZpbGUocHJvamVjdEZpbGVQYXRoLCBgJHtwcm9qZWN0RmlsZVBhdGh9Lm9sZGApO1xuICAgIGF3YWl0IHJlcGxhY2VJbkZpbGUocHJvamVjdEZpbGVQYXRoLCBuZXcgUmVnRXhwKF8uZXNjYXBlUmVnRXhwKFdEQV9SVU5ORVJfQlVORExFX0lEKSwgJ2cnKSwgbmV3QnVuZGxlSWQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgbG9nLmRlYnVnKGBTdWNjZXNzZnVsbHkgdXBkYXRlZCAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGJ1bmRsZSBpZCAnJHtuZXdCdW5kbGVJZH0nYCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3IgdXBkYXRpbmcgcHJvamVjdCBmaWxlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGxvZy53YXJuKGBVbmFibGUgdG8gdXBkYXRlIHByb2plY3QgZmlsZSAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGAgK1xuICAgICAgYGJ1bmRsZSBpZCAnJHtuZXdCdW5kbGVJZH0nLiBXZWJEcml2ZXJBZ2VudCBtYXkgbm90IHN0YXJ0YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldCBXZWJEcml2ZXJBZ2VudFJ1bm5lciBwcm9qZWN0IGJ1bmRsZSBJRCB0byBjb3JyZWN0IHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFnZW50UGF0aCAtIFBhdGggdG8gdGhlIC54Y29kZXByb2ogZGlyZWN0b3J5LlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNldFByb2plY3RGaWxlIChhZ2VudFBhdGgpIHtcbiAgY29uc3QgcHJvamVjdEZpbGVQYXRoID0gcGF0aC5qb2luKGFnZW50UGF0aCwgUFJPSkVDVF9GSUxFKTtcbiAgdHJ5IHtcbiAgICAvLyByZXN0b3JlIHByb2plY3RGaWxlUGF0aCBmcm9tIC5vbGQgZmlsZVxuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCkpIHtcbiAgICAgIHJldHVybjsgLy8gbm8gbmVlZCB0byByZXNldFxuICAgIH1cbiAgICBhd2FpdCBmcy5tdihgJHtwcm9qZWN0RmlsZVBhdGh9Lm9sZGAsIHByb2plY3RGaWxlUGF0aCk7XG4gICAgbG9nLmRlYnVnKGBTdWNjZXNzZnVsbHkgcmVzZXQgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBidW5kbGUgaWQgJyR7V0RBX1JVTk5FUl9CVU5ETEVfSUR9J2ApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYEVycm9yIHJlc2V0dGluZyBwcm9qZWN0IGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byByZXNldCBwcm9qZWN0IGZpbGUgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBgICtcbiAgICAgIGBidW5kbGUgaWQgJyR7V0RBX1JVTk5FUl9CVU5ETEVfSUR9Jy4gV2ViRHJpdmVyQWdlbnQgaGFzIGJlZW4gYCArXG4gICAgICBgbW9kaWZpZWQgYW5kIG5vdCByZXR1cm5lZCB0byB0aGUgb3JpZ2luYWwgc3RhdGUuYCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0UmVhbERldmljZVNlY3VyaXR5IChrZXljaGFpblBhdGgsIGtleWNoYWluUGFzc3dvcmQpIHtcbiAgbG9nLmRlYnVnKCdTZXR0aW5nIHNlY3VyaXR5IGZvciBpT1MgZGV2aWNlJyk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWyctdicsICdsaXN0LWtleWNoYWlucycsICctcycsIGtleWNoYWluUGF0aF0pO1xuICBhd2FpdCBleGVjKCdzZWN1cml0eScsIFsnLXYnLCAndW5sb2NrLWtleWNoYWluJywgJy1wJywga2V5Y2hhaW5QYXNzd29yZCwga2V5Y2hhaW5QYXRoXSk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWydzZXQta2V5Y2hhaW4tc2V0dGluZ3MnLCAnLXQnLCAnMzYwMCcsICctbCcsIGtleWNoYWluUGF0aF0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSAob3JnSWQsIHNpZ25pbmdJZCkge1xuICBsb2cuZGVidWcoYEdlbmVyYXRpbmcgeGNvZGUgY29uZmlnIGZpbGUgZm9yIG9yZ0lkICcke29yZ0lkfScgYW5kIHNpZ25pbmdJZCBgICtcbiAgICAgICAgICAgIGAnJHtzaWduaW5nSWR9J2ApO1xuICBjb25zdCBjb250ZW50cyA9IGBERVZFTE9QTUVOVF9URUFNID0gJHtvcmdJZH1cbkNPREVfU0lHTl9JREVOVElUWSA9ICR7c2lnbmluZ0lkfVxuYDtcbiAgY29uc3QgeGNjb25maWdQYXRoID0gYXdhaXQgdGVtcERpci5wYXRoKCdhcHBpdW0tdGVtcC54Y2NvbmZpZycpO1xuICBsb2cuZGVidWcoYFdyaXRpbmcgeGNvZGUgY29uZmlnIGZpbGUgdG8gJHt4Y2NvbmZpZ1BhdGh9YCk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZSh4Y2NvbmZpZ1BhdGgsIGNvbnRlbnRzLCAndXRmOCcpO1xuICByZXR1cm4geGNjb25maWdQYXRoO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICogQHR5cGVkZWYge09iamVjdH0gRGV2aWNlSW5mb1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGlzUmVhbERldmljZSAtIEVxdWFscyB0byB0cnVlIGlmIHRoZSBjdXJyZW50IGRldmljZSBpcyBhIHJlYWwgZGV2aWNlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdWRpZCAtIFRoZSBkZXZpY2UgVURJRC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF0Zm9ybVZlcnNpb24gLSBUaGUgcGxhdGZvcm0gdmVyc2lvbiBvZiBPUy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwbGF0Zm9ybU5hbWUgLSBUaGUgcGxhdGZvcm0gbmFtZSBvZiBpT1MsIHR2T1NcbiovXG4vKipcbiAqIENyZWF0ZXMgeGN0ZXN0cnVuIGZpbGUgcGVyIGRldmljZSAmIHBsYXRmb3JtIHZlcnNpb24uXG4gKiBXZSBleHBlY3RzIHRvIGhhdmUgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lb3Mke3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS1hcm02NC54Y3Rlc3RydW4gZm9yIHJlYWwgZGV2aWNlXG4gKiBhbmQgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0teDg2XzY0LnhjdGVzdHJ1biBmb3Igc2ltdWxhdG9yIGxvY2F0ZWQgQGJvb3RzdHJhcFBhdGhcbiAqIE5ld2VyIFhjb2RlIChYY29kZSAxMC4wIGF0IGxlYXN0KSBnZW5lcmF0ZSB4Y3Rlc3RydW4gZmlsZSBmb2xsb3dpbmcgc2RrVmVyc2lvbi5cbiAqIGUuZy4gWGNvZGUgd2hpY2ggaGFzIGlPUyBTREsgVmVyc2lvbiAxMi4yIGdlbmVyYXRlIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZXNpbXVsYXRvci4yLXg4Nl82NC54Y3Rlc3RydW5cbiAqICAgICAgZXZlbiBpZiB0aGUgY2FwIGhhcyBwbGF0Zm9ybSB2ZXJzaW9uIDExLjRcbiAqXG4gKiBAcGFyYW0ge0RldmljZUluZm99IGRldmljZUluZm9cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZGtWZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHBhcmFtIHtzdHJpbmd9IGJvb3RzdHJhcFBhdGggLSBUaGUgZm9sZGVyIHBhdGggY29udGFpbmluZyB4Y3Rlc3RydW4gZmlsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB3ZGFSZW1vdGVQb3J0IC0gVGhlIHJlbW90ZSBwb3J0IFdEQSBpcyBsaXN0ZW5pbmcgb24uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJldHVybnMgeGN0ZXN0cnVuRmlsZVBhdGggZm9yIGdpdmVuIGRldmljZVxuICogQHRocm93cyBpZiBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVvcyR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LWFybTY0LnhjdGVzdHJ1biBmb3IgcmVhbCBkZXZpY2VcbiAqIG9yIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZXNpbXVsYXRvciR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LXg4Nl82NC54Y3Rlc3RydW4gZm9yIHNpbXVsYXRvciBpcyBub3QgZm91bmQgQGJvb3RzdHJhcFBhdGgsXG4gKiB0aGVuIGl0IHdpbGwgdGhyb3cgZmlsZSBub3QgZm91bmQgZXhjZXB0aW9uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNldFhjdGVzdHJ1bkZpbGUgKGRldmljZUluZm8sIHNka1ZlcnNpb24sIGJvb3RzdHJhcFBhdGgsIHdkYVJlbW90ZVBvcnQpIHtcbiAgY29uc3QgeGN0ZXN0cnVuRmlsZVBhdGggPSBhd2FpdCBnZXRYY3Rlc3RydW5GaWxlUGF0aChkZXZpY2VJbmZvLCBzZGtWZXJzaW9uLCBib290c3RyYXBQYXRoKTtcbiAgY29uc3QgeGN0ZXN0UnVuQ29udGVudCA9IGF3YWl0IHBsaXN0LnBhcnNlUGxpc3RGaWxlKHhjdGVzdHJ1bkZpbGVQYXRoKTtcbiAgY29uc3QgdXBkYXRlV0RBUG9ydCA9IGdldEFkZGl0aW9uYWxSdW5Db250ZW50KGRldmljZUluZm8ucGxhdGZvcm1OYW1lLCB3ZGFSZW1vdGVQb3J0KTtcbiAgY29uc3QgbmV3WGN0ZXN0UnVuQ29udGVudCA9IF8ubWVyZ2UoeGN0ZXN0UnVuQ29udGVudCwgdXBkYXRlV0RBUG9ydCk7XG4gIGF3YWl0IHBsaXN0LnVwZGF0ZVBsaXN0RmlsZSh4Y3Rlc3RydW5GaWxlUGF0aCwgbmV3WGN0ZXN0UnVuQ29udGVudCwgdHJ1ZSk7XG5cbiAgcmV0dXJuIHhjdGVzdHJ1bkZpbGVQYXRoO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgV0RBIG9iamVjdCB3aGljaCBhcHBlbmRzIGV4aXN0aW5nIHhjdGVzdCBydW5uZXIgY29udGVudFxuICogQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwbGF0Zm9ybVxuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcmV0dXJuIHtvYmplY3R9IHJldHVybnMgYSBydW5uZXIgb2JqZWN0IHdoaWNoIGhhcyBVU0VfUE9SVFxuICovXG5mdW5jdGlvbiBnZXRBZGRpdGlvbmFsUnVuQ29udGVudCAocGxhdGZvcm1OYW1lLCB3ZGFSZW1vdGVQb3J0KSB7XG4gIGNvbnN0IHJ1bm5lciA9IGBXZWJEcml2ZXJBZ2VudFJ1bm5lciR7aXNUdk9TKHBsYXRmb3JtTmFtZSkgPyAnX3R2T1MnIDogJyd9YDtcblxuICByZXR1cm4ge1xuICAgIFtydW5uZXJdOiB7XG4gICAgICBFbnZpcm9ubWVudFZhcmlhYmxlczoge1xuICAgICAgICAvLyBVU0VfUE9SVCBtdXN0IGJlICdzdHJpbmcnXG4gICAgICAgIFVTRV9QT1JUOiBgJHt3ZGFSZW1vdGVQb3J0fWBcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwYXRoIG9mIHhjdGVzdHJ1biBpZiBpdCBleGlzdHNcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHNka1ZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9vdHN0cmFwUGF0aCAtIFRoZSBmb2xkZXIgcGF0aCBjb250YWluaW5nIHhjdGVzdHJ1biBmaWxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRYY3Rlc3RydW5GaWxlUGF0aCAoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCkge1xuICAvLyBGaXJzdCB0cnkgdGhlIFNESyBwYXRoLCBmb3IgWGNvZGUgMTAgKGF0IGxlYXN0KVxuICBjb25zdCBzZGtCYXNlZCA9IFtcbiAgICBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgYCR7ZGV2aWNlSW5mby51ZGlkfV8ke3Nka1ZlcnNpb259LnhjdGVzdHJ1bmApLFxuICAgIHNka1ZlcnNpb24sXG4gIF07XG4gIC8vIE5leHQgdHJ5IFBsYXRmb3JtIHBhdGgsIGZvciBlYXJsaWVyIFhjb2RlIHZlcnNpb25zXG4gIGNvbnN0IHBsYXRmb3JtQmFzZWQgPSBbXG4gICAgcGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGAke2RldmljZUluZm8udWRpZH1fJHtkZXZpY2VJbmZvLnBsYXRmb3JtVmVyc2lvbn0ueGN0ZXN0cnVuYCksXG4gICAgZGV2aWNlSW5mby5wbGF0Zm9ybVZlcnNpb24sXG4gIF07XG5cbiAgZm9yIChjb25zdCBbZmlsZVBhdGgsIHZlcnNpb25dIG9mIFtzZGtCYXNlZCwgcGxhdGZvcm1CYXNlZF0pIHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgbG9nLmluZm8oYFVzaW5nICcke2ZpbGVQYXRofScgYXMgeGN0ZXN0cnVuIGZpbGVgKTtcbiAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWxYY3Rlc3RydW5GaWxlID0gcGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGdldFhjdGVzdHJ1bkZpbGVOYW1lKGRldmljZUluZm8sIHZlcnNpb24pKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKG9yaWdpbmFsWGN0ZXN0cnVuRmlsZSkpIHtcbiAgICAgIC8vIElmIHRoaXMgaXMgZmlyc3QgdGltZSBydW4gZm9yIGdpdmVuIGRldmljZSwgdGhlbiBmaXJzdCBnZW5lcmF0ZSB4Y3Rlc3RydW4gZmlsZSBmb3IgZGV2aWNlLlxuICAgICAgLy8gV2UgbmVlZCB0byBoYXZlIGEgeGN0ZXN0cnVuIGZpbGUgKipwZXIgZGV2aWNlKiogYmVjYXVzZSB3ZSBjYW50IG5vdCBoYXZlIHNhbWUgd2RhIHBvcnQgZm9yIGFsbCBkZXZpY2VzLlxuICAgICAgYXdhaXQgZnMuY29weUZpbGUob3JpZ2luYWxYY3Rlc3RydW5GaWxlLCBmaWxlUGF0aCk7XG4gICAgICBsb2cuaW5mbyhgVXNpbmcgJyR7ZmlsZVBhdGh9JyBhcyB4Y3Rlc3RydW4gZmlsZSBjb3BpZWQgYnkgJyR7b3JpZ2luYWxYY3Rlc3RydW5GaWxlfSdgKTtcbiAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICB9XG4gIH1cblxuICBsb2cuZXJyb3JBbmRUaHJvdyhgSWYgeW91IGFyZSB1c2luZyAndXNlWGN0ZXN0cnVuRmlsZScgY2FwYWJpbGl0eSB0aGVuIHlvdSBgICtcbiAgICBgbmVlZCB0byBoYXZlIGEgeGN0ZXN0cnVuIGZpbGUgKGV4cGVjdGVkOiBgICtcbiAgICBgJyR7cGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGdldFhjdGVzdHJ1bkZpbGVOYW1lKGRldmljZUluZm8sIHNka1ZlcnNpb24pKX0nKWApO1xufVxuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBuYW1lIG9mIHhjdGVzdHJ1biBmaWxlXG4gKiBAcGFyYW0ge0RldmljZUluZm99IGRldmljZUluZm9cbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHJldHVybiB7c3RyaW5nfSByZXR1cm5zIHhjdGVzdHJ1bkZpbGVQYXRoIGZvciBnaXZlbiBkZXZpY2VcbiAqL1xuZnVuY3Rpb24gZ2V0WGN0ZXN0cnVuRmlsZU5hbWUgKGRldmljZUluZm8sIHZlcnNpb24pIHtcbiAgcmV0dXJuIGlzVHZPUyhkZXZpY2VJbmZvLnBsYXRmb3JtTmFtZSlcbiAgICA/IGBXZWJEcml2ZXJBZ2VudFJ1bm5lcl90dk9TX2FwcGxldHYke2RldmljZUluZm8uaXNSZWFsRGV2aWNlID8gYG9zJHt2ZXJzaW9ufS1hcm02NGAgOiBgc2ltdWxhdG9yJHt2ZXJzaW9ufS14ODZfNjRgfS54Y3Rlc3RydW5gXG4gICAgOiBgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lJHtkZXZpY2VJbmZvLmlzUmVhbERldmljZSA/IGBvcyR7dmVyc2lvbn0tYXJtNjRgIDogYHNpbXVsYXRvciR7dmVyc2lvbn0teDg2XzY0YH0ueGN0ZXN0cnVuYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24ga2lsbFByb2Nlc3MgKG5hbWUsIHByb2MpIHtcbiAgaWYgKCFwcm9jIHx8ICFwcm9jLmlzUnVubmluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5pbmZvKGBTaHV0dGluZyBkb3duICcke25hbWV9JyBwcm9jZXNzIChwaWQgJyR7cHJvYy5wcm9jLnBpZH0nKWApO1xuXG4gIGxvZy5pbmZvKGBTZW5kaW5nICdTSUdURVJNJy4uLmApO1xuICB0cnkge1xuICAgIGF3YWl0IHByb2Muc3RvcCgnU0lHVEVSTScsIDEwMDApO1xuICAgIHJldHVybjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcyhgUHJvY2VzcyBkaWRuJ3QgZW5kIGFmdGVyYCkpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGAke25hbWV9IHByb2Nlc3MgZGlkIG5vdCBlbmQgaW4gYSB0aW1lbHkgZmFzaGlvbjogJyR7ZXJyLm1lc3NhZ2V9Jy5gKTtcbiAgfVxuXG4gIGxvZy5pbmZvKGBTZW5kaW5nICdTSUdLSUxMJy4uLmApO1xuICB0cnkge1xuICAgIGF3YWl0IHByb2Muc3RvcCgnU0lHS0lMTCcpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBjdXJyZW50bHkgcnVubmluZycpKSB7XG4gICAgICAvLyB0aGUgcHJvY2VzcyBlbmRlZCBidXQgZm9yIHNvbWUgcmVhc29uIHdlIHdlcmUgbm90IGluZm9ybWVkXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIGludGVnZXIuXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIG51bWJlciBpbiByYW5nZSBbbG93LCBoaWdodCkuIGBsb3dgYCBpcyBpbmNsdXNpdmUgYW5kIGBoaWdoYCBpcyBleGNsdXNpdmUuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbUludCAobG93LCBoaWdoKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaGlnaCAtIGxvdykgKyBsb3cpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBXREEgdXBncmFkZSB0aW1lc3RhbXBcbiAqXG4gKiBAcmV0dXJuIHs/bnVtYmVyfSBUaGUgVU5JWCB0aW1lc3RhbXAgb2YgdGhlIHBhY2thZ2UgbWFuaWZlc3QuIFRoZSBtYW5pZmVzdCBvbmx5IGdldHMgbW9kaWZpZWQgb25cbiAqIHBhY2thZ2UgdXBncmFkZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCAoKSB7XG4gIGNvbnN0IHBhY2thZ2VNYW5pZmVzdCA9IHBhdGgucmVzb2x2ZShST09UX0RJUiwgJ3BhY2thZ2UuanNvbicpO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYWNrYWdlTWFuaWZlc3QpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge210aW1lfSA9IGF3YWl0IGZzLnN0YXQocGFja2FnZU1hbmlmZXN0KTtcbiAgcmV0dXJuIG10aW1lLmdldFRpbWUoKTtcbn1cblxuLyoqXG4gKiBLaWxscyBydW5uaW5nIFhDVGVzdCBwcm9jZXNzZXMgZm9yIHRoZSBwYXJ0aWN1bGFyIGRldmljZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdWRpZCAtIFRoZSBkZXZpY2UgVURJRC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTaW11bGF0b3IgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgY3VycmVudCBkZXZpY2UgaXMgYSBTaW11bGF0b3JcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzZXRUZXN0UHJvY2Vzc2VzICh1ZGlkLCBpc1NpbXVsYXRvcikge1xuICBjb25zdCBwcm9jZXNzUGF0dGVybnMgPSBbYHhjb2RlYnVpbGQuKiR7dWRpZH1gXTtcbiAgaWYgKGlzU2ltdWxhdG9yKSB7XG4gICAgcHJvY2Vzc1BhdHRlcm5zLnB1c2goYCR7dWRpZH0uKlhDVFJ1bm5lcmApO1xuICAgIC8vIFRoZSBwYXR0ZXJuIHRvIGZpbmQgaW4gY2FzZSBpZGIgd2FzIHVzZWRcbiAgICBwcm9jZXNzUGF0dGVybnMucHVzaChgeGN0ZXN0Lioke3VkaWR9YCk7XG4gIH1cbiAgbG9nLmRlYnVnKGBLaWxsaW5nIHJ1bm5pbmcgcHJvY2Vzc2VzICcke3Byb2Nlc3NQYXR0ZXJucy5qb2luKCcsICcpfScgZm9yIHRoZSBkZXZpY2UgJHt1ZGlkfS4uLmApO1xuICBhd2FpdCBCLmFsbChwcm9jZXNzUGF0dGVybnMubWFwKGtpbGxBcHBVc2luZ1BhdHRlcm4pKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIElEcyBvZiBwcm9jZXNzZXMgbGlzdGVuaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIHN5c3RlbSBwb3J0LlxuICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhcHBseSBhZGRpdGlvbmFsIGZpbHRlcmluZyBiYXNlZCBvbiB0aGVcbiAqIHByb2Nlc3MgY29tbWFuZCBsaW5lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcG9ydCAtIFRoZSBwb3J0IG51bWJlci5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmaWx0ZXJpbmdGdW5jIC0gT3B0aW9uYWwgbGFtYmRhIGZ1bmN0aW9uLCB3aGljaFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlcyBjb21tYW5kIGxpbmUgc3RyaW5nIG9mIHRoZSBwYXJ0aWN1bGFyIHByb2Nlc3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuaW5nIG9uIGdpdmVuIHBvcnQsIGFuZCBpcyBleHBlY3RlZCB0byByZXR1cm5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHRydWUgb3IgZmFsc2UgdG8gaW5jbHVkZS9leGNsdWRlIHRoZSBjb3JyZXNwb25kaW5nIFBJRFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSByZXN1bHRpbmcgYXJyYXkuXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gLSB0aGUgbGlzdCBvZiBtYXRjaGVkIHByb2Nlc3MgaWRzLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQSURzTGlzdGVuaW5nT25Qb3J0IChwb3J0LCBmaWx0ZXJpbmdGdW5jID0gbnVsbCkge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgdHJ5IHtcbiAgICAvLyBUaGlzIG9ubHkgd29ya3Mgc2luY2UgTWFjIE9TIFggRWwgQ2FwaXRhblxuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygnbHNvZicsIFsnLXRpJywgYHRjcDoke3BvcnR9YF0pO1xuICAgIHJlc3VsdC5wdXNoKC4uLihzdGRvdXQudHJpbSgpLnNwbGl0KC9cXG4rLykpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlLmNvZGUgIT09IDEpIHtcbiAgICAgIC8vIGNvZGUgMSBtZWFucyBubyBwcm9jZXNzZXMuIE90aGVyIGVycm9ycyBuZWVkIHJlcG9ydGluZ1xuICAgICAgbG9nLmRlYnVnKGBFcnJvciBnZXR0aW5nIHByb2Nlc3NlcyBsaXN0ZW5pbmcgb24gcG9ydCAnJHtwb3J0fSc6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFfLmlzRnVuY3Rpb24oZmlsdGVyaW5nRnVuYykpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiBhd2FpdCBCLmZpbHRlcihyZXN1bHQsIGFzeW5jIChwaWQpID0+IHtcbiAgICBsZXQgc3Rkb3V0O1xuICAgIHRyeSB7XG4gICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwcycsIFsnLXAnLCBwaWQsICctbycsICdjb21tYW5kJ10pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5jb2RlID09PSAxKSB7XG4gICAgICAgIC8vIFRoZSBwcm9jZXNzIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIHRoZXJlJ3Mgbm90aGluZyB0byBmaWx0ZXJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGZpbHRlcmluZ0Z1bmMoc3Rkb3V0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCB7IHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBzZXRSZWFsRGV2aWNlU2VjdXJpdHksXG4gIGdldEFkZGl0aW9uYWxSdW5Db250ZW50LCBnZXRYY3Rlc3RydW5GaWxlTmFtZSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsXG4gIHNldFhjdGVzdHJ1bkZpbGUsIGdldFhjdGVzdHJ1bkZpbGVQYXRoLCBraWxsUHJvY2VzcywgcmFuZG9tSW50LFxuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsXG4gIGdldFBJRHNMaXN0ZW5pbmdPblBvcnQsIGtpbGxBcHBVc2luZ1BhdHRlcm4sIGlzVHZPUyxcbn07XG4iXSwiZmlsZSI6ImxpYi91dGlscy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
317
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJST09UX0RJUiIsInBhdGgiLCJiYXNlbmFtZSIsIl9fZGlybmFtZSIsInJlc29sdmUiLCJwcm9jZXNzIiwiZW52IiwiTk9fUFJFQ09NUElMRSIsIlBST0pFQ1RfRklMRSIsImdldFBJRHNVc2luZ1BhdHRlcm4iLCJwYXR0ZXJuIiwiYXJncyIsInN0ZG91dCIsInNwbGl0IiwibWFwIiwieCIsInBhcnNlSW50IiwiZmlsdGVyIiwiXyIsImlzSW50ZWdlciIsImVyciIsImxvZyIsImRlYnVnIiwiam9pbiIsImNvZGUiLCJraWxsQXBwVXNpbmdQYXR0ZXJuIiwicGdyZXBQYXR0ZXJuIiwic2lnbmFscyIsInNpZ25hbCIsIm1hdGNoZWRQaWRzIiwiaXNFbXB0eSIsIm1lc3NhZ2UiLCJsYXN0IiwicGlkQ2hlY2tQcm9taXNlcyIsInBpZCIsInRoZW4iLCJjYXRjaCIsIkIiLCJhbGwiLCJldmVyeSIsIndhaXRNcyIsImludGVydmFsTXMiLCJpZ24iLCJpc1R2T1MiLCJwbGF0Zm9ybU5hbWUiLCJ0b0xvd2VyIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwicmVwbGFjZUluRmlsZSIsImZpbGUiLCJmaW5kIiwicmVwbGFjZSIsImNvbnRlbnRzIiwiZnMiLCJyZWFkRmlsZSIsIm5ld0NvbnRlbnRzIiwid3JpdGVGaWxlIiwidXBkYXRlUHJvamVjdEZpbGUiLCJhZ2VudFBhdGgiLCJuZXdCdW5kbGVJZCIsInByb2plY3RGaWxlUGF0aCIsImNvcHlGaWxlIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJ3YXJuIiwicmVzZXRQcm9qZWN0RmlsZSIsImV4aXN0cyIsIm12Iiwic2V0UmVhbERldmljZVNlY3VyaXR5Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImdlbmVyYXRlWGNvZGVDb25maWdGaWxlIiwib3JnSWQiLCJzaWduaW5nSWQiLCJ4Y2NvbmZpZ1BhdGgiLCJ0ZW1wRGlyIiwic2V0WGN0ZXN0cnVuRmlsZSIsImRldmljZUluZm8iLCJzZGtWZXJzaW9uIiwiYm9vdHN0cmFwUGF0aCIsIndkYVJlbW90ZVBvcnQiLCJ4Y3Rlc3RydW5GaWxlUGF0aCIsImdldFhjdGVzdHJ1bkZpbGVQYXRoIiwieGN0ZXN0UnVuQ29udGVudCIsInBsaXN0IiwicGFyc2VQbGlzdEZpbGUiLCJ1cGRhdGVXREFQb3J0IiwiZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQiLCJuZXdYY3Rlc3RSdW5Db250ZW50IiwibWVyZ2UiLCJ1cGRhdGVQbGlzdEZpbGUiLCJydW5uZXIiLCJFbnZpcm9ubWVudFZhcmlhYmxlcyIsIlVTRV9QT1JUIiwic2RrQmFzZWQiLCJ1ZGlkIiwicGxhdGZvcm1CYXNlZCIsInBsYXRmb3JtVmVyc2lvbiIsImZpbGVQYXRoIiwidmVyc2lvbiIsImluZm8iLCJvcmlnaW5hbFhjdGVzdHJ1bkZpbGUiLCJnZXRYY3Rlc3RydW5GaWxlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJpc1JlYWxEZXZpY2UiLCJraWxsUHJvY2VzcyIsIm5hbWUiLCJwcm9jIiwiaXNSdW5uaW5nIiwic3RvcCIsImluY2x1ZGVzIiwicmFuZG9tSW50IiwibG93IiwiaGlnaCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImdldFdEQVVwZ3JhZGVUaW1lc3RhbXAiLCJwYWNrYWdlTWFuaWZlc3QiLCJtdGltZSIsInN0YXQiLCJnZXRUaW1lIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwiaXNTaW11bGF0b3IiLCJwcm9jZXNzUGF0dGVybnMiLCJwdXNoIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInBvcnQiLCJmaWx0ZXJpbmdGdW5jIiwicmVzdWx0IiwidHJpbSIsImUiLCJzdGRlcnIiLCJpc0Z1bmN0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHQyxjQUFLQyxR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O0FBQ1YsVUFBSUEsQ0FBQyxDQUFDM0csSUFBRixLQUFXLENBQWYsRUFBa0I7QUFFaEIsZUFBTyxLQUFQO0FBQ0Q7O0FBQ0QsWUFBTTJHLENBQU47QUFDRDs7QUFDRCxXQUFPLE1BQU1ILGFBQWEsQ0FBQ3BILE1BQUQsQ0FBMUI7QUFDRCxHQVpZLENBQWI7QUFhRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzLCB0ZW1wRGlyLCBwbGlzdCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBXREFfUlVOTkVSX0JVTkRMRV9JRCwgUExBVEZPUk1fTkFNRV9UVk9TIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgUk9PVF9ESVIgPSBwYXRoLmJhc2VuYW1lKF9fZGlybmFtZSkgPT09ICdsaWInXG4gID8gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgcHJvY2Vzcy5lbnYuTk9fUFJFQ09NUElMRSA/ICcuLicgOiAnLi4vLi4nKVxuICA6IF9fZGlybmFtZTtcbmNvbnN0IFBST0pFQ1RfRklMRSA9ICdwcm9qZWN0LnBieHByb2onO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRQSURzVXNpbmdQYXR0ZXJuIChwYXR0ZXJuKSB7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJy1pZicsIC8vIGNhc2UgaW5zZW5zaXRpdmUsIGZ1bGwgY21kbGluZSBtYXRjaFxuICAgIHBhdHRlcm4sXG4gIF07XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwZ3JlcCcsIGFyZ3MpO1xuICAgIHJldHVybiBzdGRvdXQuc3BsaXQoL1xccysvKVxuICAgICAgLm1hcCgoeCkgPT4gcGFyc2VJbnQoeCwgMTApKVxuICAgICAgLmZpbHRlcihfLmlzSW50ZWdlcilcbiAgICAgIC5tYXAoKHgpID0+IGAke3h9YCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgJ3BncmVwICR7YXJncy5qb2luKCcgJyl9JyBkaWRuJ3QgZGV0ZWN0IGFueSBtYXRjaGluZyBwcm9jZXNzZXMuIFJldHVybiBjb2RlOiAke2Vyci5jb2RlfWApO1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsQXBwVXNpbmdQYXR0ZXJuIChwZ3JlcFBhdHRlcm4pIHtcbiAgY29uc3Qgc2lnbmFscyA9IFsyLCAxNSwgOV07XG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIHNpZ25hbHMpIHtcbiAgICBjb25zdCBtYXRjaGVkUGlkcyA9IGF3YWl0IGdldFBJRHNVc2luZ1BhdHRlcm4ocGdyZXBQYXR0ZXJuKTtcbiAgICBpZiAoXy5pc0VtcHR5KG1hdGNoZWRQaWRzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhcmdzID0gW2AtJHtzaWduYWx9YCwgLi4ubWF0Y2hlZFBpZHNdO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKCdraWxsJywgYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZGVidWcoYGtpbGwgJHthcmdzLmpvaW4oJyAnKX0gLT4gJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKHNpZ25hbCA9PT0gXy5sYXN0KHNpZ25hbHMpKSB7XG4gICAgICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIHdhaXQgYWZ0ZXIgU0lHS0lMTFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBpZENoZWNrUHJvbWlzZXMgPSBtYXRjaGVkUGlkc1xuICAgICAgICAgIC5tYXAoKHBpZCkgPT4gZXhlYygna2lsbCcsIFsnLTAnLCBwaWRdKVxuICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmVcbiAgICAgICAgICAgIC50aGVuKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MgaXMgZGVhZFxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHRydWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBCLmFsbChwaWRDaGVja1Byb21pc2VzKSlcbiAgICAgICAgICAuZXZlcnkoKHgpID0+IHggPT09IHRydWUpO1xuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IDEwMDAsXG4gICAgICAgIGludGVydmFsTXM6IDEwMCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgLy8gdHJ5IHRoZSBuZXh0IHNpZ25hbFxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybU5hbWUgaXMgdHZPU1xuICogQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGxhdG9ybVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybU5hbWUgaXMgdHZPU1xuICovXG5mdW5jdGlvbiBpc1R2T1MgKHBsYXRmb3JtTmFtZSkge1xuICByZXR1cm4gXy50b0xvd2VyKHBsYXRmb3JtTmFtZSkgPT09IF8udG9Mb3dlcihQTEFURk9STV9OQU1FX1RWT1MpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlSW5GaWxlIChmaWxlLCBmaW5kLCByZXBsYWNlKSB7XG4gIGxldCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGUsICd1dGY4Jyk7XG5cbiAgbGV0IG5ld0NvbnRlbnRzID0gY29udGVudHMucmVwbGFjZShmaW5kLCByZXBsYWNlKTtcbiAgaWYgKG5ld0NvbnRlbnRzICE9PSBjb250ZW50cykge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCBuZXdDb250ZW50cywgJ3V0ZjgnKTtcbiAgfVxufVxuXG4vKipcbiAqIFVwZGF0ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBwcm9qZWN0IGJ1bmRsZSBJRCB3aXRoIG5ld0J1bmRsZUlkLlxuICogVGhpcyBtZXRob2QgYXNzdW1lcyBwcm9qZWN0IGZpbGUgaXMgaW4gdGhlIGNvcnJlY3Qgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWdlbnRQYXRoIC0gUGF0aCB0byB0aGUgLnhjb2RlcHJvaiBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmV3QnVuZGxlSWQgdGhlIG5ldyBidW5kbGUgSUQgdXNlZCB0byB1cGRhdGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByb2plY3RGaWxlIChhZ2VudFBhdGgsIG5ld0J1bmRsZUlkKSB7XG4gIGxldCBwcm9qZWN0RmlsZVBhdGggPSBwYXRoLnJlc29sdmUoYWdlbnRQYXRoLCBQUk9KRUNUX0ZJTEUpO1xuICB0cnkge1xuICAgIC8vIEFzc3VtaW5nIHByb2plY3RGaWxlUGF0aCBpcyBpbiB0aGUgY29ycmVjdCBzdGF0ZSwgY3JlYXRlIC5vbGQgZnJvbSBwcm9qZWN0RmlsZVBhdGhcbiAgICBhd2FpdCBmcy5jb3B5RmlsZShwcm9qZWN0RmlsZVBhdGgsIGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCk7XG4gICAgYXdhaXQgcmVwbGFjZUluRmlsZShwcm9qZWN0RmlsZVBhdGgsIG5ldyBSZWdFeHAoXy5lc2NhcGVSZWdFeHAoV0RBX1JVTk5FUl9CVU5ETEVfSUQpLCAnZycpLCBuZXdCdW5kbGVJZCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgICBsb2cuZGVidWcoYFN1Y2Nlc3NmdWxseSB1cGRhdGVkICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYnVuZGxlIGlkICcke25ld0J1bmRsZUlkfSdgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKGBFcnJvciB1cGRhdGluZyBwcm9qZWN0IGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byB1cGRhdGUgcHJvamVjdCBmaWxlICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYCArXG4gICAgICBgYnVuZGxlIGlkICcke25ld0J1bmRsZUlkfScuIFdlYkRyaXZlckFnZW50IG1heSBub3Qgc3RhcnRgKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0IFdlYkRyaXZlckFnZW50UnVubmVyIHByb2plY3QgYnVuZGxlIElEIHRvIGNvcnJlY3Qgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWdlbnRQYXRoIC0gUGF0aCB0byB0aGUgLnhjb2RlcHJvaiBkaXJlY3RvcnkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc2V0UHJvamVjdEZpbGUgKGFnZW50UGF0aCkge1xuICBjb25zdCBwcm9qZWN0RmlsZVBhdGggPSBwYXRoLmpvaW4oYWdlbnRQYXRoLCBQUk9KRUNUX0ZJTEUpO1xuICB0cnkge1xuICAgIC8vIHJlc3RvcmUgcHJvamVjdEZpbGVQYXRoIGZyb20gLm9sZCBmaWxlXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYCR7cHJvamVjdEZpbGVQYXRofS5vbGRgKSkge1xuICAgICAgcmV0dXJuOyAvLyBubyBuZWVkIHRvIHJlc2V0XG4gICAgfVxuICAgIGF3YWl0IGZzLm12KGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCwgcHJvamVjdEZpbGVQYXRoKTtcbiAgICBsb2cuZGVidWcoYFN1Y2Nlc3NmdWxseSByZXNldCAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGJ1bmRsZSBpZCAnJHtXREFfUlVOTkVSX0JVTkRMRV9JRH0nYCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3IgcmVzZXR0aW5nIHByb2plY3QgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIHJlc2V0IHByb2plY3QgZmlsZSAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGAgK1xuICAgICAgYGJ1bmRsZSBpZCAnJHtXREFfUlVOTkVSX0JVTkRMRV9JRH0nLiBXZWJEcml2ZXJBZ2VudCBoYXMgYmVlbiBgICtcbiAgICAgIGBtb2RpZmllZCBhbmQgbm90IHJldHVybmVkIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRSZWFsRGV2aWNlU2VjdXJpdHkgKGtleWNoYWluUGF0aCwga2V5Y2hhaW5QYXNzd29yZCkge1xuICBsb2cuZGVidWcoJ1NldHRpbmcgc2VjdXJpdHkgZm9yIGlPUyBkZXZpY2UnKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJy12JywgJ2xpc3Qta2V5Y2hhaW5zJywgJy1zJywga2V5Y2hhaW5QYXRoXSk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWyctdicsICd1bmxvY2sta2V5Y2hhaW4nLCAnLXAnLCBrZXljaGFpblBhc3N3b3JkLCBrZXljaGFpblBhdGhdKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJ3NldC1rZXljaGFpbi1zZXR0aW5ncycsICctdCcsICczNjAwJywgJy1sJywga2V5Y2hhaW5QYXRoXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlWGNvZGVDb25maWdGaWxlIChvcmdJZCwgc2lnbmluZ0lkKSB7XG4gIGxvZy5kZWJ1ZyhgR2VuZXJhdGluZyB4Y29kZSBjb25maWcgZmlsZSBmb3Igb3JnSWQgJyR7b3JnSWR9JyBhbmQgc2lnbmluZ0lkIGAgK1xuICAgICAgICAgICAgYCcke3NpZ25pbmdJZH0nYCk7XG4gIGNvbnN0IGNvbnRlbnRzID0gYERFVkVMT1BNRU5UX1RFQU0gPSAke29yZ0lkfVxuQ09ERV9TSUdOX0lERU5USVRZID0gJHtzaWduaW5nSWR9XG5gO1xuICBjb25zdCB4Y2NvbmZpZ1BhdGggPSBhd2FpdCB0ZW1wRGlyLnBhdGgoJ2FwcGl1bS10ZW1wLnhjY29uZmlnJyk7XG4gIGxvZy5kZWJ1ZyhgV3JpdGluZyB4Y29kZSBjb25maWcgZmlsZSB0byAke3hjY29uZmlnUGF0aH1gKTtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKHhjY29uZmlnUGF0aCwgY29udGVudHMsICd1dGY4Jyk7XG4gIHJldHVybiB4Y2NvbmZpZ1BhdGg7XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXZpY2VJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaXNSZWFsRGV2aWNlIC0gRXF1YWxzIHRvIHRydWUgaWYgdGhlIGN1cnJlbnQgZGV2aWNlIGlzIGEgcmVhbCBkZXZpY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1ZGlkIC0gVGhlIGRldmljZSBVRElELlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYXRmb3JtVmVyc2lvbiAtIFRoZSBwbGF0Zm9ybSB2ZXJzaW9uIG9mIE9TLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYXRmb3JtTmFtZSAtIFRoZSBwbGF0Zm9ybSBuYW1lIG9mIGlPUywgdHZPU1xuKi9cbi8qKlxuICogQ3JlYXRlcyB4Y3Rlc3RydW4gZmlsZSBwZXIgZGV2aWNlICYgcGxhdGZvcm0gdmVyc2lvbi5cbiAqIFdlIGV4cGVjdHMgdG8gaGF2ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVvcyR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LWFybTY0LnhjdGVzdHJ1biBmb3IgcmVhbCBkZXZpY2VcbiAqIGFuZCBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVzaW11bGF0b3Ike3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS14ODZfNjQueGN0ZXN0cnVuIGZvciBzaW11bGF0b3IgbG9jYXRlZCBAYm9vdHN0cmFwUGF0aFxuICogTmV3ZXIgWGNvZGUgKFhjb2RlIDEwLjAgYXQgbGVhc3QpIGdlbmVyYXRlIHhjdGVzdHJ1biBmaWxlIGZvbGxvd2luZyBzZGtWZXJzaW9uLlxuICogZS5nLiBYY29kZSB3aGljaCBoYXMgaU9TIFNESyBWZXJzaW9uIDEyLjIgZ2VuZXJhdGUgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yLjIteDg2XzY0LnhjdGVzdHJ1blxuICogICAgICBldmVuIGlmIHRoZSBjYXAgaGFzIHBsYXRmb3JtIHZlcnNpb24gMTEuNFxuICpcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHNka1ZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9vdHN0cmFwUGF0aCAtIFRoZSBmb2xkZXIgcGF0aCBjb250YWluaW5nIHhjdGVzdHJ1biBmaWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IHdkYVJlbW90ZVBvcnQgLSBUaGUgcmVtb3RlIHBvcnQgV0RBIGlzIGxpc3RlbmluZyBvbi5cbiAqIEByZXR1cm4ge3N0cmluZ30gcmV0dXJucyB4Y3Rlc3RydW5GaWxlUGF0aCBmb3IgZ2l2ZW4gZGV2aWNlXG4gKiBAdGhyb3dzIGlmIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZW9zJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0tYXJtNjQueGN0ZXN0cnVuIGZvciByZWFsIGRldmljZVxuICogb3IgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0teDg2XzY0LnhjdGVzdHJ1biBmb3Igc2ltdWxhdG9yIGlzIG5vdCBmb3VuZCBAYm9vdHN0cmFwUGF0aCxcbiAqIHRoZW4gaXQgd2lsbCB0aHJvdyBmaWxlIG5vdCBmb3VuZCBleGNlcHRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0WGN0ZXN0cnVuRmlsZSAoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCwgd2RhUmVtb3RlUG9ydCkge1xuICBjb25zdCB4Y3Rlc3RydW5GaWxlUGF0aCA9IGF3YWl0IGdldFhjdGVzdHJ1bkZpbGVQYXRoKGRldmljZUluZm8sIHNka1ZlcnNpb24sIGJvb3RzdHJhcFBhdGgpO1xuICBjb25zdCB4Y3Rlc3RSdW5Db250ZW50ID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUoeGN0ZXN0cnVuRmlsZVBhdGgpO1xuICBjb25zdCB1cGRhdGVXREFQb3J0ID0gZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQoZGV2aWNlSW5mby5wbGF0Zm9ybU5hbWUsIHdkYVJlbW90ZVBvcnQpO1xuICBjb25zdCBuZXdYY3Rlc3RSdW5Db250ZW50ID0gXy5tZXJnZSh4Y3Rlc3RSdW5Db250ZW50LCB1cGRhdGVXREFQb3J0KTtcbiAgYXdhaXQgcGxpc3QudXBkYXRlUGxpc3RGaWxlKHhjdGVzdHJ1bkZpbGVQYXRoLCBuZXdYY3Rlc3RSdW5Db250ZW50LCB0cnVlKTtcblxuICByZXR1cm4geGN0ZXN0cnVuRmlsZVBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBXREEgb2JqZWN0IHdoaWNoIGFwcGVuZHMgZXhpc3RpbmcgeGN0ZXN0IHJ1bm5lciBjb250ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhdGZvcm1OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtXG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEByZXR1cm4ge29iamVjdH0gcmV0dXJucyBhIHJ1bm5lciBvYmplY3Qgd2hpY2ggaGFzIFVTRV9QT1JUXG4gKi9cbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxSdW5Db250ZW50IChwbGF0Zm9ybU5hbWUsIHdkYVJlbW90ZVBvcnQpIHtcbiAgY29uc3QgcnVubmVyID0gYFdlYkRyaXZlckFnZW50UnVubmVyJHtpc1R2T1MocGxhdGZvcm1OYW1lKSA/ICdfdHZPUycgOiAnJ31gO1xuXG4gIHJldHVybiB7XG4gICAgW3J1bm5lcl06IHtcbiAgICAgIEVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgIC8vIFVTRV9QT1JUIG11c3QgYmUgJ3N0cmluZydcbiAgICAgICAgVVNFX1BPUlQ6IGAke3dkYVJlbW90ZVBvcnR9YFxuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHBhdGggb2YgeGN0ZXN0cnVuIGlmIGl0IGV4aXN0c1xuICogQHBhcmFtIHtEZXZpY2VJbmZvfSBkZXZpY2VJbmZvXG4gKiBAcGFyYW0ge3N0cmluZ30gc2RrVmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBib290c3RyYXBQYXRoIC0gVGhlIGZvbGRlciBwYXRoIGNvbnRhaW5pbmcgeGN0ZXN0cnVuIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFhjdGVzdHJ1bkZpbGVQYXRoIChkZXZpY2VJbmZvLCBzZGtWZXJzaW9uLCBib290c3RyYXBQYXRoKSB7XG4gIC8vIEZpcnN0IHRyeSB0aGUgU0RLIHBhdGgsIGZvciBYY29kZSAxMCAoYXQgbGVhc3QpXG4gIGNvbnN0IHNka0Jhc2VkID0gW1xuICAgIHBhdGgucmVzb2x2ZShib290c3RyYXBQYXRoLCBgJHtkZXZpY2VJbmZvLnVkaWR9XyR7c2RrVmVyc2lvbn0ueGN0ZXN0cnVuYCksXG4gICAgc2RrVmVyc2lvbixcbiAgXTtcbiAgLy8gTmV4dCB0cnkgUGxhdGZvcm0gcGF0aCwgZm9yIGVhcmxpZXIgWGNvZGUgdmVyc2lvbnNcbiAgY29uc3QgcGxhdGZvcm1CYXNlZCA9IFtcbiAgICBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgYCR7ZGV2aWNlSW5mby51ZGlkfV8ke2RldmljZUluZm8ucGxhdGZvcm1WZXJzaW9ufS54Y3Rlc3RydW5gKSxcbiAgICBkZXZpY2VJbmZvLnBsYXRmb3JtVmVyc2lvbixcbiAgXTtcblxuICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgdmVyc2lvbl0gb2YgW3Nka0Jhc2VkLCBwbGF0Zm9ybUJhc2VkXSkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICBsb2cuaW5mbyhgVXNpbmcgJyR7ZmlsZVBhdGh9JyBhcyB4Y3Rlc3RydW4gZmlsZWApO1xuICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5hbFhjdGVzdHJ1bkZpbGUgPSBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUoZGV2aWNlSW5mbywgdmVyc2lvbikpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMob3JpZ2luYWxYY3Rlc3RydW5GaWxlKSkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBmaXJzdCB0aW1lIHJ1biBmb3IgZ2l2ZW4gZGV2aWNlLCB0aGVuIGZpcnN0IGdlbmVyYXRlIHhjdGVzdHJ1biBmaWxlIGZvciBkZXZpY2UuXG4gICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgYSB4Y3Rlc3RydW4gZmlsZSAqKnBlciBkZXZpY2UqKiBiZWNhdXNlIHdlIGNhbnQgbm90IGhhdmUgc2FtZSB3ZGEgcG9ydCBmb3IgYWxsIGRldmljZXMuXG4gICAgICBhd2FpdCBmcy5jb3B5RmlsZShvcmlnaW5hbFhjdGVzdHJ1bkZpbGUsIGZpbGVQYXRoKTtcbiAgICAgIGxvZy5pbmZvKGBVc2luZyAnJHtmaWxlUGF0aH0nIGFzIHhjdGVzdHJ1biBmaWxlIGNvcGllZCBieSAnJHtvcmlnaW5hbFhjdGVzdHJ1bkZpbGV9J2ApO1xuICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgfVxuXG4gIGxvZy5lcnJvckFuZFRocm93KGBJZiB5b3UgYXJlIHVzaW5nICd1c2VYY3Rlc3RydW5GaWxlJyBjYXBhYmlsaXR5IHRoZW4geW91IGAgK1xuICAgIGBuZWVkIHRvIGhhdmUgYSB4Y3Rlc3RydW4gZmlsZSAoZXhwZWN0ZWQ6IGAgK1xuICAgIGAnJHtwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUoZGV2aWNlSW5mbywgc2RrVmVyc2lvbikpfScpYCk7XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIG5hbWUgb2YgeGN0ZXN0cnVuIGZpbGVcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJldHVybnMgeGN0ZXN0cnVuRmlsZVBhdGggZm9yIGdpdmVuIGRldmljZVxuICovXG5mdW5jdGlvbiBnZXRYY3Rlc3RydW5GaWxlTmFtZSAoZGV2aWNlSW5mbywgdmVyc2lvbikge1xuICByZXR1cm4gaXNUdk9TKGRldmljZUluZm8ucGxhdGZvcm1OYW1lKVxuICAgID8gYFdlYkRyaXZlckFnZW50UnVubmVyX3R2T1NfYXBwbGV0diR7ZGV2aWNlSW5mby5pc1JlYWxEZXZpY2UgPyBgb3Mke3ZlcnNpb259LWFybTY0YCA6IGBzaW11bGF0b3Ike3ZlcnNpb259LXg4Nl82NGB9LnhjdGVzdHJ1bmBcbiAgICA6IGBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmUke2RldmljZUluZm8uaXNSZWFsRGV2aWNlID8gYG9zJHt2ZXJzaW9ufS1hcm02NGAgOiBgc2ltdWxhdG9yJHt2ZXJzaW9ufS14ODZfNjRgfS54Y3Rlc3RydW5gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsUHJvY2VzcyAobmFtZSwgcHJvYykge1xuICBpZiAoIXByb2MgfHwgIXByb2MuaXNSdW5uaW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nLmluZm8oYFNodXR0aW5nIGRvd24gJyR7bmFtZX0nIHByb2Nlc3MgKHBpZCAnJHtwcm9jLnByb2MucGlkfScpYCk7XG5cbiAgbG9nLmluZm8oYFNlbmRpbmcgJ1NJR1RFUk0nLi4uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvYy5zdG9wKCdTSUdURVJNJywgMTAwMCk7XG4gICAgcmV0dXJuO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKGBQcm9jZXNzIGRpZG4ndCBlbmQgYWZ0ZXJgKSkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYCR7bmFtZX0gcHJvY2VzcyBkaWQgbm90IGVuZCBpbiBhIHRpbWVseSBmYXNoaW9uOiAnJHtlcnIubWVzc2FnZX0nLmApO1xuICB9XG5cbiAgbG9nLmluZm8oYFNlbmRpbmcgJ1NJR0tJTEwnLi4uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvYy5zdG9wKCdTSUdLSUxMJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnbm90IGN1cnJlbnRseSBydW5uaW5nJykpIHtcbiAgICAgIC8vIHRoZSBwcm9jZXNzIGVuZGVkIGJ1dCBmb3Igc29tZSByZWFzb24gd2Ugd2VyZSBub3QgaW5mb3JtZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gaW50ZWdlci5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGluIHJhbmdlIFtsb3csIGhpZ2h0KS4gYGxvd2BgIGlzIGluY2x1c2l2ZSBhbmQgYGhpZ2hgIGlzIGV4Y2x1c2l2ZS5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tSW50IChsb3csIGhpZ2gpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSArIGxvdyk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIFdEQSB1cGdyYWRlIHRpbWVzdGFtcFxuICpcbiAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBVTklYIHRpbWVzdGFtcCBvZiB0aGUgcGFja2FnZSBtYW5pZmVzdC4gVGhlIG1hbmlmZXN0IG9ubHkgZ2V0cyBtb2RpZmllZCBvblxuICogcGFja2FnZSB1cGdyYWRlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRXREFVcGdyYWRlVGltZXN0YW1wICgpIHtcbiAgY29uc3QgcGFja2FnZU1hbmlmZXN0ID0gcGF0aC5yZXNvbHZlKFJPT1RfRElSLCAncGFja2FnZS5qc29uJyk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHBhY2thZ2VNYW5pZmVzdCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7bXRpbWV9ID0gYXdhaXQgZnMuc3RhdChwYWNrYWdlTWFuaWZlc3QpO1xuICByZXR1cm4gbXRpbWUuZ2V0VGltZSgpO1xufVxuXG4vKipcbiAqIEtpbGxzIHJ1bm5pbmcgWENUZXN0IHByb2Nlc3NlcyBmb3IgdGhlIHBhcnRpY3VsYXIgZGV2aWNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1ZGlkIC0gVGhlIGRldmljZSBVRElELlxuICogQHBhcmFtIHtib29sZWFufSBpc1NpbXVsYXRvciAtIEVxdWFscyB0byB0cnVlIGlmIHRoZSBjdXJyZW50IGRldmljZSBpcyBhIFNpbXVsYXRvclxuICovXG5hc3luYyBmdW5jdGlvbiByZXNldFRlc3RQcm9jZXNzZXMgKHVkaWQsIGlzU2ltdWxhdG9yKSB7XG4gIGNvbnN0IHByb2Nlc3NQYXR0ZXJucyA9IFtgeGNvZGVidWlsZC4qJHt1ZGlkfWBdO1xuICBpZiAoaXNTaW11bGF0b3IpIHtcbiAgICBwcm9jZXNzUGF0dGVybnMucHVzaChgJHt1ZGlkfS4qWENUUnVubmVyYCk7XG4gICAgLy8gVGhlIHBhdHRlcm4gdG8gZmluZCBpbiBjYXNlIGlkYiB3YXMgdXNlZFxuICAgIHByb2Nlc3NQYXR0ZXJucy5wdXNoKGB4Y3Rlc3QuKiR7dWRpZH1gKTtcbiAgfVxuICBsb2cuZGVidWcoYEtpbGxpbmcgcnVubmluZyBwcm9jZXNzZXMgJyR7cHJvY2Vzc1BhdHRlcm5zLmpvaW4oJywgJyl9JyBmb3IgdGhlIGRldmljZSAke3VkaWR9Li4uYCk7XG4gIGF3YWl0IEIuYWxsKHByb2Nlc3NQYXR0ZXJucy5tYXAoa2lsbEFwcFVzaW5nUGF0dGVybikpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgSURzIG9mIHByb2Nlc3NlcyBsaXN0ZW5pbmcgb24gdGhlIHBhcnRpY3VsYXIgc3lzdGVtIHBvcnQuXG4gKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGFwcGx5IGFkZGl0aW9uYWwgZmlsdGVyaW5nIGJhc2VkIG9uIHRoZVxuICogcHJvY2VzcyBjb21tYW5kIGxpbmUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBwb3J0IC0gVGhlIHBvcnQgbnVtYmVyLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGZpbHRlcmluZ0Z1bmMgLSBPcHRpb25hbCBsYW1iZGEgZnVuY3Rpb24sIHdoaWNoXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVzIGNvbW1hbmQgbGluZSBzdHJpbmcgb2YgdGhlIHBhcnRpY3VsYXIgcHJvY2Vzc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5pbmcgb24gZ2l2ZW4gcG9ydCwgYW5kIGlzIGV4cGVjdGVkIHRvIHJldHVyblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlaXRoZXIgdHJ1ZSBvciBmYWxzZSB0byBpbmNsdWRlL2V4Y2x1ZGUgdGhlIGNvcnJlc3BvbmRpbmcgUElEXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHJlc3VsdGluZyBhcnJheS5cbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSAtIHRoZSBsaXN0IG9mIG1hdGNoZWQgcHJvY2VzcyBpZHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBJRHNMaXN0ZW5pbmdPblBvcnQgKHBvcnQsIGZpbHRlcmluZ0Z1bmMgPSBudWxsKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICB0cnkge1xuICAgIC8vIFRoaXMgb25seSB3b3JrcyBzaW5jZSBNYWMgT1MgWCBFbCBDYXBpdGFuXG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdsc29mJywgWyctdGknLCBgdGNwOiR7cG9ydH1gXSk7XG4gICAgcmVzdWx0LnB1c2goLi4uKHN0ZG91dC50cmltKCkuc3BsaXQoL1xcbisvKSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUuY29kZSAhPT0gMSkge1xuICAgICAgLy8gY29kZSAxIG1lYW5zIG5vIHByb2Nlc3Nlcy4gT3RoZXIgZXJyb3JzIG5lZWQgcmVwb3J0aW5nXG4gICAgICBsb2cuZGVidWcoYEVycm9yIGdldHRpbmcgcHJvY2Vzc2VzIGxpc3RlbmluZyBvbiBwb3J0ICcke3BvcnR9JzogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoIV8uaXNGdW5jdGlvbihmaWx0ZXJpbmdGdW5jKSkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IEIuZmlsdGVyKHJlc3VsdCwgYXN5bmMgKHBpZCkgPT4ge1xuICAgIGxldCBzdGRvdXQ7XG4gICAgdHJ5IHtcbiAgICAgICh7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3BzJywgWyctcCcsIHBpZCwgJy1vJywgJ2NvbW1hbmQnXSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLmNvZGUgPT09IDEpIHtcbiAgICAgICAgLy8gVGhlIHByb2Nlc3MgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgdGhlcmUncyBub3RoaW5nIHRvIGZpbHRlclxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgZmlsdGVyaW5nRnVuYyhzdGRvdXQpO1xuICB9KTtcbn1cblxuZXhwb3J0IHsgdXBkYXRlUHJvamVjdEZpbGUsIHJlc2V0UHJvamVjdEZpbGUsIHNldFJlYWxEZXZpY2VTZWN1cml0eSxcbiAgZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQsIGdldFhjdGVzdHJ1bkZpbGVOYW1lLCBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSxcbiAgc2V0WGN0ZXN0cnVuRmlsZSwgZ2V0WGN0ZXN0cnVuRmlsZVBhdGgsIGtpbGxQcm9jZXNzLCByYW5kb21JbnQsXG4gIGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAsIHJlc2V0VGVzdFByb2Nlc3NlcyxcbiAgZ2V0UElEc0xpc3RlbmluZ09uUG9ydCwga2lsbEFwcFVzaW5nUGF0dGVybiwgaXNUdk9TLFxufTtcbiJdLCJmaWxlIjoibGliL3V0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
8
|
+
exports.default = exports.WebDriverAgent = void 0;
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
|
@@ -467,4 +467,4 @@ var _default = WebDriverAgent;
|
|
|
467
467
|
exports.default = _default;require('source-map-support').install();
|
|
468
468
|
|
|
469
469
|
|
|
470
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJuYW1lcyI6WyJXREFfTEFVTkNIX1RJTUVPVVQiLCJXREFfQUdFTlRfUE9SVCIsIldEQV9DRl9CVU5ETEVfTkFNRSIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXZWJEcml2ZXJBZ2VudCIsImNvbnN0cnVjdG9yIiwieGNvZGVWZXJzaW9uIiwiYXJncyIsIl8iLCJjbG9uZSIsImRldmljZSIsInBsYXRmb3JtVmVyc2lvbiIsInBsYXRmb3JtTmFtZSIsImlvc1Nka1ZlcnNpb24iLCJob3N0IiwiaXNSZWFsRGV2aWNlIiwicmVhbERldmljZSIsImlkYiIsIndkYUJ1bmRsZVBhdGgiLCJzZXRXREFQYXRocyIsImJvb3RzdHJhcFBhdGgiLCJhZ2VudFBhdGgiLCJ3ZGFMb2NhbFBvcnQiLCJ3ZGFSZW1vdGVQb3J0Iiwid2RhQmFzZVVybCIsIldEQV9CQVNFX1VSTCIsInByZWJ1aWxkV0RBIiwid2ViRHJpdmVyQWdlbnRVcmwiLCJzdGFydGVkIiwid2RhQ29ubmVjdGlvblRpbWVvdXQiLCJ1c2VYY3Rlc3RydW5GaWxlIiwidXNlUHJlYnVpbHRXREEiLCJkZXJpdmVkRGF0YVBhdGgiLCJtanBlZ1NlcnZlclBvcnQiLCJ1cGRhdGVkV0RBQnVuZGxlSWQiLCJ4Y29kZWJ1aWxkIiwiWGNvZGVCdWlsZCIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJ1c2VTaW1wbGVCdWlsZFRlc3QiLCJsYXVuY2hUaW1lb3V0Iiwid2RhTGF1bmNoVGltZW91dCIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJCT09UU1RSQVBfUEFUSCIsImxvZyIsImluZm8iLCJwYXRoIiwicmVzb2x2ZSIsImNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyIsIm9ic29sZXRlUGlkcyIsInVybCIsInBvcnQiLCJjbWRMaW5lIiwiaW5jbHVkZXMiLCJ0b0xvd2VyQ2FzZSIsInVkaWQiLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJpc1J1bm5pbmciLCJnZXRTdGF0dXMiLCJiYXNlUGF0aCIsIm5vU2Vzc2lvblByb3h5IiwiTm9TZXNzaW9uUHJveHkiLCJzZXJ2ZXIiLCJob3N0bmFtZSIsImJhc2UiLCJ0aW1lb3V0IiwiY29tbWFuZCIsImVyciIsImhyZWYiLCJ1bmluc3RhbGwiLCJidW5kbGVJZHMiLCJnZXRVc2VySW5zdGFsbGVkQnVuZGxlSWRzQnlCdW5kbGVOYW1lIiwiYnVuZGxlSWQiLCJyZW1vdmVBcHAiLCJfY2xlYW51cFByb2plY3RJZkZyZXNoIiwiaG9tZUZvbGRlciIsInByb2Nlc3MiLCJlbnYiLCJIT01FIiwiY3VycmVudFVwZ3JhZGVUaW1lc3RhbXAiLCJpc0ludGVnZXIiLCJ0aW1lc3RhbXBQYXRoIiwiV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgiLCJmcyIsImV4aXN0cyIsImFjY2VzcyIsIldfT0siLCJpZ24iLCJyZWNlbnRVcGdyYWRlVGltZXN0YW1wIiwicGFyc2VJbnQiLCJyZWFkRmlsZSIsImRpcm5hbWUiLCJ3cml0ZUZpbGUiLCJjbGVhblByb2plY3QiLCJsYXVuY2giLCJzZXNzaW9uSWQiLCJzZXR1cFByb3hpZXMiLCJFcnJvciIsInN5bmNocm9uaXphdGlvbktleSIsIm5vcm1hbGl6ZSIsImFjcXVpcmUiLCJzdGFydFdpdGhJREIiLCJpbml0IiwicHJlYnVpbGQiLCJzdGFydCIsIndkYUJ1bmRsZUlkIiwidGVzdEJ1bmRsZUlkIiwicHJlcGFyZVdEQSIsIlVTRV9QT1JUIiwiV0RBX1BST0RVQ1RfQlVORExFX0lERU5USUZJRVIiLCJNSlBFR19TRVJWRVJfUE9SVCIsInJ1blhDVUlUZXN0IiwicGFyc2VCdW5kbGVJZCIsImluZm9QbGlzdFBhdGgiLCJqb2luIiwiaW5mb1BsaXN0IiwicGxpc3QiLCJwYXJzZVBsaXN0IiwiQ0ZCdW5kbGVJZGVudGlmaWVyIiwiZmV0Y2hXREFCdW5kbGUiLCJpc0FwcEluc3RhbGxlZCIsImluc3RhbGxBcHAiLCJpbnN0YWxsWENUZXN0QnVuZGxlIiwid2RhQnVuZGxlUGF0aHMiLCJnbG9iIiwiV0RBX1JVTk5FUl9BUFAiLCJhYnNvbHV0ZSIsImlzU291cmNlRnJlc2giLCJleGlzdHNQcm9taXNlcyIsInNlcCIsIm1hcCIsInN1YlBhdGgiLCJCIiwiYWxsIiwic29tZSIsInYiLCJwcm94eU9wdHMiLCJrZWVwQWxpdmUiLCJqd3Byb3h5IiwiSldQcm94eSIsInByb3h5UmVxUmVzIiwiYmluZCIsInF1aXQiLCJyZXNldCIsIl91cmwiLCJwYXJzZSIsInByb3RvY29sIiwiZnVsbHlTdGFydGVkIiwicmV0cmlldmVEZXJpdmVkRGF0YVBhdGgiLCJzZXR1cENhY2hpbmciLCJzdGF0dXMiLCJidWlsZCIsInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyIiwidXBncmFkZWRBdCIsInV0aWwiLCJoYXNWYWx1ZSIsIldEQV9SVU5ORVJfQlVORExFX0lEIiwiYWN0dWFsVXBncmFkZVRpbWVzdGFtcCIsInRvTG93ZXIiLCJxdWl0QW5kVW5pbnN0YWxsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUtBLE1BQU1BLGtCQUFrQixHQUFHLEtBQUssSUFBaEM7QUFDQSxNQUFNQyxjQUFjLEdBQUcsSUFBdkI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyw2QkFBM0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxJQUFJQyxrQkFBSixFQUEvQjs7QUFFQSxNQUFNQyxjQUFOLENBQXFCO0FBQ25CQyxFQUFBQSxXQUFXLENBQUVDLFlBQUYsRUFBZ0JDLElBQUksR0FBRyxFQUF2QixFQUEyQjtBQUNw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O0FBRUQsVUFBTXdGLHNCQUFzQixHQUFHLE1BQU0sb0NBQXJDOztBQUNBdEgsb0JBQUlhLEtBQUosQ0FBVyxtREFBa0R5RyxzQkFBdUIsRUFBcEY7O0FBQ0F0SCxvQkFBSWEsS0FBSixDQUFXLCtDQUE4Q3FHLFVBQVcsRUFBcEU7O0FBQ0EsUUFBSUksc0JBQXNCLElBQUlKLFVBQTFCLElBQXdDNUosZ0JBQUVpSyxPQUFGLENBQVcsR0FBRUQsc0JBQXVCLEVBQXBDLE1BQTJDaEssZ0JBQUVpSyxPQUFGLENBQVcsR0FBRUwsVUFBVyxFQUF4QixDQUF2RixFQUFtSDtBQUNqSGxILHNCQUFJQyxJQUFKLENBQVMsd0ZBQ04sd0RBQXVEcUgsc0JBQXVCLE9BQU1KLFVBQVcsR0FEbEc7O0FBRUEsYUFBTyxNQUFNLEtBQUtwRixTQUFMLEVBQWI7QUFDRDs7QUFFRCxVQUFNYixPQUFPLEdBQUdrRyxvQkFBS0MsUUFBTCxDQUFjSCx1QkFBZCxJQUNYLGlEQUFnRCxLQUFLM0csR0FBTCxDQUFTdUIsSUFBSyxXQUFVb0YsdUJBQXdCLEdBRHJGLEdBRVgsaURBQWdELEtBQUszRyxHQUFMLENBQVN1QixJQUFLLEdBRm5FOztBQUdBN0Isb0JBQUlDLElBQUosQ0FBVSxHQUFFZ0IsT0FBUSwrREFBOEQsS0FBS1gsR0FBTCxDQUFTQyxJQUFLLG9DQUFoRzs7QUFDQSxTQUFLOUIsaUJBQUwsR0FBeUIsS0FBSzZCLEdBQUwsQ0FBU3VCLElBQWxDO0FBQ0Q7O0FBS0QsUUFBTTJGLGdCQUFOLEdBQTBCO0FBQ3hCLFVBQU0sS0FBS2pCLElBQUwsRUFBTjtBQUNBLFVBQU0sS0FBS3pFLFNBQUwsRUFBTjtBQUNEOztBQTdja0I7OztlQWdkTjVFLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7IGZzLCB1dGlsLCBwbGlzdCwgbWtkaXJwIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBOb1Nlc3Npb25Qcm94eSB9IGZyb20gJy4vbm8tc2Vzc2lvbi1wcm94eSc7XG5pbXBvcnQge1xuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsIGdldFBJRHNMaXN0ZW5pbmdPblBvcnRcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgWGNvZGVCdWlsZCBmcm9tICcuL3hjb2RlYnVpbGQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgYnVuZGxlV0RBU2ltIH0gZnJvbSAnLi9jaGVjay1kZXBlbmRlbmNpZXMnO1xuaW1wb3J0IHtcbiAgQk9PVFNUUkFQX1BBVEgsIFdEQV9SVU5ORVJfQlVORExFX0lELCBXREFfUlVOTkVSX0FQUCxcbiAgV0RBX0JBU0VfVVJMLCBXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBXREFfTEFVTkNIX1RJTUVPVVQgPSA2MCAqIDEwMDA7XG5jb25zdCBXREFfQUdFTlRfUE9SVCA9IDgxMDA7XG5jb25zdCBXREFfQ0ZfQlVORExFX05BTUUgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXItUnVubmVyJztcbmNvbnN0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbmNsYXNzIFdlYkRyaXZlckFnZW50IHtcbiAgY29uc3RydWN0b3IgKHhjb2RlVmVyc2lvbiwgYXJncyA9IHt9KSB7XG4gICAgdGhpcy54Y29kZVZlcnNpb24gPSB4Y29kZVZlcnNpb247XG5cbiAgICB0aGlzLmFyZ3MgPSBfLmNsb25lKGFyZ3MpO1xuXG4gICAgdGhpcy5kZXZpY2UgPSBhcmdzLmRldmljZTtcbiAgICB0aGlzLnBsYXRmb3JtVmVyc2lvbiA9IGFyZ3MucGxhdGZvcm1WZXJzaW9uO1xuICAgIHRoaXMucGxhdGZvcm1OYW1lID0gYXJncy5wbGF0Zm9ybU5hbWU7XG4gICAgdGhpcy5pb3NTZGtWZXJzaW9uID0gYXJncy5pb3NTZGtWZXJzaW9uO1xuICAgIHRoaXMuaG9zdCA9IGFyZ3MuaG9zdDtcbiAgICB0aGlzLmlzUmVhbERldmljZSA9ICEhYXJncy5yZWFsRGV2aWNlO1xuICAgIHRoaXMuaWRiID0gKGFyZ3MuZGV2aWNlIHx8IHt9KS5pZGI7XG4gICAgdGhpcy53ZGFCdW5kbGVQYXRoID0gYXJncy53ZGFCdW5kbGVQYXRoO1xuXG4gICAgdGhpcy5zZXRXREFQYXRocyhhcmdzLmJvb3RzdHJhcFBhdGgsIGFyZ3MuYWdlbnRQYXRoKTtcblxuICAgIHRoaXMud2RhTG9jYWxQb3J0ID0gYXJncy53ZGFMb2NhbFBvcnQ7XG4gICAgdGhpcy53ZGFSZW1vdGVQb3J0ID0gYXJncy53ZGFMb2NhbFBvcnQgfHwgV0RBX0FHRU5UX1BPUlQ7XG4gICAgdGhpcy53ZGFCYXNlVXJsID0gYXJncy53ZGFCYXNlVXJsIHx8IFdEQV9CQVNFX1VSTDtcblxuICAgIHRoaXMucHJlYnVpbGRXREEgPSBhcmdzLnByZWJ1aWxkV0RBO1xuXG4gICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IGFyZ3Mud2ViRHJpdmVyQWdlbnRVcmw7XG5cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMud2RhQ29ubmVjdGlvblRpbWVvdXQgPSBhcmdzLndkYUNvbm5lY3Rpb25UaW1lb3V0O1xuXG4gICAgdGhpcy51c2VYY3Rlc3RydW5GaWxlID0gYXJncy51c2VYY3Rlc3RydW5GaWxlO1xuICAgIHRoaXMudXNlUHJlYnVpbHRXREEgPSBhcmdzLnVzZVByZWJ1aWx0V0RBO1xuICAgIHRoaXMuZGVyaXZlZERhdGFQYXRoID0gYXJncy5kZXJpdmVkRGF0YVBhdGg7XG4gICAgdGhpcy5tanBlZ1NlcnZlclBvcnQgPSBhcmdzLm1qcGVnU2VydmVyUG9ydDtcblxuICAgIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkID0gYXJncy51cGRhdGVkV0RBQnVuZGxlSWQ7XG5cbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBuZXcgWGNvZGVCdWlsZCh0aGlzLnhjb2RlVmVyc2lvbiwgdGhpcy5kZXZpY2UsIHtcbiAgICAgIHBsYXRmb3JtVmVyc2lvbjogdGhpcy5wbGF0Zm9ybVZlcnNpb24sXG4gICAgICBwbGF0Zm9ybU5hbWU6IHRoaXMucGxhdGZvcm1OYW1lLFxuICAgICAgaW9zU2RrVmVyc2lvbjogdGhpcy5pb3NTZGtWZXJzaW9uLFxuICAgICAgYWdlbnRQYXRoOiB0aGlzLmFnZW50UGF0aCxcbiAgICAgIGJvb3RzdHJhcFBhdGg6IHRoaXMuYm9vdHN0cmFwUGF0aCxcbiAgICAgIHJlYWxEZXZpY2U6IHRoaXMuaXNSZWFsRGV2aWNlLFxuICAgICAgc2hvd1hjb2RlTG9nOiBhcmdzLnNob3dYY29kZUxvZyxcbiAgICAgIHhjb2RlQ29uZmlnRmlsZTogYXJncy54Y29kZUNvbmZpZ0ZpbGUsXG4gICAgICB4Y29kZU9yZ0lkOiBhcmdzLnhjb2RlT3JnSWQsXG4gICAgICB4Y29kZVNpZ25pbmdJZDogYXJncy54Y29kZVNpZ25pbmdJZCxcbiAgICAgIGtleWNoYWluUGF0aDogYXJncy5rZXljaGFpblBhdGgsXG4gICAgICBrZXljaGFpblBhc3N3b3JkOiBhcmdzLmtleWNoYWluUGFzc3dvcmQsXG4gICAgICB1c2VTaW1wbGVCdWlsZFRlc3Q6IGFyZ3MudXNlU2ltcGxlQnVpbGRUZXN0LFxuICAgICAgdXNlUHJlYnVpbHRXREE6IGFyZ3MudXNlUHJlYnVpbHRXREEsXG4gICAgICB1cGRhdGVkV0RBQnVuZGxlSWQ6IHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkLFxuICAgICAgbGF1bmNoVGltZW91dDogYXJncy53ZGFMYXVuY2hUaW1lb3V0IHx8IFdEQV9MQVVOQ0hfVElNRU9VVCxcbiAgICAgIHdkYVJlbW90ZVBvcnQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIHVzZVhjdGVzdHJ1bkZpbGU6IHRoaXMudXNlWGN0ZXN0cnVuRmlsZSxcbiAgICAgIGRlcml2ZWREYXRhUGF0aDogYXJncy5kZXJpdmVkRGF0YVBhdGgsXG4gICAgICBtanBlZ1NlcnZlclBvcnQ6IHRoaXMubWpwZWdTZXJ2ZXJQb3J0LFxuICAgICAgYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb246IGFyZ3MuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24sXG4gICAgICByZXN1bHRCdW5kbGVQYXRoOiBhcmdzLnJlc3VsdEJ1bmRsZVBhdGgsXG4gICAgICByZXN1bHRCdW5kbGVWZXJzaW9uOiBhcmdzLnJlc3VsdEJ1bmRsZVZlcnNpb24sXG4gICAgfSk7XG4gIH1cblxuICBzZXRXREFQYXRocyAoYm9vdHN0cmFwUGF0aCwgYWdlbnRQYXRoKSB7XG4gICAgLy8gYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSBhIHBsYWNlIGZvciBXREEuIFRoaXMgaXMgdW5kb2N1bWVudGVkIGFuZFxuICAgIC8vIG9ubHkgaGVyZSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlc3RpbmcgZGV2ZWxvcG1lbnQgb2YgV0RBXG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYm9vdHN0cmFwUGF0aCB8fCBCT09UU1RSQVBfUEFUSDtcbiAgICBsb2cuaW5mbyhgVXNpbmcgV0RBIHBhdGg6ICcke3RoaXMuYm9vdHN0cmFwUGF0aH0nYCk7XG5cbiAgICAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gc3BlY2lmeSBhZ2VudFBhdGggdG9vXG4gICAgdGhpcy5hZ2VudFBhdGggPSBhZ2VudFBhdGggfHwgcGF0aC5yZXNvbHZlKHRoaXMuYm9vdHN0cmFwUGF0aCwgJ1dlYkRyaXZlckFnZW50Lnhjb2RlcHJvaicpO1xuICAgIGxvZy5pbmZvKGBVc2luZyBXREEgYWdlbnQ6ICcke3RoaXMuYWdlbnRQYXRofSdgKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyAoKSB7XG4gICAgY29uc3Qgb2Jzb2xldGVQaWRzID0gYXdhaXQgZ2V0UElEc0xpc3RlbmluZ09uUG9ydCh0aGlzLnVybC5wb3J0LFxuICAgICAgKGNtZExpbmUpID0+IGNtZExpbmUuaW5jbHVkZXMoJy9XZWJEcml2ZXJBZ2VudFJ1bm5lcicpICYmXG4gICAgICAgICFjbWRMaW5lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5kZXZpY2UudWRpZC50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KG9ic29sZXRlUGlkcykpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgTm8gb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3NlcyBmcm9tIHByZXZpb3VzIFdEQSBzZXNzaW9ucyBgICtcbiAgICAgICAgYGxpc3RlbmluZyBvbiBwb3J0ICR7dGhpcy51cmwucG9ydH0gaGF2ZSBiZWVuIGZvdW5kYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmluZm8oYERldGVjdGVkICR7b2Jzb2xldGVQaWRzLmxlbmd0aH0gb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3Mke29ic29sZXRlUGlkcy5sZW5ndGggPT09IDEgPyAnJyA6ICdlcyd9IGAgK1xuICAgICAgYGZyb20gcHJldmlvdXMgV0RBIHNlc3Npb25zLiBDbGVhbmluZyB0aGVtIHVwYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoJ2tpbGwnLCBvYnNvbGV0ZVBpZHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBGYWlsZWQgdG8ga2lsbCBvYnNvbGV0ZSBjYWNoZWQgcHJvY2VzcyR7b2Jzb2xldGVQaWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30gJyR7b2Jzb2xldGVQaWRzfScuIGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpZiBXREEgaXMgcnVubmluZyBvciBub3RcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBXREEgaXMgcnVubmluZ1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGludmFsaWQgcmVzcG9uc2UgY29kZSBvciBib2R5XG4gICAqL1xuICBhc3luYyBpc1J1bm5pbmcgKCkge1xuICAgIHJldHVybiAhIShhd2FpdCB0aGlzLmdldFN0YXR1cygpKTtcbiAgfVxuXG4gIGdldCBiYXNlUGF0aCAoKSB7XG4gICAgaWYgKHRoaXMudXJsLnBhdGggPT09ICcvJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cmwucGF0aCB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY3VycmVudCBydW5uaW5nIFdEQSdzIHN0YXR1cyBsaWtlIGJlbG93XG4gICAqIHtcbiAgICogICBcInN0YXRlXCI6IFwic3VjY2Vzc1wiLFxuICAgKiAgIFwib3NcIjoge1xuICAgKiAgICAgXCJuYW1lXCI6IFwiaU9TXCIsXG4gICAqICAgICBcInZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcInNka1ZlcnNpb25cIjogXCIxMS4zXCJcbiAgICogICB9LFxuICAgKiAgIFwiaW9zXCI6IHtcbiAgICogICAgIFwic2ltdWxhdG9yVmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwiaXBcIjogXCIxNzIuMjU0Ljk5LjM0XCJcbiAgICogICB9LFxuICAgKiAgIFwiYnVpbGRcIjoge1xuICAgKiAgICAgXCJ0aW1lXCI6IFwiSnVuIDI0IDIwMTggMTc6MDg6MjFcIixcbiAgICogICAgIFwicHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJcIjogXCJjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXJcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBTdGF0ZSBPYmplY3RcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdHVzICgpIHtcbiAgICBjb25zdCBub1Nlc3Npb25Qcm94eSA9IG5ldyBOb1Nlc3Npb25Qcm94eSh7XG4gICAgICBzZXJ2ZXI6IHRoaXMudXJsLmhvc3RuYW1lLFxuICAgICAgcG9ydDogdGhpcy51cmwucG9ydCxcbiAgICAgIGJhc2U6IHRoaXMuYmFzZVBhdGgsXG4gICAgICB0aW1lb3V0OiAzMDAwLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgbm9TZXNzaW9uUHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgV0RBIGlzIG5vdCBsaXN0ZW5pbmcgYXQgJyR7dGhpcy51cmwuaHJlZn0nYCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5pbnN0YWxsIFdEQXMgZnJvbSB0aGUgdGVzdCBkZXZpY2UuXG4gICAqIE92ZXIgWGNvZGUgMTEsIG11bHRpcGxlIFdEQSBjYW4gYmUgaW4gdGhlIGRldmljZSBzaW5jZSBYY29kZSAxMSBnZW5lcmF0ZXMgZGlmZmVyZW50IFdEQS5cbiAgICogQXBwaXVtIGRvZXMgbm90IGV4cGVjdCBtdWx0aXBsZSBXREFzIGFyZSBydW5uaW5nIG9uIGEgZGV2aWNlLlxuICAgKi9cbiAgYXN5bmMgdW5pbnN0YWxsICgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnVuZGxlSWRzID0gYXdhaXQgdGhpcy5kZXZpY2UuZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZShXREFfQ0ZfQlVORExFX05BTUUpO1xuICAgICAgaWYgKF8uaXNFbXB0eShidW5kbGVJZHMpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnTm8gV0RBcyBvbiB0aGUgZGV2aWNlLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxvZy5kZWJ1ZyhgVW5pbnN0YWxsaW5nIFdEQXM6ICcke2J1bmRsZUlkc30nYCk7XG4gICAgICBmb3IgKGNvbnN0IGJ1bmRsZUlkIG9mIGJ1bmRsZUlkcykge1xuICAgICAgICBhd2FpdCB0aGlzLmRldmljZS5yZW1vdmVBcHAoYnVuZGxlSWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5kZWJ1ZyhlKTtcbiAgICAgIGxvZy53YXJuKGBXZWJEcml2ZXJBZ2VudCB1bmluc3RhbGwgZmFpbGVkLiBQZXJoYXBzLCBpdCBpcyBhbHJlYWR5IHVuaW5zdGFsbGVkPyBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfY2xlYW51cFByb2plY3RJZkZyZXNoICgpIHtcbiAgICBjb25zdCBob21lRm9sZGVyID0gcHJvY2Vzcy5lbnYuSE9NRTtcbiAgICBpZiAoIWhvbWVGb2xkZXIpIHtcbiAgICAgIGxvZy5pbmZvKCdUaGUgSE9NRSBmb2xkZXIgcGF0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCgpO1xuICAgIGlmICghXy5pc0ludGVnZXIoY3VycmVudFVwZ3JhZGVUaW1lc3RhbXApKSB7XG4gICAgICBsb2cuaW5mbygnSXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgcGFja2FnZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVzdGFtcFBhdGggPSBwYXRoLnJlc29sdmUoaG9tZUZvbGRlciwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHModGltZXN0YW1wUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2Vzcyh0aW1lc3RhbXBQYXRoLCBmcy5XX09LKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICBsb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgYXQgJyR7dGltZXN0YW1wUGF0aH0nIGlzIG5vdCB3cml0ZWFibGUuIGAgK1xuICAgICAgICAgIGBTa2lwcGluZyBzb3VyY2VzIGNsZWFudXBgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjZW50VXBncmFkZVRpbWVzdGFtcCA9IHBhcnNlSW50KGF3YWl0IGZzLnJlYWRGaWxlKHRpbWVzdGFtcFBhdGgsICd1dGY4JyksIDEwKTtcbiAgICAgIGlmIChfLmlzSW50ZWdlcihyZWNlbnRVcGdyYWRlVGltZXN0YW1wKSkge1xuICAgICAgICBpZiAocmVjZW50VXBncmFkZVRpbWVzdGFtcCA+PSBjdXJyZW50VXBncmFkZVRpbWVzdGFtcCkge1xuICAgICAgICAgIGxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCBkb2VzIG5vdCBuZWVkIGEgY2xlYW51cC4gVGhlIHNvdXJjZXMgYXJlIHVwIHRvIGRhdGUgYCArXG4gICAgICAgICAgICBgKCR7cmVjZW50VXBncmFkZVRpbWVzdGFtcH0gPj0gJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0pYCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCBzb3VyY2VzIGhhdmUgYmVlbiB1cGdyYWRlZCBgICtcbiAgICAgICAgICBgKCR7cmVjZW50VXBncmFkZVRpbWVzdGFtcH0gPCAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfSlgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKGBUaGUgcmVjZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9JyBpcyBjb3JydXB0ZWQuIFRyeWluZyB0byBmaXggaXRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgbWtkaXJwKHBhdGguZGlybmFtZSh0aW1lc3RhbXBQYXRoKSk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGltZXN0YW1wUGF0aCwgYCR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9YCwgJ3V0ZjgnKTtcbiAgICAgIGxvZy5kZWJ1ZyhgU3RvcmVkIHRoZSByZWNlbnQgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0gYCArXG4gICAgICAgIGBhdCAnJHt0aW1lc3RhbXBQYXRofSdgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuaW5mbyhgVW5hYmxlIHRvIGNyZWF0ZSB0aGUgcmVjZW50IFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9Jy4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5jbGVhblByb2plY3QoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihgQ2Fubm90IHBlcmZvcm0gV2ViRHJpdmVyQWdlbnQgcHJvamVjdCBjbGVhbnVwLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBjdXJyZW50IHJ1bm5pbmcgV0RBJ3Mgc3RhdHVzIGxpa2UgYmVsb3cgYWZ0ZXIgbGF1bmNoaW5nIFdEQVxuICAgKiB7XG4gICAqICAgXCJzdGF0ZVwiOiBcInN1Y2Nlc3NcIixcbiAgICogICBcIm9zXCI6IHtcbiAgICogICAgIFwibmFtZVwiOiBcImlPU1wiLFxuICAgKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJzZGtWZXJzaW9uXCI6IFwiMTEuM1wiXG4gICAqICAgfSxcbiAgICogICBcImlvc1wiOiB7XG4gICAqICAgICBcInNpbXVsYXRvclZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcImlwXCI6IFwiMTcyLjI1NC45OS4zNFwiXG4gICAqICAgfSxcbiAgICogICBcImJ1aWxkXCI6IHtcbiAgICogICAgIFwidGltZVwiOiBcIkp1biAyNCAyMDE4IDE3OjA4OjIxXCIsXG4gICAqICAgICBcInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyXCI6IFwiY29tLmZhY2Vib29rLldlYkRyaXZlckFnZW50UnVubmVyXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCBMYXVuY2ggV0RBIGFuZCBlc3RhYmxpc2ggdGhlIHNlc3Npb24gd2l0aCB0aGlzIHNlc3Npb25JZFxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBTdGF0ZSBPYmplY3RcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgbGF1bmNoIChzZXNzaW9uSWQpIHtcbiAgICBpZiAodGhpcy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgbG9nLmluZm8oYFVzaW5nIHByb3ZpZGVkIFdlYmRyaXZlckFnZW50IGF0ICcke3RoaXMud2ViRHJpdmVyQWdlbnRVcmx9J2ApO1xuICAgICAgdGhpcy51cmwgPSB0aGlzLndlYkRyaXZlckFnZW50VXJsO1xuICAgICAgdGhpcy5zZXR1cFByb3hpZXMoc2Vzc2lvbklkKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH1cblxuICAgIGxvZy5pbmZvKCdMYXVuY2hpbmcgV2ViRHJpdmVyQWdlbnQgb24gdGhlIGRldmljZScpO1xuXG4gICAgdGhpcy5zZXR1cFByb3hpZXMoc2Vzc2lvbklkKTtcblxuICAgIGlmICghdGhpcy51c2VYY3Rlc3RydW5GaWxlICYmICFhd2FpdCBmcy5leGlzdHModGhpcy5hZ2VudFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byB1c2UgV2ViRHJpdmVyQWdlbnQgcHJvamVjdCBhdCAnJHt0aGlzLmFnZW50UGF0aH0nIGJ1dCB0aGUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgJ2ZpbGUgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG5cbiAgICAvLyB1c2VYY3Rlc3RydW5GaWxlIGFuZCB1c2VQcmVidWlsdFdEQSB1c2UgZXhpc3RpbmcgZGVwZW5kZW5jaWVzXG4gICAgLy8gSXQgZGVwZW5kcyBvbiB1c2VyIHNpZGVcbiAgICBpZiAodGhpcy5pZGIgfHwgdGhpcy51c2VYY3Rlc3RydW5GaWxlIHx8ICh0aGlzLmRlcml2ZWREYXRhUGF0aCAmJiB0aGlzLnVzZVByZWJ1aWx0V0RBKSkge1xuICAgICAgbG9nLmluZm8oJ1NraXBwZWQgV0RBIHByb2plY3QgY2xlYW51cCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGNhcGFiaWxpdGllcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZSh0aGlzLmJvb3RzdHJhcFBhdGgpO1xuICAgICAgYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSxcbiAgICAgICAgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5fY2xlYW51cFByb2plY3RJZkZyZXNoKCkpO1xuICAgIH1cblxuICAgIC8vIFdlIG5lZWQgdG8gcHJvdmlkZSBXREEgbG9jYWwgcG9ydCwgYmVjYXVzZSBpdCBtaWdodCBiZSBvY2N1cGllZFxuICAgIGF3YWl0IHJlc2V0VGVzdFByb2Nlc3Nlcyh0aGlzLmRldmljZS51ZGlkLCAhdGhpcy5pc1JlYWxEZXZpY2UpO1xuXG4gICAgaWYgKHRoaXMuaWRiKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zdGFydFdpdGhJREIoKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQuaW5pdCh0aGlzLm5vU2Vzc2lvblByb3h5KTtcblxuICAgIC8vIFN0YXJ0IHRoZSB4Y29kZWJ1aWxkIHByb2Nlc3NcbiAgICBpZiAodGhpcy5wcmVidWlsZFdEQSkge1xuICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnByZWJ1aWxkKCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLnhjb2RlYnVpbGQuc3RhcnQoKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0V2l0aElEQiAoKSB7XG4gICAgbG9nLmluZm8oJ1dpbGwgbGF1bmNoIFdEQSB3aXRoIGlkYiBpbnN0ZWFkIG9mIHhjb2RlYnVpbGQgc2luY2UgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZyBpcyBlbmFibGVkJyk7XG4gICAgY29uc3Qge3dkYUJ1bmRsZUlkLCB0ZXN0QnVuZGxlSWR9ID0gYXdhaXQgdGhpcy5wcmVwYXJlV0RBKCk7XG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIFdEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCxcbiAgICB9O1xuICAgIGlmICh0aGlzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgZW52Lk1KUEVHX1NFUlZFUl9QT1JUID0gdGhpcy5tanBlZ1NlcnZlclBvcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaWRiLnJ1blhDVUlUZXN0KHdkYUJ1bmRsZUlkLCB3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkLCB7ZW52fSk7XG4gIH1cblxuICBhc3luYyBwYXJzZUJ1bmRsZUlkICh3ZGFCdW5kbGVQYXRoKSB7XG4gICAgY29uc3QgaW5mb1BsaXN0UGF0aCA9IHBhdGguam9pbih3ZGFCdW5kbGVQYXRoLCAnSW5mby5wbGlzdCcpO1xuICAgIGNvbnN0IGluZm9QbGlzdCA9IGF3YWl0IHBsaXN0LnBhcnNlUGxpc3QoYXdhaXQgZnMucmVhZEZpbGUoaW5mb1BsaXN0UGF0aCkpO1xuICAgIGlmICghaW5mb1BsaXN0LkNGQnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBidW5kbGUgaWQgaW4gJyR7aW5mb1BsaXN0UGF0aH0nYCk7XG4gICAgfVxuICAgIHJldHVybiBpbmZvUGxpc3QuQ0ZCdW5kbGVJZGVudGlmaWVyO1xuICB9XG5cbiAgYXN5bmMgcHJlcGFyZVdEQSAoKSB7XG4gICAgY29uc3Qgd2RhQnVuZGxlUGF0aCA9IHRoaXMud2RhQnVuZGxlUGF0aCB8fCBhd2FpdCB0aGlzLmZldGNoV0RBQnVuZGxlKCk7XG4gICAgY29uc3Qgd2RhQnVuZGxlSWQgPSBhd2FpdCB0aGlzLnBhcnNlQnVuZGxlSWQod2RhQnVuZGxlUGF0aCk7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmRldmljZS5pc0FwcEluc3RhbGxlZCh3ZGFCdW5kbGVJZCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGV2aWNlLmluc3RhbGxBcHAod2RhQnVuZGxlUGF0aCk7XG4gICAgfVxuICAgIGNvbnN0IHRlc3RCdW5kbGVJZCA9IGF3YWl0IHRoaXMuaWRiLmluc3RhbGxYQ1Rlc3RCdW5kbGUocGF0aC5qb2luKHdkYUJ1bmRsZVBhdGgsICdQbHVnSW5zJywgJ1dlYkRyaXZlckFnZW50UnVubmVyLnhjdGVzdCcpKTtcbiAgICByZXR1cm4ge3dkYUJ1bmRsZUlkLCB0ZXN0QnVuZGxlSWQsIHdkYUJ1bmRsZVBhdGh9O1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hXREFCdW5kbGUgKCkge1xuICAgIGlmICghdGhpcy5kZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiBhd2FpdCBidW5kbGVXREFTaW0odGhpcy54Y29kZWJ1aWxkKTtcbiAgICB9XG4gICAgY29uc3Qgd2RhQnVuZGxlUGF0aHMgPSBhd2FpdCBmcy5nbG9iKGAke3RoaXMuZGVyaXZlZERhdGFQYXRofS8qKi8qJHtXREFfUlVOTkVSX0FQUH0vYCwge1xuICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgfSk7XG4gICAgaWYgKF8uaXNFbXB0eSh3ZGFCdW5kbGVQYXRocykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIFdEQSBidW5kbGUgaW4gJyR7dGhpcy5kZXJpdmVkRGF0YVBhdGh9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gd2RhQnVuZGxlUGF0aHNbMF07XG4gIH1cblxuICBhc3luYyBpc1NvdXJjZUZyZXNoICgpIHtcbiAgICBjb25zdCBleGlzdHNQcm9taXNlcyA9IFtcbiAgICAgICdSZXNvdXJjZXMnLFxuICAgICAgYFJlc291cmNlcyR7cGF0aC5zZXB9V2ViRHJpdmVyQWdlbnQuYnVuZGxlYCxcbiAgICBdLm1hcCgoc3ViUGF0aCkgPT4gZnMuZXhpc3RzKHBhdGgucmVzb2x2ZSh0aGlzLmJvb3RzdHJhcFBhdGgsIHN1YlBhdGgpKSk7XG4gICAgcmV0dXJuIChhd2FpdCBCLmFsbChleGlzdHNQcm9taXNlcykpLnNvbWUoKHYpID0+IHYgPT09IGZhbHNlKTtcbiAgfVxuXG4gIHNldHVwUHJveGllcyAoc2Vzc2lvbklkKSB7XG4gICAgY29uc3QgcHJveHlPcHRzID0ge1xuICAgICAgc2VydmVyOiB0aGlzLnVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHRoaXMudXJsLnBvcnQsXG4gICAgICBiYXNlOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgdGltZW91dDogdGhpcy53ZGFDb25uZWN0aW9uVGltZW91dCxcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IEpXUHJveHkocHJveHlPcHRzKTtcbiAgICB0aGlzLmp3cHJveHkuc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLmp3cHJveHkpO1xuXG4gICAgdGhpcy5ub1Nlc3Npb25Qcm94eSA9IG5ldyBOb1Nlc3Npb25Qcm94eShwcm94eU9wdHMpO1xuICB9XG5cbiAgYXN5bmMgcXVpdCAoKSB7XG4gICAgbG9nLmluZm8oJ1NodXR0aW5nIGRvd24gc3ViLXByb2Nlc3NlcycpO1xuXG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnF1aXQoKTtcbiAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucmVzZXQoKTtcblxuICAgIGlmICh0aGlzLmp3cHJveHkpIHtcbiAgICAgIHRoaXMuandwcm94eS5zZXNzaW9uSWQgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmFyZ3Mud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIC8vIGlmIHdlIHBvcHVsYXRlZCB0aGUgdXJsIG91cnNlbHZlcyAoZHVyaW5nIGBzZXR1cENhY2hpbmdgIGNhbGwsIGZvciBpbnN0YW5jZSlcbiAgICAgIC8vIHRoZW4gY2xlYW4gdGhhdCB1cC4gSWYgdGhlIHVybCB3YXMgc3VwcGxpZWQsIHdlIHdhbnQgdG8ga2VlcCBpdFxuICAgICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHVybCAoKSB7XG4gICAgaWYgKCF0aGlzLl91cmwpIHtcbiAgICAgIGlmICh0aGlzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgIHRoaXMuX3VybCA9IHVybC5wYXJzZSh0aGlzLndlYkRyaXZlckFnZW50VXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLndkYUxvY2FsUG9ydCB8fCBXREFfQUdFTlRfUE9SVDtcbiAgICAgICAgY29uc3Qge3Byb3RvY29sLCBob3N0bmFtZX0gPSB1cmwucGFyc2UodGhpcy53ZGFCYXNlVXJsIHx8IFdEQV9CQVNFX1VSTCk7XG4gICAgICAgIHRoaXMuX3VybCA9IHVybC5wYXJzZShgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9OiR7cG9ydH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwgKF91cmwpIHtcbiAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UoX3VybCk7XG4gIH1cblxuICBnZXQgZnVsbHlTdGFydGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydGVkO1xuICB9XG5cbiAgc2V0IGZ1bGx5U3RhcnRlZCAoc3RhcnRlZCA9IGZhbHNlKSB7XG4gICAgdGhpcy5zdGFydGVkID0gc3RhcnRlZDtcbiAgfVxuXG4gIGFzeW5jIHJldHJpZXZlRGVyaXZlZERhdGFQYXRoICgpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV1c2UgcnVubmluZyBXREEgaWYgaXQgaGFzIHRoZSBzYW1lIGJ1bmRsZSBpZCB3aXRoIHVwZGF0ZWRXREFCdW5kbGVJZC5cbiAgICogT3IgcmV1c2UgaXQgaWYgaXQgaGFzIHRoZSBkZWZhdWx0IGlkIHdpdGhvdXQgdXBkYXRlZFdEQUJ1bmRsZUlkLlxuICAgKiBVbmluc3RhbGwgaXQgaWYgdGhlIG1ldGhvZCBmYWNlcyBhbiBleGNlcHRpb24gZm9yIHRoZSBhYm92ZSBzaXR1YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cGRhdGVkV0RBQnVuZGxlSWQgQnVuZGxlSWQgeW91J2QgbGlrZSB0byB1c2VcbiAgICovXG4gIGFzeW5jIHNldHVwQ2FjaGluZyAoKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICBpZiAoIXN0YXR1cyB8fCAhc3RhdHVzLmJ1aWxkKSB7XG4gICAgICBsb2cuZGVidWcoJ1dEQSBpcyBjdXJyZW50bHkgbm90IHJ1bm5pbmcuIFRoZXJlIGlzIG5vdGhpbmcgdG8gY2FjaGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcixcbiAgICAgIHVwZ3JhZGVkQXQsXG4gICAgfSA9IHN0YXR1cy5idWlsZDtcbiAgICAvLyBmb3IgcmVhbCBkZXZpY2VcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikgJiYgdXRpbC5oYXNWYWx1ZSh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgIT09IHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICBsb2cuaW5mbyhgV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXQgaGFzIGRpZmZlcmVudCBidW5kbGUgaWQuIFRoZSBhY3R1YWwgdmFsdWUgaXMgJyR7cHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJ9Jy5gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cbiAgICAvLyBmb3Igc2ltdWxhdG9yXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpICYmICF1dGlsLmhhc1ZhbHVlKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSAmJiBXREFfUlVOTkVSX0JVTkRMRV9JRCAhPT0gcHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIGxvZy5pbmZvKGBXaWxsIHVuaW5zdGFsbCBydW5uaW5nIFdEQSBzaW5jZSBpdHMgYnVuZGxlIGlkIGlzIG5vdCBlcXVhbCB0byB0aGUgZGVmYXVsdCB2YWx1ZSAke1dEQV9SVU5ORVJfQlVORExFX0lEfWApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0dWFsVXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAoKTtcbiAgICBsb2cuZGVidWcoYFVwZ3JhZGUgdGltZXN0YW1wIG9mIHRoZSBjdXJyZW50bHkgYnVuZGxlZCBXREE6ICR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH1gKTtcbiAgICBsb2cuZGVidWcoYFVwZ3JhZGUgdGltZXN0YW1wIG9mIHRoZSBXREEgb24gdGhlIGRldmljZTogJHt1cGdyYWRlZEF0fWApO1xuICAgIGlmIChhY3R1YWxVcGdyYWRlVGltZXN0YW1wICYmIHVwZ3JhZGVkQXQgJiYgXy50b0xvd2VyKGAke2FjdHVhbFVwZ3JhZGVUaW1lc3RhbXB9YCkgIT09IF8udG9Mb3dlcihgJHt1cGdyYWRlZEF0fWApKSB7XG4gICAgICBsb2cuaW5mbygnV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXQgaGFzIGRpZmZlcmVudCB2ZXJzaW9uIGluIGNvbXBhcmlzb24gdG8gdGhlIG9uZSAnICtcbiAgICAgICAgYHdoaWNoIGlzIGJ1bmRsZWQgd2l0aCBhcHBpdW0teGN1aXRlc3QtZHJpdmVyIG1vZHVsZSAoJHthY3R1YWxVcGdyYWRlVGltZXN0YW1wfSAhPSAke3VwZ3JhZGVkQXR9KWApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpXG4gICAgICA/IGBXaWxsIHJldXNlIHByZXZpb3VzbHkgY2FjaGVkIFdEQSBpbnN0YW5jZSBhdCAnJHt0aGlzLnVybC5ocmVmfScgd2l0aCAnJHtwcm9kdWN0QnVuZGxlSWRlbnRpZmllcn0nYFxuICAgICAgOiBgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBXREEgaW5zdGFuY2UgYXQgJyR7dGhpcy51cmwuaHJlZn0nYDtcbiAgICBsb2cuaW5mbyhgJHttZXNzYWdlfS4gU2V0IHRoZSB3ZGFMb2NhbFBvcnQgY2FwYWJpbGl0eSB0byBhIHZhbHVlIGRpZmZlcmVudCBmcm9tICR7dGhpcy51cmwucG9ydH0gaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuYCk7XG4gICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IHRoaXMudXJsLmhyZWY7XG4gIH1cblxuICAvKipcbiAgICogUXVpdCBhbmQgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBLlxuICAgKi9cbiAgYXN5bmMgcXVpdEFuZFVuaW5zdGFsbCAoKSB7XG4gICAgYXdhaXQgdGhpcy5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXZWJEcml2ZXJBZ2VudDtcbmV4cG9ydCB7IFdlYkRyaXZlckFnZW50IH07XG4iXSwiZmlsZSI6ImxpYi93ZWJkcml2ZXJhZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
470
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJuYW1lcyI6WyJXREFfTEFVTkNIX1RJTUVPVVQiLCJXREFfQUdFTlRfUE9SVCIsIldEQV9DRl9CVU5ETEVfTkFNRSIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXZWJEcml2ZXJBZ2VudCIsImNvbnN0cnVjdG9yIiwieGNvZGVWZXJzaW9uIiwiYXJncyIsIl8iLCJjbG9uZSIsImRldmljZSIsInBsYXRmb3JtVmVyc2lvbiIsInBsYXRmb3JtTmFtZSIsImlvc1Nka1ZlcnNpb24iLCJob3N0IiwiaXNSZWFsRGV2aWNlIiwicmVhbERldmljZSIsImlkYiIsIndkYUJ1bmRsZVBhdGgiLCJzZXRXREFQYXRocyIsImJvb3RzdHJhcFBhdGgiLCJhZ2VudFBhdGgiLCJ3ZGFMb2NhbFBvcnQiLCJ3ZGFSZW1vdGVQb3J0Iiwid2RhQmFzZVVybCIsIldEQV9CQVNFX1VSTCIsInByZWJ1aWxkV0RBIiwid2ViRHJpdmVyQWdlbnRVcmwiLCJzdGFydGVkIiwid2RhQ29ubmVjdGlvblRpbWVvdXQiLCJ1c2VYY3Rlc3RydW5GaWxlIiwidXNlUHJlYnVpbHRXREEiLCJkZXJpdmVkRGF0YVBhdGgiLCJtanBlZ1NlcnZlclBvcnQiLCJ1cGRhdGVkV0RBQnVuZGxlSWQiLCJ4Y29kZWJ1aWxkIiwiWGNvZGVCdWlsZCIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJ1c2VTaW1wbGVCdWlsZFRlc3QiLCJsYXVuY2hUaW1lb3V0Iiwid2RhTGF1bmNoVGltZW91dCIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJCT09UU1RSQVBfUEFUSCIsImxvZyIsImluZm8iLCJwYXRoIiwicmVzb2x2ZSIsImNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcyIsIm9ic29sZXRlUGlkcyIsInVybCIsInBvcnQiLCJjbWRMaW5lIiwiaW5jbHVkZXMiLCJ0b0xvd2VyQ2FzZSIsInVkaWQiLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJpc1J1bm5pbmciLCJnZXRTdGF0dXMiLCJiYXNlUGF0aCIsIm5vU2Vzc2lvblByb3h5IiwiTm9TZXNzaW9uUHJveHkiLCJzZXJ2ZXIiLCJob3N0bmFtZSIsImJhc2UiLCJ0aW1lb3V0IiwiY29tbWFuZCIsImVyciIsImhyZWYiLCJ1bmluc3RhbGwiLCJidW5kbGVJZHMiLCJnZXRVc2VySW5zdGFsbGVkQnVuZGxlSWRzQnlCdW5kbGVOYW1lIiwiYnVuZGxlSWQiLCJyZW1vdmVBcHAiLCJfY2xlYW51cFByb2plY3RJZkZyZXNoIiwiaG9tZUZvbGRlciIsInByb2Nlc3MiLCJlbnYiLCJIT01FIiwiY3VycmVudFVwZ3JhZGVUaW1lc3RhbXAiLCJpc0ludGVnZXIiLCJ0aW1lc3RhbXBQYXRoIiwiV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgiLCJmcyIsImV4aXN0cyIsImFjY2VzcyIsIldfT0siLCJpZ24iLCJyZWNlbnRVcGdyYWRlVGltZXN0YW1wIiwicGFyc2VJbnQiLCJyZWFkRmlsZSIsImRpcm5hbWUiLCJ3cml0ZUZpbGUiLCJjbGVhblByb2plY3QiLCJsYXVuY2giLCJzZXNzaW9uSWQiLCJzZXR1cFByb3hpZXMiLCJFcnJvciIsInN5bmNocm9uaXphdGlvbktleSIsIm5vcm1hbGl6ZSIsImFjcXVpcmUiLCJzdGFydFdpdGhJREIiLCJpbml0IiwicHJlYnVpbGQiLCJzdGFydCIsIndkYUJ1bmRsZUlkIiwidGVzdEJ1bmRsZUlkIiwicHJlcGFyZVdEQSIsIlVTRV9QT1JUIiwiV0RBX1BST0RVQ1RfQlVORExFX0lERU5USUZJRVIiLCJNSlBFR19TRVJWRVJfUE9SVCIsInJ1blhDVUlUZXN0IiwicGFyc2VCdW5kbGVJZCIsImluZm9QbGlzdFBhdGgiLCJqb2luIiwiaW5mb1BsaXN0IiwicGxpc3QiLCJwYXJzZVBsaXN0IiwiQ0ZCdW5kbGVJZGVudGlmaWVyIiwiZmV0Y2hXREFCdW5kbGUiLCJpc0FwcEluc3RhbGxlZCIsImluc3RhbGxBcHAiLCJpbnN0YWxsWENUZXN0QnVuZGxlIiwid2RhQnVuZGxlUGF0aHMiLCJnbG9iIiwiV0RBX1JVTk5FUl9BUFAiLCJhYnNvbHV0ZSIsImlzU291cmNlRnJlc2giLCJleGlzdHNQcm9taXNlcyIsInNlcCIsIm1hcCIsInN1YlBhdGgiLCJCIiwiYWxsIiwic29tZSIsInYiLCJwcm94eU9wdHMiLCJrZWVwQWxpdmUiLCJqd3Byb3h5IiwiSldQcm94eSIsInByb3h5UmVxUmVzIiwiYmluZCIsInF1aXQiLCJyZXNldCIsIl91cmwiLCJwYXJzZSIsInByb3RvY29sIiwiZnVsbHlTdGFydGVkIiwicmV0cmlldmVEZXJpdmVkRGF0YVBhdGgiLCJzZXR1cENhY2hpbmciLCJzdGF0dXMiLCJidWlsZCIsInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyIiwidXBncmFkZWRBdCIsInV0aWwiLCJoYXNWYWx1ZSIsIldEQV9SVU5ORVJfQlVORExFX0lEIiwiYWN0dWFsVXBncmFkZVRpbWVzdGFtcCIsInRvTG93ZXIiLCJxdWl0QW5kVW5pbnN0YWxsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUtBLE1BQU1BLGtCQUFrQixHQUFHLEtBQUssSUFBaEM7QUFDQSxNQUFNQyxjQUFjLEdBQUcsSUFBdkI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyw2QkFBM0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxJQUFJQyxrQkFBSixFQUEvQjs7QUFFQSxNQUFNQyxjQUFOLENBQXFCO0FBQ25CQyxFQUFBQSxXQUFXLENBQUVDLFlBQUYsRUFBZ0JDLElBQUksR0FBRyxFQUF2QixFQUEyQjtBQUNw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RCxVQUFNd0Ysc0JBQXNCLEdBQUcsTUFBTSxvQ0FBckM7O0FBQ0F0SCxvQkFBSWEsS0FBSixDQUFXLG1EQUFrRHlHLHNCQUF1QixFQUFwRjs7QUFDQXRILG9CQUFJYSxLQUFKLENBQVcsK0NBQThDcUcsVUFBVyxFQUFwRTs7QUFDQSxRQUFJSSxzQkFBc0IsSUFBSUosVUFBMUIsSUFBd0M1SixnQkFBRWlLLE9BQUYsQ0FBVyxHQUFFRCxzQkFBdUIsRUFBcEMsTUFBMkNoSyxnQkFBRWlLLE9BQUYsQ0FBVyxHQUFFTCxVQUFXLEVBQXhCLENBQXZGLEVBQW1IO0FBQ2pIbEgsc0JBQUlDLElBQUosQ0FBUyx3RkFDTix3REFBdURxSCxzQkFBdUIsT0FBTUosVUFBVyxHQURsRzs7QUFFQSxhQUFPLE1BQU0sS0FBS3BGLFNBQUwsRUFBYjtBQUNEOztBQUVELFVBQU1iLE9BQU8sR0FBR2tHLG9CQUFLQyxRQUFMLENBQWNILHVCQUFkLElBQ1gsaURBQWdELEtBQUszRyxHQUFMLENBQVN1QixJQUFLLFdBQVVvRix1QkFBd0IsR0FEckYsR0FFWCxpREFBZ0QsS0FBSzNHLEdBQUwsQ0FBU3VCLElBQUssR0FGbkU7O0FBR0E3QixvQkFBSUMsSUFBSixDQUFVLEdBQUVnQixPQUFRLCtEQUE4RCxLQUFLWCxHQUFMLENBQVNDLElBQUssb0NBQWhHOztBQUNBLFNBQUs5QixpQkFBTCxHQUF5QixLQUFLNkIsR0FBTCxDQUFTdUIsSUFBbEM7QUFDRDs7QUFLcUIsUUFBaEIyRixnQkFBZ0IsR0FBSTtBQUN4QixVQUFNLEtBQUtqQixJQUFMLEVBQU47QUFDQSxVQUFNLEtBQUt6RSxTQUFMLEVBQU47QUFDRDs7QUE3Y2tCOzs7ZUFnZE41RSxjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgSldQcm94eSB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgcGxpc3QsIG1rZGlycCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgTm9TZXNzaW9uUHJveHkgfSBmcm9tICcuL25vLXNlc3Npb24tcHJveHknO1xuaW1wb3J0IHtcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgcmVzZXRUZXN0UHJvY2Vzc2VzLCBnZXRQSURzTGlzdGVuaW5nT25Qb3J0XG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IFhjb2RlQnVpbGQgZnJvbSAnLi94Y29kZWJ1aWxkJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGJ1bmRsZVdEQVNpbSB9IGZyb20gJy4vY2hlY2stZGVwZW5kZW5jaWVzJztcbmltcG9ydCB7XG4gIEJPT1RTVFJBUF9QQVRILCBXREFfUlVOTkVSX0JVTkRMRV9JRCwgV0RBX1JVTk5FUl9BUFAsXG4gIFdEQV9CQVNFX1VSTCwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgsXG59IGZyb20gJy4vY29uc3RhbnRzJztcblxuY29uc3QgV0RBX0xBVU5DSF9USU1FT1VUID0gNjAgKiAxMDAwO1xuY29uc3QgV0RBX0FHRU5UX1BPUlQgPSA4MTAwO1xuY29uc3QgV0RBX0NGX0JVTkRMRV9OQU1FID0gJ1dlYkRyaXZlckFnZW50UnVubmVyLVJ1bm5lcic7XG5jb25zdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuXG5jbGFzcyBXZWJEcml2ZXJBZ2VudCB7XG4gIGNvbnN0cnVjdG9yICh4Y29kZVZlcnNpb24sIGFyZ3MgPSB7fSkge1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0geGNvZGVWZXJzaW9uO1xuXG4gICAgdGhpcy5hcmdzID0gXy5jbG9uZShhcmdzKTtcblxuICAgIHRoaXMuZGV2aWNlID0gYXJncy5kZXZpY2U7XG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBhcmdzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IGFyZ3MucGxhdGZvcm1OYW1lO1xuICAgIHRoaXMuaW9zU2RrVmVyc2lvbiA9IGFyZ3MuaW9zU2RrVmVyc2lvbjtcbiAgICB0aGlzLmhvc3QgPSBhcmdzLmhvc3Q7XG4gICAgdGhpcy5pc1JlYWxEZXZpY2UgPSAhIWFyZ3MucmVhbERldmljZTtcbiAgICB0aGlzLmlkYiA9IChhcmdzLmRldmljZSB8fCB7fSkuaWRiO1xuICAgIHRoaXMud2RhQnVuZGxlUGF0aCA9IGFyZ3Mud2RhQnVuZGxlUGF0aDtcblxuICAgIHRoaXMuc2V0V0RBUGF0aHMoYXJncy5ib290c3RyYXBQYXRoLCBhcmdzLmFnZW50UGF0aCk7XG5cbiAgICB0aGlzLndkYUxvY2FsUG9ydCA9IGFyZ3Mud2RhTG9jYWxQb3J0O1xuICAgIHRoaXMud2RhUmVtb3RlUG9ydCA9IGFyZ3Mud2RhTG9jYWxQb3J0IHx8IFdEQV9BR0VOVF9QT1JUO1xuICAgIHRoaXMud2RhQmFzZVVybCA9IGFyZ3Mud2RhQmFzZVVybCB8fCBXREFfQkFTRV9VUkw7XG5cbiAgICB0aGlzLnByZWJ1aWxkV0RBID0gYXJncy5wcmVidWlsZFdEQTtcblxuICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBhcmdzLndlYkRyaXZlckFnZW50VXJsO1xuXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLndkYUNvbm5lY3Rpb25UaW1lb3V0ID0gYXJncy53ZGFDb25uZWN0aW9uVGltZW91dDtcblxuICAgIHRoaXMudXNlWGN0ZXN0cnVuRmlsZSA9IGFyZ3MudXNlWGN0ZXN0cnVuRmlsZTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuICAgIHRoaXMubWpwZWdTZXJ2ZXJQb3J0ID0gYXJncy5tanBlZ1NlcnZlclBvcnQ7XG5cbiAgICB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCA9IGFyZ3MudXBkYXRlZFdEQUJ1bmRsZUlkO1xuXG4gICAgdGhpcy54Y29kZWJ1aWxkID0gbmV3IFhjb2RlQnVpbGQodGhpcy54Y29kZVZlcnNpb24sIHRoaXMuZGV2aWNlLCB7XG4gICAgICBwbGF0Zm9ybVZlcnNpb246IHRoaXMucGxhdGZvcm1WZXJzaW9uLFxuICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZSxcbiAgICAgIGlvc1Nka1ZlcnNpb246IHRoaXMuaW9zU2RrVmVyc2lvbixcbiAgICAgIGFnZW50UGF0aDogdGhpcy5hZ2VudFBhdGgsXG4gICAgICBib290c3RyYXBQYXRoOiB0aGlzLmJvb3RzdHJhcFBhdGgsXG4gICAgICByZWFsRGV2aWNlOiB0aGlzLmlzUmVhbERldmljZSxcbiAgICAgIHNob3dYY29kZUxvZzogYXJncy5zaG93WGNvZGVMb2csXG4gICAgICB4Y29kZUNvbmZpZ0ZpbGU6IGFyZ3MueGNvZGVDb25maWdGaWxlLFxuICAgICAgeGNvZGVPcmdJZDogYXJncy54Y29kZU9yZ0lkLFxuICAgICAgeGNvZGVTaWduaW5nSWQ6IGFyZ3MueGNvZGVTaWduaW5nSWQsXG4gICAgICBrZXljaGFpblBhdGg6IGFyZ3Mua2V5Y2hhaW5QYXRoLFxuICAgICAga2V5Y2hhaW5QYXNzd29yZDogYXJncy5rZXljaGFpblBhc3N3b3JkLFxuICAgICAgdXNlU2ltcGxlQnVpbGRUZXN0OiBhcmdzLnVzZVNpbXBsZUJ1aWxkVGVzdCxcbiAgICAgIHVzZVByZWJ1aWx0V0RBOiBhcmdzLnVzZVByZWJ1aWx0V0RBLFxuICAgICAgdXBkYXRlZFdEQUJ1bmRsZUlkOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCxcbiAgICAgIGxhdW5jaFRpbWVvdXQ6IGFyZ3Mud2RhTGF1bmNoVGltZW91dCB8fCBXREFfTEFVTkNIX1RJTUVPVVQsXG4gICAgICB3ZGFSZW1vdGVQb3J0OiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICB1c2VYY3Rlc3RydW5GaWxlOiB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUsXG4gICAgICBkZXJpdmVkRGF0YVBhdGg6IGFyZ3MuZGVyaXZlZERhdGFQYXRoLFxuICAgICAgbWpwZWdTZXJ2ZXJQb3J0OiB0aGlzLm1qcGVnU2VydmVyUG9ydCxcbiAgICAgIGFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uOiBhcmdzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uLFxuICAgICAgcmVzdWx0QnVuZGxlUGF0aDogYXJncy5yZXN1bHRCdW5kbGVQYXRoLFxuICAgICAgcmVzdWx0QnVuZGxlVmVyc2lvbjogYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uLFxuICAgIH0pO1xuICB9XG5cbiAgc2V0V0RBUGF0aHMgKGJvb3RzdHJhcFBhdGgsIGFnZW50UGF0aCkge1xuICAgIC8vIGFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkgYSBwbGFjZSBmb3IgV0RBLiBUaGlzIGlzIHVuZG9jdW1lbnRlZCBhbmRcbiAgICAvLyBvbmx5IGhlcmUgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIGRldmVsb3BtZW50IG9mIFdEQVxuICAgIHRoaXMuYm9vdHN0cmFwUGF0aCA9IGJvb3RzdHJhcFBhdGggfHwgQk9PVFNUUkFQX1BBVEg7XG4gICAgbG9nLmluZm8oYFVzaW5nIFdEQSBwYXRoOiAnJHt0aGlzLmJvb3RzdHJhcFBhdGh9J2ApO1xuXG4gICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2UgbmVlZCB0byBiZSBhYmxlIHRvIHNwZWNpZnkgYWdlbnRQYXRoIHRvb1xuICAgIHRoaXMuYWdlbnRQYXRoID0gYWdlbnRQYXRoIHx8IHBhdGgucmVzb2x2ZSh0aGlzLmJvb3RzdHJhcFBhdGgsICdXZWJEcml2ZXJBZ2VudC54Y29kZXByb2onKTtcbiAgICBsb2cuaW5mbyhgVXNpbmcgV0RBIGFnZW50OiAnJHt0aGlzLmFnZW50UGF0aH0nYCk7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMgKCkge1xuICAgIGNvbnN0IG9ic29sZXRlUGlkcyA9IGF3YWl0IGdldFBJRHNMaXN0ZW5pbmdPblBvcnQodGhpcy51cmwucG9ydCxcbiAgICAgIChjbWRMaW5lKSA9PiBjbWRMaW5lLmluY2x1ZGVzKCcvV2ViRHJpdmVyQWdlbnRSdW5uZXInKSAmJlxuICAgICAgICAhY21kTGluZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZGV2aWNlLnVkaWQudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgaWYgKF8uaXNFbXB0eShvYnNvbGV0ZVBpZHMpKSB7XG4gICAgICBsb2cuZGVidWcoYE5vIG9ic29sZXRlIGNhY2hlZCBwcm9jZXNzZXMgZnJvbSBwcmV2aW91cyBXREEgc2Vzc2lvbnMgYCArXG4gICAgICAgIGBsaXN0ZW5pbmcgb24gcG9ydCAke3RoaXMudXJsLnBvcnR9IGhhdmUgYmVlbiBmb3VuZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZy5pbmZvKGBEZXRlY3RlZCAke29ic29sZXRlUGlkcy5sZW5ndGh9IG9ic29sZXRlIGNhY2hlZCBwcm9jZXNzJHtvYnNvbGV0ZVBpZHMubGVuZ3RoID09PSAxID8gJycgOiAnZXMnfSBgICtcbiAgICAgIGBmcm9tIHByZXZpb3VzIFdEQSBzZXNzaW9ucy4gQ2xlYW5pbmcgdGhlbSB1cGApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKCdraWxsJywgb2Jzb2xldGVQaWRzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihgRmFpbGVkIHRvIGtpbGwgb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3Mke29ic29sZXRlUGlkcy5sZW5ndGggPT09IDEgPyAnJyA6ICdlcyd9ICcke29ic29sZXRlUGlkc30nLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaWYgV0RBIGlzIHJ1bm5pbmcgb3Igbm90XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgV0RBIGlzIHJ1bm5pbmdcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEoYXdhaXQgdGhpcy5nZXRTdGF0dXMoKSk7XG4gIH1cblxuICBnZXQgYmFzZVBhdGggKCkge1xuICAgIGlmICh0aGlzLnVybC5wYXRoID09PSAnLycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXJsLnBhdGggfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGN1cnJlbnQgcnVubmluZyBXREEncyBzdGF0dXMgbGlrZSBiZWxvd1xuICAgKiB7XG4gICAqICAgXCJzdGF0ZVwiOiBcInN1Y2Nlc3NcIixcbiAgICogICBcIm9zXCI6IHtcbiAgICogICAgIFwibmFtZVwiOiBcImlPU1wiLFxuICAgKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJzZGtWZXJzaW9uXCI6IFwiMTEuM1wiXG4gICAqICAgfSxcbiAgICogICBcImlvc1wiOiB7XG4gICAqICAgICBcInNpbXVsYXRvclZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcImlwXCI6IFwiMTcyLjI1NC45OS4zNFwiXG4gICAqICAgfSxcbiAgICogICBcImJ1aWxkXCI6IHtcbiAgICogICAgIFwidGltZVwiOiBcIkp1biAyNCAyMDE4IDE3OjA4OjIxXCIsXG4gICAqICAgICBcInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyXCI6IFwiY29tLmZhY2Vib29rLldlYkRyaXZlckFnZW50UnVubmVyXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQHJldHVybiB7P29iamVjdH0gU3RhdGUgT2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgY29uc3Qgbm9TZXNzaW9uUHJveHkgPSBuZXcgTm9TZXNzaW9uUHJveHkoe1xuICAgICAgc2VydmVyOiB0aGlzLnVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHRoaXMudXJsLnBvcnQsXG4gICAgICBiYXNlOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgdGltZW91dDogMzAwMCxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG5vU2Vzc2lvblByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZGVidWcoYFdEQSBpcyBub3QgbGlzdGVuaW5nIGF0ICcke3RoaXMudXJsLmhyZWZ9J2ApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuaW5zdGFsbCBXREFzIGZyb20gdGhlIHRlc3QgZGV2aWNlLlxuICAgKiBPdmVyIFhjb2RlIDExLCBtdWx0aXBsZSBXREEgY2FuIGJlIGluIHRoZSBkZXZpY2Ugc2luY2UgWGNvZGUgMTEgZ2VuZXJhdGVzIGRpZmZlcmVudCBXREEuXG4gICAqIEFwcGl1bSBkb2VzIG5vdCBleHBlY3QgbXVsdGlwbGUgV0RBcyBhcmUgcnVubmluZyBvbiBhIGRldmljZS5cbiAgICovXG4gIGFzeW5jIHVuaW5zdGFsbCAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJ1bmRsZUlkcyA9IGF3YWl0IHRoaXMuZGV2aWNlLmdldFVzZXJJbnN0YWxsZWRCdW5kbGVJZHNCeUJ1bmRsZU5hbWUoV0RBX0NGX0JVTkRMRV9OQU1FKTtcbiAgICAgIGlmIChfLmlzRW1wdHkoYnVuZGxlSWRzKSkge1xuICAgICAgICBsb2cuZGVidWcoJ05vIFdEQXMgb24gdGhlIGRldmljZS4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2cuZGVidWcoYFVuaW5zdGFsbGluZyBXREFzOiAnJHtidW5kbGVJZHN9J2ApO1xuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBidW5kbGVJZHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZXZpY2UucmVtb3ZlQXBwKGJ1bmRsZUlkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZGVidWcoZSk7XG4gICAgICBsb2cud2FybihgV2ViRHJpdmVyQWdlbnQgdW5pbnN0YWxsIGZhaWxlZC4gUGVyaGFwcywgaXQgaXMgYWxyZWFkeSB1bmluc3RhbGxlZD8gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX2NsZWFudXBQcm9qZWN0SWZGcmVzaCAoKSB7XG4gICAgY29uc3QgaG9tZUZvbGRlciA9IHByb2Nlc3MuZW52LkhPTUU7XG4gICAgaWYgKCFob21lRm9sZGVyKSB7XG4gICAgICBsb2cuaW5mbygnVGhlIEhPTUUgZm9sZGVyIHBhdGggY2Fubm90IGJlIGRldGVybWluZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAoKTtcbiAgICBpZiAoIV8uaXNJbnRlZ2VyKGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wKSkge1xuICAgICAgbG9nLmluZm8oJ0l0IGlzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lc3RhbXAgb2YgdGhlIHBhY2thZ2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lc3RhbXBQYXRoID0gcGF0aC5yZXNvbHZlKGhvbWVGb2xkZXIsIFdEQV9VUEdSQURFX1RJTUVTVEFNUF9QQVRIKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHRpbWVzdGFtcFBhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5hY2Nlc3ModGltZXN0YW1wUGF0aCwgZnMuV19PSyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgbG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9JyBpcyBub3Qgd3JpdGVhYmxlLiBgICtcbiAgICAgICAgICBgU2tpcHBpbmcgc291cmNlcyBjbGVhbnVwYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPSBwYXJzZUludChhd2FpdCBmcy5yZWFkRmlsZSh0aW1lc3RhbXBQYXRoLCAndXRmOCcpLCAxMCk7XG4gICAgICBpZiAoXy5pc0ludGVnZXIocmVjZW50VXBncmFkZVRpbWVzdGFtcCkpIHtcbiAgICAgICAgaWYgKHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPj0gY3VycmVudFVwZ3JhZGVUaW1lc3RhbXApIHtcbiAgICAgICAgICBsb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgZG9lcyBub3QgbmVlZCBhIGNsZWFudXAuIFRoZSBzb3VyY2VzIGFyZSB1cCB0byBkYXRlIGAgK1xuICAgICAgICAgICAgYCgke3JlY2VudFVwZ3JhZGVUaW1lc3RhbXB9ID49ICR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9KWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgc291cmNlcyBoYXZlIGJlZW4gdXBncmFkZWQgYCArXG4gICAgICAgICAgYCgke3JlY2VudFVwZ3JhZGVUaW1lc3RhbXB9IDwgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0pYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cud2FybihgVGhlIHJlY2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScgaXMgY29ycnVwdGVkLiBUcnlpbmcgdG8gZml4IGl0YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG1rZGlycChwYXRoLmRpcm5hbWUodGltZXN0YW1wUGF0aCkpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRpbWVzdGFtcFBhdGgsIGAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfWAsICd1dGY4Jyk7XG4gICAgICBsb2cuZGVidWcoYFN0b3JlZCB0aGUgcmVjZW50IFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wICR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9IGAgK1xuICAgICAgICBgYXQgJyR7dGltZXN0YW1wUGF0aH0nYCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmluZm8oYFVuYWJsZSB0byBjcmVhdGUgdGhlIHJlY2VudCBXZWJEcml2ZXJBZ2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScuIGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQuY2xlYW5Qcm9qZWN0KCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLndhcm4oYENhbm5vdCBwZXJmb3JtIFdlYkRyaXZlckFnZW50IHByb2plY3QgY2xlYW51cC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY3VycmVudCBydW5uaW5nIFdEQSdzIHN0YXR1cyBsaWtlIGJlbG93IGFmdGVyIGxhdW5jaGluZyBXREFcbiAgICoge1xuICAgKiAgIFwic3RhdGVcIjogXCJzdWNjZXNzXCIsXG4gICAqICAgXCJvc1wiOiB7XG4gICAqICAgICBcIm5hbWVcIjogXCJpT1NcIixcbiAgICogICAgIFwidmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwic2RrVmVyc2lvblwiOiBcIjExLjNcIlxuICAgKiAgIH0sXG4gICAqICAgXCJpb3NcIjoge1xuICAgKiAgICAgXCJzaW11bGF0b3JWZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJpcFwiOiBcIjE3Mi4yNTQuOTkuMzRcIlxuICAgKiAgIH0sXG4gICAqICAgXCJidWlsZFwiOiB7XG4gICAqICAgICBcInRpbWVcIjogXCJKdW4gMjQgMjAxOCAxNzowODoyMVwiLFxuICAgKiAgICAgXCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllclwiOiBcImNvbS5mYWNlYm9vay5XZWJEcml2ZXJBZ2VudFJ1bm5lclwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWQgTGF1bmNoIFdEQSBhbmQgZXN0YWJsaXNoIHRoZSBzZXNzaW9uIHdpdGggdGhpcyBzZXNzaW9uSWRcbiAgICogQHJldHVybiB7P29iamVjdH0gU3RhdGUgT2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGxhdW5jaCAoc2Vzc2lvbklkKSB7XG4gICAgaWYgKHRoaXMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIGxvZy5pbmZvKGBVc2luZyBwcm92aWRlZCBXZWJkcml2ZXJBZ2VudCBhdCAnJHt0aGlzLndlYkRyaXZlckFnZW50VXJsfSdgKTtcbiAgICAgIHRoaXMudXJsID0gdGhpcy53ZWJEcml2ZXJBZ2VudFVybDtcbiAgICAgIHRoaXMuc2V0dXBQcm94aWVzKHNlc3Npb25JZCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9XG5cbiAgICBsb2cuaW5mbygnTGF1bmNoaW5nIFdlYkRyaXZlckFnZW50IG9uIHRoZSBkZXZpY2UnKTtcblxuICAgIHRoaXMuc2V0dXBQcm94aWVzKHNlc3Npb25JZCk7XG5cbiAgICBpZiAoIXRoaXMudXNlWGN0ZXN0cnVuRmlsZSAmJiAhYXdhaXQgZnMuZXhpc3RzKHRoaXMuYWdlbnRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcnlpbmcgdG8gdXNlIFdlYkRyaXZlckFnZW50IHByb2plY3QgYXQgJyR7dGhpcy5hZ2VudFBhdGh9JyBidXQgdGhlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICdmaWxlIGRvZXMgbm90IGV4aXN0Jyk7XG4gICAgfVxuXG4gICAgLy8gdXNlWGN0ZXN0cnVuRmlsZSBhbmQgdXNlUHJlYnVpbHRXREEgdXNlIGV4aXN0aW5nIGRlcGVuZGVuY2llc1xuICAgIC8vIEl0IGRlcGVuZHMgb24gdXNlciBzaWRlXG4gICAgaWYgKHRoaXMuaWRiIHx8IHRoaXMudXNlWGN0ZXN0cnVuRmlsZSB8fCAodGhpcy5kZXJpdmVkRGF0YVBhdGggJiYgdGhpcy51c2VQcmVidWlsdFdEQSkpIHtcbiAgICAgIGxvZy5pbmZvKCdTa2lwcGVkIFdEQSBwcm9qZWN0IGNsZWFudXAgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBjYXBhYmlsaXRpZXMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUodGhpcy5ib290c3RyYXBQYXRoKTtcbiAgICAgIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksXG4gICAgICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuX2NsZWFudXBQcm9qZWN0SWZGcmVzaCgpKTtcbiAgICB9XG5cbiAgICAvLyBXZSBuZWVkIHRvIHByb3ZpZGUgV0RBIGxvY2FsIHBvcnQsIGJlY2F1c2UgaXQgbWlnaHQgYmUgb2NjdXBpZWRcbiAgICBhd2FpdCByZXNldFRlc3RQcm9jZXNzZXModGhpcy5kZXZpY2UudWRpZCwgIXRoaXMuaXNSZWFsRGV2aWNlKTtcblxuICAgIGlmICh0aGlzLmlkYikge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc3RhcnRXaXRoSURCKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLmluaXQodGhpcy5ub1Nlc3Npb25Qcm94eSk7XG5cbiAgICAvLyBTdGFydCB0aGUgeGNvZGVidWlsZCBwcm9jZXNzXG4gICAgaWYgKHRoaXMucHJlYnVpbGRXREEpIHtcbiAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5wcmVidWlsZCgpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnN0YXJ0KCk7XG4gIH1cblxuICBhc3luYyBzdGFydFdpdGhJREIgKCkge1xuICAgIGxvZy5pbmZvKCdXaWxsIGxhdW5jaCBXREEgd2l0aCBpZGIgaW5zdGVhZCBvZiB4Y29kZWJ1aWxkIHNpbmNlIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcgaXMgZW5hYmxlZCcpO1xuICAgIGNvbnN0IHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkfSA9IGF3YWl0IHRoaXMucHJlcGFyZVdEQSgpO1xuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIFVTRV9QT1JUOiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICBXREFfUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUjogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQsXG4gICAgfTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmlkYi5ydW5YQ1VJVGVzdCh3ZGFCdW5kbGVJZCwgd2RhQnVuZGxlSWQsIHRlc3RCdW5kbGVJZCwge2Vudn0pO1xuICB9XG5cbiAgYXN5bmMgcGFyc2VCdW5kbGVJZCAod2RhQnVuZGxlUGF0aCkge1xuICAgIGNvbnN0IGluZm9QbGlzdFBhdGggPSBwYXRoLmpvaW4od2RhQnVuZGxlUGF0aCwgJ0luZm8ucGxpc3QnKTtcbiAgICBjb25zdCBpbmZvUGxpc3QgPSBhd2FpdCBwbGlzdC5wYXJzZVBsaXN0KGF3YWl0IGZzLnJlYWRGaWxlKGluZm9QbGlzdFBhdGgpKTtcbiAgICBpZiAoIWluZm9QbGlzdC5DRkJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYnVuZGxlIGlkIGluICcke2luZm9QbGlzdFBhdGh9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gaW5mb1BsaXN0LkNGQnVuZGxlSWRlbnRpZmllcjtcbiAgfVxuXG4gIGFzeW5jIHByZXBhcmVXREEgKCkge1xuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGggPSB0aGlzLndkYUJ1bmRsZVBhdGggfHwgYXdhaXQgdGhpcy5mZXRjaFdEQUJ1bmRsZSgpO1xuICAgIGNvbnN0IHdkYUJ1bmRsZUlkID0gYXdhaXQgdGhpcy5wYXJzZUJ1bmRsZUlkKHdkYUJ1bmRsZVBhdGgpO1xuICAgIGlmICghYXdhaXQgdGhpcy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQod2RhQnVuZGxlSWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmRldmljZS5pbnN0YWxsQXBwKHdkYUJ1bmRsZVBhdGgpO1xuICAgIH1cbiAgICBjb25zdCB0ZXN0QnVuZGxlSWQgPSBhd2FpdCB0aGlzLmlkYi5pbnN0YWxsWENUZXN0QnVuZGxlKHBhdGguam9pbih3ZGFCdW5kbGVQYXRoLCAnUGx1Z0lucycsICdXZWJEcml2ZXJBZ2VudFJ1bm5lci54Y3Rlc3QnKSk7XG4gICAgcmV0dXJuIHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkLCB3ZGFCdW5kbGVQYXRofTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoV0RBQnVuZGxlICgpIHtcbiAgICBpZiAoIXRoaXMuZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgYnVuZGxlV0RBU2ltKHRoaXMueGNvZGVidWlsZCk7XG4gICAgfVxuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGhzID0gYXdhaXQgZnMuZ2xvYihgJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0vKiovKiR7V0RBX1JVTk5FUl9BUFB9L2AsIHtcbiAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIGlmIChfLmlzRW1wdHkod2RhQnVuZGxlUGF0aHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSBXREEgYnVuZGxlIGluICcke3RoaXMuZGVyaXZlZERhdGFQYXRofSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHdkYUJ1bmRsZVBhdGhzWzBdO1xuICB9XG5cbiAgYXN5bmMgaXNTb3VyY2VGcmVzaCAoKSB7XG4gICAgY29uc3QgZXhpc3RzUHJvbWlzZXMgPSBbXG4gICAgICAnUmVzb3VyY2VzJyxcbiAgICAgIGBSZXNvdXJjZXMke3BhdGguc2VwfVdlYkRyaXZlckFnZW50LmJ1bmRsZWAsXG4gICAgXS5tYXAoKHN1YlBhdGgpID0+IGZzLmV4aXN0cyhwYXRoLnJlc29sdmUodGhpcy5ib290c3RyYXBQYXRoLCBzdWJQYXRoKSkpO1xuICAgIHJldHVybiAoYXdhaXQgQi5hbGwoZXhpc3RzUHJvbWlzZXMpKS5zb21lKCh2KSA9PiB2ID09PSBmYWxzZSk7XG4gIH1cblxuICBzZXR1cFByb3hpZXMgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IHByb3h5T3B0cyA9IHtcbiAgICAgIHNlcnZlcjogdGhpcy51cmwuaG9zdG5hbWUsXG4gICAgICBwb3J0OiB0aGlzLnVybC5wb3J0LFxuICAgICAgYmFzZTogdGhpcy5iYXNlUGF0aCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMud2RhQ29ubmVjdGlvblRpbWVvdXQsXG4gICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgfTtcblxuICAgIHRoaXMuandwcm94eSA9IG5ldyBKV1Byb3h5KHByb3h5T3B0cyk7XG4gICAgdGhpcy5qd3Byb3h5LnNlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5qd3Byb3h5LnByb3h5UmVxUmVzLmJpbmQodGhpcy5qd3Byb3h5KTtcblxuICAgIHRoaXMubm9TZXNzaW9uUHJveHkgPSBuZXcgTm9TZXNzaW9uUHJveHkocHJveHlPcHRzKTtcbiAgfVxuXG4gIGFzeW5jIHF1aXQgKCkge1xuICAgIGxvZy5pbmZvKCdTaHV0dGluZyBkb3duIHN1Yi1wcm9jZXNzZXMnKTtcblxuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJlc2V0KCk7XG5cbiAgICBpZiAodGhpcy5qd3Byb3h5KSB7XG4gICAgICB0aGlzLmp3cHJveHkuc2Vzc2lvbklkID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5hcmdzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAvLyBpZiB3ZSBwb3B1bGF0ZWQgdGhlIHVybCBvdXJzZWx2ZXMgKGR1cmluZyBgc2V0dXBDYWNoaW5nYCBjYWxsLCBmb3IgaW5zdGFuY2UpXG4gICAgICAvLyB0aGVuIGNsZWFuIHRoYXQgdXAuIElmIHRoZSB1cmwgd2FzIHN1cHBsaWVkLCB3ZSB3YW50IHRvIGtlZXAgaXRcbiAgICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIGlmICghdGhpcy5fdXJsKSB7XG4gICAgICBpZiAodGhpcy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UodGhpcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy53ZGFMb2NhbFBvcnQgfHwgV0RBX0FHRU5UX1BPUlQ7XG4gICAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdG5hbWV9ID0gdXJsLnBhcnNlKHRoaXMud2RhQmFzZVVybCB8fCBXREFfQkFTRV9VUkwpO1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UoYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfToke3BvcnR9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsIChfdXJsKSB7XG4gICAgdGhpcy5fdXJsID0gdXJsLnBhcnNlKF91cmwpO1xuICB9XG5cbiAgZ2V0IGZ1bGx5U3RhcnRlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZDtcbiAgfVxuXG4gIHNldCBmdWxseVN0YXJ0ZWQgKHN0YXJ0ZWQgPSBmYWxzZSkge1xuICAgIHRoaXMuc3RhcnRlZCA9IHN0YXJ0ZWQ7XG4gIH1cblxuICBhc3luYyByZXRyaWV2ZURlcml2ZWREYXRhUGF0aCAoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueGNvZGVidWlsZC5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldXNlIHJ1bm5pbmcgV0RBIGlmIGl0IGhhcyB0aGUgc2FtZSBidW5kbGUgaWQgd2l0aCB1cGRhdGVkV0RBQnVuZGxlSWQuXG4gICAqIE9yIHJldXNlIGl0IGlmIGl0IGhhcyB0aGUgZGVmYXVsdCBpZCB3aXRob3V0IHVwZGF0ZWRXREFCdW5kbGVJZC5cbiAgICogVW5pbnN0YWxsIGl0IGlmIHRoZSBtZXRob2QgZmFjZXMgYW4gZXhjZXB0aW9uIGZvciB0aGUgYWJvdmUgc2l0dWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXBkYXRlZFdEQUJ1bmRsZUlkIEJ1bmRsZUlkIHlvdSdkIGxpa2UgdG8gdXNlXG4gICAqL1xuICBhc3luYyBzZXR1cENhY2hpbmcgKCkge1xuICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgaWYgKCFzdGF0dXMgfHwgIXN0YXR1cy5idWlsZCkge1xuICAgICAgbG9nLmRlYnVnKCdXREEgaXMgY3VycmVudGx5IG5vdCBydW5uaW5nLiBUaGVyZSBpcyBub3RoaW5nIHRvIGNhY2hlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgcHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIsXG4gICAgICB1cGdyYWRlZEF0LFxuICAgIH0gPSBzdGF0dXMuYnVpbGQ7XG4gICAgLy8gZm9yIHJlYWwgZGV2aWNlXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpICYmIHV0aWwuaGFzVmFsdWUodGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpICYmIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkICE9PSBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgbG9nLmluZm8oYFdpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgYnVuZGxlIGlkLiBUaGUgYWN0dWFsIHZhbHVlIGlzICcke3Byb2R1Y3RCdW5kbGVJZGVudGlmaWVyfScuYCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgICB9XG4gICAgLy8gZm9yIHNpbXVsYXRvclxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSAmJiAhdXRpbC5oYXNWYWx1ZSh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkgJiYgV0RBX1JVTk5FUl9CVU5ETEVfSUQgIT09IHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICBsb2cuaW5mbyhgV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXRzIGJ1bmRsZSBpZCBpcyBub3QgZXF1YWwgdG8gdGhlIGRlZmF1bHQgdmFsdWUgJHtXREFfUlVOTkVSX0JVTkRMRV9JRH1gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAgPSBhd2FpdCBnZXRXREFVcGdyYWRlVGltZXN0YW1wKCk7XG4gICAgbG9nLmRlYnVnKGBVcGdyYWRlIHRpbWVzdGFtcCBvZiB0aGUgY3VycmVudGx5IGJ1bmRsZWQgV0RBOiAke2FjdHVhbFVwZ3JhZGVUaW1lc3RhbXB9YCk7XG4gICAgbG9nLmRlYnVnKGBVcGdyYWRlIHRpbWVzdGFtcCBvZiB0aGUgV0RBIG9uIHRoZSBkZXZpY2U6ICR7dXBncmFkZWRBdH1gKTtcbiAgICBpZiAoYWN0dWFsVXBncmFkZVRpbWVzdGFtcCAmJiB1cGdyYWRlZEF0ICYmIF8udG9Mb3dlcihgJHthY3R1YWxVcGdyYWRlVGltZXN0YW1wfWApICE9PSBfLnRvTG93ZXIoYCR7dXBncmFkZWRBdH1gKSkge1xuICAgICAgbG9nLmluZm8oJ1dpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgdmVyc2lvbiBpbiBjb21wYXJpc29uIHRvIHRoZSBvbmUgJyArXG4gICAgICAgIGB3aGljaCBpcyBidW5kbGVkIHdpdGggYXBwaXVtLXhjdWl0ZXN0LWRyaXZlciBtb2R1bGUgKCR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH0gIT0gJHt1cGdyYWRlZEF0fSlgKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSB1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKVxuICAgICAgPyBgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBXREEgaW5zdGFuY2UgYXQgJyR7dGhpcy51cmwuaHJlZn0nIHdpdGggJyR7cHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJ9J2BcbiAgICAgIDogYFdpbGwgcmV1c2UgcHJldmlvdXNseSBjYWNoZWQgV0RBIGluc3RhbmNlIGF0ICcke3RoaXMudXJsLmhyZWZ9J2A7XG4gICAgbG9nLmluZm8oYCR7bWVzc2FnZX0uIFNldCB0aGUgd2RhTG9jYWxQb3J0IGNhcGFiaWxpdHkgdG8gYSB2YWx1ZSBkaWZmZXJlbnQgZnJvbSAke3RoaXMudXJsLnBvcnR9IGlmIHRoaXMgaXMgYW4gdW5kZXNpcmVkIGJlaGF2aW9yLmApO1xuICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSB0aGlzLnVybC5ocmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1aXQgYW5kIHVuaW5zdGFsbCBydW5uaW5nIFdEQS5cbiAgICovXG4gIGFzeW5jIHF1aXRBbmRVbmluc3RhbGwgKCkge1xuICAgIGF3YWl0IHRoaXMucXVpdCgpO1xuICAgIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgV2ViRHJpdmVyQWdlbnQ7XG5leHBvcnQgeyBXZWJEcml2ZXJBZ2VudCB9O1xuIl0sImZpbGUiOiJsaWIvd2ViZHJpdmVyYWdlbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|