appium-xcuitest-driver 4.16.10 → 4.16.12
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/CHANGELOG.md +14 -0
- package/README.md +2 -0
- package/build/lib/commands/web.js +16 -1
- package/build/lib/commands/web.js.map +1 -1
- package/lib/commands/web.js +5 -0
- package/npm-shrinkwrap.json +363 -689
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [4.16.12](https://github.com/appium/appium-xcuitest-driver/compare/v4.16.11...v4.16.12) (2023-02-06)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Update NOTCHED_DEVICE_SIZES for nativeWebTapStrict (part of [#1490](https://github.com/appium/appium-xcuitest-driver/issues/1490)) ([#1497](https://github.com/appium/appium-xcuitest-driver/issues/1497)) ([e2bbd94](https://github.com/appium/appium-xcuitest-driver/commit/e2bbd94e27d402776de235ff53abd714b7ae6ef0))
|
|
7
|
+
|
|
8
|
+
## [4.16.11](https://github.com/appium/appium-xcuitest-driver/compare/v4.16.10...v4.16.11) (2023-02-05)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* update WDA to include snapshots/maxDepth fixes ([#1495](https://github.com/appium/appium-xcuitest-driver/issues/1495)) ([ccc30f8](https://github.com/appium/appium-xcuitest-driver/commit/ccc30f81329e149a6dc60c1c4b824052cdfb998d))
|
|
14
|
+
|
|
1
15
|
## [4.16.10](https://github.com/appium/appium-xcuitest-driver/compare/v4.16.9...v4.16.10) (2023-01-17)
|
|
2
16
|
|
|
3
17
|
|
package/README.md
CHANGED
|
@@ -32,6 +32,21 @@ const NOTCHED_DEVICE_SIZES = [{
|
|
|
32
32
|
}, {
|
|
33
33
|
w: 1242,
|
|
34
34
|
h: 2688
|
|
35
|
+
}, {
|
|
36
|
+
w: 1080,
|
|
37
|
+
h: 2340
|
|
38
|
+
}, {
|
|
39
|
+
w: 1170,
|
|
40
|
+
h: 2532
|
|
41
|
+
}, {
|
|
42
|
+
w: 1284,
|
|
43
|
+
h: 2778
|
|
44
|
+
}, {
|
|
45
|
+
w: 1179,
|
|
46
|
+
h: 2556
|
|
47
|
+
}, {
|
|
48
|
+
w: 1290,
|
|
49
|
+
h: 2796
|
|
35
50
|
}];
|
|
36
51
|
const {
|
|
37
52
|
W3C_WEB_ELEMENT_IDENTIFIER
|
|
@@ -594,4 +609,4 @@ commands.mobileUpdateSafariPreferences = async function mobileUpdateSafariPrefer
|
|
|
594
609
|
Object.assign(commands, extensions, helpers);
|
|
595
610
|
var _default = commands;
|
|
596
611
|
exports.default = _default;
|
|
597
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJUEhPTkVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQiLCJJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyIsIklQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQiLCJUQUJfQkFSX09GRlNFVCIsIklQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCIsIk5PVENIRURfREVWSUNFX1NJWkVTIiwidyIsImgiLCJXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiIsInV0aWwiLCJBVE9NX1dBSVRfVElNRU9VVF9NUyIsIkFUT01fSU5JVElBTF9XQUlUX01TIiwiT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQiLCJWSVNJQkxFIiwiSU5WSVNJQkxFIiwiREVURUNUIiwiVklTSUJJTElUSUVTIiwiVEFCX0JBUl9QT1NJVElPTl9UT1AiLCJUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSIsIlRBQl9CQVJfUE9TU0lUSU9OUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIiLCJpZCIsIl8iLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNFbXB0eSIsImlzTmFOIiwic2V0RnJhbWUiLCJmcmFtZSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJpc051bGwiLCJjdXJXZWJGcmFtZXMiLCJsb2ciLCJkZWJ1ZyIsImhhc0VsZW1lbnRJZCIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInZhbHVlIiwiZXhlY3V0ZUF0b20iLCJXSU5ET1ciLCJ1bnNoaWZ0IiwiYXRvbSIsImlzVW5kZWZpbmVkIiwiTm9TdWNoRnJhbWVFcnJvciIsImdldENzc1Byb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZWwiLCJzdWJtaXQiLCJyZWZyZXNoIiwiZ2V0VXJsIiwicmVtb3RlIiwiZXhlY3V0ZSIsInRpdGxlIiwiZ2V0Q29va2llcyIsInNjcmlwdCIsImpzQ29va2llcyIsImNvb2tpZXMiLCJuYW1lIiwidG9QYWlycyIsImNvb2tpZVV0aWxzIiwiY3JlYXRlSldQQ29va2llIiwidW5kZWZpbmVkIiwicHVzaCIsImVyciIsImVycm9yIiwiVW5rbm93bkVycm9yIiwic2V0Q29va2llIiwiY29va2llIiwiY2xvbmUiLCJwYXRoIiwianNDb29raWUiLCJjcmVhdGVKU0Nvb2tpZSIsImV4cGlyZXMiLCJleHBpcnkiLCJEYXRlIiwidG9VVENTdHJpbmciLCJkb21haW4iLCJodHRwT25seSIsInNlY3VyZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWxldGVDb29raWUiLCJjb29raWVOYW1lIiwiaW5kZXhPZiIsIm1hcCIsIl9kZWxldGVDb29raWUiLCJkZWxldGVDb29raWVzIiwibGVuZ3RoIiwid2ViQ29va2llIiwiZXhwaXJlQ29va2llIiwiY2FjaGVXZWJFbGVtZW50IiwiaXNQbGFpbk9iamVjdCIsImVsSWQiLCJ1bndyYXBFbGVtZW50IiwiY2FjaGVJZCIsImluY2x1ZGVzIiwidXVpZFY0Iiwid2ViRWxlbWVudHNDYWNoZSIsInNldCIsIndyYXBFbGVtZW50IiwiY2FjaGVXZWJFbGVtZW50cyIsInJlc3BvbnNlIiwidG9DYWNoZWQiLCJ2IiwiaXNBcnJheSIsInJlc3VsdCIsInJlZHVjZSIsImFjYyIsImtleSIsImZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYW55IiwiY3R4IiwiY29udGV4dEVsZW1lbnQiLCJpc05pbCIsImVsZW1lbnQiLCJkb0ZpbmQiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJtZXNzYWdlIiwiaXNGdW5jdGlvbiIsIm1hdGNoIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiY2xpY2tXZWJDb29yZHMiLCJjb29yZHMiLCJ0cmFuc2xhdGVXZWJDb29yZHMiLCJjdXJXZWJDb29yZHMiLCJjbGlja0Nvb3JkcyIsImFyZ3MiLCJhbHdheXNEZWZhdWx0RnJhbWUiLCJmcmFtZXMiLCJwcm9taXNlIiwid2FpdEZvckF0b20iLCJleGVjdXRlQXRvbUFzeW5jIiwicmVzcG9uc2VVcmwiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsImFzeW5jUHJvbWlzZSIsImVsT3JJZCIsImhhcyIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRUxFTUVOVCIsImdldCIsImNvbnZlcnRFbGVtZW50c0ZvckF0b21zIiwiYXJnIiwiaXNFcnJvclR5cGUiLCJnZXRFbGVtZW50SWQiLCJoYXNWYWx1ZSIsImdldFNhZmFyaUlzSXBob25lIiwiaXNCb29sZWFuIiwiX2lzU2FmYXJpSXBob25lIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJ3YXJuIiwiZ2V0U2FmYXJpRGV2aWNlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwibm9ybUhlaWdodCIsIm5vcm1XaWR0aCIsImdldFNhZmFyaUlzTm90Y2hlZCIsIl9pc1NhZmFyaU5vdGNoZWQiLCJkZXZpY2UiLCJnZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCIsInd2UG9zIiwicmVhbERpbXMiLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJpc0lwaG9uZSIsIm5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkiLCJuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkiLCJzYWZhcmlUYWJCYXJQb3NpdGlvbiIsImNvbXBhcmVWZXJzaW9ucyIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwidGFiQmFyVmlzaWJpbGl0eSIsImxvd2VyQ2FzZSIsImJhbm5lclZpc2liaWxpdHkiLCJ0YWJCYXJQb3NpdGlvbiIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiaXNOb3RjaGVkIiwib3JpZW50YXRpb24iLCJub3RjaE9mZnNldCIsImlzU2Nyb2xsZWQiLCJjb250ZXh0c0FuZFZpZXdzIiwiZ2V0Q29udGV4dHNBbmRWaWV3cyIsInRhYnMiLCJmaWx0ZXIiLCJzdGFydHNXaXRoIiwiZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQiLCJ5Iiwib2Zmc2V0IiwiYmFubmVycyIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsInRhcFdlYkVsZW1lbnROYXRpdmVseSIsImRyaXZlciIsInRleHQiLCJlbHMiLCJyZWN0IiwicHJveHlDb21tYW5kIiwiZWwyIiwicmVjdDIiLCJ4IiwiTWF0aCIsInJvdW5kIiwibmF0aXZlV2ViVGFwIiwibmF0aXZlV2ViVGFwU3RyaWN0IiwiUHJvbWlzZSIsImFsbCIsInNpemUiLCJjb29yZGluYXRlcyIsInBlcmZvcm1Ub3VjaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJ3ZWJ2aWV3IiwicmV0cnlJbnRlcnZhbCIsImlnbiIsIkVycm9yIiwiY21kIiwid3ZEaW1zIiwiaW1wbGljaXRXYWl0TXMiLCJzZXRJbXBsaWNpdFdhaXQiLCJ4UmF0aW8iLCJ5UmF0aW8iLCJuZXdDb29yZHMiLCJjaGVja0ZvckFsZXJ0IiwiZ2V0QWxlcnRUZXh0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidGltZWRBdG9tUHJvbWlzZSIsInRpbWVvdXQiLCJoYW5kbGVQcm9taXNlRXJyb3IiLCJwIiwib3JpZ2luYWxFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiVGltZW91dEVycm9yIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJhbnkiLCJkZWxheSIsImlzRnVsZmlsbGVkIiwiX3dhaXRpbmdBdG9tcyIsImNvdW50IiwiYWxlcnROb3RpZmllciIsIkV2ZW50RW1pdHRlciIsImFsZXJ0TW9uaXRvciIsIm9uQWxlcnRDYWxsYmFjayIsImlzUmVzb2x2ZWQiLCJlbWl0IiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwib25jZSIsInRoZW4iLCJjYXRjaCIsInJlbW92ZUxpc3RlbmVyIiwibW9iaWxlV2ViTmF2IiwibmF2VHlwZSIsImFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQiLCJtb2JpbGVVcGRhdGVTYWZhcmlQcmVmZXJlbmNlcyIsImlzU2ltdWxhdG9yIiwicHJlZmVyZW5jZXMiLCJ1cGRhdGVTYWZhcmlTZXR0aW5ncyIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy93ZWIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBlcnJvcnMsIGlzRXJyb3JUeXBlIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgY29va2llVXRpbHMgZnJvbSAnLi4vY29va2llcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG5jb25zdCBJUEhPTkVfVE9QX0JBUl9IRUlHSFQgPSA3MTtcbmNvbnN0IElQSE9ORV9TQ1JPTExFRF9UT1BfQkFSX0hFSUdIVCA9IDQxO1xuY29uc3QgSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUID0gNTU7XG5jb25zdCBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TID0gMjQ7XG5jb25zdCBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TXzEzID0gMjA7XG5cbmNvbnN0IElQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQgPSA1MTtcbmNvbnN0IElQSE9ORV9CT1RUT01fQkFSX09GRlNFVCA9IDQ5O1xuY29uc3QgVEFCX0JBUl9PRkZTRVQgPSAzMztcbmNvbnN0IElQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQgPSA4NDtcbmNvbnN0IElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUID0gOTU7XG5cbmNvbnN0IE5PVENIRURfREVWSUNFX1NJWkVTID0gW1xuICB7dzogMTEyNSwgaDogMjQzNn0sIC8vIDExIFBybywgWCwgWHNcbiAge3c6IDgyOCwgaDogMTc5Mn0sIC8vIDExLCBYclxuICB7dzogMTI0MiwgaDogMjY4OH0sIC8vIDExIFBybyBNYXgsIFhzIE1heFxuXTtcblxuY29uc3QgeyBXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiB9ID0gdXRpbDtcblxuY29uc3QgQVRPTV9XQUlUX1RJTUVPVVRfTVMgPSAyICogNjAwMDA7XG5jb25zdCBBVE9NX0lOSVRJQUxfV0FJVF9NUyA9IDEwMDA7XG5cbmNvbnN0IE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5UID0gJ2FsZXJ0JztcblxuY29uc3QgVklTSUJMRSA9ICd2aXNpYmxlJztcbmNvbnN0IElOVklTSUJMRSA9ICdpbnZpc2libGUnO1xuY29uc3QgREVURUNUID0gJ2RldGVjdCc7XG5jb25zdCBWSVNJQklMSVRJRVMgPSBbVklTSUJMRSwgSU5WSVNJQkxFLCBERVRFQ1RdO1xuXG4vLyBUaGUgcG9zaXRpb24gb2YgU2FmYXJpJ3MgdGFiIChzZWFyY2ggYmFyKS5cbi8vIFNpbmNlIGlPUyAxNSwgdGhlIGJhciBpcyB0aGUgYm90dG9tIGJ5IGRlZmF1bHQuXG5jb25zdCBUQUJfQkFSX1BPU0lUSU9OX1RPUCA9ICd0b3AnO1xuY29uc3QgVEFCX0JBUl9QT1NJVElPTl9CT1RUT00gPSAnYm90dG9tJztcbmNvbnN0IFRBQl9CQVJfUE9TU0lUSU9OUyA9IFtUQUJfQkFSX1BPU0lUSU9OX1RPUCwgVEFCX0JBUl9QT1NJVElPTl9CT1RUT01dO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRJZGVudGlmaWVyIChpZCkge1xuICBpZiAoIV8uaXNTdHJpbmcoaWQpICYmICFfLmlzTnVtYmVyKGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXy5pc1N0cmluZyhpZCkgJiYgXy5pc0VtcHR5KGlkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXy5pc051bWJlcihpZCkgJiYgaXNOYU4oaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5jb21tYW5kcy5zZXRGcmFtZSA9IGFzeW5jIGZ1bmN0aW9uIHNldEZyYW1lIChmcmFtZSkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGlmIChfLmlzTnVsbChmcmFtZSkpIHtcbiAgICB0aGlzLmN1cldlYkZyYW1lcyA9IFtdO1xuICAgIHRoaXMubG9nLmRlYnVnKCdMZWF2aW5nIHdlYiBmcmFtZSBhbmQgZ29pbmcgYmFjayB0byBkZWZhdWx0IGNvbnRlbnQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoZnJhbWUpKSB7XG4gICAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZnJhbWUpO1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X2ZyYW1lX3dpbmRvdycsIFthdG9tc0VsZW1lbnRdKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRW50ZXJpbmcgbmV3IHdlYiBmcmFtZTogJyR7dmFsdWUuV0lORE9XfSdgKTtcbiAgICB0aGlzLmN1cldlYkZyYW1lcy51bnNoaWZ0KHZhbHVlLldJTkRPVyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXRvbSA9IF8uaXNOdW1iZXIoZnJhbWUpID8gJ2ZyYW1lX2J5X2luZGV4JyA6ICdmcmFtZV9ieV9pZF9vcl9uYW1lJztcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oYXRvbSwgW2ZyYW1lXSk7XG4gICAgaWYgKF8uaXNOdWxsKHZhbHVlKSB8fCBfLmlzVW5kZWZpbmVkKHZhbHVlLldJTkRPVykpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRnJhbWVFcnJvcigpO1xuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRW50ZXJpbmcgbmV3IHdlYiBmcmFtZTogJyR7dmFsdWUuV0lORE9XfSdgKTtcbiAgICB0aGlzLmN1cldlYkZyYW1lcy51bnNoaWZ0KHZhbHVlLldJTkRPVyk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldENzc1Byb3BlcnR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3NzUHJvcGVydHkgKHByb3BlcnR5TmFtZSwgZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfdmFsdWVfb2ZfY3NzX3Byb3BlcnR5JywgW2F0b21zRWxlbWVudCwgcHJvcGVydHlOYW1lXSk7XG59O1xuXG5jb21tYW5kcy5zdWJtaXQgPSBhc3luYyBmdW5jdGlvbiBzdWJtaXQgKGVsKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgYXRvbXNFbGVtZW50ID0gdGhpcy5nZXRBdG9tc0VsZW1lbnQoZWwpO1xuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdzdWJtaXQnLCBbYXRvbXNFbGVtZW50XSk7XG59O1xuXG5jb21tYW5kcy5yZWZyZXNoID0gYXN5bmMgZnVuY3Rpb24gcmVmcmVzaCAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgncmVmcmVzaCcsIFtdKTtcbn07XG5cbmNvbW1hbmRzLmdldFVybCA9IGFzeW5jIGZ1bmN0aW9uIGdldFVybCAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGUoJ3dpbmRvdy5sb2NhdGlvbi5ocmVmJyk7XG59O1xuXG5jb21tYW5kcy50aXRsZSA9IGFzeW5jIGZ1bmN0aW9uIHRpdGxlICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgndGl0bGUnLCBbXSwgdHJ1ZSk7XG59O1xuXG5jb21tYW5kcy5nZXRDb29raWVzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29va2llcyAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgdGhpcy5sb2cuZGVidWcoJ1JldHJpZXZpbmcgYWxsIGNvb2tpZXMnKTtcblxuICBsZXQgc2NyaXB0ID0gJ3JldHVybiBkb2N1bWVudC5jb29raWUnO1xuICBsZXQganNDb29raWVzID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xuXG4gIGxldCBjb29raWVzID0gW107XG4gIHRyeSB7XG4gICAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY29va2llVXRpbHMuY3JlYXRlSldQQ29va2llKHVuZGVmaW5lZCwganNDb29raWVzKSkpIHtcbiAgICAgIGNvb2tpZXMucHVzaCh7bmFtZSwgdmFsdWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvb2tpZXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMubG9nLmVycm9yKGVycik7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoYEVycm9yIHBhcnNpbmcgY29va2llcyBmcm9tIHJlc3VsdDogJyR7anNDb29raWVzfSdgKTtcbiAgfVxufTtcblxuY29tbWFuZHMuc2V0Q29va2llID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29va2llIChjb29raWUpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb29raWUgPSBfLmNsb25lKGNvb2tpZSk7XG5cbiAgLy8gaWYgYHBhdGhgIGZpZWxkIGlzIG5vdCBzcGVjaWZpZWQsIFNhZmFyaSB3aWxsIG5vdCB1cGRhdGUgY29va2llcyBhcyBleHBlY3RlZDsgZWcgaXNzdWUgIzE3MDhcbiAgaWYgKCFjb29raWUucGF0aCkge1xuICAgIGNvb2tpZS5wYXRoID0gJy8nO1xuICB9XG5cbiAgY29uc3QganNDb29raWUgPSBjb29raWVVdGlscy5jcmVhdGVKU0Nvb2tpZShjb29raWUubmFtZSwgY29va2llLnZhbHVlLCB7XG4gICAgZXhwaXJlczogXy5pc051bWJlcihjb29raWUuZXhwaXJ5KSA/IChuZXcgRGF0ZShjb29raWUuZXhwaXJ5ICogMTAwMCkpLnRvVVRDU3RyaW5nKCkgOlxuICAgICAgY29va2llLmV4cGlyeSxcbiAgICBwYXRoOiBjb29raWUucGF0aCxcbiAgICBkb21haW46IGNvb2tpZS5kb21haW4sXG4gICAgaHR0cE9ubHk6IGNvb2tpZS5odHRwT25seSxcbiAgICBzZWN1cmU6IGNvb2tpZS5zZWN1cmVcbiAgfSk7XG4gIGxldCBzY3JpcHQgPSBgZG9jdW1lbnQuY29va2llID0gJHtKU09OLnN0cmluZ2lmeShqc0Nvb2tpZSl9YDtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xufTtcblxuY29tbWFuZHMuZGVsZXRlQ29va2llID0gYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ29va2llIChjb29raWVOYW1lKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgLy8gY2hlY2sgY29va2llIGV4aXN0ZW5jZVxuICBsZXQgY29va2llcyA9IGF3YWl0IHRoaXMuZ2V0Q29va2llcygpO1xuICBpZiAoXy5pbmRleE9mKF8ubWFwKGNvb2tpZXMsICduYW1lJyksIGNvb2tpZU5hbWUpID09PSAtMSkge1xuICAgIHRoaXMubG9nLmRlYnVnKGBDb29raWUgJyR7Y29va2llTmFtZX0nIG5vdCBmb3VuZC4gSWdub3JpbmcuYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5fZGVsZXRlQ29va2llKGNvb2tpZU5hbWUpO1xufTtcblxuY29tbWFuZHMuZGVsZXRlQ29va2llcyA9IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUNvb2tpZXMgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGxldCBjb29raWVzID0gYXdhaXQgdGhpcy5nZXRDb29raWVzKCk7XG4gIGlmIChjb29raWVzLmxlbmd0aCkge1xuICAgIGZvciAobGV0IGNvb2tpZSBvZiBjb29raWVzKSB7XG4gICAgICBhd2FpdCB0aGlzLl9kZWxldGVDb29raWUoY29va2llLm5hbWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmhlbHBlcnMuX2RlbGV0ZUNvb2tpZSA9IGFzeW5jIGZ1bmN0aW9uIF9kZWxldGVDb29raWUgKGNvb2tpZU5hbWUpIHtcbiAgdGhpcy5sb2cuZGVidWcoYERlbGV0aW5nIGNvb2tpZSAnJHtjb29raWVOYW1lfSdgKTtcbiAgbGV0IHdlYkNvb2tpZSA9IGNvb2tpZVV0aWxzLmV4cGlyZUNvb2tpZShjb29raWVOYW1lLCB7cGF0aDogJy8nfSk7XG4gIGxldCBzY3JpcHQgPSBgZG9jdW1lbnQuY29va2llID0gJHtKU09OLnN0cmluZ2lmeSh3ZWJDb29raWUpfWA7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgW11dKTtcbn07XG5cbmhlbHBlcnMuY2FjaGVXZWJFbGVtZW50ID0gZnVuY3Rpb24gY2FjaGVXZWJFbGVtZW50IChlbCkge1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChlbCkpIHtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgY29uc3QgZWxJZCA9IHV0aWwudW53cmFwRWxlbWVudChlbCk7XG4gIGlmICghaXNWYWxpZEVsZW1lbnRJZGVudGlmaWVyKGVsSWQpKSB7XG4gICAgcmV0dXJuIGVsO1xuICB9XG4gIC8vIEluIG5ld2VyIGRlYnVnZ2VyIHJlbGVhc2VzIGVsZW1lbnQgaWRlbnRpZmllcnMgbG9vayBsaWtlIGA6d2RjOjE2MjgxNTE2NDkzMjVgXG4gIC8vIFdlIGFzc3VtZSBpdCBpcyBzYWZlIHRvIHVzZSB0aGVzZSB0byBpZGVudGlmeSBjYWNoZWQgZWxlbWVudHNcbiAgY29uc3QgY2FjaGVJZCA9IF8uaW5jbHVkZXMoZWxJZCwgJzonKSA/IGVsSWQgOiB1dGlsLnV1aWRWNCgpO1xuICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUuc2V0KGNhY2hlSWQsIGVsSWQpO1xuICByZXR1cm4gdXRpbC53cmFwRWxlbWVudChjYWNoZUlkKTtcbn07XG5cbmhlbHBlcnMuY2FjaGVXZWJFbGVtZW50cyA9IGZ1bmN0aW9uIGNhY2hlV2ViRWxlbWVudHMgKHJlc3BvbnNlKSB7XG4gIGNvbnN0IHRvQ2FjaGVkID0gKHYpID0+IF8uaXNBcnJheSh2KSB8fCBfLmlzUGxhaW5PYmplY3QodilcbiAgICA/IHRoaXMuY2FjaGVXZWJFbGVtZW50cyh2KVxuICAgIDogdjtcblxuICBpZiAoXy5pc0FycmF5KHJlc3BvbnNlKSkge1xuICAgIHJldHVybiByZXNwb25zZS5tYXAodG9DYWNoZWQpO1xuICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChyZXNwb25zZSkpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7Li4ucmVzcG9uc2UsIC4uLih0aGlzLmNhY2hlV2ViRWxlbWVudChyZXNwb25zZSkpfTtcbiAgICByZXR1cm4gXy50b1BhaXJzKHJlc3VsdCkucmVkdWNlKFxuICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGFjY1trZXldID0gdG9DYWNoZWQodmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge31cbiAgICApO1xuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn07XG5cbmV4dGVuc2lvbnMuZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzID0gYXN5bmMgZnVuY3Rpb24gZmluZFdlYkVsZW1lbnRPckVsZW1lbnRzIChzdHJhdGVneSwgc2VsZWN0b3IsIG1hbnksIGN0eCkge1xuICBjb25zdCBjb250ZXh0RWxlbWVudCA9IF8uaXNOaWwoY3R4KSA/IG51bGwgOiB0aGlzLmdldEF0b21zRWxlbWVudChjdHgpO1xuICBsZXQgZWxlbWVudDtcbiAgbGV0IGRvRmluZCA9IGFzeW5jICgpID0+IHtcbiAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbShgZmluZF9lbGVtZW50JHttYW55ID8gJ3MnIDogJyd9YCwgW3N0cmF0ZWd5LCBzZWxlY3RvciwgY29udGV4dEVsZW1lbnRdKTtcbiAgICByZXR1cm4gIV8uaXNOdWxsKGVsZW1lbnQpO1xuICB9O1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuaW1wbGljaXRXYWl0Rm9yQ29uZGl0aW9uKGRvRmluZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZSAmJiBfLmlzRnVuY3Rpb24oZXJyLm1lc3NhZ2UubWF0Y2gpICYmIGVyci5tZXNzYWdlLm1hdGNoKC9Db25kaXRpb24gdW5tZXQvKSkge1xuICAgICAgLy8gY29uZGl0aW9uIHdhcyBub3QgbWV0IHNldHRpbmcgcmVzIHRvIGVtcHR5IGFycmF5XG4gICAgICBlbGVtZW50ID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBpZiAobWFueSkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMoZWxlbWVudCk7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShlbGVtZW50KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRWxlbWVudEVycm9yKCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhlbGVtZW50KTtcbn07XG5cbmV4dGVuc2lvbnMuY2xpY2tXZWJDb29yZHMgPSBhc3luYyBmdW5jdGlvbiBjbGlja1dlYkNvb3JkcyAoKSB7XG4gIGxldCBjb29yZHMgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVdlYkNvb3Jkcyh0aGlzLmN1cldlYkNvb3Jkcyk7XG4gIGF3YWl0IHRoaXMuY2xpY2tDb29yZHMoY29vcmRzKTtcbn07XG5cbmhlbHBlcnMuZXhlY3V0ZUF0b20gPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXRvbSAoYXRvbSwgYXJncywgYWx3YXlzRGVmYXVsdEZyYW1lID0gZmFsc2UpIHtcbiAgbGV0IGZyYW1lcyA9IGFsd2F5c0RlZmF1bHRGcmFtZSA9PT0gdHJ1ZSA/IFtdIDogdGhpcy5jdXJXZWJGcmFtZXM7XG4gIGxldCBwcm9taXNlID0gdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b20oYXRvbSwgYXJncywgZnJhbWVzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSk7XG59O1xuXG5oZWxwZXJzLmV4ZWN1dGVBdG9tQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXRvbUFzeW5jIChhdG9tLCBhcmdzLCByZXNwb25zZVVybCkge1xuICAvLyBzYXZlIHRoZSByZXNvbHZlIGFuZCByZWplY3QgbWV0aG9kcyBvZiB0aGUgcHJvbWlzZSB0byBiZSB3YWl0ZWQgZm9yXG4gIGxldCBwcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRoaXMuYXN5bmNQcm9taXNlID0ge3Jlc29sdmUsIHJlamVjdH07XG4gIH0pO1xuICBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbUFzeW5jKGF0b20sIGFyZ3MsIHRoaXMuY3VyV2ViRnJhbWVzLCByZXNwb25zZVVybCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLndhaXRGb3JBdG9tKHByb21pc2UpO1xufTtcblxuaGVscGVycy5nZXRBdG9tc0VsZW1lbnQgPSBmdW5jdGlvbiBnZXRBdG9tc0VsZW1lbnQgKGVsT3JJZCkge1xuICBjb25zdCBlbElkID0gdXRpbC51bndyYXBFbGVtZW50KGVsT3JJZCk7XG4gIGlmICghdGhpcy53ZWJFbGVtZW50c0NhY2hlLmhhcyhlbElkKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IoKTtcbiAgfVxuICByZXR1cm4ge0VMRU1FTlQ6IHRoaXMud2ViRWxlbWVudHNDYWNoZS5nZXQoZWxJZCl9O1xufTtcblxuaGVscGVycy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyA9IGZ1bmN0aW9uIGNvbnZlcnRFbGVtZW50c0ZvckF0b21zIChhcmdzID0gW10pIHtcbiAgcmV0dXJuIGFyZ3MubWFwKChhcmcpID0+IHtcbiAgICBpZiAoaGVscGVycy5oYXNFbGVtZW50SWQoYXJnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXRvbXNFbGVtZW50KGFyZyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5TdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcikpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIHJldHVybiBfLmlzQXJyYXkoYXJnKSA/IHRoaXMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMoYXJnKSA6IGFyZztcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmdldEVsZW1lbnRJZCA9IGZ1bmN0aW9uIGdldEVsZW1lbnRJZCAoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5FTEVNRU5UIHx8IGVsZW1lbnRbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdO1xufTtcblxuaGVscGVycy5oYXNFbGVtZW50SWQgPSBmdW5jdGlvbiBoYXNFbGVtZW50SWQgKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHV0aWwuaGFzVmFsdWUoZWxlbWVudCkgJiYgKHV0aWwuaGFzVmFsdWUoZWxlbWVudC5FTEVNRU5UKSB8fCB1dGlsLmhhc1ZhbHVlKGVsZW1lbnRbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdKSk7XG59O1xuXG5leHRlbnNpb25zLmdldFNhZmFyaUlzSXBob25lID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpSXNJcGhvbmUgKCkge1xuICBpZiAoXy5pc0Jvb2xlYW4odGhpcy5faXNTYWZhcmlJcGhvbmUpKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2FmYXJpSXBob25lO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgdXNlckFnZW50ID0gYXdhaXQgdGhpcy5leGVjdXRlKCdyZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudCcpO1xuICAgIHRoaXMuX2lzU2FmYXJpSXBob25lID0gdXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2lwaG9uZScpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZmluZCBkZXZpY2UgdHlwZSBmcm9tIHVzZXJhZ2VudC4gQXNzdW1pbmcgaVBob25lYCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiB0aGlzLl9pc1NhZmFyaUlwaG9uZSA/PyB0cnVlO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlEZXZpY2VTaXplID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2FmYXJpRGV2aWNlU2l6ZSAoKSB7XG4gIGNvbnN0IHNjcmlwdCA9ICdyZXR1cm4ge2hlaWdodDogd2luZG93LnNjcmVlbi5hdmFpbEhlaWdodCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLCB3aWR0aDogd2luZG93LnNjcmVlbi5hdmFpbFdpZHRoICogd2luZG93LmRldmljZVBpeGVsUmF0aW99Oyc7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZXhlY3V0ZShzY3JpcHQpO1xuICBjb25zdCBbbm9ybUhlaWdodCwgbm9ybVdpZHRoXSA9IGhlaWdodCA+IHdpZHRoID8gW2hlaWdodCwgd2lkdGhdIDogW3dpZHRoLCBoZWlnaHRdO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBub3JtV2lkdGgsXG4gICAgaGVpZ2h0OiBub3JtSGVpZ2h0LFxuICB9O1xufTtcblxuZXh0ZW5zaW9ucy5nZXRTYWZhcmlJc05vdGNoZWQgPSBhc3luYyBmdW5jdGlvbiBnZXRTYWZhcmlJc05vdGNoZWQgKCkge1xuICBpZiAoXy5pc0Jvb2xlYW4odGhpcy5faXNTYWZhcmlOb3RjaGVkKSkge1xuICAgIHJldHVybiB0aGlzLl9pc1NhZmFyaU5vdGNoZWQ7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0U2FmYXJpRGV2aWNlU2l6ZSgpO1xuICAgIGZvciAoY29uc3QgZGV2aWNlIG9mIE5PVENIRURfREVWSUNFX1NJWkVTKSB7XG4gICAgICBpZiAoZGV2aWNlLncgPT09IHdpZHRoICYmIGRldmljZS5oID09PSBoZWlnaHQpIHtcbiAgICAgICAgdGhpcy5faXNTYWZhcmlOb3RjaGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBmaW5kIGRldmljZSB0eXBlIGZyb20gZGltZW5zaW9ucy4gQXNzdW1pbmcgdGhlIGRldmljZSBpcyBub3Qgbm90Y2hlZGApO1xuICAgIHRoaXMubG9nLmRlYnVnKGBFcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gdGhpcy5faXNTYWZhcmlOb3RjaGVkID8/IGZhbHNlO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0ICh3dlBvcywgcmVhbERpbXMpIHtcbiAgbGV0IHRvcE9mZnNldCA9IDA7XG4gIGxldCBib3R0b21PZmZzZXQgPSAwO1xuXG4gIGNvbnN0IGlzSXBob25lID0gYXdhaXQgdGhpcy5nZXRTYWZhcmlJc0lwaG9uZSgpO1xuXG4gIC8vIE5vIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgU21hcnQgQXBwIEJhbm5lciBvciBUYWIgQmFyIGlzIHZpc2libGUgb3Igbm90XG4gIC8vIGlmIGFscmVhZHkgZGVmaW5lZCBieSBuYXRpdmVXZWJUYXBUYWJCYXJWaXNpYmlsaXR5IG9yIG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSBpbiBzZXR0aW5ncy5cbiAgY29uc3Qge1xuICAgIG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHksXG4gICAgbmF0aXZlV2ViVGFwU21hcnRBcHBCYW5uZXJWaXNpYmlsaXR5LFxuICAgIHNhZmFyaVRhYkJhclBvc2l0aW9uID0gdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzE1LjAnKSAmJiBpc0lwaG9uZVxuICAgICAgPyBUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSA6IFRBQl9CQVJfUE9TSVRJT05fVE9QLFxuICB9ID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpO1xuICBsZXQgdGFiQmFyVmlzaWJpbGl0eSA9IF8ubG93ZXJDYXNlKG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkpO1xuICBsZXQgYmFubmVyVmlzaWJpbGl0eSA9IF8ubG93ZXJDYXNlKG5hdGl2ZVdlYlRhcFNtYXJ0QXBwQmFubmVyVmlzaWJpbGl0eSk7XG4gIGNvbnN0IHRhYkJhclBvc2l0aW9uID0gXy5sb3dlckNhc2Uoc2FmYXJpVGFiQmFyUG9zaXRpb24pO1xuXG4gIGlmICghVklTSUJJTElUSUVTLmluY2x1ZGVzKHRhYkJhclZpc2liaWxpdHkpKSB7XG4gICAgdGFiQmFyVmlzaWJpbGl0eSA9IERFVEVDVDtcbiAgfVxuICBpZiAoIVZJU0lCSUxJVElFUy5pbmNsdWRlcyhiYW5uZXJWaXNpYmlsaXR5KSkge1xuICAgIGJhbm5lclZpc2liaWxpdHkgPSBERVRFQ1Q7XG4gIH1cblxuICBpZiAoIVRBQl9CQVJfUE9TU0lUSU9OUy5pbmNsdWRlcyh0YWJCYXJQb3NpdGlvbikpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgYCR7c2FmYXJpVGFiQmFyUG9zaXRpb259IGlzIGludmFsaWQgYXMgU2FmYXJpIHRhYiBiYXIgcG9zaXRpb24uIEF2YWlsYWJsZSBwb3NpdGlvbnMgYXJlICR7VEFCX0JBUl9QT1NTSVRJT05TfS5gKTtcbiAgfVxuXG4gIGNvbnN0IGlzTm90Y2hlZCA9IGlzSXBob25lICYmIGF3YWl0IHRoaXMuZ2V0U2FmYXJpSXNOb3RjaGVkKCk7XG5cbiAgY29uc3Qgb3JpZW50YXRpb24gPSByZWFsRGltcy5oID4gcmVhbERpbXMudyA/ICdQT1JUUkFJVCcgOiAnTEFORFNDQVBFJztcblxuICBjb25zdCBub3RjaE9mZnNldCA9IGlzTm90Y2hlZFxuICAgID8gdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz0nLCAnMTMuMCcpXG4gICAgICA/IElQSE9ORV9YX05PVENIX09GRlNFVF9JT1NfMTNcbiAgICAgIDogSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU1xuICAgIDogMDtcblxuICBjb25zdCBpc1Njcm9sbGVkID0gYXdhaXQgdGhpcy5leGVjdXRlKCdyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA+IDAnKTtcbiAgaWYgKGlzU2Nyb2xsZWQpIHtcbiAgICB0b3BPZmZzZXQgPSBJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQgKyBub3RjaE9mZnNldDtcblxuICAgIGlmIChpc05vdGNoZWQpIHtcbiAgICAgIHRvcE9mZnNldCAtPSBJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQ7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGlQaG9uZSBpcyBsYW5kc2NhcGUgdGhlbiB0aGVyZSBpcyBubyB0b3AgYmFyXG4gICAgaWYgKG9yaWVudGF0aW9uID09PSAnTEFORFNDQVBFJyAmJiBpc0lwaG9uZSkge1xuICAgICAgdG9wT2Zmc2V0ID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdG9wT2Zmc2V0ID0gdGFiQmFyUG9zaXRpb24gPT09IFRBQl9CQVJfUE9TSVRJT05fQk9UVE9NID8gMCA6IElQSE9ORV9UT1BfQkFSX0hFSUdIVDtcbiAgICB0b3BPZmZzZXQgKz0gbm90Y2hPZmZzZXQ7XG4gICAgdGhpcy5sb2cuZGVidWcoYHRhYkJhclBvc2l0aW9uIGFuZCB0b3BPZmZzZXQ6ICR7dGFiQmFyUG9zaXRpb259LCAke3RvcE9mZnNldH1gKTtcblxuICAgIGlmIChpc0lwaG9uZSkge1xuICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnUE9SVFJBSVQnKSB7XG4gICAgICAgIC8vIFRoZSBib3R0b20gYmFyIGlzIG9ubHkgdmlzaWJsZSB3aGVuIHBvcnRyYWl0XG4gICAgICAgIGJvdHRvbU9mZnNldCA9IElQSE9ORV9CT1RUT01fQkFSX09GRlNFVDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvcE9mZnNldCA9IElQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9yaWVudGF0aW9uID09PSAnTEFORFNDQVBFJyB8fCAhaXNJcGhvbmUpIHtcbiAgICAgIGlmICh0YWJCYXJWaXNpYmlsaXR5ID09PSBWSVNJQkxFKSB7XG4gICAgICAgIHRvcE9mZnNldCArPSBUQUJfQkFSX09GRlNFVDtcbiAgICAgIH0gZWxzZSBpZiAodGFiQmFyVmlzaWJpbGl0eSA9PT0gREVURUNUKSB7XG4gICAgICAgIC8vIFRhYnMgb25seSBhcHBlYXIgaWYgdGhlIGRldmljZSBpcyBsYW5kc2NhcGUgb3IgaWYgaXQncyBhbiBpUGFkIHNvIHdlIG9ubHkgY2hlY2sgdmlzaWJpbGl0eSBpbiB0aGlzIGNhc2VcbiAgICAgICAgLy8gQXNzdW1lIHRoYXQgZWFjaCB0YWIgYmFyIGlzIGEgV2ViVmlld1xuICAgICAgICBjb25zdCBjb250ZXh0c0FuZFZpZXdzID0gYXdhaXQgdGhpcy5nZXRDb250ZXh0c0FuZFZpZXdzKCk7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBjb250ZXh0c0FuZFZpZXdzLmZpbHRlcigoY3R4KSA9PiBjdHguaWQuc3RhcnRzV2l0aCgnV0VCVklFV18nKSk7XG5cbiAgICAgICAgaWYgKHRhYnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCAke3RhYnMubGVuZ3RofSB0YWJzLiBBc3N1bWluZyB0aGUgdGFiIGJhciBpcyB2aXNpYmxlYCk7XG4gICAgICAgICAgdG9wT2Zmc2V0ICs9IFRBQl9CQVJfT0ZGU0VUO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdG9wT2Zmc2V0ICs9IGF3YWl0IHRoaXMuZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQoaXNJcGhvbmUsIGJhbm5lclZpc2liaWxpdHkpO1xuXG4gIHd2UG9zLnkgKz0gdG9wT2Zmc2V0O1xuICByZWFsRGltcy5oIC09ICh0b3BPZmZzZXQgKyBib3R0b21PZmZzZXQpO1xufTtcblxuZXh0ZW5zaW9ucy5nZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldCA9IGFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0IChpc0lwaG9uZSwgYmFubmVyVmlzaWJpbGl0eSkge1xuICBsZXQgb2Zmc2V0ID0gMDtcblxuICBpZiAoYmFubmVyVmlzaWJpbGl0eSA9PT0gVklTSUJMRSkge1xuICAgIG9mZnNldCArPSBpc0lwaG9uZSA/XG4gICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgIElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUO1xuICB9IGVsc2UgaWYgKGJhbm5lclZpc2liaWxpdHkgPT09IERFVEVDVCkge1xuICAgIC8vIHRyeSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gU21hcnQgQXBwIEJhbm5lclxuICAgIGNvbnN0IGJhbm5lcnMgPSBhd2FpdCB0aGlzLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnYWNjZXNzaWJpbGl0eSBpZCcsICdDbG9zZSBhcHAgZG93bmxvYWQgb2ZmZXInLCB0cnVlKTtcbiAgICBpZiAoYmFubmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBvZmZzZXQgKz0gaXNJcGhvbmUgP1xuICAgICAgICBJUEhPTkVfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUIDpcbiAgICAgICAgSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQ7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5sb2cuZGVidWcoYEFkZGl0aW9uYWwgbmF0aXZlIHdlYiB0YXAgb2Zmc2V0IGNvbXB1dGVkOiAke29mZnNldH1gKTtcbiAgcmV0dXJuIG9mZnNldDtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHRhcFdlYkVsZW1lbnROYXRpdmVseSAoZHJpdmVyLCBhdG9tc0VsZW1lbnQpIHtcbiAgLy8gdHJ5IHRvIGdldCB0aGUgdGV4dCBvZiB0aGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBhY2Nlc3NpYmxlIGluIHRoZVxuICAvLyBuYXRpdmUgY29udGV4dFxuICB0cnkge1xuICAgIGxldCB0ZXh0ID0gYXdhaXQgZHJpdmVyLmV4ZWN1dGVBdG9tKCdnZXRfdGV4dCcsIFthdG9tc0VsZW1lbnRdKTtcbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIHRleHQgPSBhd2FpdCBkcml2ZXIuZXhlY3V0ZUF0b20oJ2dldF9hdHRyaWJ1dGVfdmFsdWUnLCBbYXRvbXNFbGVtZW50LCAndmFsdWUnXSk7XG4gICAgfVxuXG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGNvbnN0IGVscyA9IGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2FjY2Vzc2liaWxpdHkgaWQnLCB0ZXh0LCB0cnVlKTtcbiAgICAgIGlmIChlbHMubGVuZ3RoID09PSAxIHx8IGVscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgZWwgPSBlbHNbMF07XG4gICAgICAgIC8vIHVzZSB0YXAgYmVjYXVzZSBvbiBpT1MgMTEuMiBhbmQgYmVsb3cgYG5hdGl2ZUNsaWNrYCBjcmFzaGVzIFdEQVxuICAgICAgICBjb25zdCByZWN0ID0gYXdhaXQgZHJpdmVyLnByb3h5Q29tbWFuZChgL2VsZW1lbnQvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWwpfS9yZWN0YCwgJ0dFVCcpO1xuICAgICAgICBpZiAoZWxzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IGVsMiA9IGVsc1sxXTtcbiAgICAgICAgICBjb25zdCByZWN0MiA9IGF3YWl0IGRyaXZlci5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7dXRpbC51bndyYXBFbGVtZW50KGVsMil9L3JlY3RgLCAnR0VUJyk7XG5cbiAgICAgICAgICBpZiAoKHJlY3QueCAhPT0gcmVjdDIueCB8fCByZWN0LnkgIT09IHJlY3QyLnkpIHx8XG4gICAgICAgICAgKHJlY3Qud2lkdGggIT09IHJlY3QyLndpZHRoIHx8IHJlY3QuaGVpZ2h0ICE9PSByZWN0Mi5oZWlnaHQpKSB7XG4gICAgICAgICAgICAvLyBUaGVzZSAyIG5hdGl2ZSBlbGVtZW50cyBhcmUgbm90IHJlZmVycmluZyB0byB0aGUgc2FtZSB3ZWIgZWxlbWVudFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgICAgeDogTWF0aC5yb3VuZChyZWN0LnggKyByZWN0LndpZHRoIC8gMiksXG4gICAgICAgICAgeTogTWF0aC5yb3VuZChyZWN0LnkgKyByZWN0LmhlaWdodCAvIDIpLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCBkcml2ZXIuY2xpY2tDb29yZHMoY29vcmRzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBhbnkgZmFpbHVyZSBzaG91bGQgZmFsbCB0aHJvdWdoIGFuZCB0cmlnZ2VyIHRoZSBtb3JlIGVsYWJvcmF0ZVxuICAgIC8vIG1ldGhvZCBvZiBjbGlja2luZ1xuICAgIGRyaXZlci5sb2cud2FybihgRXJyb3IgYXR0ZW1wdGluZyB0byBjbGljazogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4dGVuc2lvbnMubmF0aXZlV2ViVGFwID0gYXN5bmMgZnVuY3Rpb24gbmF0aXZlV2ViVGFwIChlbCkge1xuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG5cbiAgLy8gaWYgc3RyaWN0IG5hdGl2ZSB0YXAsIGRvIG5vdCB0cnkgdG8gZG8gaXQgd2l0aCBXREEgZGlyZWN0bHlcbiAgaWYgKCEoYXdhaXQgdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpKS5uYXRpdmVXZWJUYXBTdHJpY3QgJiYgYXdhaXQgdGFwV2ViRWxlbWVudE5hdGl2ZWx5KHRoaXMsIGF0b21zRWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sb2cud2FybignVW5hYmxlIHRvIGRvIHNpbXBsZSBuYXRpdmUgd2ViIHRhcC4gQXR0ZW1wdGluZyB0byBjb252ZXJ0IGNvb3JkaW5hdGVzJyk7XG5cbiAgLy8gYGdldF90b3BfbGVmdF9jb29yZGluYXRlc2AgcmV0dXJucyB0aGUgd3JvbmcgdmFsdWUgc29tZXRpbWVzLFxuICAvLyB1bmxlc3Mgd2UgcHJlLWNhbGwgYm90aCBvZiB0aGVzZSBmdW5jdGlvbnMgYmVmb3JlIHRoZSBhY3R1YWwgY2FsbHNcbiAgYXdhaXQgQi5Qcm9taXNlLmFsbChbXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3NpemUnLCBbYXRvbXNFbGVtZW50XSksXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3RvcF9sZWZ0X2Nvb3JkaW5hdGVzJywgW2F0b21zRWxlbWVudF0pLFxuICBdKTtcblxuICBjb25zdCBbc2l6ZSwgY29vcmRpbmF0ZXNdID0gYXdhaXQgQi5Qcm9taXNlLmFsbChbXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3NpemUnLCBbYXRvbXNFbGVtZW50XSksXG4gICAgdGhpcy5leGVjdXRlQXRvbSgnZ2V0X3RvcF9sZWZ0X2Nvb3JkaW5hdGVzJywgW2F0b21zRWxlbWVudF0pLFxuICBdKTtcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gc2l6ZTtcbiAgbGV0IHt4LCB5fSA9IGNvb3JkaW5hdGVzO1xuICB4ICs9IHdpZHRoIC8gMjtcbiAgeSArPSBoZWlnaHQgLyAyO1xuXG4gIHRoaXMuY3VyV2ViQ29vcmRzID0ge3gsIHl9O1xuICBhd2FpdCB0aGlzLmNsaWNrV2ViQ29vcmRzKCk7XG59O1xuXG5leHRlbnNpb25zLmNsaWNrQ29vcmRzID0gYXN5bmMgZnVuY3Rpb24gY2xpY2tDb29yZHMgKGNvb3Jkcykge1xuICBhd2FpdCB0aGlzLnBlcmZvcm1Ub3VjaChbXG4gICAge1xuICAgICAgYWN0aW9uOiAndGFwJyxcbiAgICAgIG9wdGlvbnM6IGNvb3JkcyxcbiAgICB9LFxuICBdKTtcbn07XG5cbmV4dGVuc2lvbnMudHJhbnNsYXRlV2ViQ29vcmRzID0gYXN5bmMgZnVuY3Rpb24gdHJhbnNsYXRlV2ViQ29vcmRzIChjb29yZHMpIHtcbiAgdGhpcy5sb2cuZGVidWcoYFRyYW5zbGF0aW5nIGNvb3JkaW5hdGVzICgke0pTT04uc3RyaW5naWZ5KGNvb3Jkcyl9KSB0byB3ZWIgY29vcmRpbmF0ZXNgKTtcblxuICAvLyBhYnNvbHV0aXplIHdlYiBjb29yZHNcbiAgbGV0IHdlYnZpZXc7XG4gIHRyeSB7XG4gICAgd2VidmlldyA9IGF3YWl0IHJldHJ5SW50ZXJ2YWwoNSwgMTAwLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnY2xhc3MgbmFtZScsICdYQ1VJRWxlbWVudFR5cGVXZWJWaWV3JywgZmFsc2UpKTtcbiAgfSBjYXRjaCAoaWduKSB7fVxuXG4gIGlmICghd2Vidmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gV2ViVmlldyBmb3VuZC4gVW5hYmxlIHRvIHRyYW5zbGF0ZSB3ZWIgY29vcmRpbmF0ZXMgZm9yIG5hdGl2ZSB3ZWIgdGFwLmApO1xuICB9XG5cbiAgd2VidmlldyA9IHV0aWwudW53cmFwRWxlbWVudCh3ZWJ2aWV3KTtcblxuICBjb25zdCByZWN0ID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC9lbGVtZW50LyR7d2Vidmlld30vcmVjdGAsICdHRVQnKTtcbiAgY29uc3Qgd3ZQb3MgPSB7eDogcmVjdC54LCB5OiByZWN0Lnl9O1xuICBjb25zdCByZWFsRGltcyA9IHt3OiByZWN0LndpZHRoLCBoOiByZWN0LmhlaWdodH07XG5cbiAgY29uc3QgY21kID0gJyhmdW5jdGlvbiAoKSB7IHJldHVybiB7dzogd2luZG93LmlubmVyV2lkdGgsIGg6IHdpbmRvdy5pbm5lckhlaWdodH07IH0pKCknO1xuICBjb25zdCB3dkRpbXMgPSBhd2FpdCB0aGlzLnJlbW90ZS5leGVjdXRlKGNtZCk7XG5cbiAgLy8ga2VlcCB0cmFjayBvZiBpbXBsaWNpdCB3YWl0LCBhbmQgc2V0IGxvY2FsbHkgdG8gMFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTQ5ODhcbiAgY29uc3QgaW1wbGljaXRXYWl0TXMgPSB0aGlzLmltcGxpY2l0V2FpdE1zO1xuICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdCgwKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0KHd2UG9zLCByZWFsRGltcyk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgdGhpcy5zZXRJbXBsaWNpdFdhaXQoaW1wbGljaXRXYWl0TXMpO1xuICB9XG5cbiAgaWYgKHd2RGltcyAmJiByZWFsRGltcyAmJiB3dlBvcykge1xuICAgIGxldCB4UmF0aW8gPSByZWFsRGltcy53IC8gd3ZEaW1zLnc7XG4gICAgbGV0IHlSYXRpbyA9IHJlYWxEaW1zLmggLyB3dkRpbXMuaDtcbiAgICBsZXQgbmV3Q29vcmRzID0ge1xuICAgICAgeDogd3ZQb3MueCArIE1hdGgucm91bmQoeFJhdGlvICogY29vcmRzLngpLFxuICAgICAgeTogd3ZQb3MueSArIE1hdGgucm91bmQoeVJhdGlvICogY29vcmRzLnkpLFxuICAgIH07XG5cbiAgICAvLyBhZGRpdGlvbmFsIGxvZ2dpbmcgZm9yIGNvb3JkaW5hdGVzLCBzaW5jZSBpdCBpcyBzb21ldGltZXMgYnJva2VuXG4gICAgLy8gICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzkxNTlcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQ29udmVydGVkIGNvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICByZWN0OiAke0pTT04uc3RyaW5naWZ5KHJlY3QpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgd3ZQb3M6ICR7SlNPTi5zdHJpbmdpZnkod3ZQb3MpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgcmVhbERpbXM6ICR7SlNPTi5zdHJpbmdpZnkocmVhbERpbXMpfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgd3ZEaW1zOiAke0pTT04uc3RyaW5naWZ5KHd2RGltcyl9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICB4UmF0aW86ICR7SlNPTi5zdHJpbmdpZnkoeFJhdGlvKX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHlSYXRpbzogJHtKU09OLnN0cmluZ2lmeSh5UmF0aW8pfWApO1xuXG4gICAgdGhpcy5sb2cuZGVidWcoYENvbnZlcnRlZCB3ZWIgY29vcmRzICR7SlNPTi5zdHJpbmdpZnkoY29vcmRzKX0gYCArXG4gICAgICBgaW50byByZWFsIGNvb3JkcyAke0pTT04uc3RyaW5naWZ5KG5ld0Nvb3Jkcyl9YCk7XG4gICAgcmV0dXJuIG5ld0Nvb3JkcztcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5jaGVja0ZvckFsZXJ0ID0gYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JBbGVydCAoKSB7XG4gIHJldHVybiBfLmlzU3RyaW5nKGF3YWl0IHRoaXMuZ2V0QWxlcnRUZXh0KCkpO1xufTtcblxuZXh0ZW5zaW9ucy53YWl0Rm9yQXRvbSA9IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JBdG9tIChwcm9taXNlKSB7XG4gIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG5cbiAgLy8gbmVlZCB0byBjaGVjayBmb3IgYWxlcnQgd2hpbGUgdGhlIGF0b20gaXMgYmVpbmcgZXhlY3V0ZWQuXG4gIC8vIHNvIG5vdGlmeSBvdXJzZWx2ZXMgd2hlbiBpdCBoYXBwZW5zXG4gIGNvbnN0IHRpbWVkQXRvbVByb21pc2UgPSBCLnJlc29sdmUocHJvbWlzZSkudGltZW91dChBVE9NX1dBSVRfVElNRU9VVF9NUyk7XG4gIGNvbnN0IGhhbmRsZVByb21pc2VFcnJvciA9IGFzeW5jIChwKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3Qgb3JpZ2luYWxFcnJvciA9IChlcnIgaW5zdGFuY2VvZiBCLkFnZ3JlZ2F0ZUVycm9yKSA/IGVyclswXSA6IGVycjtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBFcnJvciByZWNlaXZlZCB3aGlsZSBleGVjdXRpbmcgYXRvbTogJHtvcmlnaW5hbEVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICBpZiAob3JpZ2luYWxFcnJvciBpbnN0YW5jZW9mIEIuVGltZW91dEVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGlkIG5vdCBnZXQgYW55IHJlc3BvbnNlIGZvciBhdG9tIGV4ZWN1dGlvbiBhZnRlciBgICtcbiAgICAgICAgICBgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgfVxuICB9O1xuICAvLyBpZiB0aGUgYXRvbSBwcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoaW4gQVRPTV9JTklUSUFMX1dBSVRfTVNcbiAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBhbiBhbGVydCBwcmVzZW5jZVxuICBhd2FpdCBoYW5kbGVQcm9taXNlRXJyb3IoQi5hbnkoW0IuZGVsYXkoQVRPTV9JTklUSUFMX1dBSVRfTVMpLCB0aW1lZEF0b21Qcm9taXNlXSkpO1xuICBpZiAodGltZWRBdG9tUHJvbWlzZS5pc0Z1bGZpbGxlZCgpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRpbWVkQXRvbVByb21pc2U7XG4gIH1cblxuICAvLyAuLi5vdGhlcndpc2UgbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgYWxlcnQgY292ZXJpbmcgdGhlIGVsZW1lbnRcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QodGhpcy5fd2FpdGluZ0F0b21zKSkge1xuICAgIHRoaXMuX3dhaXRpbmdBdG9tcyA9IHtcbiAgICAgIGNvdW50OiAwLFxuICAgICAgYWxlcnROb3RpZmllcjogbmV3IEV2ZW50RW1pdHRlcigpLFxuICAgICAgYWxlcnRNb25pdG9yOiBCLnJlc29sdmUoKSxcbiAgICB9O1xuICB9XG4gIHRoaXMuX3dhaXRpbmdBdG9tcy5jb3VudCsrO1xuXG4gIGxldCBvbkFsZXJ0Q2FsbGJhY2s7XG4gIHRyeSB7XG4gICAgLy8gb25seSByZXN0YXJ0IHRoZSBtb25pdG9yIGlmIGl0IGlzIG5vdCBydW5uaW5nIGFscmVhZHlcbiAgICBpZiAodGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0TW9uaXRvci5pc1Jlc29sdmVkKCkpIHtcbiAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE1vbml0b3IgPSBCLnJlc29sdmUoKGFzeW5jICgpID0+IHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX3dhaXRpbmdBdG9tcy5jb3VudCA+IDApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tGb3JBbGVydCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE5vdGlmaWVyLmVtaXQoT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAgICAgICBhd2FpdCBCLmRlbGF5KEFUT01fSU5JVElBTF9XQUlUX01TIC8gMik7XG4gICAgICAgIH1cbiAgICAgIH0pKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBvbkFsZXJ0Q2FsbGJhY2sgPSAoKSA9PiByZWplY3QobmV3IGVycm9ycy5VbmV4cGVjdGVkQWxlcnRPcGVuRXJyb3IoKSk7XG4gICAgICB0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnROb3RpZmllci5vbmNlKE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5ULCBvbkFsZXJ0Q2FsbGJhY2spO1xuICAgICAgaGFuZGxlUHJvbWlzZUVycm9yKHRpbWVkQXRvbVByb21pc2UpXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuXG4gICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChvbkFsZXJ0Q2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKE9OX09CU1RSVUNUSU5HX0FMRVJUX0VWRU5ULCBvbkFsZXJ0Q2FsbGJhY2spO1xuICAgIH1cbiAgICB0aGlzLl93YWl0aW5nQXRvbXMuY291bnQtLTtcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5tb2JpbGVXZWJOYXYgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVXZWJOYXYgKG5hdlR5cGUpIHtcbiAgdGhpcy5yZW1vdGUuYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCA9IHRydWU7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbYGhpc3RvcnkuJHtuYXZUeXBlfSgpO2AsIG51bGxdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLnJlbW90ZS5hbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkID0gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2FmYXJpT3B0c1xuICogQHByb3BlcnR5IHtvYmplY3R9IHByZWZlcmVuY2VzIEFuIG9iamVjdCBjb250YWluaW5nIFNhZmFyaSBzZXR0aW5ncyB0byBiZSB1cGRhdGVkLlxuICogVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHNldHRpbmcgbmFtZXMgYW5kIHRoZWlyIHZhbHVlcyBjb3VsZCBiZSByZXRyaWV2ZWQgYnlcbiAqIGNoYW5naW5nIHRoZSBjb3JyZXNwb25kaW5nIFNhZmFyaSBzZXR0aW5ncyBpbiB0aGUgVUkgYW5kIHRoZW4gaW5zcGVjdGluZ1xuICogJ0xpYnJhcnkvUHJlZmVyZW5jZXMvY29tLmFwcGxlLm1vYmlsZXNhZmFyaS5wbGlzdCcgZmlsZSBpbnNpZGUgb2ZcbiAqIGNvbS5hcHBsZS5tb2JpbGVzYWZhcmkgYXBwIGNvbnRhaW5lci5cbiAqIFRoZSBmdWxsIHBhdGggdG8gdGhlIE1vYmlsZSBTYWZhcmkncyBjb250YWluZXIgY291bGQgYmUgcmV0cmlldmVkIGZyb21cbiAqIGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgPHNpbV91ZGlkPiBjb20uYXBwbGUubW9iaWxlc2FmYXJpIGRhdGFgXG4gKiBjb21tYW5kIG91dHB1dC5cbiAqIFVzZSB0aGUgYHhjcnVuIHNpbWN0bCBzcGF3biA8c2ltX3VkaWQ+IGRlZmF1bHRzIHJlYWQgPHBhdGhfdG9fcGxpc3Q+YCBjb21tYW5kXG4gKiB0byBwcmludCB0aGUgcGxpc3QgY29udGVudCB0byB0aGUgVGVybWluYWwuXG4gKi9cblxuLyoqXG4gKiBVcGRhdGVzIHByZWZlcmVuY2VzIG9mIE1vYmlsZSBTYWZhcmkgb24gU2ltdWxhdG9yXG4gKlxuICogQHBhcmFtIHtTYWZhcmlPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVVwZGF0ZVNhZmFyaVByZWZlcmVuY2VzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVXBkYXRlU2FmYXJpUHJlZmVyZW5jZXMgKG9wdHMgPSB7fSkge1xuICBpZiAoIXRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBleHRlbnNpb24gaXMgb25seSBhdmFpbGFibGUgZm9yIFNpbXVsYXRvcicpO1xuICB9XG4gIGNvbnN0IHsgcHJlZmVyZW5jZXMgfSA9IG9wdHM7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KHByZWZlcmVuY2VzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1wicHJlZmVyZW5jZXNcIiBhcmd1bWVudCBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0Jyk7XG4gIH1cblxuICB0aGlzLmxvZy5kZWJ1ZyhgQWJvdXQgdG8gdXBkYXRlIFNhZmFyaSBwcmVmZXJlbmNlczogJHtKU09OLnN0cmluZ2lmeShwcmVmZXJlbmNlcyl9YCk7XG4gIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UudXBkYXRlU2FmYXJpU2V0dGluZ3MocHJlZmVyZW5jZXMpO1xufTtcblxuT2JqZWN0LmFzc2lnbihjb21tYW5kcywgZXh0ZW5zaW9ucywgaGVscGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEscUJBQXFCLEdBQUcsRUFBRTtBQUNoQyxNQUFNQyw4QkFBOEIsR0FBRyxFQUFFO0FBQ3pDLE1BQU1DLHdCQUF3QixHQUFHLEVBQUU7QUFDbkMsTUFBTUMseUJBQXlCLEdBQUcsRUFBRTtBQUNwQyxNQUFNQyw0QkFBNEIsR0FBRyxFQUFFO0FBRXZDLE1BQU1DLCtCQUErQixHQUFHLEVBQUU7QUFDMUMsTUFBTUMsd0JBQXdCLEdBQUcsRUFBRTtBQUNuQyxNQUFNQyxjQUFjLEdBQUcsRUFBRTtBQUN6QixNQUFNQyx3Q0FBd0MsR0FBRyxFQUFFO0FBQ25ELE1BQU1DLHNDQUFzQyxHQUFHLEVBQUU7QUFFakQsTUFBTUMsb0JBQW9CLEdBQUcsQ0FDM0I7RUFBQ0MsQ0FBQyxFQUFFLElBQUk7RUFBRUMsQ0FBQyxFQUFFO0FBQUksQ0FBQyxFQUNsQjtFQUFDRCxDQUFDLEVBQUUsR0FBRztFQUFFQyxDQUFDLEVBQUU7QUFBSSxDQUFDLEVBQ2pCO0VBQUNELENBQUMsRUFBRSxJQUFJO0VBQUVDLENBQUMsRUFBRTtBQUFJLENBQUMsQ0FDbkI7QUFFRCxNQUFNO0VBQUVDO0FBQTJCLENBQUMsR0FBR0MsYUFBSTtBQUUzQyxNQUFNQyxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsS0FBSztBQUN0QyxNQUFNQyxvQkFBb0IsR0FBRyxJQUFJO0FBRWpDLE1BQU1DLDBCQUEwQixHQUFHLE9BQU87QUFFMUMsTUFBTUMsT0FBTyxH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
|
|
612
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJUEhPTkVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfU0NST0xMRURfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfWF9TQ1JPTExFRF9PRkZTRVQiLCJJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TIiwiSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xMyIsIklQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQiLCJJUEhPTkVfQk9UVE9NX0JBUl9PRkZTRVQiLCJUQUJfQkFSX09GRlNFVCIsIklQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQiLCJJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVCIsIk5PVENIRURfREVWSUNFX1NJWkVTIiwidyIsImgiLCJXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiIsInV0aWwiLCJBVE9NX1dBSVRfVElNRU9VVF9NUyIsIkFUT01fSU5JVElBTF9XQUlUX01TIiwiT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQiLCJWSVNJQkxFIiwiSU5WSVNJQkxFIiwiREVURUNUIiwiVklTSUJJTElUSUVTIiwiVEFCX0JBUl9QT1NJVElPTl9UT1AiLCJUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSIsIlRBQl9CQVJfUE9TU0lUSU9OUyIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIiLCJpZCIsIl8iLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNFbXB0eSIsImlzTmFOIiwic2V0RnJhbWUiLCJmcmFtZSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJpc051bGwiLCJjdXJXZWJGcmFtZXMiLCJsb2ciLCJkZWJ1ZyIsImhhc0VsZW1lbnRJZCIsImF0b21zRWxlbWVudCIsImdldEF0b21zRWxlbWVudCIsInZhbHVlIiwiZXhlY3V0ZUF0b20iLCJXSU5ET1ciLCJ1bnNoaWZ0IiwiYXRvbSIsImlzVW5kZWZpbmVkIiwiTm9TdWNoRnJhbWVFcnJvciIsImdldENzc1Byb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiZWwiLCJzdWJtaXQiLCJyZWZyZXNoIiwiZ2V0VXJsIiwicmVtb3RlIiwiZXhlY3V0ZSIsInRpdGxlIiwiZ2V0Q29va2llcyIsInNjcmlwdCIsImpzQ29va2llcyIsImNvb2tpZXMiLCJuYW1lIiwidG9QYWlycyIsImNvb2tpZVV0aWxzIiwiY3JlYXRlSldQQ29va2llIiwidW5kZWZpbmVkIiwicHVzaCIsImVyciIsImVycm9yIiwiVW5rbm93bkVycm9yIiwic2V0Q29va2llIiwiY29va2llIiwiY2xvbmUiLCJwYXRoIiwianNDb29raWUiLCJjcmVhdGVKU0Nvb2tpZSIsImV4cGlyZXMiLCJleHBpcnkiLCJEYXRlIiwidG9VVENTdHJpbmciLCJkb21haW4iLCJodHRwT25seSIsInNlY3VyZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWxldGVDb29raWUiLCJjb29raWVOYW1lIiwiaW5kZXhPZiIsIm1hcCIsIl9kZWxldGVDb29raWUiLCJkZWxldGVDb29raWVzIiwibGVuZ3RoIiwid2ViQ29va2llIiwiZXhwaXJlQ29va2llIiwiY2FjaGVXZWJFbGVtZW50IiwiaXNQbGFpbk9iamVjdCIsImVsSWQiLCJ1bndyYXBFbGVtZW50IiwiY2FjaGVJZCIsImluY2x1ZGVzIiwidXVpZFY0Iiwid2ViRWxlbWVudHNDYWNoZSIsInNldCIsIndyYXBFbGVtZW50IiwiY2FjaGVXZWJFbGVtZW50cyIsInJlc3BvbnNlIiwidG9DYWNoZWQiLCJ2IiwiaXNBcnJheSIsInJlc3VsdCIsInJlZHVjZSIsImFjYyIsImtleSIsImZpbmRXZWJFbGVtZW50T3JFbGVtZW50cyIsInN0cmF0ZWd5Iiwic2VsZWN0b3IiLCJtYW55IiwiY3R4IiwiY29udGV4dEVsZW1lbnQiLCJpc05pbCIsImVsZW1lbnQiLCJkb0ZpbmQiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJtZXNzYWdlIiwiaXNGdW5jdGlvbiIsIm1hdGNoIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiY2xpY2tXZWJDb29yZHMiLCJjb29yZHMiLCJ0cmFuc2xhdGVXZWJDb29yZHMiLCJjdXJXZWJDb29yZHMiLCJjbGlja0Nvb3JkcyIsImFyZ3MiLCJhbHdheXNEZWZhdWx0RnJhbWUiLCJmcmFtZXMiLCJwcm9taXNlIiwid2FpdEZvckF0b20iLCJleGVjdXRlQXRvbUFzeW5jIiwicmVzcG9uc2VVcmwiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsImFzeW5jUHJvbWlzZSIsImVsT3JJZCIsImhhcyIsIlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yIiwiRUxFTUVOVCIsImdldCIsImNvbnZlcnRFbGVtZW50c0ZvckF0b21zIiwiYXJnIiwiaXNFcnJvclR5cGUiLCJnZXRFbGVtZW50SWQiLCJoYXNWYWx1ZSIsImdldFNhZmFyaUlzSXBob25lIiwiaXNCb29sZWFuIiwiX2lzU2FmYXJpSXBob25lIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJ3YXJuIiwiZ2V0U2FmYXJpRGV2aWNlU2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwibm9ybUhlaWdodCIsIm5vcm1XaWR0aCIsImdldFNhZmFyaUlzTm90Y2hlZCIsIl9pc1NhZmFyaU5vdGNoZWQiLCJkZXZpY2UiLCJnZXRFeHRyYVRyYW5zbGF0ZVdlYkNvb3Jkc09mZnNldCIsInd2UG9zIiwicmVhbERpbXMiLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJpc0lwaG9uZSIsIm5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkiLCJuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHkiLCJzYWZhcmlUYWJCYXJQb3NpdGlvbiIsImNvbXBhcmVWZXJzaW9ucyIsIm9wdHMiLCJwbGF0Zm9ybVZlcnNpb24iLCJzZXR0aW5ncyIsImdldFNldHRpbmdzIiwidGFiQmFyVmlzaWJpbGl0eSIsImxvd2VyQ2FzZSIsImJhbm5lclZpc2liaWxpdHkiLCJ0YWJCYXJQb3NpdGlvbiIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiaXNOb3RjaGVkIiwib3JpZW50YXRpb24iLCJub3RjaE9mZnNldCIsImlzU2Nyb2xsZWQiLCJjb250ZXh0c0FuZFZpZXdzIiwiZ2V0Q29udGV4dHNBbmRWaWV3cyIsInRhYnMiLCJmaWx0ZXIiLCJzdGFydHNXaXRoIiwiZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQiLCJ5Iiwib2Zmc2V0IiwiYmFubmVycyIsImZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyIsInRhcFdlYkVsZW1lbnROYXRpdmVseSIsImRyaXZlciIsInRleHQiLCJlbHMiLCJyZWN0IiwicHJveHlDb21tYW5kIiwiZWwyIiwicmVjdDIiLCJ4IiwiTWF0aCIsInJvdW5kIiwibmF0aXZlV2ViVGFwIiwibmF0aXZlV2ViVGFwU3RyaWN0IiwiUHJvbWlzZSIsImFsbCIsInNpemUiLCJjb29yZGluYXRlcyIsInBlcmZvcm1Ub3VjaCIsImFjdGlvbiIsIm9wdGlvbnMiLCJ3ZWJ2aWV3IiwicmV0cnlJbnRlcnZhbCIsImlnbiIsIkVycm9yIiwiY21kIiwid3ZEaW1zIiwiaW1wbGljaXRXYWl0TXMiLCJzZXRJbXBsaWNpdFdhaXQiLCJ4UmF0aW8iLCJ5UmF0aW8iLCJuZXdDb29yZHMiLCJjaGVja0ZvckFsZXJ0IiwiZ2V0QWxlcnRUZXh0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidGltZWRBdG9tUHJvbWlzZSIsInRpbWVvdXQiLCJoYW5kbGVQcm9taXNlRXJyb3IiLCJwIiwib3JpZ2luYWxFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiVGltZW91dEVycm9yIiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJhbnkiLCJkZWxheSIsImlzRnVsZmlsbGVkIiwiX3dhaXRpbmdBdG9tcyIsImNvdW50IiwiYWxlcnROb3RpZmllciIsIkV2ZW50RW1pdHRlciIsImFsZXJ0TW9uaXRvciIsIm9uQWxlcnRDYWxsYmFjayIsImlzUmVzb2x2ZWQiLCJlbWl0IiwiVW5leHBlY3RlZEFsZXJ0T3BlbkVycm9yIiwib25jZSIsInRoZW4iLCJjYXRjaCIsInJlbW92ZUxpc3RlbmVyIiwibW9iaWxlV2ViTmF2IiwibmF2VHlwZSIsImFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQiLCJtb2JpbGVVcGRhdGVTYWZhcmlQcmVmZXJlbmNlcyIsImlzU2ltdWxhdG9yIiwicHJlZmVyZW5jZXMiLCJ1cGRhdGVTYWZhcmlTZXR0aW5ncyIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy93ZWIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHV0aWwsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBlcnJvcnMsIGlzRXJyb3JUeXBlIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgY29va2llVXRpbHMgZnJvbSAnLi4vY29va2llcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG5jb25zdCBJUEhPTkVfVE9QX0JBUl9IRUlHSFQgPSA3MTtcbmNvbnN0IElQSE9ORV9TQ1JPTExFRF9UT1BfQkFSX0hFSUdIVCA9IDQxO1xuY29uc3QgSVBIT05FX1hfU0NST0xMRURfT0ZGU0VUID0gNTU7XG5jb25zdCBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TID0gMjQ7XG5jb25zdCBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TXzEzID0gMjA7XG5cbmNvbnN0IElQSE9ORV9MQU5EU0NBUEVfVE9QX0JBUl9IRUlHSFQgPSA1MTtcbmNvbnN0IElQSE9ORV9CT1RUT01fQkFSX09GRlNFVCA9IDQ5O1xuY29uc3QgVEFCX0JBUl9PRkZTRVQgPSAzMztcbmNvbnN0IElQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQgPSA4NDtcbmNvbnN0IElQQURfV0VCX0NPT1JEX1NNQVJUX0FQUF9CQU5ORVJfT0ZGU0VUID0gOTU7XG5cbmNvbnN0IE5PVENIRURfREVWSUNFX1NJWkVTID0gW1xuICB7dzogMTEyNSwgaDogMjQzNn0sIC8vIDExIFBybywgWCwgWHNcbiAge3c6IDgyOCwgaDogMTc5Mn0sIC8vIDExLCBYclxuICB7dzogMTI0MiwgaDogMjY4OH0sIC8vIDExIFBybyBNYXgsIFhzIE1heFxuICB7dzogMTA4MCwgaDogMjM0MH0sIC8vIDEzIG1pbmksIDEyIG1pbmlcbiAge3c6IDExNzAsIGg6IDI1MzJ9LCAvLyAxNCwgMTMsIDEzIFBybywgMTIsIDEyIFByb1xuICB7dzogMTI4NCwgaDogMjc3OH0sIC8vIDE0IFBsdXMsIDEzIFBybyBNYXgsIDEyIFBybyBNYXhcbiAge3c6IDExNzksIGg6IDI1NTZ9LCAvLyAxNCBQcm9cbiAge3c6IDEyOTAsIGg6IDI3OTZ9LCAvLyAxNCBQcm8gTWF4XG5dO1xuXG5jb25zdCB7IFczQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSIH0gPSB1dGlsO1xuXG5jb25zdCBBVE9NX1dBSVRfVElNRU9VVF9NUyA9IDIgKiA2MDAwMDtcbmNvbnN0IEFUT01fSU5JVElBTF9XQUlUX01TID0gMTAwMDtcblxuY29uc3QgT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQgPSAnYWxlcnQnO1xuXG5jb25zdCBWSVNJQkxFID0gJ3Zpc2libGUnO1xuY29uc3QgSU5WSVNJQkxFID0gJ2ludmlzaWJsZSc7XG5jb25zdCBERVRFQ1QgPSAnZGV0ZWN0JztcbmNvbnN0IFZJU0lCSUxJVElFUyA9IFtWSVNJQkxFLCBJTlZJU0lCTEUsIERFVEVDVF07XG5cbi8vIFRoZSBwb3NpdGlvbiBvZiBTYWZhcmkncyB0YWIgKHNlYXJjaCBiYXIpLlxuLy8gU2luY2UgaU9TIDE1LCB0aGUgYmFyIGlzIHRoZSBib3R0b20gYnkgZGVmYXVsdC5cbmNvbnN0IFRBQl9CQVJfUE9TSVRJT05fVE9QID0gJ3RvcCc7XG5jb25zdCBUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTSA9ICdib3R0b20nO1xuY29uc3QgVEFCX0JBUl9QT1NTSVRJT05TID0gW1RBQl9CQVJfUE9TSVRJT05fVE9QLCBUQUJfQkFSX1BPU0lUSU9OX0JPVFRPTV07XG5cbmNvbnN0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIgKGlkKSB7XG4gIGlmICghXy5pc1N0cmluZyhpZCkgJiYgIV8uaXNOdW1iZXIoaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChfLmlzU3RyaW5nKGlkKSAmJiBfLmlzRW1wdHkoaWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChfLmlzTnVtYmVyKGlkKSAmJiBpc05hTihpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmNvbW1hbmRzLnNldEZyYW1lID0gYXN5bmMgZnVuY3Rpb24gc2V0RnJhbWUgKGZyYW1lKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgaWYgKF8uaXNOdWxsKGZyYW1lKSkge1xuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gICAgdGhpcy5sb2cuZGVidWcoJ0xlYXZpbmcgd2ViIGZyYW1lIGFuZCBnb2luZyBiYWNrIHRvIGRlZmF1bHQgY29udGVudCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChoZWxwZXJzLmhhc0VsZW1lbnRJZChmcmFtZSkpIHtcbiAgICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChmcmFtZSk7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfZnJhbWVfd2luZG93JywgW2F0b21zRWxlbWVudF0pO1xuICAgIHRoaXMubG9nLmRlYnVnKGBFbnRlcmluZyBuZXcgd2ViIGZyYW1lOiAnJHt2YWx1ZS5XSU5ET1d9J2ApO1xuICAgIHRoaXMuY3VyV2ViRnJhbWVzLnVuc2hpZnQodmFsdWUuV0lORE9XKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBhdG9tID0gXy5pc051bWJlcihmcmFtZSkgPyAnZnJhbWVfYnlfaW5kZXgnIDogJ2ZyYW1lX2J5X2lkX29yX25hbWUnO1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbShhdG9tLCBbZnJhbWVdKTtcbiAgICBpZiAoXy5pc051bGwodmFsdWUpIHx8IF8uaXNVbmRlZmluZWQodmFsdWUuV0lORE9XKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hGcmFtZUVycm9yKCk7XG4gICAgfVxuICAgIHRoaXMubG9nLmRlYnVnKGBFbnRlcmluZyBuZXcgd2ViIGZyYW1lOiAnJHt2YWx1ZS5XSU5ET1d9J2ApO1xuICAgIHRoaXMuY3VyV2ViRnJhbWVzLnVuc2hpZnQodmFsdWUuV0lORE9XKTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0Q3NzUHJvcGVydHkgPSBhc3luYyBmdW5jdGlvbiBnZXRDc3NQcm9wZXJ0eSAocHJvcGVydHlOYW1lLCBlbCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGVsKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2dldF92YWx1ZV9vZl9jc3NfcHJvcGVydHknLCBbYXRvbXNFbGVtZW50LCBwcm9wZXJ0eU5hbWVdKTtcbn07XG5cbmNvbW1hbmRzLnN1Ym1pdCA9IGFzeW5jIGZ1bmN0aW9uIHN1Ym1pdCAoZWwpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBjb25zdCBhdG9tc0VsZW1lbnQgPSB0aGlzLmdldEF0b21zRWxlbWVudChlbCk7XG4gIGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ3N1Ym1pdCcsIFthdG9tc0VsZW1lbnRdKTtcbn07XG5cbmNvbW1hbmRzLnJlZnJlc2ggPSBhc3luYyBmdW5jdGlvbiByZWZyZXNoICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdyZWZyZXNoJywgW10pO1xufTtcblxuY29tbWFuZHMuZ2V0VXJsID0gYXN5bmMgZnVuY3Rpb24gZ2V0VXJsICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5yZW1vdGUuZXhlY3V0ZSgnd2luZG93LmxvY2F0aW9uLmhyZWYnKTtcbn07XG5cbmNvbW1hbmRzLnRpdGxlID0gYXN5bmMgZnVuY3Rpb24gdGl0bGUgKCkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCd0aXRsZScsIFtdLCB0cnVlKTtcbn07XG5cbmNvbW1hbmRzLmdldENvb2tpZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb29raWVzICgpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICB0aGlzLmxvZy5kZWJ1ZygnUmV0cmlldmluZyBhbGwgY29va2llcycpO1xuXG4gIGxldCBzY3JpcHQgPSAncmV0dXJuIGRvY3VtZW50LmNvb2tpZSc7XG4gIGxldCBqc0Nvb2tpZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIFtdXSk7XG5cbiAgbGV0IGNvb2tpZXMgPSBbXTtcbiAgdHJ5IHtcbiAgICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIF8udG9QYWlycyhjb29raWVVdGlscy5jcmVhdGVKV1BDb29raWUodW5kZWZpbmVkLCBqc0Nvb2tpZXMpKSkge1xuICAgICAgY29va2llcy5wdXNoKHtuYW1lLCB2YWx1ZX0pO1xuICAgIH1cbiAgICByZXR1cm4gY29va2llcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5sb2cuZXJyb3IoZXJyKTtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25FcnJvcihgRXJyb3IgcGFyc2luZyBjb29raWVzIGZyb20gcmVzdWx0OiAnJHtqc0Nvb2tpZXN9J2ApO1xuICB9XG59O1xuXG5jb21tYW5kcy5zZXRDb29raWUgPSBhc3luYyBmdW5jdGlvbiBzZXRDb29raWUgKGNvb2tpZSkge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvb2tpZSA9IF8uY2xvbmUoY29va2llKTtcblxuICAvLyBpZiBgcGF0aGAgZmllbGQgaXMgbm90IHNwZWNpZmllZCwgU2FmYXJpIHdpbGwgbm90IHVwZGF0ZSBjb29raWVzIGFzIGV4cGVjdGVkOyBlZyBpc3N1ZSAjMTcwOFxuICBpZiAoIWNvb2tpZS5wYXRoKSB7XG4gICAgY29va2llLnBhdGggPSAnLyc7XG4gIH1cblxuICBjb25zdCBqc0Nvb2tpZSA9IGNvb2tpZVV0aWxzLmNyZWF0ZUpTQ29va2llKGNvb2tpZS5uYW1lLCBjb29raWUudmFsdWUsIHtcbiAgICBleHBpcmVzOiBfLmlzTnVtYmVyKGNvb2tpZS5leHBpcnkpID8gKG5ldyBEYXRlKGNvb2tpZS5leHBpcnkgKiAxMDAwKSkudG9VVENTdHJpbmcoKSA6XG4gICAgICBjb29raWUuZXhwaXJ5LFxuICAgIHBhdGg6IGNvb2tpZS5wYXRoLFxuICAgIGRvbWFpbjogY29va2llLmRvbWFpbixcbiAgICBodHRwT25seTogY29va2llLmh0dHBPbmx5LFxuICAgIHNlY3VyZTogY29va2llLnNlY3VyZVxuICB9KTtcbiAgbGV0IHNjcmlwdCA9IGBkb2N1bWVudC5jb29raWUgPSAke0pTT04uc3RyaW5naWZ5KGpzQ29va2llKX1gO1xuICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtzY3JpcHQsIFtdXSk7XG59O1xuXG5jb21tYW5kcy5kZWxldGVDb29raWUgPSBhc3luYyBmdW5jdGlvbiBkZWxldGVDb29raWUgKGNvb2tpZU5hbWUpIHtcbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICAvLyBjaGVjayBjb29raWUgZXhpc3RlbmNlXG4gIGxldCBjb29raWVzID0gYXdhaXQgdGhpcy5nZXRDb29raWVzKCk7XG4gIGlmIChfLmluZGV4T2YoXy5tYXAoY29va2llcywgJ25hbWUnKSwgY29va2llTmFtZSkgPT09IC0xKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoYENvb2tpZSAnJHtjb29raWVOYW1lfScgbm90IGZvdW5kLiBJZ25vcmluZy5gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLl9kZWxldGVDb29raWUoY29va2llTmFtZSk7XG59O1xuXG5jb21tYW5kcy5kZWxldGVDb29raWVzID0gYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ29va2llcyAoKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgbGV0IGNvb2tpZXMgPSBhd2FpdCB0aGlzLmdldENvb2tpZXMoKTtcbiAgaWYgKGNvb2tpZXMubGVuZ3RoKSB7XG4gICAgZm9yIChsZXQgY29va2llIG9mIGNvb2tpZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2RlbGV0ZUNvb2tpZShjb29raWUubmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuaGVscGVycy5fZGVsZXRlQ29va2llID0gYXN5bmMgZnVuY3Rpb24gX2RlbGV0ZUNvb2tpZSAoY29va2llTmFtZSkge1xuICB0aGlzLmxvZy5kZWJ1ZyhgRGVsZXRpbmcgY29va2llICcke2Nvb2tpZU5hbWV9J2ApO1xuICBsZXQgd2ViQ29va2llID0gY29va2llVXRpbHMuZXhwaXJlQ29va2llKGNvb2tpZU5hbWUsIHtwYXRoOiAnLyd9KTtcbiAgbGV0IHNjcmlwdCA9IGBkb2N1bWVudC5jb29raWUgPSAke0pTT04uc3RyaW5naWZ5KHdlYkNvb2tpZSl9YDtcbiAgYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBbXV0pO1xufTtcblxuaGVscGVycy5jYWNoZVdlYkVsZW1lbnQgPSBmdW5jdGlvbiBjYWNoZVdlYkVsZW1lbnQgKGVsKSB7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGVsKSkge1xuICAgIHJldHVybiBlbDtcbiAgfVxuICBjb25zdCBlbElkID0gdXRpbC51bndyYXBFbGVtZW50KGVsKTtcbiAgaWYgKCFpc1ZhbGlkRWxlbWVudElkZW50aWZpZXIoZWxJZCkpIHtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgLy8gSW4gbmV3ZXIgZGVidWdnZXIgcmVsZWFzZXMgZWxlbWVudCBpZGVudGlmaWVycyBsb29rIGxpa2UgYDp3ZGM6MTYyODE1MTY0OTMyNWBcbiAgLy8gV2UgYXNzdW1lIGl0IGlzIHNhZmUgdG8gdXNlIHRoZXNlIHRvIGlkZW50aWZ5IGNhY2hlZCBlbGVtZW50c1xuICBjb25zdCBjYWNoZUlkID0gXy5pbmNsdWRlcyhlbElkLCAnOicpID8gZWxJZCA6IHV0aWwudXVpZFY0KCk7XG4gIHRoaXMud2ViRWxlbWVudHNDYWNoZS5zZXQoY2FjaGVJZCwgZWxJZCk7XG4gIHJldHVybiB1dGlsLndyYXBFbGVtZW50KGNhY2hlSWQpO1xufTtcblxuaGVscGVycy5jYWNoZVdlYkVsZW1lbnRzID0gZnVuY3Rpb24gY2FjaGVXZWJFbGVtZW50cyAocmVzcG9uc2UpIHtcbiAgY29uc3QgdG9DYWNoZWQgPSAodikgPT4gXy5pc0FycmF5KHYpIHx8IF8uaXNQbGFpbk9iamVjdCh2KVxuICAgID8gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKHYpXG4gICAgOiB2O1xuXG4gIGlmIChfLmlzQXJyYXkocmVzcG9uc2UpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLm1hcCh0b0NhY2hlZCk7XG4gIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KHJlc3BvbnNlKSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHsuLi5yZXNwb25zZSwgLi4uKHRoaXMuY2FjaGVXZWJFbGVtZW50KHJlc3BvbnNlKSl9O1xuICAgIHJldHVybiBfLnRvUGFpcnMocmVzdWx0KS5yZWR1Y2UoXG4gICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgYWNjW2tleV0gPSB0b0NhY2hlZCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcblxuZXh0ZW5zaW9ucy5maW5kV2ViRWxlbWVudE9yRWxlbWVudHMgPSBhc3luYyBmdW5jdGlvbiBmaW5kV2ViRWxlbWVudE9yRWxlbWVudHMgKHN0cmF0ZWd5LCBzZWxlY3RvciwgbWFueSwgY3R4KSB7XG4gIGNvbnN0IGNvbnRleHRFbGVtZW50ID0gXy5pc05pbChjdHgpID8gbnVsbCA6IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGN0eCk7XG4gIGxldCBlbGVtZW50O1xuICBsZXQgZG9GaW5kID0gYXN5bmMgKCkgPT4ge1xuICAgIGVsZW1lbnQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKGBmaW5kX2VsZW1lbnQke21hbnkgPyAncycgOiAnJ31gLCBbc3RyYXRlZ3ksIHNlbGVjdG9yLCBjb250ZXh0RWxlbWVudF0pO1xuICAgIHJldHVybiAhXy5pc051bGwoZWxlbWVudCk7XG4gIH07XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXRGb3JDb25kaXRpb24oZG9GaW5kKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5tZXNzYWdlICYmIF8uaXNGdW5jdGlvbihlcnIubWVzc2FnZS5tYXRjaCkgJiYgZXJyLm1lc3NhZ2UubWF0Y2goL0NvbmRpdGlvbiB1bm1ldC8pKSB7XG4gICAgICAvLyBjb25kaXRpb24gd2FzIG5vdCBtZXQgc2V0dGluZyByZXMgdG8gZW1wdHkgYXJyYXlcbiAgICAgIGVsZW1lbnQgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhlbGVtZW50KTtcbiAgfVxuICBpZiAoXy5pc0VtcHR5KGVsZW1lbnQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hFbGVtZW50RXJyb3IoKTtcbiAgfVxuICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKGVsZW1lbnQpO1xufTtcblxuZXh0ZW5zaW9ucy5jbGlja1dlYkNvb3JkcyA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrV2ViQ29vcmRzICgpIHtcbiAgbGV0IGNvb3JkcyA9IGF3YWl0IHRoaXMudHJhbnNsYXRlV2ViQ29vcmRzKHRoaXMuY3VyV2ViQ29vcmRzKTtcbiAgYXdhaXQgdGhpcy5jbGlja0Nvb3Jkcyhjb29yZHMpO1xufTtcblxuaGVscGVycy5leGVjdXRlQXRvbSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBdG9tIChhdG9tLCBhcmdzLCBhbHdheXNEZWZhdWx0RnJhbWUgPSBmYWxzZSkge1xuICBsZXQgZnJhbWVzID0gYWx3YXlzRGVmYXVsdEZyYW1lID09PSB0cnVlID8gW10gOiB0aGlzLmN1cldlYkZyYW1lcztcbiAgbGV0IHByb21pc2UgPSB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbShhdG9tLCBhcmdzLCBmcmFtZXMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy53YWl0Rm9yQXRvbShwcm9taXNlKTtcbn07XG5cbmhlbHBlcnMuZXhlY3V0ZUF0b21Bc3luYyA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBdG9tQXN5bmMgKGF0b20sIGFyZ3MsIHJlc3BvbnNlVXJsKSB7XG4gIC8vIHNhdmUgdGhlIHJlc29sdmUgYW5kIHJlamVjdCBtZXRob2RzIG9mIHRoZSBwcm9taXNlIHRvIGJlIHdhaXRlZCBmb3JcbiAgbGV0IHByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5hc3luY1Byb21pc2UgPSB7cmVzb2x2ZSwgcmVqZWN0fTtcbiAgfSk7XG4gIGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGVBdG9tQXN5bmMoYXRvbSwgYXJncywgdGhpcy5jdXJXZWJGcmFtZXMsIHJlc3BvbnNlVXJsKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSk7XG59O1xuXG5oZWxwZXJzLmdldEF0b21zRWxlbWVudCA9IGZ1bmN0aW9uIGdldEF0b21zRWxlbWVudCAoZWxPcklkKSB7XG4gIGNvbnN0IGVsSWQgPSB1dGlsLnVud3JhcEVsZW1lbnQoZWxPcklkKTtcbiAgaWYgKCF0aGlzLndlYkVsZW1lbnRzQ2FjaGUuaGFzKGVsSWQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5TdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvcigpO1xuICB9XG4gIHJldHVybiB7RUxFTUVOVDogdGhpcy53ZWJFbGVtZW50c0NhY2hlLmdldChlbElkKX07XG59O1xuXG5oZWxwZXJzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zID0gZnVuY3Rpb24gY29udmVydEVsZW1lbnRzRm9yQXRvbXMgKGFyZ3MgPSBbXSkge1xuICByZXR1cm4gYXJncy5tYXAoKGFyZykgPT4ge1xuICAgIGlmIChoZWxwZXJzLmhhc0VsZW1lbnRJZChhcmcpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBdG9tc0VsZW1lbnQoYXJnKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIWlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLlN0YWxlRWxlbWVudFJlZmVyZW5jZUVycm9yKSkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG4gICAgcmV0dXJuIF8uaXNBcnJheShhcmcpID8gdGhpcy5jb252ZXJ0RWxlbWVudHNGb3JBdG9tcyhhcmcpIDogYXJnO1xuICB9KTtcbn07XG5cbmhlbHBlcnMuZ2V0RWxlbWVudElkID0gZnVuY3Rpb24gZ2V0RWxlbWVudElkIChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LkVMRU1FTlQgfHwgZWxlbWVudFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUl07XG59O1xuXG5oZWxwZXJzLmhhc0VsZW1lbnRJZCA9IGZ1bmN0aW9uIGhhc0VsZW1lbnRJZCAoZWxlbWVudCkge1xuICByZXR1cm4gdXRpbC5oYXNWYWx1ZShlbGVtZW50KSAmJiAodXRpbC5oYXNWYWx1ZShlbGVtZW50LkVMRU1FTlQpIHx8IHV0aWwuaGFzVmFsdWUoZWxlbWVudFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUl0pKTtcbn07XG5cbmV4dGVuc2lvbnMuZ2V0U2FmYXJpSXNJcGhvbmUgPSBhc3luYyBmdW5jdGlvbiBnZXRTYWZhcmlJc0lwaG9uZSAoKSB7XG4gIGlmIChfLmlzQm9vbGVhbih0aGlzLl9pc1NhZmFyaUlwaG9uZSkpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTYWZhcmlJcGhvbmU7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCB1c2VyQWdlbnQgPSBhd2FpdCB0aGlzLmV4ZWN1dGUoJ3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Jyk7XG4gICAgdGhpcy5faXNTYWZhcmlJcGhvbmUgPSB1c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnaXBob25lJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBmaW5kIGRldmljZSB0eXBlIGZyb20gdXNlcmFnZW50LiBBc3N1bWluZyBpUGhvbmVgKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuX2lzU2FmYXJpSXBob25lID8/IHRydWU7XG59O1xuXG5leHRlbnNpb25zLmdldFNhZmFyaURldmljZVNpemUgPSBhc3luYyBmdW5jdGlvbiBnZXRTYWZhcmlEZXZpY2VTaXplICgpIHtcbiAgY29uc3Qgc2NyaXB0ID0gJ3JldHVybiB7aGVpZ2h0OiB3aW5kb3cuc2NyZWVuLmF2YWlsSGVpZ2h0ICogd2luZG93LmRldmljZVBpeGVsUmF0aW8sIHdpZHRoOiB3aW5kb3cuc2NyZWVuLmF2YWlsV2lkdGggKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb307JztcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5leGVjdXRlKHNjcmlwdCk7XG4gIGNvbnN0IFtub3JtSGVpZ2h0LCBub3JtV2lkdGhdID0gaGVpZ2h0ID4gd2lkdGggPyBbaGVpZ2h0LCB3aWR0aF0gOiBbd2lkdGgsIGhlaWdodF07XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IG5vcm1XaWR0aCxcbiAgICBoZWlnaHQ6IG5vcm1IZWlnaHQsXG4gIH07XG59O1xuXG5leHRlbnNpb25zLmdldFNhZmFyaUlzTm90Y2hlZCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNhZmFyaUlzTm90Y2hlZCAoKSB7XG4gIGlmIChfLmlzQm9vbGVhbih0aGlzLl9pc1NhZmFyaU5vdGNoZWQpKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2FmYXJpTm90Y2hlZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5nZXRTYWZhcmlEZXZpY2VTaXplKCk7XG4gICAgZm9yIChjb25zdCBkZXZpY2Ugb2YgTk9UQ0hFRF9ERVZJQ0VfU0laRVMpIHtcbiAgICAgIGlmIChkZXZpY2UudyA9PT0gd2lkdGggJiYgZGV2aWNlLmggPT09IGhlaWdodCkge1xuICAgICAgICB0aGlzLl9pc1NhZmFyaU5vdGNoZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIGZpbmQgZGV2aWNlIHR5cGUgZnJvbSBkaW1lbnNpb25zLiBBc3N1bWluZyB0aGUgZGV2aWNlIGlzIG5vdCBub3RjaGVkYCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiB0aGlzLl9pc1NhZmFyaU5vdGNoZWQgPz8gZmFsc2U7XG59O1xuXG5leHRlbnNpb25zLmdldEV4dHJhVHJhbnNsYXRlV2ViQ29vcmRzT2Zmc2V0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQgKHd2UG9zLCByZWFsRGltcykge1xuICBsZXQgdG9wT2Zmc2V0ID0gMDtcbiAgbGV0IGJvdHRvbU9mZnNldCA9IDA7XG5cbiAgY29uc3QgaXNJcGhvbmUgPSBhd2FpdCB0aGlzLmdldFNhZmFyaUlzSXBob25lKCk7XG5cbiAgLy8gTm8gbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBTbWFydCBBcHAgQmFubmVyIG9yIFRhYiBCYXIgaXMgdmlzaWJsZSBvciBub3RcbiAgLy8gaWYgYWxyZWFkeSBkZWZpbmVkIGJ5IG5hdGl2ZVdlYlRhcFRhYkJhclZpc2liaWxpdHkgb3IgbmF0aXZlV2ViVGFwU21hcnRBcHBCYW5uZXJWaXNpYmlsaXR5IGluIHNldHRpbmdzLlxuICBjb25zdCB7XG4gICAgbmF0aXZlV2ViVGFwVGFiQmFyVmlzaWJpbGl0eSxcbiAgICBuYXRpdmVXZWJUYXBTbWFydEFwcEJhbm5lclZpc2liaWxpdHksXG4gICAgc2FmYXJpVGFiQmFyUG9zaXRpb24gPSB1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPj0nLCAnMTUuMCcpICYmIGlzSXBob25lXG4gICAgICA/IFRBQl9CQVJfUE9TSVRJT05fQk9UVE9NIDogVEFCX0JBUl9QT1NJVElPTl9UT1AsXG4gIH0gPSBhd2FpdCB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGxldCB0YWJCYXJWaXNpYmlsaXR5ID0gXy5sb3dlckNhc2UobmF0aXZlV2ViVGFwVGFiQmFyVmlzaWJpbGl0eSk7XG4gIGxldCBiYW5uZXJWaXNpYmlsaXR5ID0gXy5sb3dlckNhc2UobmF0aXZlV2ViVGFwU21hcnRBcHBCYW5uZXJWaXNpYmlsaXR5KTtcbiAgY29uc3QgdGFiQmFyUG9zaXRpb24gPSBfLmxvd2VyQ2FzZShzYWZhcmlUYWJCYXJQb3NpdGlvbik7XG5cbiAgaWYgKCFWSVNJQklMSVRJRVMuaW5jbHVkZXModGFiQmFyVmlzaWJpbGl0eSkpIHtcbiAgICB0YWJCYXJWaXNpYmlsaXR5ID0gREVURUNUO1xuICB9XG4gIGlmICghVklTSUJJTElUSUVTLmluY2x1ZGVzKGJhbm5lclZpc2liaWxpdHkpKSB7XG4gICAgYmFubmVyVmlzaWJpbGl0eSA9IERFVEVDVDtcbiAgfVxuXG4gIGlmICghVEFCX0JBUl9QT1NTSVRJT05TLmluY2x1ZGVzKHRhYkJhclBvc2l0aW9uKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICBgJHtzYWZhcmlUYWJCYXJQb3NpdGlvbn0gaXMgaW52YWxpZCBhcyBTYWZhcmkgdGFiIGJhciBwb3NpdGlvbi4gQXZhaWxhYmxlIHBvc2l0aW9ucyBhcmUgJHtUQUJfQkFSX1BPU1NJVElPTlN9LmApO1xuICB9XG5cbiAgY29uc3QgaXNOb3RjaGVkID0gaXNJcGhvbmUgJiYgYXdhaXQgdGhpcy5nZXRTYWZhcmlJc05vdGNoZWQoKTtcblxuICBjb25zdCBvcmllbnRhdGlvbiA9IHJlYWxEaW1zLmggPiByZWFsRGltcy53ID8gJ1BPUlRSQUlUJyA6ICdMQU5EU0NBUEUnO1xuXG4gIGNvbnN0IG5vdGNoT2Zmc2V0ID0gaXNOb3RjaGVkXG4gICAgPyB1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPScsICcxMy4wJylcbiAgICAgID8gSVBIT05FX1hfTk9UQ0hfT0ZGU0VUX0lPU18xM1xuICAgICAgOiBJUEhPTkVfWF9OT1RDSF9PRkZTRVRfSU9TXG4gICAgOiAwO1xuXG4gIGNvbnN0IGlzU2Nyb2xsZWQgPSBhd2FpdCB0aGlzLmV4ZWN1dGUoJ3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID4gMCcpO1xuICBpZiAoaXNTY3JvbGxlZCkge1xuICAgIHRvcE9mZnNldCA9IElQSE9ORV9TQ1JPTExFRF9UT1BfQkFSX0hFSUdIVCArIG5vdGNoT2Zmc2V0O1xuXG4gICAgaWYgKGlzTm90Y2hlZCkge1xuICAgICAgdG9wT2Zmc2V0IC09IElQSE9ORV9YX1NDUk9MTEVEX09GRlNFVDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgaVBob25lIGlzIGxhbmRzY2FwZSB0aGVuIHRoZXJlIGlzIG5vIHRvcCBiYXJcbiAgICBpZiAob3JpZW50YXRpb24gPT09ICdMQU5EU0NBUEUnICYmIGlzSXBob25lKSB7XG4gICAgICB0b3BPZmZzZXQgPSAwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b3BPZmZzZXQgPSB0YWJCYXJQb3NpdGlvbiA9PT0gVEFCX0JBUl9QT1NJVElPTl9CT1RUT00gPyAwIDogSVBIT05FX1RPUF9CQVJfSEVJR0hUO1xuICAgIHRvcE9mZnNldCArPSBub3RjaE9mZnNldDtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgdGFiQmFyUG9zaXRpb24gYW5kIHRvcE9mZnNldDogJHt0YWJCYXJQb3NpdGlvbn0sICR7dG9wT2Zmc2V0fWApO1xuXG4gICAgaWYgKGlzSXBob25lKSB7XG4gICAgICBpZiAob3JpZW50YXRpb24gPT09ICdQT1JUUkFJVCcpIHtcbiAgICAgICAgLy8gVGhlIGJvdHRvbSBiYXIgaXMgb25seSB2aXNpYmxlIHdoZW4gcG9ydHJhaXRcbiAgICAgICAgYm90dG9tT2Zmc2V0ID0gSVBIT05FX0JPVFRPTV9CQVJfT0ZGU0VUO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wT2Zmc2V0ID0gSVBIT05FX0xBTkRTQ0FQRV9UT1BfQkFSX0hFSUdIVDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3JpZW50YXRpb24gPT09ICdMQU5EU0NBUEUnIHx8ICFpc0lwaG9uZSkge1xuICAgICAgaWYgKHRhYkJhclZpc2liaWxpdHkgPT09IFZJU0lCTEUpIHtcbiAgICAgICAgdG9wT2Zmc2V0ICs9IFRBQl9CQVJfT0ZGU0VUO1xuICAgICAgfSBlbHNlIGlmICh0YWJCYXJWaXNpYmlsaXR5ID09PSBERVRFQ1QpIHtcbiAgICAgICAgLy8gVGFicyBvbmx5IGFwcGVhciBpZiB0aGUgZGV2aWNlIGlzIGxhbmRzY2FwZSBvciBpZiBpdCdzIGFuIGlQYWQgc28gd2Ugb25seSBjaGVjayB2aXNpYmlsaXR5IGluIHRoaXMgY2FzZVxuICAgICAgICAvLyBBc3N1bWUgdGhhdCBlYWNoIHRhYiBiYXIgaXMgYSBXZWJWaWV3XG4gICAgICAgIGNvbnN0IGNvbnRleHRzQW5kVmlld3MgPSBhd2FpdCB0aGlzLmdldENvbnRleHRzQW5kVmlld3MoKTtcbiAgICAgICAgY29uc3QgdGFicyA9IGNvbnRleHRzQW5kVmlld3MuZmlsdGVyKChjdHgpID0+IGN0eC5pZC5zdGFydHNXaXRoKCdXRUJWSUVXXycpKTtcblxuICAgICAgICBpZiAodGFicy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYEZvdW5kICR7dGFicy5sZW5ndGh9IHRhYnMuIEFzc3VtaW5nIHRoZSB0YWIgYmFyIGlzIHZpc2libGVgKTtcbiAgICAgICAgICB0b3BPZmZzZXQgKz0gVEFCX0JBUl9PRkZTRVQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0b3BPZmZzZXQgKz0gYXdhaXQgdGhpcy5nZXRFeHRyYU5hdGl2ZVdlYlRhcE9mZnNldChpc0lwaG9uZSwgYmFubmVyVmlzaWJpbGl0eSk7XG5cbiAgd3ZQb3MueSArPSB0b3BPZmZzZXQ7XG4gIHJlYWxEaW1zLmggLT0gKHRvcE9mZnNldCArIGJvdHRvbU9mZnNldCk7XG59O1xuXG5leHRlbnNpb25zLmdldEV4dHJhTmF0aXZlV2ViVGFwT2Zmc2V0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RXh0cmFOYXRpdmVXZWJUYXBPZmZzZXQgKGlzSXBob25lLCBiYW5uZXJWaXNpYmlsaXR5KSB7XG4gIGxldCBvZmZzZXQgPSAwO1xuXG4gIGlmIChiYW5uZXJWaXNpYmlsaXR5ID09PSBWSVNJQkxFKSB7XG4gICAgb2Zmc2V0ICs9IGlzSXBob25lID9cbiAgICAgIElQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQgOlxuICAgICAgSVBBRF9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQ7XG4gIH0gZWxzZSBpZiAoYmFubmVyVmlzaWJpbGl0eSA9PT0gREVURUNUKSB7XG4gICAgLy8gdHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBTbWFydCBBcHAgQmFubmVyXG4gICAgY29uc3QgYmFubmVycyA9IGF3YWl0IHRoaXMuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdhY2Nlc3NpYmlsaXR5IGlkJywgJ0Nsb3NlIGFwcCBkb3dubG9hZCBvZmZlcicsIHRydWUpO1xuICAgIGlmIChiYW5uZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIG9mZnNldCArPSBpc0lwaG9uZSA/XG4gICAgICAgIElQSE9ORV9XRUJfQ09PUkRfU01BUlRfQVBQX0JBTk5FUl9PRkZTRVQgOlxuICAgICAgICBJUEFEX1dFQl9DT09SRF9TTUFSVF9BUFBfQkFOTkVSX09GRlNFVDtcbiAgICB9XG4gIH1cblxuICB0aGlzLmxvZy5kZWJ1ZyhgQWRkaXRpb25hbCBuYXRpdmUgd2ViIHRhcCBvZmZzZXQgY29tcHV0ZWQ6ICR7b2Zmc2V0fWApO1xuICByZXR1cm4gb2Zmc2V0O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gdGFwV2ViRWxlbWVudE5hdGl2ZWx5IChkcml2ZXIsIGF0b21zRWxlbWVudCkge1xuICAvLyB0cnkgdG8gZ2V0IHRoZSB0ZXh0IG9mIHRoZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGFjY2Vzc2libGUgaW4gdGhlXG4gIC8vIG5hdGl2ZSBjb250ZXh0XG4gIHRyeSB7XG4gICAgbGV0IHRleHQgPSBhd2FpdCBkcml2ZXIuZXhlY3V0ZUF0b20oJ2dldF90ZXh0JywgW2F0b21zRWxlbWVudF0pO1xuICAgIGlmICghdGV4dCkge1xuICAgICAgdGV4dCA9IGF3YWl0IGRyaXZlci5leGVjdXRlQXRvbSgnZ2V0X2F0dHJpYnV0ZV92YWx1ZScsIFthdG9tc0VsZW1lbnQsICd2YWx1ZSddKTtcbiAgICB9XG5cbiAgICBpZiAodGV4dCkge1xuICAgICAgY29uc3QgZWxzID0gYXdhaXQgZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cygnYWNjZXNzaWJpbGl0eSBpZCcsIHRleHQsIHRydWUpO1xuICAgICAgaWYgKGVscy5sZW5ndGggPT09IDEgfHwgZWxzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBjb25zdCBlbCA9IGVsc1swXTtcbiAgICAgICAgLy8gdXNlIHRhcCBiZWNhdXNlIG9uIGlPUyAxMS4yIGFuZCBiZWxvdyBgbmF0aXZlQ2xpY2tgIGNyYXNoZXMgV0RBXG4gICAgICAgIGNvbnN0IHJlY3QgPSBhd2FpdCBkcml2ZXIucHJveHlDb21tYW5kKGAvZWxlbWVudC8ke3V0aWwudW53cmFwRWxlbWVudChlbCl9L3JlY3RgLCAnR0VUJyk7XG4gICAgICAgIGlmIChlbHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgY29uc3QgZWwyID0gZWxzWzFdO1xuICAgICAgICAgIGNvbnN0IHJlY3QyID0gYXdhaXQgZHJpdmVyLnByb3h5Q29tbWFuZChgL2VsZW1lbnQvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWwyKX0vcmVjdGAsICdHRVQnKTtcblxuICAgICAgICAgIGlmICgocmVjdC54ICE9PSByZWN0Mi54IHx8IHJlY3QueSAhPT0gcmVjdDIueSkgfHxcbiAgICAgICAgICAocmVjdC53aWR0aCAhPT0gcmVjdDIud2lkdGggfHwgcmVjdC5oZWlnaHQgIT09IHJlY3QyLmhlaWdodCkpIHtcbiAgICAgICAgICAgIC8vIFRoZXNlIDIgbmF0aXZlIGVsZW1lbnRzIGFyZSBub3QgcmVmZXJyaW5nIHRvIHRoZSBzYW1lIHdlYiBlbGVtZW50XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgICB4OiBNYXRoLnJvdW5kKHJlY3QueCArIHJlY3Qud2lkdGggLyAyKSxcbiAgICAgICAgICB5OiBNYXRoLnJvdW5kKHJlY3QueSArIHJlY3QuaGVpZ2h0IC8gMiksXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IGRyaXZlci5jbGlja0Nvb3Jkcyhjb29yZHMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIGFueSBmYWlsdXJlIHNob3VsZCBmYWxsIHRocm91Z2ggYW5kIHRyaWdnZXIgdGhlIG1vcmUgZWxhYm9yYXRlXG4gICAgLy8gbWV0aG9kIG9mIGNsaWNraW5nXG4gICAgZHJpdmVyLmxvZy53YXJuKGBFcnJvciBhdHRlbXB0aW5nIHRvIGNsaWNrOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXh0ZW5zaW9ucy5uYXRpdmVXZWJUYXAgPSBhc3luYyBmdW5jdGlvbiBuYXRpdmVXZWJUYXAgKGVsKSB7XG4gIGNvbnN0IGF0b21zRWxlbWVudCA9IHRoaXMuZ2V0QXRvbXNFbGVtZW50KGVsKTtcblxuICAvLyBpZiBzdHJpY3QgbmF0aXZlIHRhcCwgZG8gbm90IHRyeSB0byBkbyBpdCB3aXRoIFdEQSBkaXJlY3RseVxuICBpZiAoIShhd2FpdCB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCkpLm5hdGl2ZVdlYlRhcFN0cmljdCAmJiBhd2FpdCB0YXBXZWJFbGVtZW50TmF0aXZlbHkodGhpcywgYXRvbXNFbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmxvZy53YXJuKCdVbmFibGUgdG8gZG8gc2ltcGxlIG5hdGl2ZSB3ZWIgdGFwLiBBdHRlbXB0aW5nIHRvIGNvbnZlcnQgY29vcmRpbmF0ZXMnKTtcblxuICAvLyBgZ2V0X3RvcF9sZWZ0X2Nvb3JkaW5hdGVzYCByZXR1cm5zIHRoZSB3cm9uZyB2YWx1ZSBzb21ldGltZXMsXG4gIC8vIHVubGVzcyB3ZSBwcmUtY2FsbCBib3RoIG9mIHRoZXNlIGZ1bmN0aW9ucyBiZWZvcmUgdGhlIGFjdHVhbCBjYWxsc1xuICBhd2FpdCBCLlByb21pc2UuYWxsKFtcbiAgICB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfc2l6ZScsIFthdG9tc0VsZW1lbnRdKSxcbiAgICB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXMnLCBbYXRvbXNFbGVtZW50XSksXG4gIF0pO1xuXG4gIGNvbnN0IFtzaXplLCBjb29yZGluYXRlc10gPSBhd2FpdCBCLlByb21pc2UuYWxsKFtcbiAgICB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfc2l6ZScsIFthdG9tc0VsZW1lbnRdKSxcbiAgICB0aGlzLmV4ZWN1dGVBdG9tKCdnZXRfdG9wX2xlZnRfY29vcmRpbmF0ZXMnLCBbYXRvbXNFbGVtZW50XSksXG4gIF0pO1xuICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBzaXplO1xuICBsZXQge3gsIHl9ID0gY29vcmRpbmF0ZXM7XG4gIHggKz0gd2lkdGggLyAyO1xuICB5ICs9IGhlaWdodCAvIDI7XG5cbiAgdGhpcy5jdXJXZWJDb29yZHMgPSB7eCwgeX07XG4gIGF3YWl0IHRoaXMuY2xpY2tXZWJDb29yZHMoKTtcbn07XG5cbmV4dGVuc2lvbnMuY2xpY2tDb29yZHMgPSBhc3luYyBmdW5jdGlvbiBjbGlja0Nvb3JkcyAoY29vcmRzKSB7XG4gIGF3YWl0IHRoaXMucGVyZm9ybVRvdWNoKFtcbiAgICB7XG4gICAgICBhY3Rpb246ICd0YXAnLFxuICAgICAgb3B0aW9uczogY29vcmRzLFxuICAgIH0sXG4gIF0pO1xufTtcblxuZXh0ZW5zaW9ucy50cmFuc2xhdGVXZWJDb29yZHMgPSBhc3luYyBmdW5jdGlvbiB0cmFuc2xhdGVXZWJDb29yZHMgKGNvb3Jkcykge1xuICB0aGlzLmxvZy5kZWJ1ZyhgVHJhbnNsYXRpbmcgY29vcmRpbmF0ZXMgKCR7SlNPTi5zdHJpbmdpZnkoY29vcmRzKX0pIHRvIHdlYiBjb29yZGluYXRlc2ApO1xuXG4gIC8vIGFic29sdXRpemUgd2ViIGNvb3Jkc1xuICBsZXQgd2VidmlldztcbiAgdHJ5IHtcbiAgICB3ZWJ2aWV3ID0gYXdhaXQgcmV0cnlJbnRlcnZhbCg1LCAxMDAsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdjbGFzcyBuYW1lJywgJ1hDVUlFbGVtZW50VHlwZVdlYlZpZXcnLCBmYWxzZSkpO1xuICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgaWYgKCF3ZWJ2aWV3KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBXZWJWaWV3IGZvdW5kLiBVbmFibGUgdG8gdHJhbnNsYXRlIHdlYiBjb29yZGluYXRlcyBmb3IgbmF0aXZlIHdlYiB0YXAuYCk7XG4gIH1cblxuICB3ZWJ2aWV3ID0gdXRpbC51bndyYXBFbGVtZW50KHdlYnZpZXcpO1xuXG4gIGNvbnN0IHJlY3QgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL2VsZW1lbnQvJHt3ZWJ2aWV3fS9yZWN0YCwgJ0dFVCcpO1xuICBjb25zdCB3dlBvcyA9IHt4OiByZWN0LngsIHk6IHJlY3QueX07XG4gIGNvbnN0IHJlYWxEaW1zID0ge3c6IHJlY3Qud2lkdGgsIGg6IHJlY3QuaGVpZ2h0fTtcblxuICBjb25zdCBjbWQgPSAnKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHt3OiB3aW5kb3cuaW5uZXJXaWR0aCwgaDogd2luZG93LmlubmVySGVpZ2h0fTsgfSkoKSc7XG4gIGNvbnN0IHd2RGltcyA9IGF3YWl0IHRoaXMucmVtb3RlLmV4ZWN1dGUoY21kKTtcblxuICAvLyBrZWVwIHRyYWNrIG9mIGltcGxpY2l0IHdhaXQsIGFuZCBzZXQgbG9jYWxseSB0byAwXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNDk4OFxuICBjb25zdCBpbXBsaWNpdFdhaXRNcyA9IHRoaXMuaW1wbGljaXRXYWl0TXM7XG4gIGF3YWl0IHRoaXMuc2V0SW1wbGljaXRXYWl0KDApO1xuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZ2V0RXh0cmFUcmFuc2xhdGVXZWJDb29yZHNPZmZzZXQod3ZQb3MsIHJlYWxEaW1zKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCB0aGlzLnNldEltcGxpY2l0V2FpdChpbXBsaWNpdFdhaXRNcyk7XG4gIH1cblxuICBpZiAod3ZEaW1zICYmIHJlYWxEaW1zICYmIHd2UG9zKSB7XG4gICAgbGV0IHhSYXRpbyA9IHJlYWxEaW1zLncgLyB3dkRpbXMudztcbiAgICBsZXQgeVJhdGlvID0gcmVhbERpbXMuaCAvIHd2RGltcy5oO1xuICAgIGxldCBuZXdDb29yZHMgPSB7XG4gICAgICB4OiB3dlBvcy54ICsgTWF0aC5yb3VuZCh4UmF0aW8gKiBjb29yZHMueCksXG4gICAgICB5OiB3dlBvcy55ICsgTWF0aC5yb3VuZCh5UmF0aW8gKiBjb29yZHMueSksXG4gICAgfTtcblxuICAgIC8vIGFkZGl0aW9uYWwgbG9nZ2luZyBmb3IgY29vcmRpbmF0ZXMsIHNpbmNlIGl0IGlzIHNvbWV0aW1lcyBicm9rZW5cbiAgICAvLyAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvOTE1OVxuICAgIHRoaXMubG9nLmRlYnVnKGBDb252ZXJ0ZWQgY29vcmRpbmF0ZXM6ICR7SlNPTi5zdHJpbmdpZnkobmV3Q29vcmRzKX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHJlY3Q6ICR7SlNPTi5zdHJpbmdpZnkocmVjdCl9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICB3dlBvczogJHtKU09OLnN0cmluZ2lmeSh3dlBvcyl9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICByZWFsRGltczogJHtKU09OLnN0cmluZ2lmeShyZWFsRGltcyl9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCAgICB3dkRpbXM6ICR7SlNPTi5zdHJpbmdpZnkod3ZEaW1zKX1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgIHhSYXRpbzogJHtKU09OLnN0cmluZ2lmeSh4UmF0aW8pfWApO1xuICAgIHRoaXMubG9nLmRlYnVnKGAgICAgeVJhdGlvOiAke0pTT04uc3RyaW5naWZ5KHlSYXRpbyl9YCk7XG5cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQ29udmVydGVkIHdlYiBjb29yZHMgJHtKU09OLnN0cmluZ2lmeShjb29yZHMpfSBgICtcbiAgICAgIGBpbnRvIHJlYWwgY29vcmRzICR7SlNPTi5zdHJpbmdpZnkobmV3Q29vcmRzKX1gKTtcbiAgICByZXR1cm4gbmV3Q29vcmRzO1xuICB9XG59O1xuXG5leHRlbnNpb25zLmNoZWNrRm9yQWxlcnQgPSBhc3luYyBmdW5jdGlvbiBjaGVja0ZvckFsZXJ0ICgpIHtcbiAgcmV0dXJuIF8uaXNTdHJpbmcoYXdhaXQgdGhpcy5nZXRBbGVydFRleHQoKSk7XG59O1xuXG5leHRlbnNpb25zLndhaXRGb3JBdG9tID0gYXN5bmMgZnVuY3Rpb24gd2FpdEZvckF0b20gKHByb21pc2UpIHtcbiAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcblxuICAvLyBuZWVkIHRvIGNoZWNrIGZvciBhbGVydCB3aGlsZSB0aGUgYXRvbSBpcyBiZWluZyBleGVjdXRlZC5cbiAgLy8gc28gbm90aWZ5IG91cnNlbHZlcyB3aGVuIGl0IGhhcHBlbnNcbiAgY29uc3QgdGltZWRBdG9tUHJvbWlzZSA9IEIucmVzb2x2ZShwcm9taXNlKS50aW1lb3V0KEFUT01fV0FJVF9USU1FT1VUX01TKTtcbiAgY29uc3QgaGFuZGxlUHJvbWlzZUVycm9yID0gYXN5bmMgKHApID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHA7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEVycm9yID0gKGVyciBpbnN0YW5jZW9mIEIuQWdncmVnYXRlRXJyb3IpID8gZXJyWzBdIDogZXJyO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEVycm9yIHJlY2VpdmVkIHdoaWxlIGV4ZWN1dGluZyBhdG9tOiAke29yaWdpbmFsRXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIGlmIChvcmlnaW5hbEVycm9yIGluc3RhbmNlb2YgQi5UaW1lb3V0RXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGdldCBhbnkgcmVzcG9uc2UgZm9yIGF0b20gZXhlY3V0aW9uIGFmdGVyIGAgK1xuICAgICAgICAgIGAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgfVxuICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICB9XG4gIH07XG4gIC8vIGlmIHRoZSBhdG9tIHByb21pc2UgaXMgZnVsZmlsbGVkIHdpdGhpbiBBVE9NX0lOSVRJQUxfV0FJVF9NU1xuICAvLyB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGFuIGFsZXJ0IHByZXNlbmNlXG4gIGF3YWl0IGhhbmRsZVByb21pc2VFcnJvcihCLmFueShbQi5kZWxheShBVE9NX0lOSVRJQUxfV0FJVF9NUyksIHRpbWVkQXRvbVByb21pc2VdKSk7XG4gIGlmICh0aW1lZEF0b21Qcm9taXNlLmlzRnVsZmlsbGVkKCkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGltZWRBdG9tUHJvbWlzZTtcbiAgfVxuXG4gIC8vIC4uLm90aGVyd2lzZSBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gdW5leHBlY3RlZCBhbGVydCBjb3ZlcmluZyB0aGUgZWxlbWVudFxuICBpZiAoIV8uaXNQbGFpbk9iamVjdCh0aGlzLl93YWl0aW5nQXRvbXMpKSB7XG4gICAgdGhpcy5fd2FpdGluZ0F0b21zID0ge1xuICAgICAgY291bnQ6IDAsXG4gICAgICBhbGVydE5vdGlmaWVyOiBuZXcgRXZlbnRFbWl0dGVyKCksXG4gICAgICBhbGVydE1vbml0b3I6IEIucmVzb2x2ZSgpLFxuICAgIH07XG4gIH1cbiAgdGhpcy5fd2FpdGluZ0F0b21zLmNvdW50Kys7XG5cbiAgbGV0IG9uQWxlcnRDYWxsYmFjaztcbiAgdHJ5IHtcbiAgICAvLyBvbmx5IHJlc3RhcnQgdGhlIG1vbml0b3IgaWYgaXQgaXMgbm90IHJ1bm5pbmcgYWxyZWFkeVxuICAgIGlmICh0aGlzLl93YWl0aW5nQXRvbXMuYWxlcnRNb25pdG9yLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0TW9uaXRvciA9IEIucmVzb2x2ZSgoYXN5bmMgKCkgPT4ge1xuICAgICAgICB3aGlsZSAodGhpcy5fd2FpdGluZ0F0b21zLmNvdW50ID4gMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5jaGVja0ZvckFsZXJ0KCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIuZW1pdChPTl9PQlNUUlVDVElOR19BTEVSVF9FVkVOVCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgICAgICAgIGF3YWl0IEIuZGVsYXkoQVRPTV9JTklUSUFMX1dBSVRfTVMgLyAyKTtcbiAgICAgICAgfVxuICAgICAgfSkoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIG9uQWxlcnRDYWxsYmFjayA9ICgpID0+IHJlamVjdChuZXcgZXJyb3JzLlVuZXhwZWN0ZWRBbGVydE9wZW5FcnJvcigpKTtcbiAgICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5hbGVydE5vdGlmaWVyLm9uY2UoT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQsIG9uQWxlcnRDYWxsYmFjayk7XG4gICAgICBoYW5kbGVQcm9taXNlRXJyb3IodGltZWRBdG9tUHJvbWlzZSlcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW5cbiAgICAgICAgLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKG9uQWxlcnRDYWxsYmFjaykge1xuICAgICAgdGhpcy5fd2FpdGluZ0F0b21zLmFsZXJ0Tm90aWZpZXIucmVtb3ZlTGlzdGVuZXIoT05fT0JTVFJVQ1RJTkdfQUxFUlRfRVZFTlQsIG9uQWxlcnRDYWxsYmFjayk7XG4gICAgfVxuICAgIHRoaXMuX3dhaXRpbmdBdG9tcy5jb3VudC0tO1xuICB9XG59O1xuXG5leHRlbnNpb25zLm1vYmlsZVdlYk5hdiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVdlYk5hdiAobmF2VHlwZSkge1xuICB0aGlzLnJlbW90ZS5hbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtgaGlzdG9yeS4ke25hdlR5cGV9KCk7YCwgbnVsbF0pO1xuICB9IGZpbmFsbHkge1xuICAgIHRoaXMucmVtb3RlLmFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQgPSBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTYWZhcmlPcHRzXG4gKiBAcHJvcGVydHkge29iamVjdH0gcHJlZmVyZW5jZXMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgU2FmYXJpIHNldHRpbmdzIHRvIGJlIHVwZGF0ZWQuXG4gKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgc2V0dGluZyBuYW1lcyBhbmQgdGhlaXIgdmFsdWVzIGNvdWxkIGJlIHJldHJpZXZlZCBieVxuICogY2hhbmdpbmcgdGhlIGNvcnJlc3BvbmRpbmcgU2FmYXJpIHNldHRpbmdzIGluIHRoZSBVSSBhbmQgdGhlbiBpbnNwZWN0aW5nXG4gKiAnTGlicmFyeS9QcmVmZXJlbmNlcy9jb20uYXBwbGUubW9iaWxlc2FmYXJpLnBsaXN0JyBmaWxlIGluc2lkZSBvZlxuICogY29tLmFwcGxlLm1vYmlsZXNhZmFyaSBhcHAgY29udGFpbmVyLlxuICogVGhlIGZ1bGwgcGF0aCB0byB0aGUgTW9iaWxlIFNhZmFyaSdzIGNvbnRhaW5lciBjb3VsZCBiZSByZXRyaWV2ZWQgZnJvbVxuICogYHhjcnVuIHNpbWN0bCBnZXRfYXBwX2NvbnRhaW5lciA8c2ltX3VkaWQ+IGNvbS5hcHBsZS5tb2JpbGVzYWZhcmkgZGF0YWBcbiAqIGNvbW1hbmQgb3V0cHV0LlxuICogVXNlIHRoZSBgeGNydW4gc2ltY3RsIHNwYXduIDxzaW1fdWRpZD4gZGVmYXVsdHMgcmVhZCA8cGF0aF90b19wbGlzdD5gIGNvbW1hbmRcbiAqIHRvIHByaW50IHRoZSBwbGlzdCBjb250ZW50IHRvIHRoZSBUZXJtaW5hbC5cbiAqL1xuXG4vKipcbiAqIFVwZGF0ZXMgcHJlZmVyZW5jZXMgb2YgTW9iaWxlIFNhZmFyaSBvbiBTaW11bGF0b3JcbiAqXG4gKiBAcGFyYW0ge1NhZmFyaU9wdHN9IG9wdHNcbiAqL1xuY29tbWFuZHMubW9iaWxlVXBkYXRlU2FmYXJpUHJlZmVyZW5jZXMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVVcGRhdGVTYWZhcmlQcmVmZXJlbmNlcyAob3B0cyA9IHt9KSB7XG4gIGlmICghdGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGV4dGVuc2lvbiBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgU2ltdWxhdG9yJyk7XG4gIH1cbiAgY29uc3QgeyBwcmVmZXJlbmNlcyB9ID0gb3B0cztcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QocHJlZmVyZW5jZXMpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignXCJwcmVmZXJlbmNlc1wiIGFyZ3VtZW50IG11c3QgYmUgYSB2YWxpZCBvYmplY3QnKTtcbiAgfVxuXG4gIHRoaXMubG9nLmRlYnVnKGBBYm91dCB0byB1cGRhdGUgU2FmYXJpIHByZWZlcmVuY2VzOiAke0pTT04uc3RyaW5naWZ5KHByZWZlcmVuY2VzKX1gKTtcbiAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS51cGRhdGVTYWZhcmlTZXR0aW5ncyhwcmVmZXJlbmNlcyk7XG59O1xuXG5PYmplY3QuYXNzaWduKGNvbW1hbmRzLCBleHRlbnNpb25zLCBoZWxwZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxxQkFBcUIsR0FBRyxFQUFFO0FBQ2hDLE1BQU1DLDhCQUE4QixHQUFHLEVBQUU7QUFDekMsTUFBTUMsd0JBQXdCLEdBQUcsRUFBRTtBQUNuQyxNQUFNQyx5QkFBeUIsR0FBRyxFQUFFO0FBQ3BDLE1BQU1DLDRCQUE0QixHQUFHLEVBQUU7QUFFdkMsTUFBTUMsK0JBQStCLEdBQUcsRUFBRTtBQUMxQyxNQUFNQyx3QkFBd0IsR0FBRyxFQUFFO0FBQ25DLE1BQU1DLGNBQWMsR0FBRyxFQUFFO0FBQ3pCLE1BQU1DLHdDQUF3QyxHQUFHLEVBQUU7QUFDbkQsTUFBTUMsc0NBQXNDLEdBQUcsRUFBRTtBQUVqRCxNQUFNQyxvQkFBb0IsR0FBRyxDQUMzQjtFQUFDQyxDQUFDLEVBQUUsSUFBSTtFQUFFQyxDQUFDLEVBQUU7QUFBSSxDQUFDLEVBQ2xCO0VBQUNELENBQUMsRUFBRSxHQUFHO0VBQUVDLENBQUMsRUFB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
|