appium-adb 9.10.21 → 9.10.23
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
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [9.10.23](https://github.com/appium/appium-adb/compare/v9.10.22...v9.10.23) (2023-01-14)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Miscellaneous Chores
|
|
5
|
+
|
|
6
|
+
* Only fetch resource paths when they are requested ([#634](https://github.com/appium/appium-adb/issues/634)) ([64dabb1](https://github.com/appium/appium-adb/commit/64dabb18342cac388c50bbc43ed2c2514e7add68))
|
|
7
|
+
|
|
8
|
+
## [9.10.22](https://github.com/appium/appium-adb/compare/v9.10.21...v9.10.22) (2023-01-13)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Miscellaneous Chores
|
|
12
|
+
|
|
13
|
+
* Bump rimraf from 3.0.2 to 4.0.4 ([#633](https://github.com/appium/appium-adb/issues/633)) ([2129c71](https://github.com/appium/appium-adb/commit/2129c7161a920f57af2ac3567c7967ccc8ba0658))
|
|
14
|
+
|
|
1
15
|
## [9.10.21](https://github.com/appium/appium-adb/compare/v9.10.20...v9.10.21) (2022-12-23)
|
|
2
16
|
|
|
3
17
|
|
package/build/lib/helpers.js
CHANGED
|
@@ -17,7 +17,7 @@ exports.getApkanalyzerForOs = getApkanalyzerForOs;
|
|
|
17
17
|
exports.getApksignerForOs = getApksignerForOs;
|
|
18
18
|
exports.getBuildToolsDirs = void 0;
|
|
19
19
|
exports.getIMEListFromOutput = getIMEListFromOutput;
|
|
20
|
-
exports.
|
|
20
|
+
exports.getResourcePath = exports.getOpenSslForOs = exports.getJavaHome = exports.getJavaForOs = void 0;
|
|
21
21
|
exports.getSdkRootFromEnv = getSdkRootFromEnv;
|
|
22
22
|
exports.getSdkToolsVersion = void 0;
|
|
23
23
|
exports.getSurfaceOrientation = getSurfaceOrientation;
|
|
@@ -55,14 +55,33 @@ exports.DEFAULT_ADB_EXEC_TIMEOUT = DEFAULT_ADB_EXEC_TIMEOUT;
|
|
|
55
55
|
const MAIN_ACTION = 'android.intent.action.MAIN';
|
|
56
56
|
const LAUNCHER_CATEGORY = 'android.intent.category.LAUNCHER';
|
|
57
57
|
const MODULE_NAME = 'appium-adb';
|
|
58
|
-
const getModuleRoot = _lodash.default.memoize(function getModuleRoot() {
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
const getModuleRoot = _lodash.default.memoize(async function getModuleRoot() {
|
|
59
|
+
let moduleRoot = _path.default.dirname(_path.default.resolve(__filename));
|
|
60
|
+
let isAtFsRoot = false;
|
|
61
|
+
while (!isAtFsRoot) {
|
|
62
|
+
const manifestPath = _path.default.join(moduleRoot, 'package.json');
|
|
63
|
+
try {
|
|
64
|
+
if ((await _support.fs.exists(manifestPath)) && JSON.parse(await _support.fs.readFile(manifestPath, 'utf8')).name === MODULE_NAME) {
|
|
65
|
+
return moduleRoot;
|
|
66
|
+
}
|
|
67
|
+
} catch (ign) {}
|
|
68
|
+
moduleRoot = _path.default.dirname(moduleRoot);
|
|
69
|
+
isAtFsRoot = moduleRoot.length <= _path.default.dirname(moduleRoot).length;
|
|
70
|
+
}
|
|
71
|
+
if (isAtFsRoot) {
|
|
61
72
|
throw new Error(`Cannot find the root folder of the ${MODULE_NAME} Node.js module`);
|
|
62
73
|
}
|
|
63
|
-
return
|
|
74
|
+
return moduleRoot;
|
|
75
|
+
});
|
|
76
|
+
const getResourcePath = _lodash.default.memoize(async function getResourcePath(relPath) {
|
|
77
|
+
const moduleRoot = await getModuleRoot();
|
|
78
|
+
const resultPath = _path.default.resolve(moduleRoot, relPath);
|
|
79
|
+
if (!(await _support.fs.exists(resultPath))) {
|
|
80
|
+
throw new Error(`Cannot find the resource '${relPath}' under the '${moduleRoot}' ` + `folder of ${MODULE_NAME} Node.js module`);
|
|
81
|
+
}
|
|
82
|
+
return resultPath;
|
|
64
83
|
});
|
|
65
|
-
exports.
|
|
84
|
+
exports.getResourcePath = getResourcePath;
|
|
66
85
|
function getSdkRootFromEnv() {
|
|
67
86
|
return process.env.ANDROID_HOME || process.env.ANDROID_SDK_ROOT;
|
|
68
87
|
}
|
|
@@ -722,4 +741,4 @@ function parseLaunchableActivityNames(dumpsys) {
|
|
|
722
741
|
function matchComponentName(classString) {
|
|
723
742
|
return /^[a-z0-9./_]+$/i.exec(classString);
|
|
724
743
|
}
|
|
725
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUEtTX0VYVEVOU0lPTiIsIkFQS19FWFRFTlNJT04iLCJBUEtfSU5TVEFMTF9USU1FT1VUIiwiQVBLU19JTlNUQUxMX1RJTUVPVVQiLCJERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQiLCJNQUlOX0FDVElPTiIsIkxBVU5DSEVSX0NBVEVHT1JZIiwiTU9EVUxFX05BTUUiLCJnZXRNb2R1bGVSb290IiwiXyIsIm1lbW9pemUiLCJyb290Iiwibm9kZSIsImdldE1vZHVsZVJvb3RTeW5jIiwiX19maWxlbmFtZSIsIkVycm9yIiwiZ2V0U2RrUm9vdEZyb21FbnYiLCJwcm9jZXNzIiwiZW52IiwiQU5EUk9JRF9IT01FIiwiQU5EUk9JRF9TREtfUk9PVCIsInJlcXVpcmVTZGtSb290IiwiY3VzdG9tUm9vdCIsInNka1Jvb3QiLCJkb2NNc2ciLCJpc0VtcHR5IiwiZnMiLCJleGlzdHMiLCJzdGF0cyIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgiLCJwcm9wc1BhdGhzIiwiZ2xvYiIsImN3ZCIsInBhdGgiLCJyZXNvbHZlIiwiYWJzb2x1dGUiLCJwbGF0Zm9ybXNNYXBwaW5nIiwicHJvcHNQYXRoIiwicHJvcHNDb250ZW50IiwicmVhZEZpbGUiLCJwbGF0Zm9ybVBhdGgiLCJkaXJuYW1lIiwicGxhdGZvcm0iLCJiYXNlbmFtZSIsIm1hdGNoIiwiZXhlYyIsImxvZyIsIndhcm4iLCJwYXJzZUludCIsInJlY2VudFNka1ZlcnNpb24iLCJrZXlzIiwic29ydCIsInJldmVyc2UiLCJyZXN1bHQiLCJkZWJ1ZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1bnppcEZpbGUiLCJ6aXBQYXRoIiwiZHN0Um9vdCIsInppcCIsImFzc2VydFZhbGlkWmlwIiwiZXh0cmFjdEFsbFRvIiwidW5zaWduQXBrIiwiYXBrUGF0aCIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsIm1ldGFJbmZGb2xkZXJOYW1lIiwiaGFzTWV0YUluZiIsInJlYWRFbnRyaWVzIiwiZW50cnkiLCJmaWxlTmFtZSIsInN0YXJ0c1dpdGgiLCJ0bXBaaXBSb290IiwicmltcmFmIiwidG1wUmVzdWx0UGF0aCIsInRvQXJjaGl2ZSIsInVubGluayIsIm12IiwiZ2V0SU1FTGlzdEZyb21PdXRwdXQiLCJzdGRvdXQiLCJlbmdpbmVzIiwibGluZSIsInNwbGl0IiwibGVuZ3RoIiwicHVzaCIsInRyaW0iLCJyZXBsYWNlIiwiZ2V0SmF2YUhvbWUiLCJKQVZBX0hPTUUiLCJnZXRKYXZhRm9yT3MiLCJqYXZhSG9tZSIsImVyck1zZyIsImVyciIsIm1lc3NhZ2UiLCJleGVjdXRhYmxlTmFtZSIsInN5c3RlbSIsImlzV2luZG93cyIsInJlc3VsdFBhdGgiLCJ3aGljaCIsImlnbiIsImdldE9wZW5Tc2xGb3JPcyIsImJpbmFyeU5hbWUiLCJnZXRBcGtzaWduZXJGb3JPcyIsInN5c0hlbHBlcnMiLCJnZXRCaW5hcnlGcm9tU2RrUm9vdCIsImdldEFwa2FuYWx5emVyRm9yT3MiLCJpc1Nob3dpbmdMb2Nrc2NyZWVuIiwiZHVtcHN5cyIsInNvbWUiLCJ4IiwiaW5jbHVkZXMiLCJldmVyeSIsInRlc3QiLCJpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQiLCJtIiwiZ2V0U3VyZmFjZU9yaWVudGF0aW9uIiwiaXNTY3JlZW5PbkZ1bGx5IiwiYnVpbGRTdGFydENtZCIsInN0YXJ0QXBwT3B0aW9ucyIsImFwaUxldmVsIiwidXNlciIsIndhaXRGb3JMYXVuY2giLCJwa2ciLCJhY3Rpdml0eSIsImFjdGlvbiIsImNhdGVnb3J5Iiwic3RvcEFwcCIsImZsYWdzIiwiY21kIiwidXRpbCIsImhhc1ZhbHVlIiwib3B0aW9uYWxJbnRlbnRBcmd1bWVudHMiLCJwYXJzZUtleVZhbHVlIiwic3RyIiwic3BhY2UiLCJpbmRleE9mIiwic3Vic3RyaW5nIiwicmUiLCJhcmdzIiwiYXBwbHkiLCJmbGFnIiwiZmxhZ1BvcyIsInByZXZBcmdzIiwiZ2V0U2RrVG9vbHNWZXJzaW9uIiwiYW5kcm9pZEhvbWUiLCJwcm9wZXJ0aWVzUGF0aCIsInByb3BlcnRpZXNDb250ZW50IiwidmVyc2lvbk1hdGNoZXIiLCJSZWdFeHAiLCJtYWpvciIsIm1pbm9yIiwiYnVpbGQiLCJnZXRCdWlsZFRvb2xzRGlycyIsImJ1aWxkVG9vbHNEaXJzIiwibWFwIiwiZGlyIiwiYSIsImIiLCJzZW12ZXIiLCJyY29tcGFyZSIsInBhaXIiLCJwYWlycyIsIkIiLCJtdGltZSIsInZhbHVlT2YiLCJpbmZvIiwiZXh0cmFjdE1hdGNoaW5nUGVybWlzc2lvbnMiLCJkdW1wc3lzT3V0cHV0IiwiZ3JvdXBOYW1lcyIsImdyYW50ZWRTdGF0ZSIsImdyb3VwUGF0dGVybkJ5TmFtZSIsImdyb3VwTmFtZSIsImVzY2FwZVJlZ0V4cCIsImluZGVudFBhdHRlcm4iLCJwZXJtaXNzaW9uTmFtZVBhdHRlcm4iLCJncmFudGVkU3RhdGVQYXR0ZXJuIiwiZ3JvdXBNYXRjaCIsImxpbmVzIiwidGl0bGVJbmRlbnQiLCJzZWFyY2giLCJzbGljZSIsImN1cnJlbnRJbmRlbnQiLCJwZXJtaXNzaW9uTmFtZU1hdGNoIiwiaXRlbSIsInBlcm1pc3Npb24iLCJncmFudGVkU3RhdGVNYXRjaCIsImdyYW50ZWQiLCJmaWx0ZXJlZFJlc3VsdCIsImZpbHRlciIsImlzQm9vbGVhbiIsInBsdXJhbGl6ZSIsImJ1aWxkSW5zdGFsbEFyZ3MiLCJvcHRpb25zIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJ1c2VTZGNhcmQiLCJncmFudFBlcm1pc3Npb25zIiwicGFydGlhbEluc3RhbGwiLCJwYXJzZU1hbmlmZXN0IiwibWFuaWZlc3QiLCJwYWNrYWdlIiwidmVyc2lvbkNvZGUiLCJ2ZXJzaW9uTmFtZSIsImFwcGxpY2F0aW9uIiwiYWN0aXZpdGllcyIsImFjdGl2aXR5QWxpYXNlcyIsImVuYWJsZWQiLCJpbnRlbnRGaWx0ZXJzIiwiYWN0aW9ucyIsImNhdGVnb3JpZXMiLCJpc01haW5BY3Rpb24iLCJuYW1lIiwiaXNMYXVuY2hlckNhdGVnb3J5IiwicGFyc2VBYXB0U3RyaW5ncyIsInJhd091dHB1dCIsImNvbmZpZ01hcmtlciIsIm5vcm1hbGl6ZVN0cmluZ01hdGNoIiwicyIsImFwa1N0cmluZ3MiLCJpc0luQ29uZmlnIiwiY3VycmVudFJlc291cmNlSWQiLCJpc0luUGx1cmFsR3JvdXAiLCJxdW90ZWRTdHJpbmdQYXR0ZXJuIiwib3MiLCJFT0wiLCJ0cmltbWVkTGluZSIsInBhcnNlQWFwdDJTdHJpbmdzIiwiYWxsTGluZXMiLCJleHRyYWN0Q29udGVudCIsInN0YXJ0SWR4IiwiaWR4Iiwic3RhcnRDaGFyUG9zIiwidGVybWluYXRpb25DaGFyTWF0Y2giLCJ0ZXJtaW5hdGlvbkNoYXJQb3MiLCJpbmRleCIsInRyaW1TdGFydCIsImlzSW5DdXJyZW50Q29uZmlnIiwibGluZUluZGV4IiwiY29udGVudCIsImlzU3RyaW5nIiwiZm9ybWF0Q29uZmlnTWFya2VyIiwiY29uZmlnc0dldHRlciIsImRlc2lyZWRNYXJrZXIiLCJkZWZhdWx0TWFya2VyIiwiY29uZmlncyIsInRvTG93ZXJDYXNlIiwicGFyc2VKc29uRGF0YSIsIm91dHB1dCIsImVudGl0eU5hbWUiLCJqc29uU3RyIiwicGFyc2UiLCJlIiwidG9BdmRMb2NhbGVBcmdzIiwibGFuZ3VhZ2UiLCJjb3VudHJ5IiwidG9VcHBlckNhc2UiLCJsb2NhbGUiLCJnZXRBbmRyb2lkUHJlZnNSb290IiwibG9jYXRpb24iLCJBTkRST0lEX0VNVUxBVE9SX0hPTUUiLCJkaXJFeGlzdHMiLCJob21lIiwiSE9NRSIsIlVTRVJQUk9GSUxFIiwiZXNjYXBlU2hlbGxBcmciLCJhcmciLCJwYXJzZUxhdW5jaGFibGVBY3Rpdml0eU5hbWVzIiwibWFpbkFjdGl2aXR5TmFtZVJlIiwiY2F0ZWdvcnlOYW1lUmUiLCJibG9ja3MiLCJibG9ja1N0YXJ0SW5kZW50IiwiYmxvY2siLCJ0cmltRW5kIiwiaXNOaWwiLCJoYXNDYXRlZ29yeSIsImFjdGl2aXR5TmFtZVN0ciIsIkJvb2xlYW4iLCJmcUFjdGl2aXR5TmFtZSIsIm1hdGNoQ29tcG9uZW50TmFtZSIsImNsYXNzU3RyaW5nIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2hlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCB6aXAsIHV0aWwsIHRlbXBEaXIsIG5vZGUgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcblxuY29uc3QgQVBLU19FWFRFTlNJT04gPSAnLmFwa3MnO1xuY29uc3QgQVBLX0VYVEVOU0lPTiA9ICcuYXBrJztcbmNvbnN0IEFQS19JTlNUQUxMX1RJTUVPVVQgPSA2MDAwMDtcbmNvbnN0IEFQS1NfSU5TVEFMTF9USU1FT1VUID0gQVBLX0lOU1RBTExfVElNRU9VVCAqIDI7XG5jb25zdCBERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQgPSAyMDAwMDsgLy8gaW4gbWlsbGlzZWNvbmRzXG5jb25zdCBNQUlOX0FDVElPTiA9ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTic7XG5jb25zdCBMQVVOQ0hFUl9DQVRFR09SWSA9ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUic7XG5jb25zdCBNT0RVTEVfTkFNRSA9ICdhcHBpdW0tYWRiJztcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IG1vZHVsZSdzIHJvb3QgZm9sZGVyXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byBtb2R1bGUgcm9vdFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjdXJyZW50IG1vZHVsZSByb290IGZvbGRlciBjYW5ub3QgYmUgZGV0ZXJtaW5lZFxuICovXG5jb25zdCBnZXRNb2R1bGVSb290ID0gXy5tZW1vaXplKGZ1bmN0aW9uIGdldE1vZHVsZVJvb3QgKCkge1xuICBjb25zdCByb290ID0gbm9kZS5nZXRNb2R1bGVSb290U3luYyhNT0RVTEVfTkFNRSwgX19maWxlbmFtZSk7XG4gIGlmICghcm9vdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSAke01PRFVMRV9OQU1FfSBOb2RlLmpzIG1vZHVsZWApO1xuICB9XG4gIHJldHVybiByb290O1xufSk7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhY3R1YWwgcGF0aCB0byBTREsgcm9vdCBmb2xkZXIgZnJvbSB0aGUgc3lzdGVtIGVudmlyb25tZW50XG4gKlxuICogQHJldHVybiB7P3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgU0RLIHJvb3QgZm9sZGVyXG4gKi9cbmZ1bmN0aW9uIGdldFNka1Jvb3RGcm9tRW52ICgpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LkFORFJPSURfSE9NRSB8fCBwcm9jZXNzLmVudi5BTkRST0lEX1NES19ST09UO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHBhdGggdG8gU0RLIHJvb3QgZm9sZGVyXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBTREsgcm9vdCBmb2xkZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBlaXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgZW52IHZhcmlhYmxlIGlzIHVuc2V0IG9yIGlzXG4gKiBwb2ludGluZyB0byBhbiBpbnZhbGlkIGZpbGUgc3lzdGVtIGVudHJ5XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlcXVpcmVTZGtSb290IChjdXN0b21Sb290ID0gbnVsbCkge1xuICBjb25zdCBzZGtSb290ID0gY3VzdG9tUm9vdCB8fCBnZXRTZGtSb290RnJvbUVudigpO1xuICBjb25zdCBkb2NNc2cgPSAnUmVhZCBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zdHVkaW8vY29tbWFuZC1saW5lL3ZhcmlhYmxlcyBmb3IgbW9yZSBkZXRhaWxzJztcbiAgaWYgKF8uaXNFbXB0eShzZGtSb290KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTmVpdGhlciBBTkRST0lEX0hPTUUgbm9yIEFORFJPSURfU0RLX1JPT1QgZW52aXJvbm1lbnQgdmFyaWFibGUgd2FzIGV4cG9ydGVkLiAke2RvY01zZ31gKTtcbiAgfVxuXG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHNka1Jvb3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQW5kcm9pZCBTREsgcm9vdCBmb2xkZXIgJyR7c2RrUm9vdH0nIGRvZXMgbm90IGV4aXN0IG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS4gJHtkb2NNc2d9YCk7XG4gIH1cbiAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KHNka1Jvb3QpO1xuICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBBbmRyb2lkIFNESyByb290ICcke3Nka1Jvb3R9JyBtdXN0IGJlIGEgZm9sZGVyLiAke2RvY01zZ31gKTtcbiAgfVxuICByZXR1cm4gc2RrUm9vdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQbGF0Zm9ybUluZm9cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGxhdGZvcm0gLSBUaGUgcGxhdGZvcm0gbmFtZSwgZm9yIGV4YW1wbGUgYGFuZHJvaWQtMjRgXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwbGF0Zm9ybVBhdGggLSBGdWxsIHBhdGggdG8gdGhlIHBsYXRmb3JtIFNESyBmb2xkZXJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICovXG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHBhdGggdG8gdGhlIHJlY2VudCBpbnN0YWxsZWQgQW5kcm9pZCBwbGF0Zm9ybS5cbiAqXG4gKiBAcmV0dXJuIHtQbGF0Zm9ybUluZm99IFRoZSByZXN1bHRpbmcgcGF0aCB0byB0aGUgbmV3ZXN0IGluc3RhbGxlZCBwbGF0Zm9ybS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCAoc2RrUm9vdCkge1xuICBjb25zdCBwcm9wc1BhdGhzID0gYXdhaXQgZnMuZ2xvYignKi9idWlsZC5wcm9wJywge1xuICAgIGN3ZDogcGF0aC5yZXNvbHZlKHNka1Jvb3QsICdwbGF0Zm9ybXMnKSxcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgfSk7XG4gIGNvbnN0IHBsYXRmb3Jtc01hcHBpbmcgPSB7fTtcbiAgZm9yIChjb25zdCBwcm9wc1BhdGggb2YgcHJvcHNQYXRocykge1xuICAgIGNvbnN0IHByb3BzQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb3BzUGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgcGxhdGZvcm1QYXRoID0gcGF0aC5kaXJuYW1lKHByb3BzUGF0aCk7XG4gICAgY29uc3QgcGxhdGZvcm0gPSBwYXRoLmJhc2VuYW1lKHBsYXRmb3JtUGF0aCk7XG4gICAgY29uc3QgbWF0Y2ggPSAvcm9cXC5idWlsZFxcLnZlcnNpb25cXC5zZGs9KFxcZCspLy5leGVjKHByb3BzQ29udGVudCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgbG9nLndhcm4oYENhbm5vdCByZWFkIHRoZSBTREsgdmVyc2lvbiBmcm9tICcke3Byb3BzUGF0aH0nLiBTa2lwcGluZyAnJHtwbGF0Zm9ybX0nYCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcGxhdGZvcm1zTWFwcGluZ1twYXJzZUludChtYXRjaFsxXSwgMTApXSA9IHtcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgcGxhdGZvcm1QYXRoLFxuICAgIH07XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShwbGF0Zm9ybXNNYXBwaW5nKSkge1xuICAgIGxvZy53YXJuKGBGb3VuZCB6ZXJvIHBsYXRmb3JtIGZvbGRlcnMgYXQgJyR7cGF0aC5yZXNvbHZlKHNka1Jvb3QsICdwbGF0Zm9ybXMnKX0nLiBgICtcbiAgICAgIGBEbyB5b3UgaGF2ZSBhbnkgQW5kcm9pZCBTREtzIGluc3RhbGxlZD9gKTtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhdGZvcm06IG51bGwsXG4gICAgICBwbGF0Zm9ybVBhdGg6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHJlY2VudFNka1ZlcnNpb24gPSBfLmtleXMocGxhdGZvcm1zTWFwcGluZykuc29ydCgpLnJldmVyc2UoKVswXTtcbiAgY29uc3QgcmVzdWx0ID0gcGxhdGZvcm1zTWFwcGluZ1tyZWNlbnRTZGtWZXJzaW9uXTtcbiAgbG9nLmRlYnVnKGBGb3VuZCB0aGUgbW9zdCByZWNlbnQgQW5kcm9pZCBwbGF0Zm9ybTogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bnppcEZpbGUgKHppcFBhdGgsIGRzdFJvb3QgPSBwYXRoLmRpcm5hbWUoemlwUGF0aCkpIHtcbiAgbG9nLmRlYnVnKGBVbnppcHBpbmcgJyR7emlwUGF0aH0nIHRvICcke2RzdFJvb3R9J2ApO1xuICBhd2FpdCB6aXAuYXNzZXJ0VmFsaWRaaXAoemlwUGF0aCk7XG4gIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oemlwUGF0aCwgZHN0Um9vdCk7XG4gIGxvZy5kZWJ1ZygnVW56aXAgc3VjY2Vzc2Z1bCcpO1xufVxuXG4vKipcbiAqIFVuc2lnbnMgdGhlIGdpdmVuIGFwayBieSByZW1vdmluZyB0aGVcbiAqIE1FVEEtSU5GIGZvbGRlciByZWN1cnNpdmVseSBmcm9tIHRoZSBhcmNoaXZlLlxuICogISEhIFRoZSBmdW5jdGlvbiBvdmVyd3JpdGVzIHRoZSBnaXZlbiBhcGsgYWZ0ZXIgc3VjY2Vzc2Z1bCB1bnNpZ25pbmcgISEhXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa1BhdGggVGhlIHBhdGggdG8gdGhlIGFwa1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgYXBrIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseVxuICogdW5zaWduZWQgYW5kIG92ZXJ3cml0dGVuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyB0aGUgdW5zaWduIG9wZXJhdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiB1bnNpZ25BcGsgKGFwa1BhdGgpIHtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBjb25zdCBtZXRhSW5mRm9sZGVyTmFtZSA9ICdNRVRBLUlORic7XG4gIHRyeSB7XG4gICAgbGV0IGhhc01ldGFJbmYgPSBmYWxzZTtcbiAgICBhd2FpdCB6aXAucmVhZEVudHJpZXMoYXBrUGF0aCwgKHtlbnRyeX0pID0+IHtcbiAgICAgIGhhc01ldGFJbmYgPSBlbnRyeS5maWxlTmFtZS5zdGFydHNXaXRoKGAke21ldGFJbmZGb2xkZXJOYW1lfS9gKTtcbiAgICAgIC8vIGVudHJpZXMgaXRlcmF0aW9uIHN0b3BzIGFmdGVyIGBmYWxzZWAgaXMgcmV0dXJuZWRcbiAgICAgIHJldHVybiAhaGFzTWV0YUluZjtcbiAgICB9KTtcbiAgICBpZiAoIWhhc01ldGFJbmYpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdG1wWmlwUm9vdCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCAnYXBrJyk7XG4gICAgYXdhaXQgemlwLmV4dHJhY3RBbGxUbyhhcGtQYXRoLCB0bXBaaXBSb290KTtcbiAgICBhd2FpdCBmcy5yaW1yYWYocGF0aC5yZXNvbHZlKHRtcFppcFJvb3QsIG1ldGFJbmZGb2xkZXJOYW1lKSk7XG4gICAgY29uc3QgdG1wUmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCBwYXRoLmJhc2VuYW1lKGFwa1BhdGgpKTtcbiAgICBhd2FpdCB6aXAudG9BcmNoaXZlKHRtcFJlc3VsdFBhdGgsIHtcbiAgICAgIGN3ZDogdG1wWmlwUm9vdCxcbiAgICB9KTtcbiAgICBhd2FpdCBmcy51bmxpbmsoYXBrUGF0aCk7XG4gICAgYXdhaXQgZnMubXYodG1wUmVzdWx0UGF0aCwgYXBrUGF0aCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldElNRUxpc3RGcm9tT3V0cHV0IChzdGRvdXQpIHtcbiAgbGV0IGVuZ2luZXMgPSBbXTtcbiAgZm9yIChsZXQgbGluZSBvZiBzdGRvdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgaWYgKGxpbmUubGVuZ3RoID4gMCAmJiBsaW5lWzBdICE9PSAnICcpIHtcbiAgICAgIC8vIHJlbW92ZSBuZXdsaW5lIGFuZCB0cmFpbGluZyBjb2xvbiwgYW5kIGFkZCB0byB0aGUgbGlzdFxuICAgICAgZW5naW5lcy5wdXNoKGxpbmUudHJpbSgpLnJlcGxhY2UoLzokLywgJycpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVuZ2luZXM7XG59XG5cbmNvbnN0IGdldEphdmFIb21lID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldEphdmFIb21lICgpIHtcbiAgY29uc3QgcmVzdWx0ID0gcHJvY2Vzcy5lbnYuSkFWQV9IT01FO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIEpBVkFfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0IGZvciB0aGUgY3VycmVudCBwcm9jZXNzJyk7XG4gIH1cbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMocmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEpBVkFfSE9NRSBsb2NhdGlvbiAnJHtyZXN1bHR9JyBtdXN0IGV4aXN0YCk7XG4gIH1cbiAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KHJlc3VsdCk7XG4gIGlmICghc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEpBVkFfSE9NRSBsb2NhdGlvbiAnJHtyZXN1bHR9JyBtdXN0IGJlIGEgdmFsaWQgZm9sZGVyYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5jb25zdCBnZXRKYXZhRm9yT3MgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0SmF2YUZvck9zICgpIHtcbiAgbGV0IGphdmFIb21lO1xuICBsZXQgZXJyTXNnO1xuICB0cnkge1xuICAgIGphdmFIb21lID0gYXdhaXQgZ2V0SmF2YUhvbWUoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyTXNnID0gZXJyLm1lc3NhZ2U7XG4gIH1cbiAgY29uc3QgZXhlY3V0YWJsZU5hbWUgPSBgamF2YSR7c3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJyd9YDtcbiAgaWYgKGphdmFIb21lKSB7XG4gICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZShqYXZhSG9tZSwgJ2JpbicsIGV4ZWN1dGFibGVOYW1lKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHJlc3VsdFBhdGgpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0UGF0aDtcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZnMud2hpY2goZXhlY3V0YWJsZU5hbWUpO1xuICB9IGNhdGNoIChpZ24pIHt9XG4gIHRocm93IG5ldyBFcnJvcihgVGhlICcke2V4ZWN1dGFibGVOYW1lfScgYmluYXJ5IGNvdWxkIG5vdCBiZSBmb3VuZCBgICtcbiAgICBgbmVpdGhlciBpbiBQQVRIIG5vciB1bmRlciBKQVZBX0hPTUUgKCR7ZXJyTXNnIHx8IHBhdGgucmVzb2x2ZShqYXZhSG9tZSwgJ2JpbicpfSlgKTtcbn0pO1xuXG5jb25zdCBnZXRPcGVuU3NsRm9yT3MgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGJpbmFyeU5hbWUgPSBgb3BlbnNzbCR7c3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJyd9YDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZnMud2hpY2goYmluYXJ5TmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIG9wZW5zc2wgdG9vbCBtdXN0IGJlIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtIGFuZCBhdmFpbGFibGUgb24gdGhlIHBhdGgnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGFic29sdXRlIHBhdGggdG8gYXBrc2lnbmVyIHRvb2xcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3lzSGVscGVycyAtIEFuIGluc3RhbmNlIGNvbnRhaW5pbmcgc3lzdGVtQ2FsbE1ldGhvZHMgaGVscGVyIG1ldGhvZHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEFuIGFic29sdXRlIHBhdGggdG8gYXBrc2lnbmVyIHRvb2wuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHRvb2wgaXMgbm90IHByZXNlbnQgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBcGtzaWduZXJGb3JPcyAoc3lzSGVscGVycykge1xuICByZXR1cm4gYXdhaXQgc3lzSGVscGVycy5nZXRCaW5hcnlGcm9tU2RrUm9vdCgnYXBrc2lnbmVyLmphcicpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgYWJzb2x1dGUgcGF0aCB0byBhcGthbmFseXplciB0b29sLlxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL2NvbW1hbmQtbGluZS9hcGthbmFseXplci5odG1sXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN5c0hlbHBlcnMgLSBBbiBpbnN0YW5jZSBjb250YWluaW5nIHN5c3RlbUNhbGxNZXRob2RzIGhlbHBlciBtZXRob2RzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBbiBhYnNvbHV0ZSBwYXRoIHRvIGFwa2FuYWx5emVyIHRvb2wuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHRvb2wgaXMgbm90IHByZXNlbnQgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBcGthbmFseXplckZvck9zIChzeXNIZWxwZXJzKSB7XG4gIHJldHVybiBhd2FpdCBzeXNIZWxwZXJzLmdldEJpbmFyeUZyb21TZGtSb290KCdhcGthbmFseXplcicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBtU2hvd2luZ0xvY2tzY3JlZW4gb3IgbURyZWFtaW5nTG9ja3NjcmVlbiBpbiBkdW1wc3lzIG91dHB1dCB0byBkZXRlcm1pbmVcbiAqIGlmIGxvY2sgc2NyZWVuIGlzIHNob3dpbmdcbiAqXG4gKiBBIG5vdGU6IGBhZGIgc2hlbGwgZHVtcHN5cyB0cnVzdGAgcGVyZm9ybXMgYmV0dGVyIHdoaWxlIGRldGVjdGluZyB0aGUgbG9ja2VkIHNjcmVlbiBzdGF0ZVxuICogaW4gY29tcGFyaXNvbiB0byBgYWRiIGR1bXBzeXMgd2luZG93YCBvdXRwdXQgcGFyc2luZy5cbiAqIEJ1dCB0aGUgdHJ1c3QgY29tbWFuZCBkb2VzIG5vdCB3b3JrIGZvciBgU3dpcGVgIHVubG9jayBwYXR0ZXJuLlxuICpcbiAqIEluIHNvbWUgQW5kcm9pZCBkZXZpY2VzIChQcm9iYWJseSBhcm91bmQgQW5kcm9pZCAxMCspLCBgbVNob3dpbmdMb2Nrc2NyZWVuYCBhbmQgYG1EcmVhbWluZ0xvY2tzY3JlZW5gXG4gKiBkbyBub3Qgd29yayB0byBkZXRlY3QgbG9jayBzdGF0dXMuIEluc3RlYWQsIGtleWd1YXJkIHByZWZlcmVuY2VzIGhlbHBzIHRvIGRldGVjdCB0aGUgbG9jayBjb25kaXRpb24uXG4gKiBTb21lIGRldmljZXMgc3VjaCBhcyBBbmRyb2lkIFRWIGRvIG5vdCBoYXZlIGtleWd1YXJkLCBzbyB3ZSBzaG91bGQga2VlcFxuICogc2NyZWVuIGNvbmRpdGlvbiBhcyB0aGlzIHByaW1hcnkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkdW1wc3lzIC0gVGhlIG91dHB1dCBvZiBkdW1wc3lzIHdpbmRvdyBjb21tYW5kLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBsb2NrIHNjcmVlbiBpcyBzaG93aW5nLlxuICovXG5mdW5jdGlvbiBpc1Nob3dpbmdMb2Nrc2NyZWVuIChkdW1wc3lzKSB7XG4gIHJldHVybiBfLnNvbWUoWydtU2hvd2luZ0xvY2tzY3JlZW49dHJ1ZScsICdtRHJlYW1pbmdMb2Nrc2NyZWVuPXRydWUnXSwgKHgpID0+IGR1bXBzeXMuaW5jbHVkZXMoeCkpXG4gICAgLy8gYG1Jc1Nob3dpbmdgIGFuZCBgbUlucHV0UmVzdHJpY3RlZGAgYXJlIGB0cnVlYCBpbiBsb2NrIGNvbmRpdGlvbi4gYGZhbHNlYCBpcyB1bmxvY2sgY29uZGl0aW9uLlxuICAgIHx8IF8uZXZlcnkoWy9LZXlndWFyZFN0YXRlTW9uaXRvcltcXG5cXHNdK21Jc1Nob3dpbmc9dHJ1ZS8sIC9cXHMrbUlucHV0UmVzdHJpY3RlZD10cnVlL10sICh4KSA9PiB4LnRlc3QoZHVtcHN5cykpO1xufVxuXG4vKlxuICogQ2hlY2tzIG1DdXJyZW50Rm9jdXMgaW4gZHVtcHN5cyBvdXRwdXQgdG8gZGV0ZXJtaW5lIGlmIEtleWd1YXJkIGlzIGFjdGl2YXRlZFxuICovXG5mdW5jdGlvbiBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQgKGR1bXBzeXMpIHtcbiAgbGV0IG0gPSAvbUN1cnJlbnRGb2N1cy4rS2V5Z3VhcmQvZ2kuZXhlYyhkdW1wc3lzKTtcbiAgcmV0dXJuIChtICYmIG0ubGVuZ3RoICYmIG1bMF0pID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG4vKlxuICogUmVhZHMgU3VyZmFjZU9yaWVudGF0aW9uIGluIGR1bXBzeXMgb3V0cHV0XG4gKi9cbmZ1bmN0aW9uIGdldFN1cmZhY2VPcmllbnRhdGlvbiAoZHVtcHN5cykge1xuICBsZXQgbSA9IC9TdXJmYWNlT3JpZW50YXRpb246IFxcZC9naS5leGVjKGR1bXBzeXMpO1xuICByZXR1cm4gbSAmJiBwYXJzZUludChtWzBdLnNwbGl0KCc6JylbMV0sIDEwKTtcbn1cblxuLypcbiAqIENoZWNrcyBtU2NyZWVuT25GdWxseSBpbiBkdW1wc3lzIG91dHB1dCB0byBkZXRlcm1pbmUgaWYgc2NyZWVuIGlzIHNob3dpbmdcbiAqIERlZmF1bHQgaXMgdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1NjcmVlbk9uRnVsbHkgKGR1bXBzeXMpIHtcbiAgbGV0IG0gPSAvbVNjcmVlbk9uRnVsbHk9XFx3Ky9naS5leGVjKGR1bXBzeXMpO1xuICByZXR1cm4gIW0gfHwgLy8gaWYgaW5mb3JtYXRpb24gaXMgbWlzc2luZyB3ZSBhc3N1bWUgc2NyZWVuIGlzIGZ1bGx5IG9uXG4gICAgICAgICAobSAmJiBtLmxlbmd0aCA+IDAgJiYgbVswXS5zcGxpdCgnPScpWzFdID09PSAndHJ1ZScpIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBjb21tYW5kIGxpbmUgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBnaXZlblxuICogYXBwbGljYXRpb24gc3RhcnR1cCBvcHRpb25zXG4gKlxuICogQHBhcmFtIHtTdGFydEFwcE9wdGlvbnN9IHN0YXJ0QXBwT3B0aW9ucyAtIEFwcGxpY2F0aW9uIG9wdGlvbnMgbWFwcGluZ1xuICogQHBhcmFtIHtudW1iZXJ9IGFwaUxldmVsIC0gVGhlIGFjdHVhbCBPUyBBUEkgbGV2ZWxcbiAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmc+fSBUaGUgYWN0dWFsIGNvbW1hbmQgbGluZSBhcnJheVxuICovXG5mdW5jdGlvbiBidWlsZFN0YXJ0Q21kIChzdGFydEFwcE9wdGlvbnMsIGFwaUxldmVsKSB7XG4gIGNvbnN0IHtcbiAgICB1c2VyLFxuICAgIHdhaXRGb3JMYXVuY2gsXG4gICAgcGtnLFxuICAgIGFjdGl2aXR5LFxuICAgIGFjdGlvbixcbiAgICBjYXRlZ29yeSxcbiAgICBzdG9wQXBwLFxuICAgIGZsYWdzLFxuICB9ID0gc3RhcnRBcHBPcHRpb25zO1xuICBjb25zdCBjbWQgPSBbJ2FtJywgJ3N0YXJ0J107XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHVzZXIpKSB7XG4gICAgY21kLnB1c2goJy0tdXNlcicsIHVzZXIpO1xuICB9XG4gIGlmICh3YWl0Rm9yTGF1bmNoKSB7XG4gICAgY21kLnB1c2goJy1XJyk7XG4gIH1cbiAgaWYgKGFjdGl2aXR5ICYmIHBrZykge1xuICAgIGNtZC5wdXNoKCctbicsIGAke3BrZ30vJHthY3Rpdml0eX1gKTtcbiAgfVxuICBpZiAoc3RvcEFwcCAmJiBhcGlMZXZlbCA+PSAxNSkge1xuICAgIGNtZC5wdXNoKCctUycpO1xuICB9XG4gIGlmIChhY3Rpb24pIHtcbiAgICBjbWQucHVzaCgnLWEnLCBhY3Rpb24pO1xuICB9XG4gIGlmIChjYXRlZ29yeSkge1xuICAgIGNtZC5wdXNoKCctYycsIGNhdGVnb3J5KTtcbiAgfVxuICBpZiAoZmxhZ3MpIHtcbiAgICBjbWQucHVzaCgnLWYnLCBmbGFncyk7XG4gIH1cbiAgaWYgKHN0YXJ0QXBwT3B0aW9ucy5vcHRpb25hbEludGVudEFyZ3VtZW50cykge1xuICAgIC8vIGV4cGVjdCBvcHRpb25hbEludGVudEFyZ3VtZW50cyB0byBiZSBhIHNpbmdsZSBzdHJpbmcgb2YgdGhlIGZvcm06XG4gICAgLy8gICAgIFwiLWZsYWcga2V5XCJcbiAgICAvLyAgICAgXCItZmxhZyBrZXkgdmFsdWVcIlxuICAgIC8vIG9yIGEgY29tYmluYXRpb24gb2YgdGhlc2UgKGUuZy4sIFwiLWZsYWcxIGtleTEgLWZsYWcyIGtleTIgdmFsdWUyXCIpXG5cbiAgICAvLyB0YWtlIGEgc3RyaW5nIGFuZCBwYXJzZSBvdXQgdGhlIHBhcnQgYmVmb3JlIGFueSBzcGFjZXMsIGFuZCBhbnl0aGluZyBhZnRlclxuICAgIC8vIHRoZSBmaXJzdCBzcGFjZVxuICAgIGxldCBwYXJzZUtleVZhbHVlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgc3RyID0gc3RyLnRyaW0oKTtcbiAgICAgIGxldCBzcGFjZSA9IHN0ci5pbmRleE9mKCcgJyk7XG4gICAgICBpZiAoc3BhY2UgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBzdHIubGVuZ3RoID8gW3N0cl0gOiBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbc3RyLnN1YnN0cmluZygwLCBzcGFjZSkudHJpbSgpLCBzdHIuc3Vic3RyaW5nKHNwYWNlICsgMSkudHJpbSgpXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gY3ljbGUgdGhyb3VnaCB0aGUgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgYW5kIHB1bGwgb3V0IHRoZSBhcmd1bWVudHNcbiAgICAvLyBhZGQgYSBzcGFjZSBpbml0aWFsbHkgc28gZmxhZ3MgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSBhcmd1bWVudHMgdGhhdFxuICAgIC8vIGhhdmUgaW50ZXJuYWwgaHlwaGVuc1xuICAgIGxldCBvcHRpb25hbEludGVudEFyZ3VtZW50cyA9IGAgJHtzdGFydEFwcE9wdGlvbnMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHN9YDtcbiAgICBsZXQgcmUgPSAvICgtW15cXHNdKykgKC4rKS87XG4gICAgd2hpbGUgKHRydWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAgIGxldCBhcmdzID0gcmUuZXhlYyhvcHRpb25hbEludGVudEFyZ3VtZW50cyk7XG4gICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgaWYgKG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIG5vIG1vcmUgZmxhZ3MsIHNvIHRoZSByZW1haW5kZXIgY2FuIGJlIHRyZWF0ZWQgYXMgJ2tleScgb3IgJ2tleSB2YWx1ZSdcbiAgICAgICAgICBjbWQucHVzaC5hcHBseShjbWQsIHBhcnNlS2V5VmFsdWUob3B0aW9uYWxJbnRlbnRBcmd1bWVudHMpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSBhcmUgZG9uZVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gdGFrZSB0aGUgZmxhZyBhbmQgc2VlIGlmIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZ1xuICAgICAgLy8gaWYgaXQgaXMgbm90LCB0aGVuIGl0IG1lYW5zIHdlIGhhdmUgYmVlbiB0aHJvdWdoIGFscmVhZHksIGFuZFxuICAgICAgLy8gd2hhdCBpcyBiZWZvcmUgdGhlIGZsYWcgaXMgdGhlIGFyZ3VtZW50IGZvciB0aGUgcHJldmlvdXMgZmxhZ1xuICAgICAgbGV0IGZsYWcgPSBhcmdzWzFdO1xuICAgICAgbGV0IGZsYWdQb3MgPSBvcHRpb25hbEludGVudEFyZ3VtZW50cy5pbmRleE9mKGZsYWcpO1xuICAgICAgaWYgKGZsYWdQb3MgIT09IDApIHtcbiAgICAgICAgbGV0IHByZXZBcmdzID0gb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMuc3Vic3RyaW5nKDAsIGZsYWdQb3MpO1xuICAgICAgICBjbWQucHVzaC5hcHBseShjbWQsIHBhcnNlS2V5VmFsdWUocHJldkFyZ3MpKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHRoZSBmbGFnLCBhcyB0aGVyZSBhcmUgbm8gbW9yZSBlYXJsaWVyIGFyZ3VtZW50c1xuICAgICAgY21kLnB1c2goZmxhZyk7XG5cbiAgICAgIC8vIG1ha2Ugb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgaG9sZCB0aGUgcmVtYWluZGVyXG4gICAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyA9IGFyZ3NbMl07XG4gICAgfVxuICB9XG4gIHJldHVybiBjbWQ7XG59XG5cbmNvbnN0IGdldFNka1Rvb2xzVmVyc2lvbiA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRTZGtUb29sc1ZlcnNpb24gKCkge1xuICBjb25zdCBhbmRyb2lkSG9tZSA9IHByb2Nlc3MuZW52LkFORFJPSURfSE9NRTtcbiAgaWYgKCFhbmRyb2lkSG9tZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQU5EUk9JRF9IT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGV4cGVjdGVkIHRvIGJlIHNldCcpO1xuICB9XG4gIGNvbnN0IHByb3BlcnRpZXNQYXRoID0gcGF0aC5yZXNvbHZlKGFuZHJvaWRIb21lLCAndG9vbHMnLCAnc291cmNlLnByb3BlcnRpZXMnKTtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMocHJvcGVydGllc1BhdGgpKSB7XG4gICAgbG9nLndhcm4oYENhbm5vdCBmaW5kICR7cHJvcGVydGllc1BhdGh9IGZpbGUgdG8gcmVhZCBTREsgdmVyc2lvbiBmcm9tYCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHByb3BlcnRpZXNDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocHJvcGVydGllc1BhdGgsICd1dGY4Jyk7XG4gIGNvbnN0IHZlcnNpb25NYXRjaGVyID0gbmV3IFJlZ0V4cCgvUGtnXFwuUmV2aXNpb249KFxcZCspXFwuPyhcXGQrKT9cXC4/KFxcZCspPy8pO1xuICBjb25zdCBtYXRjaCA9IHZlcnNpb25NYXRjaGVyLmV4ZWMocHJvcGVydGllc0NvbnRlbnQpO1xuICBpZiAobWF0Y2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFqb3I6IHBhcnNlSW50KG1hdGNoWzFdLCAxMCksXG4gICAgICBtaW5vcjogbWF0Y2hbMl0gPyBwYXJzZUludChtYXRjaFsyXSwgMTApIDogMCxcbiAgICAgIGJ1aWxkOiBtYXRjaFszXSA/IHBhcnNlSW50KG1hdGNoWzNdLCAxMCkgOiAwXG4gICAgfTtcbiAgfVxuICBsb2cud2FybihgQ2Fubm90IHBhcnNlIFwiUGtnLlJldmlzaW9uXCIgdmFsdWUgZnJvbSAke3Byb3BlcnRpZXNQYXRofWApO1xufSk7XG5cbi8qKlxuICogUmV0cmlldmVzIGZ1bGwgcGF0aHMgdG8gYWxsICdidWlsZC10b29scycgc3ViZm9sZGVycyB1bmRlciB0aGUgcGFydGljdWxhclxuICogU0RLIHJvb3QgZm9sZGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNka1Jvb3QgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBBbmRyb2lkIFNESyByb290IGZvbGRlclxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBmdWxsIHBhdGhzIHRvIHRoZSByZXN1bHRpbmcgZm9sZGVycyBzb3J0ZWQgYnlcbiAqIG1vZGlmaWNhdGlvbiBkYXRlICh0aGUgbmV3ZXN0IGNvbWVzIGZpcnN0KSBvciBhbiBlbXB0eSBsaXN0IGlmIG5vIG1hY3RoZXMgd2VyZSBmb3VuZFxuICovXG5jb25zdCBnZXRCdWlsZFRvb2xzRGlycyA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRCdWlsZFRvb2xzRGlycyAoc2RrUm9vdCkge1xuICBsZXQgYnVpbGRUb29sc0RpcnMgPSBhd2FpdCBmcy5nbG9iKCcqLycsIHtcbiAgICBjd2Q6IHBhdGgucmVzb2x2ZShzZGtSb290LCAnYnVpbGQtdG9vbHMnKSxcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgfSk7XG4gIHRyeSB7XG4gICAgYnVpbGRUb29sc0RpcnMgPSBidWlsZFRvb2xzRGlyc1xuICAgICAgLm1hcCgoZGlyKSA9PiBbcGF0aC5iYXNlbmFtZShkaXIpLCBkaXJdKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHNlbXZlci5yY29tcGFyZShhWzBdLCBiWzBdKSlcbiAgICAgIC5tYXAoKHBhaXIpID0+IHBhaXJbMV0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgQ2Fubm90IHNvcnQgYnVpbGQtdG9vbHMgZm9sZGVycyAke0pTT04uc3RyaW5naWZ5KGJ1aWxkVG9vbHNEaXJzLm1hcCgoZGlyKSA9PiBwYXRoLmJhc2VuYW1lKGRpcikpKX0gYCArXG4gICAgICBgYnkgc2VtYW50aWMgdmVyc2lvbiBuYW1lcy5gKTtcbiAgICBsb2cud2FybihgRmFsbGluZyBiYWNrIHRvIHNvcnRpbmcgYnkgbW9kaWZpY2F0aW9uIGRhdGUuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGNvbnN0IHBhaXJzID0gYXdhaXQgQi5tYXAoYnVpbGRUb29sc0RpcnMsIGFzeW5jIChkaXIpID0+IFsoYXdhaXQgZnMuc3RhdChkaXIpKS5tdGltZS52YWx1ZU9mKCksIGRpcl0pO1xuICAgIGJ1aWxkVG9vbHNEaXJzID0gcGFpcnNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhWzBdIDwgYlswXSlcbiAgICAgIC5tYXAoKHBhaXIpID0+IHBhaXJbMV0pO1xuICB9XG4gIGxvZy5pbmZvKGBGb3VuZCAke2J1aWxkVG9vbHNEaXJzLmxlbmd0aH0gJ2J1aWxkLXRvb2xzJyBmb2xkZXJzIHVuZGVyICcke3Nka1Jvb3R9JyAobmV3ZXN0IGZpcnN0KTpgKTtcbiAgZm9yIChsZXQgZGlyIG9mIGJ1aWxkVG9vbHNEaXJzKSB7XG4gICAgbG9nLmluZm8oYCAgICAke2Rpcn1gKTtcbiAgfVxuICByZXR1cm4gYnVpbGRUb29sc0RpcnM7XG59KTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbiBuYW1lcyBlbmNvZGVkIGluIGBkdW1wc3lzIHBhY2thZ2VgIGNvbW1hbmQgb3V0cHV0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkdW1wc3lzT3V0cHV0IC0gVGhlIGFjdHVhbCBjb21tYW5kIG91dHB1dC5cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZ3JvdXBOYW1lcyAtIFRoZSBsaXN0IG9mIGdyb3VwIG5hbWVzIHRvIGxpc3QgcGVybWlzc2lvbnMgZm9yLlxuICogQHBhcmFtIHs/Ym9vbGVhbn0gZ3JhbnRlZFN0YXRlIC0gVGhlIGV4cGVjdGVkIHN0YXRlIG9mIGBncmFudGVkYCBhdHRyaWJ1dGUgdG8gZmlsdGVyIHdpdGguXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBmaWx0ZXJpbmcgaXMgZG9uZSBpZiB0aGUgcGFyYW1ldGVyIGlzIG5vdCBzZXQuXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gVGhlIGxpc3Qgb2YgbWF0Y2hlZCBwZXJtaXNzaW9uIG5hbWVzIG9yIGFuIGVtcHR5IGxpc3QgaWYgbm8gbWF0Y2hlcyB3ZXJlIGZvdW5kLlxuICovXG5jb25zdCBleHRyYWN0TWF0Y2hpbmdQZXJtaXNzaW9ucyA9IGZ1bmN0aW9uIChkdW1wc3lzT3V0cHV0LCBncm91cE5hbWVzLCBncmFudGVkU3RhdGUgPSBudWxsKSB7XG4gIGNvbnN0IGdyb3VwUGF0dGVybkJ5TmFtZSA9IChncm91cE5hbWUpID0+IG5ldyBSZWdFeHAoYF4oXFxcXHMqJHtfLmVzY2FwZVJlZ0V4cChncm91cE5hbWUpfSBwZXJtaXNzaW9uczpbXFxcXHNcXFxcU10rKWAsICdtJyk7XG4gIGNvbnN0IGluZGVudFBhdHRlcm4gPSAvXFxTfCQvO1xuICBjb25zdCBwZXJtaXNzaW9uTmFtZVBhdHRlcm4gPSAvYW5kcm9pZFxcLlxcdypcXC4/cGVybWlzc2lvblxcLlxcdysvO1xuICBjb25zdCBncmFudGVkU3RhdGVQYXR0ZXJuID0gL1xcYmdyYW50ZWQ9KFxcdyspLztcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAoY29uc3QgZ3JvdXBOYW1lIG9mIGdyb3VwTmFtZXMpIHtcbiAgICBjb25zdCBncm91cE1hdGNoID0gZ3JvdXBQYXR0ZXJuQnlOYW1lKGdyb3VwTmFtZSkuZXhlYyhkdW1wc3lzT3V0cHV0KTtcbiAgICBpZiAoIWdyb3VwTWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbmVzID0gZ3JvdXBNYXRjaFsxXS5zcGxpdCgnXFxuJyk7XG4gICAgaWYgKGxpbmVzLmxlbmd0aCA8IDIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHRpdGxlSW5kZW50ID0gbGluZXNbMF0uc2VhcmNoKGluZGVudFBhdHRlcm4pO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcy5zbGljZSgxKSkge1xuICAgICAgY29uc3QgY3VycmVudEluZGVudCA9IGxpbmUuc2VhcmNoKGluZGVudFBhdHRlcm4pO1xuICAgICAgaWYgKGN1cnJlbnRJbmRlbnQgPD0gdGl0bGVJbmRlbnQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBlcm1pc3Npb25OYW1lTWF0Y2ggPSBwZXJtaXNzaW9uTmFtZVBhdHRlcm4uZXhlYyhsaW5lKTtcbiAgICAgIGlmICghcGVybWlzc2lvbk5hbWVNYXRjaCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgIHBlcm1pc3Npb246IHBlcm1pc3Npb25OYW1lTWF0Y2hbMF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZ3JhbnRlZFN0YXRlTWF0Y2ggPSBncmFudGVkU3RhdGVQYXR0ZXJuLmV4ZWMobGluZSk7XG4gICAgICBpZiAoZ3JhbnRlZFN0YXRlTWF0Y2gpIHtcbiAgICAgICAgaXRlbS5ncmFudGVkID0gZ3JhbnRlZFN0YXRlTWF0Y2hbMV0gPT09ICd0cnVlJztcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpbHRlcmVkUmVzdWx0ID0gcmVzdWx0XG4gICAgLmZpbHRlcigoaXRlbSkgPT4gIV8uaXNCb29sZWFuKGdyYW50ZWRTdGF0ZSkgfHwgaXRlbS5ncmFudGVkID09PSBncmFudGVkU3RhdGUpXG4gICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5wZXJtaXNzaW9uKTtcbiAgbG9nLmRlYnVnKGBSZXRyaWV2ZWQgJHt1dGlsLnBsdXJhbGl6ZSgncGVybWlzc2lvbicsIGZpbHRlcmVkUmVzdWx0Lmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgIGBmcm9tICR7Z3JvdXBOYW1lc30gJHt1dGlsLnBsdXJhbGl6ZSgnZ3JvdXAnLCBncm91cE5hbWVzLmxlbmd0aCwgZmFsc2UpfWApO1xuICByZXR1cm4gZmlsdGVyZWRSZXN1bHQ7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwbGFjZSBbdHJ1ZV0gLSBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gYmUgdXBncmFkZWQvcmVpbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGRldmljZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFydGlhbEluc3RhbGwgW2ZhbHNlXSAtIEluc3RhbGwgYXBrcyBwYXJ0aWFsbHkuIEl0IGlzIHVzZWQgZm9yICdpbnN0YWxsLW11bHRpcGxlJy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9hbmRyb2lkLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xMTEwNjQvd2hhdC1pcy1hLXBhcnRpYWwtYXBwbGljYXRpb24taW5zdGFsbC12aWEtYWRiXG4gKi9cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGdpdmVuIG9wdGlvbnMgaW50byB0aGUgbGlzdCBvZiBgYWRiIGluc3RhbGwuaW5zdGFsbC1tdWx0aXBsZWAgY29tbWFuZCBhcmd1bWVudHNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYXBpTGV2ZWwgLSBUaGUgY3VycmVudCBBUEkgbGV2ZWxcbiAqIEBwYXJhbSB7P0luc3RhbGxPcHRpb25zfSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgbWFwcGluZyB0byB0cmFuc2Zvcm1cbiAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmc+fSBUaGUgYXJyYXkgb2YgYXJndW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSW5zdGFsbEFyZ3MgKGFwaUxldmVsLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKG9wdGlvbnMucmVwbGFjZSkgfHwgb3B0aW9ucy5yZXBsYWNlKSB7XG4gICAgcmVzdWx0LnB1c2goJy1yJyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMuYWxsb3dUZXN0UGFja2FnZXMpIHtcbiAgICByZXN1bHQucHVzaCgnLXQnKTtcbiAgfVxuICBpZiAob3B0aW9ucy51c2VTZGNhcmQpIHtcbiAgICByZXN1bHQucHVzaCgnLXMnKTtcbiAgfVxuICBpZiAob3B0aW9ucy5ncmFudFBlcm1pc3Npb25zKSB7XG4gICAgaWYgKGFwaUxldmVsIDwgMjMpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgU2tpcHBpbmcgcGVybWlzc2lvbnMgZ3JhbnQgb3B0aW9uLCBzaW5jZSBgICtcbiAgICAgICAgICAgICAgICBgdGhlIGN1cnJlbnQgQVBJIGxldmVsICR7YXBpTGV2ZWx9IGRvZXMgbm90IHN1cHBvcnQgYXBwbGljYXRpb25zIGAgK1xuICAgICAgICAgICAgICAgIGBwZXJtaXNzaW9ucyBjdXN0b21pemF0aW9uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKCctZycpO1xuICAgIH1cbiAgfVxuICAvLyBGb3IgbXVsdGlwbGUtaW5zdGFsbFxuICBpZiAob3B0aW9ucy5wYXJ0aWFsSW5zdGFsbCkge1xuICAgIHJlc3VsdC5wdXNoKCctcCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNYW5pZmVzdEluZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwa2cgLSBUaGUgYXBwbGljYXRpb24gaWRlbnRpZmllclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdGl2aXR5IC0gVGhlIG5hbWUgb2YgdGhlIG1haW4gcGFja2FnZSBhY3Rpdml0eVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB2ZXJzaW9uQ29kZSAtIFRoZSB2ZXJzaW9uIGNvZGUgbnVtYmVyIChtaWdodCBiZSBgTmFOYClcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmVyc2lvbk5hbWUgLSBUaGUgdmVyc2lvbiBuYW1lIChtaWdodCBiZSBgbnVsbGApXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIHBhcnNpbmcgb2YgdGhlIG1hbmlmZXN0IG9iamVjdCBpbiBvcmRlclxuICogdG8gZXh0cmFjdCBzb21lIHZpdGFsIHZhbHVlcyBmcm9tIGl0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG1hbmlmZXN0IFRoZSBtYW5pZmVzdCBjb250ZW50IGZvcm1hdHRlZCBhcyBKU09OXG4gKiBTZWUgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYWRia2l0LWFwa3JlYWRlciBmb3IgZGV0YWlsZWQgZm9ybWF0IGRlc2NyaXB0aW9uXG4gKiBAcmV0dXJucyB7TWFuaWZlc3RJbmZvfVxuICovXG5mdW5jdGlvbiBwYXJzZU1hbmlmZXN0IChtYW5pZmVzdCkge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgcGtnOiBtYW5pZmVzdC5wYWNrYWdlLFxuICAgIHZlcnNpb25Db2RlOiBwYXJzZUludChtYW5pZmVzdC52ZXJzaW9uQ29kZSwgMTApLFxuICAgIHZlcnNpb25OYW1lOiBtYW5pZmVzdC52ZXJzaW9uTmFtZSB8fCBudWxsLFxuICB9O1xuICBpZiAoIW1hbmlmZXN0LmFwcGxpY2F0aW9uKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIExvb2sgZm9yIGVuYWJsZWQgYWN0aXZpdHkgb3IgYWN0aXZpdHktYWxpYXMgd2l0aFxuICAvLyBhY3Rpb24gPT0gYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4gYW5kXG4gIC8vIGNhdGVnb3J5ID09IGFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSXG4gIGZvciAoY29uc3QgYWN0aXZpdHkgb2YgW1xuICAgIC4uLm1hbmlmZXN0LmFwcGxpY2F0aW9uLmFjdGl2aXRpZXMsXG4gICAgLi4ubWFuaWZlc3QuYXBwbGljYXRpb24uYWN0aXZpdHlBbGlhc2VzLFxuICBdKSB7XG4gICAgaWYgKGFjdGl2aXR5LmVuYWJsZWQgPT09IGZhbHNlIHx8IF8uaXNFbXB0eShhY3Rpdml0eS5pbnRlbnRGaWx0ZXJzKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB7YWN0aW9ucywgY2F0ZWdvcmllc30gb2YgYWN0aXZpdHkuaW50ZW50RmlsdGVycykge1xuICAgICAgaWYgKF8uaXNFbXB0eShhY3Rpb25zKSB8fCBfLmlzRW1wdHkoY2F0ZWdvcmllcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzTWFpbkFjdGlvbiA9IGFjdGlvbnMuc29tZSgoe25hbWV9KSA9PiBuYW1lID09PSBNQUlOX0FDVElPTik7XG4gICAgICBjb25zdCBpc0xhdW5jaGVyQ2F0ZWdvcnkgPSBjYXRlZ29yaWVzLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gTEFVTkNIRVJfQ0FURUdPUlkpO1xuICAgICAgaWYgKGlzTWFpbkFjdGlvbiAmJiBpc0xhdW5jaGVyQ2F0ZWdvcnkpIHtcbiAgICAgICAgcmVzdWx0LmFjdGl2aXR5ID0gYWN0aXZpdHkubmFtZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYXBrIHN0cmluZ3MgZnJvbSBhYXB0IHRvb2wgb3V0cHV0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJhd091dHB1dCBUaGUgYWN0dWFsIHRvb2wgb3V0cHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnTWFya2VyIFRoZSBjb25maWcgbWFya2VyLiBVc3VhbGx5XG4gKiBhIGxhbmd1YWdlIGFiYnJldmlhdGlvbiBvciBgKGRlZmF1bHQpYFxuICogQHJldHVybnMge09iamVjdH0gU3RyaW5ncyBpZHMgdG8gdmFsdWVzIG1hcHBpbmcuIFBsdXJhbFxuICogdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyBhcnJheXMuIElmIG5vIGNvbmZpZyBmb3VuZCBmb3IgdGhlXG4gKiBnaXZlbiBtYXJrZXIgdGhlbiBhbiBlbXB0eSBtYXBwaW5nIGlzIHJldHVybmVkLlxuICovXG5mdW5jdGlvbiBwYXJzZUFhcHRTdHJpbmdzIChyYXdPdXRwdXQsIGNvbmZpZ01hcmtlcikge1xuICBjb25zdCBub3JtYWxpemVTdHJpbmdNYXRjaCA9IGZ1bmN0aW9uIChzKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZSgvXCIkLywgJycpLnJlcGxhY2UoL15cIi8sICcnKS5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJyk7XG4gIH07XG5cbiAgY29uc3QgYXBrU3RyaW5ncyA9IHt9O1xuICBsZXQgaXNJbkNvbmZpZyA9IGZhbHNlO1xuICBsZXQgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICBsZXQgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gIC8vIFRoZSBwYXR0ZXJuIG1hdGNoZXMgYW55IHF1b3RlZCBjb250ZW50IGluY2x1ZGluZyBlc2NhcGVkIHF1b3Rlc1xuICBjb25zdCBxdW90ZWRTdHJpbmdQYXR0ZXJuID0gL1wiW15cIlxcXFxdKig/OlxcXFwuW15cIlxcXFxdKikqXCIvO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgcmF3T3V0cHV0LnNwbGl0KG9zLkVPTCkpIHtcbiAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuICAgIGlmIChfLmlzRW1wdHkodHJpbW1lZExpbmUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoWydjb25maWcnLCAndHlwZScsICdzcGVjJywgJ1BhY2thZ2UnXS5zb21lKCh4KSA9PiB0cmltbWVkTGluZS5zdGFydHNXaXRoKHgpKSkge1xuICAgICAgaXNJbkNvbmZpZyA9IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoYGNvbmZpZyAke2NvbmZpZ01hcmtlcn06YCk7XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghaXNJbkNvbmZpZykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJ3Jlc291cmNlJykpIHtcbiAgICAgIGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuXG4gICAgICBpZiAodHJpbW1lZExpbmUuaW5jbHVkZXMoJzpzdHJpbmcvJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvOnN0cmluZ1xcLyhcXFMrKTovLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCc6cGx1cmFscy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC86cGx1cmFsc1xcLyhcXFMrKTovLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICAgIGlzSW5QbHVyYWxHcm91cCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50UmVzb3VyY2VJZCAmJiB0cmltbWVkTGluZS5zdGFydHNXaXRoKCcoc3RyaW5nJykpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gcXVvdGVkU3RyaW5nUGF0dGVybi5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSA9IG5vcm1hbGl6ZVN0cmluZ01hdGNoKG1hdGNoWzBdKTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50UmVzb3VyY2VJZCAmJiBpc0luUGx1cmFsR3JvdXAgJiYgdHJpbW1lZExpbmUuaW5jbHVkZXMoJzogKHN0cmluZycpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHF1b3RlZFN0cmluZ1BhdHRlcm4uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gPSBbXG4gICAgICAgICAgLi4uKGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdIHx8IFtdKSxcbiAgICAgICAgICBub3JtYWxpemVTdHJpbmdNYXRjaChtYXRjaFswXSksXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFwa1N0cmluZ3M7XG59XG5cbi8qKlxuICogUGFyc2VzIGFwayBzdHJpbmdzIGZyb20gYWFwdDIgdG9vbCBvdXRwdXRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3T3V0cHV0IFRoZSBhY3R1YWwgdG9vbCBvdXRwdXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWdNYXJrZXIgVGhlIGNvbmZpZyBtYXJrZXIuIFVzdWFsbHlcbiAqIGEgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uIG9yIGFuIGVtcHR5IHN0cmluZyBmb3IgdGhlIGRlZmF1bHQgb25lXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBTdHJpbmdzIGlkcyB0byB2YWx1ZXMgbWFwcGluZy4gUGx1cmFsXG4gKiB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIGFycmF5cy4gSWYgbm8gY29uZmlnIGZvdW5kIGZvciB0aGVcbiAqIGdpdmVuIG1hcmtlciB0aGVuIGFuIGVtcHR5IG1hcHBpbmcgaXMgcmV0dXJuZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQWFwdDJTdHJpbmdzIChyYXdPdXRwdXQsIGNvbmZpZ01hcmtlcikge1xuICBjb25zdCBhbGxMaW5lcyA9IHJhd091dHB1dC5zcGxpdChvcy5FT0wpO1xuICBmdW5jdGlvbiBleHRyYWN0Q29udGVudCAoc3RhcnRJZHgpIHtcbiAgICBsZXQgaWR4ID0gc3RhcnRJZHg7XG4gICAgY29uc3Qgc3RhcnRDaGFyUG9zID0gYWxsTGluZXNbc3RhcnRJZHhdLmluZGV4T2YoJ1wiJyk7XG4gICAgaWYgKHN0YXJ0Q2hhclBvcyA8IDApIHtcbiAgICAgIHJldHVybiBbbnVsbCwgaWR4XTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgIHdoaWxlIChpZHggPCBhbGxMaW5lcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmF0aW9uQ2hhck1hdGNoID0gL1wiJC8uZXhlYyhhbGxMaW5lc1tpZHhdKTtcbiAgICAgIGlmICh0ZXJtaW5hdGlvbkNoYXJNYXRjaCkge1xuICAgICAgICBjb25zdCB0ZXJtaW5hdGlvbkNoYXJQb3MgPSB0ZXJtaW5hdGlvbkNoYXJNYXRjaC5pbmRleDtcbiAgICAgICAgaWYgKHN0YXJ0SWR4ID09PSBpZHgpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgYWxsTGluZXNbaWR4XS5zdWJzdHJpbmcoc3RhcnRDaGFyUG9zICsgMSwgdGVybWluYXRpb25DaGFyUG9zKSxcbiAgICAgICAgICAgIGlkeFxuICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgJHtyZXN1bHR9XFxcXG4ke18udHJpbVN0YXJ0KGFsbExpbmVzW2lkeF0uc3Vic3RyaW5nKDAsIHRlcm1pbmF0aW9uQ2hhclBvcykpfWAsXG4gICAgICAgICAgaWR4LFxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgaWYgKGlkeCA+IHN0YXJ0SWR4KSB7XG4gICAgICAgIHJlc3VsdCArPSBgXFxcXG4ke18udHJpbVN0YXJ0KGFsbExpbmVzW2lkeF0pfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gYWxsTGluZXNbaWR4XS5zdWJzdHJpbmcoc3RhcnRDaGFyUG9zICsgMSk7XG4gICAgICB9XG4gICAgICArK2lkeDtcbiAgICB9XG4gICAgcmV0dXJuIFtyZXN1bHQsIGlkeF07XG4gIH1cblxuICBjb25zdCBhcGtTdHJpbmdzID0ge307XG4gIGxldCBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gIGxldCBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgbGV0IGlzSW5DdXJyZW50Q29uZmlnID0gZmFsc2U7XG4gIGxldCBsaW5lSW5kZXggPSAwO1xuICB3aGlsZSAobGluZUluZGV4IDwgYWxsTGluZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgdHJpbW1lZExpbmUgPSBhbGxMaW5lc1tsaW5lSW5kZXhdLnRyaW0oKTtcbiAgICBpZiAoXy5pc0VtcHR5KHRyaW1tZWRMaW5lKSkge1xuICAgICAgKytsaW5lSW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoWyd0eXBlJywgJ1BhY2thZ2UnXS5zb21lKCh4KSA9PiB0cmltbWVkTGluZS5zdGFydHNXaXRoKHgpKSkge1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gICAgICBpc0luQ3VycmVudENvbmZpZyA9IGZhbHNlO1xuICAgICAgKytsaW5lSW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aCgncmVzb3VyY2UnKSkge1xuICAgICAgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICBpc0luQ3VycmVudENvbmZpZyA9IGZhbHNlO1xuXG4gICAgICBpZiAodHJpbW1lZExpbmUuaW5jbHVkZXMoJ3N0cmluZy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC9zdHJpbmdcXC8oXFxTKykvLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCdwbHVyYWxzLycpKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL3BsdXJhbHNcXC8oXFxTKykvLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICAgIGlzSW5QbHVyYWxHcm91cCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICsrbGluZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRSZXNvdXJjZUlkKSB7XG4gICAgICBpZiAoaXNJblBsdXJhbEdyb3VwKSB7XG4gICAgICAgIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKCcoJykpIHtcbiAgICAgICAgICBpc0luQ3VycmVudENvbmZpZyA9IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoYCgke2NvbmZpZ01hcmtlcn0pYCk7XG4gICAgICAgICAgKytsaW5lSW5kZXg7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSW5DdXJyZW50Q29uZmlnKSB7XG4gICAgICAgICAgY29uc3QgW2NvbnRlbnQsIGlkeF0gPSBleHRyYWN0Q29udGVudChsaW5lSW5kZXgpO1xuICAgICAgICAgIGxpbmVJbmRleCA9IGlkeDtcbiAgICAgICAgICBpZiAoXy5pc1N0cmluZyhjb250ZW50KSkge1xuICAgICAgICAgICAgYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gPSBbXG4gICAgICAgICAgICAgIC4uLihhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSB8fCBbXSksXG4gICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKGAoJHtjb25maWdNYXJrZXJ9KWApKSB7XG4gICAgICAgIGNvbnN0IFtjb250ZW50LCBpZHhdID0gZXh0cmFjdENvbnRlbnQobGluZUluZGV4KTtcbiAgICAgICAgbGluZUluZGV4ID0gaWR4O1xuICAgICAgICBpZiAoXy5pc1N0cmluZyhjb250ZW50KSkge1xuICAgICAgICAgIGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdID0gY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgICsrbGluZUluZGV4O1xuICB9XG4gIHJldHVybiBhcGtTdHJpbmdzO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGNvbmZpZyBtYXJrZXIsIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIHBhcnNlLi4gbWV0aG9kc1xuICogdG8gbWFrZSBpdCBjb21wYXRpYmxlIHdpdGggcmVzb3VyY2UgZm9ybWF0cyBnZW5lcmF0ZWQgYnkgYWFwdCgyKSB0b29sXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZmlnc0dldHRlciBUaGUgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IGlzIGEgbGlzdFxuICogb2YgYXBrIGNvbmZpZ3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXNpcmVkTWFya2VyIFRoZSBkZXNpcmVkIGNvbmZpZyBtYXJrZXIgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZWZhdWx0TWFya2VyIFRoZSBkZWZhdWx0IGNvbmZpZyBtYXJrZXIgdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBjb25maWcgbWFya2VyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZvcm1hdENvbmZpZ01hcmtlciAoY29uZmlnc0dldHRlciwgZGVzaXJlZE1hcmtlciwgZGVmYXVsdE1hcmtlcikge1xuICBsZXQgY29uZmlnTWFya2VyID0gZGVzaXJlZE1hcmtlciB8fCBkZWZhdWx0TWFya2VyO1xuICBpZiAoY29uZmlnTWFya2VyLmluY2x1ZGVzKCctJykgJiYgIWNvbmZpZ01hcmtlci5pbmNsdWRlcygnLXInKSkge1xuICAgIGNvbmZpZ01hcmtlciA9IGNvbmZpZ01hcmtlci5yZXBsYWNlKCctJywgJy1yJyk7XG4gIH1cbiAgY29uc3QgY29uZmlncyA9IGF3YWl0IGNvbmZpZ3NHZXR0ZXIoKTtcbiAgbG9nLmRlYnVnKGBSZXNvdXJjZSBjb25maWd1cmF0aW9uczogJHtKU09OLnN0cmluZ2lmeShjb25maWdzKX1gKTtcbiAgLy8gQXNzdW1lIHRoZSAnZW4nIGNvbmZpZ3VyYXRpb24gaXMgdGhlIGRlZmF1bHQgb25lXG4gIGlmIChjb25maWdNYXJrZXIudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdlbicpXG4gICAgJiYgIWNvbmZpZ3Muc29tZSgoeCkgPT4geC50cmltKCkgPT09IGNvbmZpZ01hcmtlcikpIHtcbiAgICBsb2cuZGVidWcoYFJlc291cmNlIGNvbmZpZ3VyYXRpb24gbmFtZSAnJHtjb25maWdNYXJrZXJ9JyBpcyB1bmtub3duLiBgICtcbiAgICAgIGBSZXBsYWNpbmcgaXQgd2l0aCAnJHtkZWZhdWx0TWFya2VyfSdgKTtcbiAgICBjb25maWdNYXJrZXIgPSBkZWZhdWx0TWFya2VyO1xuICB9IGVsc2Uge1xuICAgIGxvZy5kZWJ1ZyhgU2VsZWN0ZWQgY29uZmlndXJhdGlvbjogJyR7Y29uZmlnTWFya2VyfSdgKTtcbiAgfVxuICByZXR1cm4gY29uZmlnTWFya2VyO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgb3V0cHV0IGluIEpTT04gZm9ybWF0IHJldHJpZXZlZCBmcm9tXG4gKiB0aGUgY29ycmVzcG9uZGluZyBBcHBpdW0gU2V0dGluZ3MgYnJvYWRjYXN0IGNhbGxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG91dHB1dCBUaGUgYWN0dWFsIGNvbW1hbmQgb3V0cHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gZW50aXR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgZW50aXR5IHdoaWNoIGlzXG4gKiBnb2luZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBwYXJzZWQgSlNPTiBvYmplY3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgb3V0cHV0IGNhbm5vdCBiZSBwYXJzZWRcbiAqIGFzIGEgdmFsaWQgSlNPTlxuICovXG5mdW5jdGlvbiBwYXJzZUpzb25EYXRhIChvdXRwdXQsIGVudGl0eU5hbWUpIHtcbiAgaWYgKCEvXFxicmVzdWx0PS0xXFxiLy50ZXN0KG91dHB1dCkgfHwgIS9cXGJkYXRhPVwiLy50ZXN0KG91dHB1dCkpIHtcbiAgICBsb2cuZGVidWcob3V0cHV0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSAke2VudGl0eU5hbWV9IGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICAnQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gL1xcYmRhdGE9KFwiLispLy5leGVjKG91dHB1dCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICBsb2cuZGVidWcob3V0cHV0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSAke2VudGl0eU5hbWV9IGZyb20gdGhlIGNvbW1hbmQgb3V0cHV0LiBgICtcbiAgICAgICdDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gIH1cbiAgY29uc3QganNvblN0ciA9IF8udHJpbShtYXRjaFsxXSkucmVwbGFjZSgvKF5cIil8KFwiJCkvZywgJycpO1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25TdHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGpzb25TdHIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlICR7ZW50aXR5TmFtZX0gZnJvbSB0aGUgcmVzdWx0aW5nIGRhdGEgc3RyaW5nLiBgICtcbiAgICAgICdDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSBnaXZlbiBsYW5ndWFnZSBhbmQgY291bnRyeSBhYmJyZXZpYXRpb25zXG4gKiB0byBBVkQgYXJndW1lbnRzIGFycmF5XG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBsYW5ndWFnZSBMYW5ndWFnZSBuYW1lLCBmb3IgZXhhbXBsZSAnZnInXG4gKiBAcGFyYW0gez9zdHJpbmd9IGNvdW50cnkgQ291bnRyeSBuYW1lLCBmb3IgZXhhbXBsZSAnQ0EnXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gVGhlIGdlbmVyYXRlZCBhcmd1bWVudHMuIFRoZVxuICogcmVzdWx0aW5nIGFycmF5IG1pZ2h0IGJlIGVtcHR5IGlmIGJvdGggYXJndW1lbnRzIGFyZSBlbXB0eVxuICovXG5mdW5jdGlvbiB0b0F2ZExvY2FsZUFyZ3MgKGxhbmd1YWdlLCBjb3VudHJ5KSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBpZiAobGFuZ3VhZ2UgJiYgXy5pc1N0cmluZyhsYW5ndWFnZSkpIHtcbiAgICByZXN1bHQucHVzaCgnLXByb3AnLCBgcGVyc2lzdC5zeXMubGFuZ3VhZ2U9JHtsYW5ndWFnZS50b0xvd2VyQ2FzZSgpfWApO1xuICB9XG4gIGlmIChjb3VudHJ5ICYmIF8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICByZXN1bHQucHVzaCgnLXByb3AnLCBgcGVyc2lzdC5zeXMuY291bnRyeT0ke2NvdW50cnkudG9VcHBlckNhc2UoKX1gKTtcbiAgfVxuICBsZXQgbG9jYWxlO1xuICBpZiAoXy5pc1N0cmluZyhsYW5ndWFnZSkgJiYgXy5pc1N0cmluZyhjb3VudHJ5KSAmJiBsYW5ndWFnZSAmJiBjb3VudHJ5KSB7XG4gICAgbG9jYWxlID0gbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSArICctJyArIGNvdW50cnkudG9VcHBlckNhc2UoKTtcbiAgfSBlbHNlIGlmIChsYW5ndWFnZSAmJiBfLmlzU3RyaW5nKGxhbmd1YWdlKSkge1xuICAgIGxvY2FsZSA9IGxhbmd1YWdlLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAoY291bnRyeSAmJiBfLmlzU3RyaW5nKGNvdW50cnkpKSB7XG4gICAgbG9jYWxlID0gY291bnRyeTtcbiAgfVxuICBpZiAobG9jYWxlKSB7XG4gICAgcmVzdWx0LnB1c2goJy1wcm9wJywgYHBlcnNpc3Quc3lzLmxvY2FsZT0ke2xvY2FsZX1gKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBBbmRyb2lkIHByZWZlcmVuY2VzIHJvb3RcbiAqXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgZm9sZGVyIG9yIGBudWxsYCBpZiB0aGUgZm9sZGVyIGNhbm5vdCBiZSBmb3VuZFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBbmRyb2lkUHJlZnNSb290ICgpIHtcbiAgbGV0IGxvY2F0aW9uID0gcHJvY2Vzcy5lbnYuQU5EUk9JRF9FTVVMQVRPUl9IT01FO1xuICBpZiAoYXdhaXQgZGlyRXhpc3RzKGxvY2F0aW9uKSkge1xuICAgIHJldHVybiBsb2NhdGlvbjtcbiAgfVxuXG4gIGlmIChsb2NhdGlvbikge1xuICAgIGxvZy53YXJuKGBUaGUgdmFsdWUgb2YgdGhlIEFORFJPSURfRU1VTEFUT1JfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnJHtsb2NhdGlvbn0nIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnlgKTtcbiAgfVxuXG4gIGNvbnN0IGhvbWUgPSBwcm9jZXNzLmVudi5IT01FIHx8IHByb2Nlc3MuZW52LlVTRVJQUk9GSUxFO1xuICBpZiAoaG9tZSkge1xuICAgIGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGhvbWUsICcuYW5kcm9pZCcpO1xuICB9XG5cbiAgaWYgKCFhd2FpdCBkaXJFeGlzdHMobG9jYXRpb24pKSB7XG4gICAgbG9nLmRlYnVnKGBBbmRyb2lkIGNvbmZpZyByb290ICcke2xvY2F0aW9ufScgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeWApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgcGF0aCBleGlzdHMgb24gdGhlIGZpbGVzeXN0ZW0gYW5kIGlzIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBsb2NhdGlvbiBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnlcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5hc3luYyBmdW5jdGlvbiBkaXJFeGlzdHMgKGxvY2F0aW9uKSB7XG4gIHJldHVybiBsb2NhdGlvblxuICAgICYmIGF3YWl0IGZzLmV4aXN0cyhsb2NhdGlvbilcbiAgICAmJiAoYXdhaXQgZnMuc3RhdChsb2NhdGlvbikpLmlzRGlyZWN0b3J5KCk7XG59XG5cbi8qKlxuICogRXNjYXBlcyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cbiAqIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIHBvc3NpYmxlIGlzc3VlcyB3aXRoIGhvdyBzeXN0ZW0gYHNwYXduYFxuICogY2FsbCBoYW5kbGVzIHRoZW0uXG4gKiBTZWUgaHR0cHM6Ly9kaXNjdXNzLmFwcGl1bS5pby90L2hvdy10by1tb2RpZnktd2QtcHJveHktYW5kLXVpYXV0b21hdG9yMi1zb3VyY2UtY29kZS10by1zdXBwb3J0LXVuaWNvZGUvMzM0NjZcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZyBOb24tZXNjYXBlZCBhcmd1bWVudCBzdHJpbmdcbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIGFyZ3VtZW50XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVNoZWxsQXJnIChhcmcpIHtcbiAgYXJnID0gYCR7YXJnfWA7XG4gIGlmIChzeXN0ZW0uaXNXaW5kb3dzKCkpIHtcbiAgICByZXR1cm4gL1smfF5cXHNdLy50ZXN0KGFyZykgPyBgXCIke2FyZy5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYCA6IGFyZztcbiAgfVxuICByZXR1cm4gYXJnLnJlcGxhY2UoLyYvZywgJ1xcXFwmJyk7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBuYW1lIG9mIGxhdW5jaGFibGUgcGFja2FnZSBhY3Rpdml0eVxuICogZnJvbSBkdW1wc3lzIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHVtcHN5cyB0aGUgYWN0dWFsIGR1bXBzeXMgb3V0cHV0XG4gKiBAcmV0dXJucyB7c3RyaW5nW119IEVpdGhlciB0aGUgZnVsbHkgcXVhbGlmaWVkXG4gKiBhY3Rpdml0eSBuYW1lIGFzIGEgc2luZ2xlIGxpc3QgaXRlbSBvciBhbiBlbXB0eSBsaXN0IGlmIG5vdGhpbmcgY291bGQgYmUgcGFyc2VkLlxuICogSW4gQW5kcm9pZCA2IGFuZCBvbGRlciB0aGVyZSBpcyBubyByZWxpYWJsZSB3YXkgdG8gZGV0ZXJtaW5lXG4gKiB0aGUgY2F0ZWdvcnkgbmFtZSBmb3IgdGhlIGdpdmVuIGFjdGl2aXR5LCBzbyB0aGlzIEFQSSBqdXN0XG4gKiByZXR1cm5zIGFsbCBhY3Rpdml0eSBuYW1lcyBiZWxvbmdpbmcgdG8gJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJ1xuICogd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCB0aGUgYXBwIG1hbmlmZXN0IGNvdWxkIGJlIHBhcnNlZCBuZXh0XG4gKiBpbiBvcmRlciB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgbmFtZXMgZm9yIHRoZXNlLlxuICovXG5mdW5jdGlvbiBwYXJzZUxhdW5jaGFibGVBY3Rpdml0eU5hbWVzIChkdW1wc3lzKSB7XG4gIGNvbnN0IG1haW5BY3Rpdml0eU5hbWVSZSA9IG5ldyBSZWdFeHAoYF5cXFxccyoke18uZXNjYXBlUmVnRXhwKE1BSU5fQUNUSU9OKX06JGApO1xuICBjb25zdCBjYXRlZ29yeU5hbWVSZSA9IC9eXFxzKkNhdGVnb3J5OlxccytcIihbYS16QS1aMC05Ll8vLV0rKVwiJC87XG4gIGNvbnN0IGJsb2NrcyA9IFtdO1xuICBsZXQgYmxvY2tTdGFydEluZGVudDtcbiAgbGV0IGJsb2NrID0gW107XG4gIGZvciAoY29uc3QgbGluZSBvZiBkdW1wc3lzLnNwbGl0KCdcXG4nKS5tYXAoXy50cmltRW5kKSkge1xuICAgIGNvbnN0IGN1cnJlbnRJbmRlbnQgPSBsaW5lLmxlbmd0aCAtIF8udHJpbVN0YXJ0KGxpbmUpLmxlbmd0aDtcbiAgICBpZiAobWFpbkFjdGl2aXR5TmFtZVJlLnRlc3QobGluZSkpIHtcbiAgICAgIGJsb2NrU3RhcnRJbmRlbnQgPSBjdXJyZW50SW5kZW50O1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYmxvY2spKSB7XG4gICAgICAgIGJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgICAgICAgYmxvY2sgPSBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoXy5pc05pbChibG9ja1N0YXJ0SW5kZW50KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRJbmRlbnQgPiBibG9ja1N0YXJ0SW5kZW50KSB7XG4gICAgICBibG9jay5wdXNoKGxpbmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIV8uaXNFbXB0eShibG9jaykpIHtcbiAgICAgICAgYmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgICBibG9jayA9IFtdO1xuICAgICAgfVxuICAgICAgYmxvY2tTdGFydEluZGVudCA9IG51bGw7XG4gICAgfVxuICB9XG4gIGlmICghXy5pc0VtcHR5KGJsb2NrKSkge1xuICAgIGJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYmxvY2tzKSB7XG4gICAgbGV0IGhhc0NhdGVnb3J5ID0gZmFsc2U7XG4gICAgbGV0IGlzTGF1bmNoZXJDYXRlZ29yeSA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBpdGVtKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGNhdGVnb3J5TmFtZVJlLmV4ZWMobGluZSk7XG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBoYXNDYXRlZ29yeSA9IHRydWU7XG4gICAgICBpc0xhdW5jaGVyQ2F0ZWdvcnkgPSBtYXRjaFsxXSA9PT0gTEFVTkNIRVJfQ0FURUdPUlk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gT24gb2xkZXIgQW5kcm9pZCB2ZXJzaW9ucyB0aGUgY2F0ZWdvcnkgbmFtZVxuICAgIC8vIG1pZ2h0IG5vdCBiZSBsaXN0ZWQsIHNvIHdlIGp1c3QgdHJ5IHRvIGZldGNoXG4gICAgLy8gYWxsIG1hdGNoZXMgaW5zdGVhZFxuICAgIGlmIChoYXNDYXRlZ29yeSAmJiAhaXNMYXVuY2hlckNhdGVnb3J5KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGFjdGl2aXR5TmFtZVN0ciBvZiBpdGVtLm1hcChfLnRyaW0pLmZpbHRlcihCb29sZWFuKSkge1xuICAgICAgY29uc3QgZnFBY3Rpdml0eU5hbWUgPSBhY3Rpdml0eU5hbWVTdHIuc3BsaXQoL1xccysvKVsxXTtcbiAgICAgIGlmICghbWF0Y2hDb21wb25lbnROYW1lKGZxQWN0aXZpdHlOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTGF1bmNoZXJDYXRlZ29yeSkge1xuICAgICAgICByZXR1cm4gW2ZxQWN0aXZpdHlOYW1lXTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKGZxQWN0aXZpdHlOYW1lKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgY29tcG9uZW50IG5hbWVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NTdHJpbmcgVGhlIHN0cmluZyB0byB2ZXJpZnlcbiAqIEByZXR1cm4gez9BcnJheTxNYXRjaD59IFRoZSByZXN1bHQgb2YgUmVnZXhwLmV4ZWMgb3BlcmF0aW9uXG4gKiBvciBfbnVsbF8gaWYgbm8gbWF0Y2hlcyBhcmUgZm91bmRcbiAqL1xuZnVuY3Rpb24gbWF0Y2hDb21wb25lbnROYW1lIChjbGFzc1N0cmluZykge1xuICAvLyBzb21lLnBhY2thZ2Uvc29tZS5wYWNrYWdlLkFjdGl2aXR5XG4gIHJldHVybiAvXlthLXowLTkuL19dKyQvaS5leGVjKGNsYXNzU3RyaW5nKTtcbn1cblxuZXhwb3J0IHtcbiAgZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCwgdW56aXBGaWxlLFxuICBnZXRJTUVMaXN0RnJvbU91dHB1dCwgZ2V0SmF2YUZvck9zLCBpc1Nob3dpbmdMb2Nrc2NyZWVuLCBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQsXG4gIGdldFN1cmZhY2VPcmllbnRhdGlvbiwgaXNTY3JlZW5PbkZ1bGx5LCBidWlsZFN0YXJ0Q21kLCBnZXRKYXZhSG9tZSxcbiAgZ2V0U2RrVG9vbHNWZXJzaW9uLCBnZXRBcGtzaWduZXJGb3JPcywgZ2V0QnVpbGRUb29sc0RpcnMsXG4gIGdldEFwa2FuYWx5emVyRm9yT3MsIGdldE9wZW5Tc2xGb3JPcywgZXh0cmFjdE1hdGNoaW5nUGVybWlzc2lvbnMsIEFQS1NfRVhURU5TSU9OLFxuICBBUEtfSU5TVEFMTF9USU1FT1VULCBBUEtTX0lOU1RBTExfVElNRU9VVCwgYnVpbGRJbnN0YWxsQXJncywgQVBLX0VYVEVOU0lPTixcbiAgREVGQVVMVF9BREJfRVhFQ19USU1FT1VULCBwYXJzZU1hbmlmZXN0LCBwYXJzZUFhcHRTdHJpbmdzLCBwYXJzZUFhcHQyU3RyaW5ncyxcbiAgZm9ybWF0Q29uZmlnTWFya2VyLCBwYXJzZUpzb25EYXRhLCB1bnNpZ25BcGssIHRvQXZkTG9jYWxlQXJncywgcmVxdWlyZVNka1Jvb3QsXG4gIGdldFNka1Jvb3RGcm9tRW52LCBnZXRBbmRyb2lkUHJlZnNSb290LCBkaXJFeGlzdHMsIGVzY2FwZVNoZWxsQXJnLFxuICBwYXJzZUxhdW5jaGFibGVBY3Rpdml0eU5hbWVzLCBtYXRjaENvbXBvbmVudE5hbWUsIGdldE1vZHVsZVJvb3Rcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLGNBQWMsR0FBRyxPQUFPO0FBQUM7QUFDL0IsTUFBTUMsYUFBYSxHQUFHLE1BQU07QUFBQztBQUM3QixNQUFNQyxtQkFBbUIsR0FBRyxLQUFLO0FBQUM7QUFDbEMsTUFBTUMsb0JBQW9CLEdBQUdELG1CQUFtQixHQUFHLENBQUM7QUFBQztBQUNyRCxNQUFNRSx3QkFBd0IsR0FBRyxLQUFLO0FBQUM7QUFDdkMsTUFBTUMsV0FBVyxHQUFHLDRCQUE0QjtBQUNoRCxNQUFNQyxpQkFBaUIsR0FBRyxrQ0FBa0M7QUFDNUQsTUFBTUMsV0FBVyxHQUFHLFlBQVk7QUFRaEMsTUFBTUMsYUFBYSxHQUFHQyxlQUFDLENBQUND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
|
|
744
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUEtTX0VYVEVOU0lPTiIsIkFQS19FWFRFTlNJT04iLCJBUEtfSU5TVEFMTF9USU1FT1VUIiwiQVBLU19JTlNUQUxMX1RJTUVPVVQiLCJERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQiLCJNQUlOX0FDVElPTiIsIkxBVU5DSEVSX0NBVEVHT1JZIiwiTU9EVUxFX05BTUUiLCJnZXRNb2R1bGVSb290IiwiXyIsIm1lbW9pemUiLCJtb2R1bGVSb290IiwicGF0aCIsImRpcm5hbWUiLCJyZXNvbHZlIiwiX19maWxlbmFtZSIsImlzQXRGc1Jvb3QiLCJtYW5pZmVzdFBhdGgiLCJqb2luIiwiZnMiLCJleGlzdHMiLCJKU09OIiwicGFyc2UiLCJyZWFkRmlsZSIsIm5hbWUiLCJpZ24iLCJsZW5ndGgiLCJFcnJvciIsImdldFJlc291cmNlUGF0aCIsInJlbFBhdGgiLCJyZXN1bHRQYXRoIiwiZ2V0U2RrUm9vdEZyb21FbnYiLCJwcm9jZXNzIiwiZW52IiwiQU5EUk9JRF9IT01FIiwiQU5EUk9JRF9TREtfUk9PVCIsInJlcXVpcmVTZGtSb290IiwiY3VzdG9tUm9vdCIsInNka1Jvb3QiLCJkb2NNc2ciLCJpc0VtcHR5Iiwic3RhdHMiLCJzdGF0IiwiaXNEaXJlY3RvcnkiLCJnZXRBbmRyb2lkUGxhdGZvcm1BbmRQYXRoIiwicHJvcHNQYXRocyIsImdsb2IiLCJjd2QiLCJhYnNvbHV0ZSIsInBsYXRmb3Jtc01hcHBpbmciLCJwcm9wc1BhdGgiLCJwcm9wc0NvbnRlbnQiLCJwbGF0Zm9ybVBhdGgiLCJwbGF0Zm9ybSIsImJhc2VuYW1lIiwibWF0Y2giLCJleGVjIiwibG9nIiwid2FybiIsInBhcnNlSW50IiwicmVjZW50U2RrVmVyc2lvbiIsImtleXMiLCJzb3J0IiwicmV2ZXJzZSIsInJlc3VsdCIsImRlYnVnIiwic3RyaW5naWZ5IiwidW56aXBGaWxlIiwiemlwUGF0aCIsImRzdFJvb3QiLCJ6aXAiLCJhc3NlcnRWYWxpZFppcCIsImV4dHJhY3RBbGxUbyIsInVuc2lnbkFwayIsImFwa1BhdGgiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJtZXRhSW5mRm9sZGVyTmFtZSIsImhhc01ldGFJbmYiLCJyZWFkRW50cmllcyIsImVudHJ5IiwiZmlsZU5hbWUiLCJzdGFydHNXaXRoIiwidG1wWmlwUm9vdCIsInJpbXJhZiIsInRtcFJlc3VsdFBhdGgiLCJ0b0FyY2hpdmUiLCJ1bmxpbmsiLCJtdiIsImdldElNRUxpc3RGcm9tT3V0cHV0Iiwic3Rkb3V0IiwiZW5naW5lcyIsImxpbmUiLCJzcGxpdCIsInB1c2giLCJ0cmltIiwicmVwbGFjZSIsImdldEphdmFIb21lIiwiSkFWQV9IT01FIiwiZ2V0SmF2YUZvck9zIiwiamF2YUhvbWUiLCJlcnJNc2ciLCJlcnIiLCJtZXNzYWdlIiwiZXhlY3V0YWJsZU5hbWUiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJ3aGljaCIsImdldE9wZW5Tc2xGb3JPcyIsImJpbmFyeU5hbWUiLCJnZXRBcGtzaWduZXJGb3JPcyIsInN5c0hlbHBlcnMiLCJnZXRCaW5hcnlGcm9tU2RrUm9vdCIsImdldEFwa2FuYWx5emVyRm9yT3MiLCJpc1Nob3dpbmdMb2Nrc2NyZWVuIiwiZHVtcHN5cyIsInNvbWUiLCJ4IiwiaW5jbHVkZXMiLCJldmVyeSIsInRlc3QiLCJpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQiLCJtIiwiZ2V0U3VyZmFjZU9yaWVudGF0aW9uIiwiaXNTY3JlZW5PbkZ1bGx5IiwiYnVpbGRTdGFydENtZCIsInN0YXJ0QXBwT3B0aW9ucyIsImFwaUxldmVsIiwidXNlciIsIndhaXRGb3JMYXVuY2giLCJwa2ciLCJhY3Rpdml0eSIsImFjdGlvbiIsImNhdGVnb3J5Iiwic3RvcEFwcCIsImZsYWdzIiwiY21kIiwidXRpbCIsImhhc1ZhbHVlIiwib3B0aW9uYWxJbnRlbnRBcmd1bWVudHMiLCJwYXJzZUtleVZhbHVlIiwic3RyIiwic3BhY2UiLCJpbmRleE9mIiwic3Vic3RyaW5nIiwicmUiLCJhcmdzIiwiYXBwbHkiLCJmbGFnIiwiZmxhZ1BvcyIsInByZXZBcmdzIiwiZ2V0U2RrVG9vbHNWZXJzaW9uIiwiYW5kcm9pZEhvbWUiLCJwcm9wZXJ0aWVzUGF0aCIsInByb3BlcnRpZXNDb250ZW50IiwidmVyc2lvbk1hdGNoZXIiLCJSZWdFeHAiLCJtYWpvciIsIm1pbm9yIiwiYnVpbGQiLCJnZXRCdWlsZFRvb2xzRGlycyIsImJ1aWxkVG9vbHNEaXJzIiwibWFwIiwiZGlyIiwiYSIsImIiLCJzZW12ZXIiLCJyY29tcGFyZSIsInBhaXIiLCJwYWlycyIsIkIiLCJtdGltZSIsInZhbHVlT2YiLCJpbmZvIiwiZXh0cmFjdE1hdGNoaW5nUGVybWlzc2lvbnMiLCJkdW1wc3lzT3V0cHV0IiwiZ3JvdXBOYW1lcyIsImdyYW50ZWRTdGF0ZSIsImdyb3VwUGF0dGVybkJ5TmFtZSIsImdyb3VwTmFtZSIsImVzY2FwZVJlZ0V4cCIsImluZGVudFBhdHRlcm4iLCJwZXJtaXNzaW9uTmFtZVBhdHRlcm4iLCJncmFudGVkU3RhdGVQYXR0ZXJuIiwiZ3JvdXBNYXRjaCIsImxpbmVzIiwidGl0bGVJbmRlbnQiLCJzZWFyY2giLCJzbGljZSIsImN1cnJlbnRJbmRlbnQiLCJwZXJtaXNzaW9uTmFtZU1hdGNoIiwiaXRlbSIsInBlcm1pc3Npb24iLCJncmFudGVkU3RhdGVNYXRjaCIsImdyYW50ZWQiLCJmaWx0ZXJlZFJlc3VsdCIsImZpbHRlciIsImlzQm9vbGVhbiIsInBsdXJhbGl6ZSIsImJ1aWxkSW5zdGFsbEFyZ3MiLCJvcHRpb25zIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJ1c2VTZGNhcmQiLCJncmFudFBlcm1pc3Npb25zIiwicGFydGlhbEluc3RhbGwiLCJwYXJzZU1hbmlmZXN0IiwibWFuaWZlc3QiLCJwYWNrYWdlIiwidmVyc2lvbkNvZGUiLCJ2ZXJzaW9uTmFtZSIsImFwcGxpY2F0aW9uIiwiYWN0aXZpdGllcyIsImFjdGl2aXR5QWxpYXNlcyIsImVuYWJsZWQiLCJpbnRlbnRGaWx0ZXJzIiwiYWN0aW9ucyIsImNhdGVnb3JpZXMiLCJpc01haW5BY3Rpb24iLCJpc0xhdW5jaGVyQ2F0ZWdvcnkiLCJwYXJzZUFhcHRTdHJpbmdzIiwicmF3T3V0cHV0IiwiY29uZmlnTWFya2VyIiwibm9ybWFsaXplU3RyaW5nTWF0Y2giLCJzIiwiYXBrU3RyaW5ncyIsImlzSW5Db25maWciLCJjdXJyZW50UmVzb3VyY2VJZCIsImlzSW5QbHVyYWxHcm91cCIsInF1b3RlZFN0cmluZ1BhdHRlcm4iLCJvcyIsIkVPTCIsInRyaW1tZWRMaW5lIiwicGFyc2VBYXB0MlN0cmluZ3MiLCJhbGxMaW5lcyIsImV4dHJhY3RDb250ZW50Iiwic3RhcnRJZHgiLCJpZHgiLCJzdGFydENoYXJQb3MiLCJ0ZXJtaW5hdGlvbkNoYXJNYXRjaCIsInRlcm1pbmF0aW9uQ2hhclBvcyIsImluZGV4IiwidHJpbVN0YXJ0IiwiaXNJbkN1cnJlbnRDb25maWciLCJsaW5lSW5kZXgiLCJjb250ZW50IiwiaXNTdHJpbmciLCJmb3JtYXRDb25maWdNYXJrZXIiLCJjb25maWdzR2V0dGVyIiwiZGVzaXJlZE1hcmtlciIsImRlZmF1bHRNYXJrZXIiLCJjb25maWdzIiwidG9Mb3dlckNhc2UiLCJwYXJzZUpzb25EYXRhIiwib3V0cHV0IiwiZW50aXR5TmFtZSIsImpzb25TdHIiLCJlIiwidG9BdmRMb2NhbGVBcmdzIiwibGFuZ3VhZ2UiLCJjb3VudHJ5IiwidG9VcHBlckNhc2UiLCJsb2NhbGUiLCJnZXRBbmRyb2lkUHJlZnNSb290IiwibG9jYXRpb24iLCJBTkRST0lEX0VNVUxBVE9SX0hPTUUiLCJkaXJFeGlzdHMiLCJob21lIiwiSE9NRSIsIlVTRVJQUk9GSUxFIiwiZXNjYXBlU2hlbGxBcmciLCJhcmciLCJwYXJzZUxhdW5jaGFibGVBY3Rpdml0eU5hbWVzIiwibWFpbkFjdGl2aXR5TmFtZVJlIiwiY2F0ZWdvcnlOYW1lUmUiLCJibG9ja3MiLCJibG9ja1N0YXJ0SW5kZW50IiwiYmxvY2siLCJ0cmltRW5kIiwiaXNOaWwiLCJoYXNDYXRlZ29yeSIsImFjdGl2aXR5TmFtZVN0ciIsIkJvb2xlYW4iLCJmcUFjdGl2aXR5TmFtZSIsIm1hdGNoQ29tcG9uZW50TmFtZSIsImNsYXNzU3RyaW5nIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2hlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCB6aXAsIHV0aWwsIHRlbXBEaXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcblxuY29uc3QgQVBLU19FWFRFTlNJT04gPSAnLmFwa3MnO1xuY29uc3QgQVBLX0VYVEVOU0lPTiA9ICcuYXBrJztcbmNvbnN0IEFQS19JTlNUQUxMX1RJTUVPVVQgPSA2MDAwMDtcbmNvbnN0IEFQS1NfSU5TVEFMTF9USU1FT1VUID0gQVBLX0lOU1RBTExfVElNRU9VVCAqIDI7XG5jb25zdCBERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQgPSAyMDAwMDsgLy8gaW4gbWlsbGlzZWNvbmRzXG5jb25zdCBNQUlOX0FDVElPTiA9ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTic7XG5jb25zdCBMQVVOQ0hFUl9DQVRFR09SWSA9ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUic7XG5jb25zdCBNT0RVTEVfTkFNRSA9ICdhcHBpdW0tYWRiJztcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBjdXJyZW50IG1vZHVsZSdzIHJvb3QgZm9sZGVyXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gVGhlIGZ1bGwgcGF0aCB0byBtb2R1bGUgcm9vdFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjdXJyZW50IG1vZHVsZSByb290IGZvbGRlciBjYW5ub3QgYmUgZGV0ZXJtaW5lZFxuICovXG5jb25zdCBnZXRNb2R1bGVSb290ID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldE1vZHVsZVJvb3QgKCkge1xuICBsZXQgbW9kdWxlUm9vdCA9IHBhdGguZGlybmFtZShwYXRoLnJlc29sdmUoX19maWxlbmFtZSkpO1xuICBsZXQgaXNBdEZzUm9vdCA9IGZhbHNlO1xuICB3aGlsZSAoIWlzQXRGc1Jvb3QpIHtcbiAgICBjb25zdCBtYW5pZmVzdFBhdGggPSBwYXRoLmpvaW4obW9kdWxlUm9vdCwgJ3BhY2thZ2UuanNvbicpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKG1hbmlmZXN0UGF0aCkgJiZcbiAgICAgICAgICBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKG1hbmlmZXN0UGF0aCwgJ3V0ZjgnKSkubmFtZSA9PT0gTU9EVUxFX05BTUUpIHtcbiAgICAgICAgcmV0dXJuIG1vZHVsZVJvb3Q7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIG1vZHVsZVJvb3QgPSBwYXRoLmRpcm5hbWUobW9kdWxlUm9vdCk7XG4gICAgaXNBdEZzUm9vdCA9IG1vZHVsZVJvb3QubGVuZ3RoIDw9IHBhdGguZGlybmFtZShtb2R1bGVSb290KS5sZW5ndGg7XG4gIH1cbiAgaWYgKGlzQXRGc1Jvb3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSByb290IGZvbGRlciBvZiB0aGUgJHtNT0RVTEVfTkFNRX0gTm9kZS5qcyBtb2R1bGVgKTtcbiAgfVxuICByZXR1cm4gbW9kdWxlUm9vdDtcbn0pO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFic29sc3V0ZSBwYXRoIHRvIHRoZSBnaXZlbiByZXNvdXJjZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxQYXRoIFJlbGF0aXZlIHBhdGggdG8gdGhlIHJlc291cmNlIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgbW9kdWxlIHJvb3RcbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IFRoZSBmdWxsIHBhdGggdG8gdGhlIHJlc291cmNlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGFic29sdXRlIHJlc291cmNlIHBhdGggY2Fubm90IGJlIGRldGVybWluZWRcbiAqL1xuY29uc3QgZ2V0UmVzb3VyY2VQYXRoID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldFJlc291cmNlUGF0aCAocmVsUGF0aCkge1xuICBjb25zdCBtb2R1bGVSb290ID0gYXdhaXQgZ2V0TW9kdWxlUm9vdCgpO1xuICBjb25zdCByZXN1bHRQYXRoID0gcGF0aC5yZXNvbHZlKG1vZHVsZVJvb3QsIHJlbFBhdGgpO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgdGhlIHJlc291cmNlICcke3JlbFBhdGh9JyB1bmRlciB0aGUgJyR7bW9kdWxlUm9vdH0nIGAgK1xuICAgICAgYGZvbGRlciBvZiAke01PRFVMRV9OQU1FfSBOb2RlLmpzIG1vZHVsZWApO1xuICB9XG4gIHJldHVybiByZXN1bHRQYXRoO1xufSk7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhY3R1YWwgcGF0aCB0byBTREsgcm9vdCBmb2xkZXIgZnJvbSB0aGUgc3lzdGVtIGVudmlyb25tZW50XG4gKlxuICogQHJldHVybiB7P3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgU0RLIHJvb3QgZm9sZGVyXG4gKi9cbmZ1bmN0aW9uIGdldFNka1Jvb3RGcm9tRW52ICgpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LkFORFJPSURfSE9NRSB8fCBwcm9jZXNzLmVudi5BTkRST0lEX1NES19ST09UO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHBhdGggdG8gU0RLIHJvb3QgZm9sZGVyXG4gKlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBTREsgcm9vdCBmb2xkZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBlaXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgZW52IHZhcmlhYmxlIGlzIHVuc2V0IG9yIGlzXG4gKiBwb2ludGluZyB0byBhbiBpbnZhbGlkIGZpbGUgc3lzdGVtIGVudHJ5XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlcXVpcmVTZGtSb290IChjdXN0b21Sb290ID0gbnVsbCkge1xuICBjb25zdCBzZGtSb290ID0gY3VzdG9tUm9vdCB8fCBnZXRTZGtSb290RnJvbUVudigpO1xuICBjb25zdCBkb2NNc2cgPSAnUmVhZCBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zdHVkaW8vY29tbWFuZC1saW5lL3ZhcmlhYmxlcyBmb3IgbW9yZSBkZXRhaWxzJztcbiAgaWYgKF8uaXNFbXB0eShzZGtSb290KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTmVpdGhlciBBTkRST0lEX0hPTUUgbm9yIEFORFJPSURfU0RLX1JPT1QgZW52aXJvbm1lbnQgdmFyaWFibGUgd2FzIGV4cG9ydGVkLiAke2RvY01zZ31gKTtcbiAgfVxuXG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHNka1Jvb3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQW5kcm9pZCBTREsgcm9vdCBmb2xkZXIgJyR7c2RrUm9vdH0nIGRvZXMgbm90IGV4aXN0IG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS4gJHtkb2NNc2d9YCk7XG4gIH1cbiAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KHNka1Jvb3QpO1xuICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBBbmRyb2lkIFNESyByb290ICcke3Nka1Jvb3R9JyBtdXN0IGJlIGEgZm9sZGVyLiAke2RvY01zZ31gKTtcbiAgfVxuICByZXR1cm4gc2RrUm9vdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQbGF0Zm9ybUluZm9cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGxhdGZvcm0gLSBUaGUgcGxhdGZvcm0gbmFtZSwgZm9yIGV4YW1wbGUgYGFuZHJvaWQtMjRgXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBwbGF0Zm9ybVBhdGggLSBGdWxsIHBhdGggdG8gdGhlIHBsYXRmb3JtIFNESyBmb2xkZXJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYG51bGxgIGlmIGl0IGNhbm5vdCBiZSBmb3VuZFxuICovXG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHBhdGggdG8gdGhlIHJlY2VudCBpbnN0YWxsZWQgQW5kcm9pZCBwbGF0Zm9ybS5cbiAqXG4gKiBAcmV0dXJuIHtQbGF0Zm9ybUluZm99IFRoZSByZXN1bHRpbmcgcGF0aCB0byB0aGUgbmV3ZXN0IGluc3RhbGxlZCBwbGF0Zm9ybS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCAoc2RrUm9vdCkge1xuICBjb25zdCBwcm9wc1BhdGhzID0gYXdhaXQgZnMuZ2xvYignKi9idWlsZC5wcm9wJywge1xuICAgIGN3ZDogcGF0aC5yZXNvbHZlKHNka1Jvb3QsICdwbGF0Zm9ybXMnKSxcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgfSk7XG4gIGNvbnN0IHBsYXRmb3Jtc01hcHBpbmcgPSB7fTtcbiAgZm9yIChjb25zdCBwcm9wc1BhdGggb2YgcHJvcHNQYXRocykge1xuICAgIGNvbnN0IHByb3BzQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb3BzUGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgcGxhdGZvcm1QYXRoID0gcGF0aC5kaXJuYW1lKHByb3BzUGF0aCk7XG4gICAgY29uc3QgcGxhdGZvcm0gPSBwYXRoLmJhc2VuYW1lKHBsYXRmb3JtUGF0aCk7XG4gICAgY29uc3QgbWF0Y2ggPSAvcm9cXC5idWlsZFxcLnZlcnNpb25cXC5zZGs9KFxcZCspLy5leGVjKHByb3BzQ29udGVudCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgbG9nLndhcm4oYENhbm5vdCByZWFkIHRoZSBTREsgdmVyc2lvbiBmcm9tICcke3Byb3BzUGF0aH0nLiBTa2lwcGluZyAnJHtwbGF0Zm9ybX0nYCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcGxhdGZvcm1zTWFwcGluZ1twYXJzZUludChtYXRjaFsxXSwgMTApXSA9IHtcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgcGxhdGZvcm1QYXRoLFxuICAgIH07XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShwbGF0Zm9ybXNNYXBwaW5nKSkge1xuICAgIGxvZy53YXJuKGBGb3VuZCB6ZXJvIHBsYXRmb3JtIGZvbGRlcnMgYXQgJyR7cGF0aC5yZXNvbHZlKHNka1Jvb3QsICdwbGF0Zm9ybXMnKX0nLiBgICtcbiAgICAgIGBEbyB5b3UgaGF2ZSBhbnkgQW5kcm9pZCBTREtzIGluc3RhbGxlZD9gKTtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhdGZvcm06IG51bGwsXG4gICAgICBwbGF0Zm9ybVBhdGg6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHJlY2VudFNka1ZlcnNpb24gPSBfLmtleXMocGxhdGZvcm1zTWFwcGluZykuc29ydCgpLnJldmVyc2UoKVswXTtcbiAgY29uc3QgcmVzdWx0ID0gcGxhdGZvcm1zTWFwcGluZ1tyZWNlbnRTZGtWZXJzaW9uXTtcbiAgbG9nLmRlYnVnKGBGb3VuZCB0aGUgbW9zdCByZWNlbnQgQW5kcm9pZCBwbGF0Zm9ybTogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bnppcEZpbGUgKHppcFBhdGgsIGRzdFJvb3QgPSBwYXRoLmRpcm5hbWUoemlwUGF0aCkpIHtcbiAgbG9nLmRlYnVnKGBVbnppcHBpbmcgJyR7emlwUGF0aH0nIHRvICcke2RzdFJvb3R9J2ApO1xuICBhd2FpdCB6aXAuYXNzZXJ0VmFsaWRaaXAoemlwUGF0aCk7XG4gIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oemlwUGF0aCwgZHN0Um9vdCk7XG4gIGxvZy5kZWJ1ZygnVW56aXAgc3VjY2Vzc2Z1bCcpO1xufVxuXG4vKipcbiAqIFVuc2lnbnMgdGhlIGdpdmVuIGFwayBieSByZW1vdmluZyB0aGVcbiAqIE1FVEEtSU5GIGZvbGRlciByZWN1cnNpdmVseSBmcm9tIHRoZSBhcmNoaXZlLlxuICogISEhIFRoZSBmdW5jdGlvbiBvdmVyd3JpdGVzIHRoZSBnaXZlbiBhcGsgYWZ0ZXIgc3VjY2Vzc2Z1bCB1bnNpZ25pbmcgISEhXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa1BhdGggVGhlIHBhdGggdG8gdGhlIGFwa1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgYXBrIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseVxuICogdW5zaWduZWQgYW5kIG92ZXJ3cml0dGVuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyB0aGUgdW5zaWduIG9wZXJhdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiB1bnNpZ25BcGsgKGFwa1BhdGgpIHtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICBjb25zdCBtZXRhSW5mRm9sZGVyTmFtZSA9ICdNRVRBLUlORic7XG4gIHRyeSB7XG4gICAgbGV0IGhhc01ldGFJbmYgPSBmYWxzZTtcbiAgICBhd2FpdCB6aXAucmVhZEVudHJpZXMoYXBrUGF0aCwgKHtlbnRyeX0pID0+IHtcbiAgICAgIGhhc01ldGFJbmYgPSBlbnRyeS5maWxlTmFtZS5zdGFydHNXaXRoKGAke21ldGFJbmZGb2xkZXJOYW1lfS9gKTtcbiAgICAgIC8vIGVudHJpZXMgaXRlcmF0aW9uIHN0b3BzIGFmdGVyIGBmYWxzZWAgaXMgcmV0dXJuZWRcbiAgICAgIHJldHVybiAhaGFzTWV0YUluZjtcbiAgICB9KTtcbiAgICBpZiAoIWhhc01ldGFJbmYpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdG1wWmlwUm9vdCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCAnYXBrJyk7XG4gICAgYXdhaXQgemlwLmV4dHJhY3RBbGxUbyhhcGtQYXRoLCB0bXBaaXBSb290KTtcbiAgICBhd2FpdCBmcy5yaW1yYWYocGF0aC5yZXNvbHZlKHRtcFppcFJvb3QsIG1ldGFJbmZGb2xkZXJOYW1lKSk7XG4gICAgY29uc3QgdG1wUmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCBwYXRoLmJhc2VuYW1lKGFwa1BhdGgpKTtcbiAgICBhd2FpdCB6aXAudG9BcmNoaXZlKHRtcFJlc3VsdFBhdGgsIHtcbiAgICAgIGN3ZDogdG1wWmlwUm9vdCxcbiAgICB9KTtcbiAgICBhd2FpdCBmcy51bmxpbmsoYXBrUGF0aCk7XG4gICAgYXdhaXQgZnMubXYodG1wUmVzdWx0UGF0aCwgYXBrUGF0aCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldElNRUxpc3RGcm9tT3V0cHV0IChzdGRvdXQpIHtcbiAgbGV0IGVuZ2luZXMgPSBbXTtcbiAgZm9yIChsZXQgbGluZSBvZiBzdGRvdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgaWYgKGxpbmUubGVuZ3RoID4gMCAmJiBsaW5lWzBdICE9PSAnICcpIHtcbiAgICAgIC8vIHJlbW92ZSBuZXdsaW5lIGFuZCB0cmFpbGluZyBjb2xvbiwgYW5kIGFkZCB0byB0aGUgbGlzdFxuICAgICAgZW5naW5lcy5wdXNoKGxpbmUudHJpbSgpLnJlcGxhY2UoLzokLywgJycpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVuZ2luZXM7XG59XG5cbmNvbnN0IGdldEphdmFIb21lID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldEphdmFIb21lICgpIHtcbiAgY29uc3QgcmVzdWx0ID0gcHJvY2Vzcy5lbnYuSkFWQV9IT01FO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIEpBVkFfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0IGZvciB0aGUgY3VycmVudCBwcm9jZXNzJyk7XG4gIH1cbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMocmVzdWx0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEpBVkFfSE9NRSBsb2NhdGlvbiAnJHtyZXN1bHR9JyBtdXN0IGV4aXN0YCk7XG4gIH1cbiAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KHJlc3VsdCk7XG4gIGlmICghc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEpBVkFfSE9NRSBsb2NhdGlvbiAnJHtyZXN1bHR9JyBtdXN0IGJlIGEgdmFsaWQgZm9sZGVyYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5jb25zdCBnZXRKYXZhRm9yT3MgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0SmF2YUZvck9zICgpIHtcbiAgbGV0IGphdmFIb21lO1xuICBsZXQgZXJyTXNnO1xuICB0cnkge1xuICAgIGphdmFIb21lID0gYXdhaXQgZ2V0SmF2YUhvbWUoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyTXNnID0gZXJyLm1lc3NhZ2U7XG4gIH1cbiAgY29uc3QgZXhlY3V0YWJsZU5hbWUgPSBgamF2YSR7c3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJyd9YDtcbiAgaWYgKGphdmFIb21lKSB7XG4gICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZShqYXZhSG9tZSwgJ2JpbicsIGV4ZWN1dGFibGVOYW1lKTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHJlc3VsdFBhdGgpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0UGF0aDtcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZnMud2hpY2goZXhlY3V0YWJsZU5hbWUpO1xuICB9IGNhdGNoIChpZ24pIHt9XG4gIHRocm93IG5ldyBFcnJvcihgVGhlICcke2V4ZWN1dGFibGVOYW1lfScgYmluYXJ5IGNvdWxkIG5vdCBiZSBmb3VuZCBgICtcbiAgICBgbmVpdGhlciBpbiBQQVRIIG5vciB1bmRlciBKQVZBX0hPTUUgKCR7ZXJyTXNnIHx8IHBhdGgucmVzb2x2ZShqYXZhSG9tZSwgJ2JpbicpfSlgKTtcbn0pO1xuXG5jb25zdCBnZXRPcGVuU3NsRm9yT3MgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGJpbmFyeU5hbWUgPSBgb3BlbnNzbCR7c3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJyd9YDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZnMud2hpY2goYmluYXJ5TmFtZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIG9wZW5zc2wgdG9vbCBtdXN0IGJlIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtIGFuZCBhdmFpbGFibGUgb24gdGhlIHBhdGgnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGFic29sdXRlIHBhdGggdG8gYXBrc2lnbmVyIHRvb2xcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gc3lzSGVscGVycyAtIEFuIGluc3RhbmNlIGNvbnRhaW5pbmcgc3lzdGVtQ2FsbE1ldGhvZHMgaGVscGVyIG1ldGhvZHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEFuIGFic29sdXRlIHBhdGggdG8gYXBrc2lnbmVyIHRvb2wuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHRvb2wgaXMgbm90IHByZXNlbnQgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBcGtzaWduZXJGb3JPcyAoc3lzSGVscGVycykge1xuICByZXR1cm4gYXdhaXQgc3lzSGVscGVycy5nZXRCaW5hcnlGcm9tU2RrUm9vdCgnYXBrc2lnbmVyLmphcicpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgYWJzb2x1dGUgcGF0aCB0byBhcGthbmFseXplciB0b29sLlxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL2NvbW1hbmQtbGluZS9hcGthbmFseXplci5odG1sXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN5c0hlbHBlcnMgLSBBbiBpbnN0YW5jZSBjb250YWluaW5nIHN5c3RlbUNhbGxNZXRob2RzIGhlbHBlciBtZXRob2RzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBbiBhYnNvbHV0ZSBwYXRoIHRvIGFwa2FuYWx5emVyIHRvb2wuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHRvb2wgaXMgbm90IHByZXNlbnQgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBcGthbmFseXplckZvck9zIChzeXNIZWxwZXJzKSB7XG4gIHJldHVybiBhd2FpdCBzeXNIZWxwZXJzLmdldEJpbmFyeUZyb21TZGtSb290KCdhcGthbmFseXplcicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBtU2hvd2luZ0xvY2tzY3JlZW4gb3IgbURyZWFtaW5nTG9ja3NjcmVlbiBpbiBkdW1wc3lzIG91dHB1dCB0byBkZXRlcm1pbmVcbiAqIGlmIGxvY2sgc2NyZWVuIGlzIHNob3dpbmdcbiAqXG4gKiBBIG5vdGU6IGBhZGIgc2hlbGwgZHVtcHN5cyB0cnVzdGAgcGVyZm9ybXMgYmV0dGVyIHdoaWxlIGRldGVjdGluZyB0aGUgbG9ja2VkIHNjcmVlbiBzdGF0ZVxuICogaW4gY29tcGFyaXNvbiB0byBgYWRiIGR1bXBzeXMgd2luZG93YCBvdXRwdXQgcGFyc2luZy5cbiAqIEJ1dCB0aGUgdHJ1c3QgY29tbWFuZCBkb2VzIG5vdCB3b3JrIGZvciBgU3dpcGVgIHVubG9jayBwYXR0ZXJuLlxuICpcbiAqIEluIHNvbWUgQW5kcm9pZCBkZXZpY2VzIChQcm9iYWJseSBhcm91bmQgQW5kcm9pZCAxMCspLCBgbVNob3dpbmdMb2Nrc2NyZWVuYCBhbmQgYG1EcmVhbWluZ0xvY2tzY3JlZW5gXG4gKiBkbyBub3Qgd29yayB0byBkZXRlY3QgbG9jayBzdGF0dXMuIEluc3RlYWQsIGtleWd1YXJkIHByZWZlcmVuY2VzIGhlbHBzIHRvIGRldGVjdCB0aGUgbG9jayBjb25kaXRpb24uXG4gKiBTb21lIGRldmljZXMgc3VjaCBhcyBBbmRyb2lkIFRWIGRvIG5vdCBoYXZlIGtleWd1YXJkLCBzbyB3ZSBzaG91bGQga2VlcFxuICogc2NyZWVuIGNvbmRpdGlvbiBhcyB0aGlzIHByaW1hcnkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkdW1wc3lzIC0gVGhlIG91dHB1dCBvZiBkdW1wc3lzIHdpbmRvdyBjb21tYW5kLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBsb2NrIHNjcmVlbiBpcyBzaG93aW5nLlxuICovXG5mdW5jdGlvbiBpc1Nob3dpbmdMb2Nrc2NyZWVuIChkdW1wc3lzKSB7XG4gIHJldHVybiBfLnNvbWUoWydtU2hvd2luZ0xvY2tzY3JlZW49dHJ1ZScsICdtRHJlYW1pbmdMb2Nrc2NyZWVuPXRydWUnXSwgKHgpID0+IGR1bXBzeXMuaW5jbHVkZXMoeCkpXG4gICAgLy8gYG1Jc1Nob3dpbmdgIGFuZCBgbUlucHV0UmVzdHJpY3RlZGAgYXJlIGB0cnVlYCBpbiBsb2NrIGNvbmRpdGlvbi4gYGZhbHNlYCBpcyB1bmxvY2sgY29uZGl0aW9uLlxuICAgIHx8IF8uZXZlcnkoWy9LZXlndWFyZFN0YXRlTW9uaXRvcltcXG5cXHNdK21Jc1Nob3dpbmc9dHJ1ZS8sIC9cXHMrbUlucHV0UmVzdHJpY3RlZD10cnVlL10sICh4KSA9PiB4LnRlc3QoZHVtcHN5cykpO1xufVxuXG4vKlxuICogQ2hlY2tzIG1DdXJyZW50Rm9jdXMgaW4gZHVtcHN5cyBvdXRwdXQgdG8gZGV0ZXJtaW5lIGlmIEtleWd1YXJkIGlzIGFjdGl2YXRlZFxuICovXG5mdW5jdGlvbiBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQgKGR1bXBzeXMpIHtcbiAgbGV0IG0gPSAvbUN1cnJlbnRGb2N1cy4rS2V5Z3VhcmQvZ2kuZXhlYyhkdW1wc3lzKTtcbiAgcmV0dXJuIChtICYmIG0ubGVuZ3RoICYmIG1bMF0pID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG4vKlxuICogUmVhZHMgU3VyZmFjZU9yaWVudGF0aW9uIGluIGR1bXBzeXMgb3V0cHV0XG4gKi9cbmZ1bmN0aW9uIGdldFN1cmZhY2VPcmllbnRhdGlvbiAoZHVtcHN5cykge1xuICBsZXQgbSA9IC9TdXJmYWNlT3JpZW50YXRpb246IFxcZC9naS5leGVjKGR1bXBzeXMpO1xuICByZXR1cm4gbSAmJiBwYXJzZUludChtWzBdLnNwbGl0KCc6JylbMV0sIDEwKTtcbn1cblxuLypcbiAqIENoZWNrcyBtU2NyZWVuT25GdWxseSBpbiBkdW1wc3lzIG91dHB1dCB0byBkZXRlcm1pbmUgaWYgc2NyZWVuIGlzIHNob3dpbmdcbiAqIERlZmF1bHQgaXMgdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1NjcmVlbk9uRnVsbHkgKGR1bXBzeXMpIHtcbiAgbGV0IG0gPSAvbVNjcmVlbk9uRnVsbHk9XFx3Ky9naS5leGVjKGR1bXBzeXMpO1xuICByZXR1cm4gIW0gfHwgLy8gaWYgaW5mb3JtYXRpb24gaXMgbWlzc2luZyB3ZSBhc3N1bWUgc2NyZWVuIGlzIGZ1bGx5IG9uXG4gICAgICAgICAobSAmJiBtLmxlbmd0aCA+IDAgJiYgbVswXS5zcGxpdCgnPScpWzFdID09PSAndHJ1ZScpIHx8IGZhbHNlO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBjb21tYW5kIGxpbmUgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBnaXZlblxuICogYXBwbGljYXRpb24gc3RhcnR1cCBvcHRpb25zXG4gKlxuICogQHBhcmFtIHtTdGFydEFwcE9wdGlvbnN9IHN0YXJ0QXBwT3B0aW9ucyAtIEFwcGxpY2F0aW9uIG9wdGlvbnMgbWFwcGluZ1xuICogQHBhcmFtIHtudW1iZXJ9IGFwaUxldmVsIC0gVGhlIGFjdHVhbCBPUyBBUEkgbGV2ZWxcbiAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmc+fSBUaGUgYWN0dWFsIGNvbW1hbmQgbGluZSBhcnJheVxuICovXG5mdW5jdGlvbiBidWlsZFN0YXJ0Q21kIChzdGFydEFwcE9wdGlvbnMsIGFwaUxldmVsKSB7XG4gIGNvbnN0IHtcbiAgICB1c2VyLFxuICAgIHdhaXRGb3JMYXVuY2gsXG4gICAgcGtnLFxuICAgIGFjdGl2aXR5LFxuICAgIGFjdGlvbixcbiAgICBjYXRlZ29yeSxcbiAgICBzdG9wQXBwLFxuICAgIGZsYWdzLFxuICB9ID0gc3RhcnRBcHBPcHRpb25zO1xuICBjb25zdCBjbWQgPSBbJ2FtJywgJ3N0YXJ0J107XG4gIGlmICh1dGlsLmhhc1ZhbHVlKHVzZXIpKSB7XG4gICAgY21kLnB1c2goJy0tdXNlcicsIHVzZXIpO1xuICB9XG4gIGlmICh3YWl0Rm9yTGF1bmNoKSB7XG4gICAgY21kLnB1c2goJy1XJyk7XG4gIH1cbiAgaWYgKGFjdGl2aXR5ICYmIHBrZykge1xuICAgIGNtZC5wdXNoKCctbicsIGAke3BrZ30vJHthY3Rpdml0eX1gKTtcbiAgfVxuICBpZiAoc3RvcEFwcCAmJiBhcGlMZXZlbCA+PSAxNSkge1xuICAgIGNtZC5wdXNoKCctUycpO1xuICB9XG4gIGlmIChhY3Rpb24pIHtcbiAgICBjbWQucHVzaCgnLWEnLCBhY3Rpb24pO1xuICB9XG4gIGlmIChjYXRlZ29yeSkge1xuICAgIGNtZC5wdXNoKCctYycsIGNhdGVnb3J5KTtcbiAgfVxuICBpZiAoZmxhZ3MpIHtcbiAgICBjbWQucHVzaCgnLWYnLCBmbGFncyk7XG4gIH1cbiAgaWYgKHN0YXJ0QXBwT3B0aW9ucy5vcHRpb25hbEludGVudEFyZ3VtZW50cykge1xuICAgIC8vIGV4cGVjdCBvcHRpb25hbEludGVudEFyZ3VtZW50cyB0byBiZSBhIHNpbmdsZSBzdHJpbmcgb2YgdGhlIGZvcm06XG4gICAgLy8gICAgIFwiLWZsYWcga2V5XCJcbiAgICAvLyAgICAgXCItZmxhZyBrZXkgdmFsdWVcIlxuICAgIC8vIG9yIGEgY29tYmluYXRpb24gb2YgdGhlc2UgKGUuZy4sIFwiLWZsYWcxIGtleTEgLWZsYWcyIGtleTIgdmFsdWUyXCIpXG5cbiAgICAvLyB0YWtlIGEgc3RyaW5nIGFuZCBwYXJzZSBvdXQgdGhlIHBhcnQgYmVmb3JlIGFueSBzcGFjZXMsIGFuZCBhbnl0aGluZyBhZnRlclxuICAgIC8vIHRoZSBmaXJzdCBzcGFjZVxuICAgIGxldCBwYXJzZUtleVZhbHVlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgc3RyID0gc3RyLnRyaW0oKTtcbiAgICAgIGxldCBzcGFjZSA9IHN0ci5pbmRleE9mKCcgJyk7XG4gICAgICBpZiAoc3BhY2UgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBzdHIubGVuZ3RoID8gW3N0cl0gOiBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbc3RyLnN1YnN0cmluZygwLCBzcGFjZSkudHJpbSgpLCBzdHIuc3Vic3RyaW5nKHNwYWNlICsgMSkudHJpbSgpXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gY3ljbGUgdGhyb3VnaCB0aGUgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgYW5kIHB1bGwgb3V0IHRoZSBhcmd1bWVudHNcbiAgICAvLyBhZGQgYSBzcGFjZSBpbml0aWFsbHkgc28gZmxhZ3MgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSBhcmd1bWVudHMgdGhhdFxuICAgIC8vIGhhdmUgaW50ZXJuYWwgaHlwaGVuc1xuICAgIGxldCBvcHRpb25hbEludGVudEFyZ3VtZW50cyA9IGAgJHtzdGFydEFwcE9wdGlvbnMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHN9YDtcbiAgICBsZXQgcmUgPSAvICgtW15cXHNdKykgKC4rKS87XG4gICAgd2hpbGUgKHRydWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAgIGxldCBhcmdzID0gcmUuZXhlYyhvcHRpb25hbEludGVudEFyZ3VtZW50cyk7XG4gICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgaWYgKG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIG5vIG1vcmUgZmxhZ3MsIHNvIHRoZSByZW1haW5kZXIgY2FuIGJlIHRyZWF0ZWQgYXMgJ2tleScgb3IgJ2tleSB2YWx1ZSdcbiAgICAgICAgICBjbWQucHVzaC5hcHBseShjbWQsIHBhcnNlS2V5VmFsdWUob3B0aW9uYWxJbnRlbnRBcmd1bWVudHMpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSBhcmUgZG9uZVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gdGFrZSB0aGUgZmxhZyBhbmQgc2VlIGlmIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZ1xuICAgICAgLy8gaWYgaXQgaXMgbm90LCB0aGVuIGl0IG1lYW5zIHdlIGhhdmUgYmVlbiB0aHJvdWdoIGFscmVhZHksIGFuZFxuICAgICAgLy8gd2hhdCBpcyBiZWZvcmUgdGhlIGZsYWcgaXMgdGhlIGFyZ3VtZW50IGZvciB0aGUgcHJldmlvdXMgZmxhZ1xuICAgICAgbGV0IGZsYWcgPSBhcmdzWzFdO1xuICAgICAgbGV0IGZsYWdQb3MgPSBvcHRpb25hbEludGVudEFyZ3VtZW50cy5pbmRleE9mKGZsYWcpO1xuICAgICAgaWYgKGZsYWdQb3MgIT09IDApIHtcbiAgICAgICAgbGV0IHByZXZBcmdzID0gb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMuc3Vic3RyaW5nKDAsIGZsYWdQb3MpO1xuICAgICAgICBjbWQucHVzaC5hcHBseShjbWQsIHBhcnNlS2V5VmFsdWUocHJldkFyZ3MpKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHRoZSBmbGFnLCBhcyB0aGVyZSBhcmUgbm8gbW9yZSBlYXJsaWVyIGFyZ3VtZW50c1xuICAgICAgY21kLnB1c2goZmxhZyk7XG5cbiAgICAgIC8vIG1ha2Ugb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgaG9sZCB0aGUgcmVtYWluZGVyXG4gICAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyA9IGFyZ3NbMl07XG4gICAgfVxuICB9XG4gIHJldHVybiBjbWQ7XG59XG5cbmNvbnN0IGdldFNka1Rvb2xzVmVyc2lvbiA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRTZGtUb29sc1ZlcnNpb24gKCkge1xuICBjb25zdCBhbmRyb2lkSG9tZSA9IHByb2Nlc3MuZW52LkFORFJPSURfSE9NRTtcbiAgaWYgKCFhbmRyb2lkSG9tZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQU5EUk9JRF9IT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGV4cGVjdGVkIHRvIGJlIHNldCcpO1xuICB9XG4gIGNvbnN0IHByb3BlcnRpZXNQYXRoID0gcGF0aC5yZXNvbHZlKGFuZHJvaWRIb21lLCAndG9vbHMnLCAnc291cmNlLnByb3BlcnRpZXMnKTtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMocHJvcGVydGllc1BhdGgpKSB7XG4gICAgbG9nLndhcm4oYENhbm5vdCBmaW5kICR7cHJvcGVydGllc1BhdGh9IGZpbGUgdG8gcmVhZCBTREsgdmVyc2lvbiBmcm9tYCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHByb3BlcnRpZXNDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocHJvcGVydGllc1BhdGgsICd1dGY4Jyk7XG4gIGNvbnN0IHZlcnNpb25NYXRjaGVyID0gbmV3IFJlZ0V4cCgvUGtnXFwuUmV2aXNpb249KFxcZCspXFwuPyhcXGQrKT9cXC4/KFxcZCspPy8pO1xuICBjb25zdCBtYXRjaCA9IHZlcnNpb25NYXRjaGVyLmV4ZWMocHJvcGVydGllc0NvbnRlbnQpO1xuICBpZiAobWF0Y2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFqb3I6IHBhcnNlSW50KG1hdGNoWzFdLCAxMCksXG4gICAgICBtaW5vcjogbWF0Y2hbMl0gPyBwYXJzZUludChtYXRjaFsyXSwgMTApIDogMCxcbiAgICAgIGJ1aWxkOiBtYXRjaFszXSA/IHBhcnNlSW50KG1hdGNoWzNdLCAxMCkgOiAwXG4gICAgfTtcbiAgfVxuICBsb2cud2FybihgQ2Fubm90IHBhcnNlIFwiUGtnLlJldmlzaW9uXCIgdmFsdWUgZnJvbSAke3Byb3BlcnRpZXNQYXRofWApO1xufSk7XG5cbi8qKlxuICogUmV0cmlldmVzIGZ1bGwgcGF0aHMgdG8gYWxsICdidWlsZC10b29scycgc3ViZm9sZGVycyB1bmRlciB0aGUgcGFydGljdWxhclxuICogU0RLIHJvb3QgZm9sZGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNka1Jvb3QgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBBbmRyb2lkIFNESyByb290IGZvbGRlclxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBmdWxsIHBhdGhzIHRvIHRoZSByZXN1bHRpbmcgZm9sZGVycyBzb3J0ZWQgYnlcbiAqIG1vZGlmaWNhdGlvbiBkYXRlICh0aGUgbmV3ZXN0IGNvbWVzIGZpcnN0KSBvciBhbiBlbXB0eSBsaXN0IGlmIG5vIG1hY3RoZXMgd2VyZSBmb3VuZFxuICovXG5jb25zdCBnZXRCdWlsZFRvb2xzRGlycyA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRCdWlsZFRvb2xzRGlycyAoc2RrUm9vdCkge1xuICBsZXQgYnVpbGRUb29sc0RpcnMgPSBhd2FpdCBmcy5nbG9iKCcqLycsIHtcbiAgICBjd2Q6IHBhdGgucmVzb2x2ZShzZGtSb290LCAnYnVpbGQtdG9vbHMnKSxcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgfSk7XG4gIHRyeSB7XG4gICAgYnVpbGRUb29sc0RpcnMgPSBidWlsZFRvb2xzRGlyc1xuICAgICAgLm1hcCgoZGlyKSA9PiBbcGF0aC5iYXNlbmFtZShkaXIpLCBkaXJdKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHNlbXZlci5yY29tcGFyZShhWzBdLCBiWzBdKSlcbiAgICAgIC5tYXAoKHBhaXIpID0+IHBhaXJbMV0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cud2FybihgQ2Fubm90IHNvcnQgYnVpbGQtdG9vbHMgZm9sZGVycyAke0pTT04uc3RyaW5naWZ5KGJ1aWxkVG9vbHNEaXJzLm1hcCgoZGlyKSA9PiBwYXRoLmJhc2VuYW1lKGRpcikpKX0gYCArXG4gICAgICBgYnkgc2VtYW50aWMgdmVyc2lvbiBuYW1lcy5gKTtcbiAgICBsb2cud2FybihgRmFsbGluZyBiYWNrIHRvIHNvcnRpbmcgYnkgbW9kaWZpY2F0aW9uIGRhdGUuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGNvbnN0IHBhaXJzID0gYXdhaXQgQi5tYXAoYnVpbGRUb29sc0RpcnMsIGFzeW5jIChkaXIpID0+IFsoYXdhaXQgZnMuc3RhdChkaXIpKS5tdGltZS52YWx1ZU9mKCksIGRpcl0pO1xuICAgIGJ1aWxkVG9vbHNEaXJzID0gcGFpcnNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhWzBdIDwgYlswXSlcbiAgICAgIC5tYXAoKHBhaXIpID0+IHBhaXJbMV0pO1xuICB9XG4gIGxvZy5pbmZvKGBGb3VuZCAke2J1aWxkVG9vbHNEaXJzLmxlbmd0aH0gJ2J1aWxkLXRvb2xzJyBmb2xkZXJzIHVuZGVyICcke3Nka1Jvb3R9JyAobmV3ZXN0IGZpcnN0KTpgKTtcbiAgZm9yIChsZXQgZGlyIG9mIGJ1aWxkVG9vbHNEaXJzKSB7XG4gICAgbG9nLmluZm8oYCAgICAke2Rpcn1gKTtcbiAgfVxuICByZXR1cm4gYnVpbGRUb29sc0RpcnM7XG59KTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgcGVybWlzc2lvbiBuYW1lcyBlbmNvZGVkIGluIGBkdW1wc3lzIHBhY2thZ2VgIGNvbW1hbmQgb3V0cHV0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkdW1wc3lzT3V0cHV0IC0gVGhlIGFjdHVhbCBjb21tYW5kIG91dHB1dC5cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZ3JvdXBOYW1lcyAtIFRoZSBsaXN0IG9mIGdyb3VwIG5hbWVzIHRvIGxpc3QgcGVybWlzc2lvbnMgZm9yLlxuICogQHBhcmFtIHs/Ym9vbGVhbn0gZ3JhbnRlZFN0YXRlIC0gVGhlIGV4cGVjdGVkIHN0YXRlIG9mIGBncmFudGVkYCBhdHRyaWJ1dGUgdG8gZmlsdGVyIHdpdGguXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBmaWx0ZXJpbmcgaXMgZG9uZSBpZiB0aGUgcGFyYW1ldGVyIGlzIG5vdCBzZXQuXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gVGhlIGxpc3Qgb2YgbWF0Y2hlZCBwZXJtaXNzaW9uIG5hbWVzIG9yIGFuIGVtcHR5IGxpc3QgaWYgbm8gbWF0Y2hlcyB3ZXJlIGZvdW5kLlxuICovXG5jb25zdCBleHRyYWN0TWF0Y2hpbmdQZXJtaXNzaW9ucyA9IGZ1bmN0aW9uIChkdW1wc3lzT3V0cHV0LCBncm91cE5hbWVzLCBncmFudGVkU3RhdGUgPSBudWxsKSB7XG4gIGNvbnN0IGdyb3VwUGF0dGVybkJ5TmFtZSA9IChncm91cE5hbWUpID0+IG5ldyBSZWdFeHAoYF4oXFxcXHMqJHtfLmVzY2FwZVJlZ0V4cChncm91cE5hbWUpfSBwZXJtaXNzaW9uczpbXFxcXHNcXFxcU10rKWAsICdtJyk7XG4gIGNvbnN0IGluZGVudFBhdHRlcm4gPSAvXFxTfCQvO1xuICBjb25zdCBwZXJtaXNzaW9uTmFtZVBhdHRlcm4gPSAvYW5kcm9pZFxcLlxcdypcXC4/cGVybWlzc2lvblxcLlxcdysvO1xuICBjb25zdCBncmFudGVkU3RhdGVQYXR0ZXJuID0gL1xcYmdyYW50ZWQ9KFxcdyspLztcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAoY29uc3QgZ3JvdXBOYW1lIG9mIGdyb3VwTmFtZXMpIHtcbiAgICBjb25zdCBncm91cE1hdGNoID0gZ3JvdXBQYXR0ZXJuQnlOYW1lKGdyb3VwTmFtZSkuZXhlYyhkdW1wc3lzT3V0cHV0KTtcbiAgICBpZiAoIWdyb3VwTWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbmVzID0gZ3JvdXBNYXRjaFsxXS5zcGxpdCgnXFxuJyk7XG4gICAgaWYgKGxpbmVzLmxlbmd0aCA8IDIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHRpdGxlSW5kZW50ID0gbGluZXNbMF0uc2VhcmNoKGluZGVudFBhdHRlcm4pO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcy5zbGljZSgxKSkge1xuICAgICAgY29uc3QgY3VycmVudEluZGVudCA9IGxpbmUuc2VhcmNoKGluZGVudFBhdHRlcm4pO1xuICAgICAgaWYgKGN1cnJlbnRJbmRlbnQgPD0gdGl0bGVJbmRlbnQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBlcm1pc3Npb25OYW1lTWF0Y2ggPSBwZXJtaXNzaW9uTmFtZVBhdHRlcm4uZXhlYyhsaW5lKTtcbiAgICAgIGlmICghcGVybWlzc2lvbk5hbWVNYXRjaCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgIHBlcm1pc3Npb246IHBlcm1pc3Npb25OYW1lTWF0Y2hbMF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZ3JhbnRlZFN0YXRlTWF0Y2ggPSBncmFudGVkU3RhdGVQYXR0ZXJuLmV4ZWMobGluZSk7XG4gICAgICBpZiAoZ3JhbnRlZFN0YXRlTWF0Y2gpIHtcbiAgICAgICAgaXRlbS5ncmFudGVkID0gZ3JhbnRlZFN0YXRlTWF0Y2hbMV0gPT09ICd0cnVlJztcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpbHRlcmVkUmVzdWx0ID0gcmVzdWx0XG4gICAgLmZpbHRlcigoaXRlbSkgPT4gIV8uaXNCb29sZWFuKGdyYW50ZWRTdGF0ZSkgfHwgaXRlbS5ncmFudGVkID09PSBncmFudGVkU3RhdGUpXG4gICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5wZXJtaXNzaW9uKTtcbiAgbG9nLmRlYnVnKGBSZXRyaWV2ZWQgJHt1dGlsLnBsdXJhbGl6ZSgncGVybWlzc2lvbicsIGZpbHRlcmVkUmVzdWx0Lmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgIGBmcm9tICR7Z3JvdXBOYW1lc30gJHt1dGlsLnBsdXJhbGl6ZSgnZ3JvdXAnLCBncm91cE5hbWVzLmxlbmd0aCwgZmFsc2UpfWApO1xuICByZXR1cm4gZmlsdGVyZWRSZXN1bHQ7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwbGFjZSBbdHJ1ZV0gLSBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gYmUgdXBncmFkZWQvcmVpbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGRldmljZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFydGlhbEluc3RhbGwgW2ZhbHNlXSAtIEluc3RhbGwgYXBrcyBwYXJ0aWFsbHkuIEl0IGlzIHVzZWQgZm9yICdpbnN0YWxsLW11bHRpcGxlJy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9hbmRyb2lkLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xMTEwNjQvd2hhdC1pcy1hLXBhcnRpYWwtYXBwbGljYXRpb24taW5zdGFsbC12aWEtYWRiXG4gKi9cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGdpdmVuIG9wdGlvbnMgaW50byB0aGUgbGlzdCBvZiBgYWRiIGluc3RhbGwuaW5zdGFsbC1tdWx0aXBsZWAgY29tbWFuZCBhcmd1bWVudHNcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gYXBpTGV2ZWwgLSBUaGUgY3VycmVudCBBUEkgbGV2ZWxcbiAqIEBwYXJhbSB7P0luc3RhbGxPcHRpb25zfSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgbWFwcGluZyB0byB0cmFuc2Zvcm1cbiAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmc+fSBUaGUgYXJyYXkgb2YgYXJndW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSW5zdGFsbEFyZ3MgKGFwaUxldmVsLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKG9wdGlvbnMucmVwbGFjZSkgfHwgb3B0aW9ucy5yZXBsYWNlKSB7XG4gICAgcmVzdWx0LnB1c2goJy1yJyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMuYWxsb3dUZXN0UGFja2FnZXMpIHtcbiAgICByZXN1bHQucHVzaCgnLXQnKTtcbiAgfVxuICBpZiAob3B0aW9ucy51c2VTZGNhcmQpIHtcbiAgICByZXN1bHQucHVzaCgnLXMnKTtcbiAgfVxuICBpZiAob3B0aW9ucy5ncmFudFBlcm1pc3Npb25zKSB7XG4gICAgaWYgKGFwaUxldmVsIDwgMjMpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgU2tpcHBpbmcgcGVybWlzc2lvbnMgZ3JhbnQgb3B0aW9uLCBzaW5jZSBgICtcbiAgICAgICAgICAgICAgICBgdGhlIGN1cnJlbnQgQVBJIGxldmVsICR7YXBpTGV2ZWx9IGRvZXMgbm90IHN1cHBvcnQgYXBwbGljYXRpb25zIGAgK1xuICAgICAgICAgICAgICAgIGBwZXJtaXNzaW9ucyBjdXN0b21pemF0aW9uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKCctZycpO1xuICAgIH1cbiAgfVxuICAvLyBGb3IgbXVsdGlwbGUtaW5zdGFsbFxuICBpZiAob3B0aW9ucy5wYXJ0aWFsSW5zdGFsbCkge1xuICAgIHJlc3VsdC5wdXNoKCctcCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNYW5pZmVzdEluZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwa2cgLSBUaGUgYXBwbGljYXRpb24gaWRlbnRpZmllclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdGl2aXR5IC0gVGhlIG5hbWUgb2YgdGhlIG1haW4gcGFja2FnZSBhY3Rpdml0eVxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB2ZXJzaW9uQ29kZSAtIFRoZSB2ZXJzaW9uIGNvZGUgbnVtYmVyIChtaWdodCBiZSBgTmFOYClcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmVyc2lvbk5hbWUgLSBUaGUgdmVyc2lvbiBuYW1lIChtaWdodCBiZSBgbnVsbGApXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtIHBhcnNpbmcgb2YgdGhlIG1hbmlmZXN0IG9iamVjdCBpbiBvcmRlclxuICogdG8gZXh0cmFjdCBzb21lIHZpdGFsIHZhbHVlcyBmcm9tIGl0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG1hbmlmZXN0IFRoZSBtYW5pZmVzdCBjb250ZW50IGZvcm1hdHRlZCBhcyBKU09OXG4gKiBTZWUgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYWRia2l0LWFwa3JlYWRlciBmb3IgZGV0YWlsZWQgZm9ybWF0IGRlc2NyaXB0aW9uXG4gKiBAcmV0dXJucyB7TWFuaWZlc3RJbmZvfVxuICovXG5mdW5jdGlvbiBwYXJzZU1hbmlmZXN0IChtYW5pZmVzdCkge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgcGtnOiBtYW5pZmVzdC5wYWNrYWdlLFxuICAgIHZlcnNpb25Db2RlOiBwYXJzZUludChtYW5pZmVzdC52ZXJzaW9uQ29kZSwgMTApLFxuICAgIHZlcnNpb25OYW1lOiBtYW5pZmVzdC52ZXJzaW9uTmFtZSB8fCBudWxsLFxuICB9O1xuICBpZiAoIW1hbmlmZXN0LmFwcGxpY2F0aW9uKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIExvb2sgZm9yIGVuYWJsZWQgYWN0aXZpdHkgb3IgYWN0aXZpdHktYWxpYXMgd2l0aFxuICAvLyBhY3Rpb24gPT0gYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4gYW5kXG4gIC8vIGNhdGVnb3J5ID09IGFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSXG4gIGZvciAoY29uc3QgYWN0aXZpdHkgb2YgW1xuICAgIC4uLm1hbmlmZXN0LmFwcGxpY2F0aW9uLmFjdGl2aXRpZXMsXG4gICAgLi4ubWFuaWZlc3QuYXBwbGljYXRpb24uYWN0aXZpdHlBbGlhc2VzLFxuICBdKSB7XG4gICAgaWYgKGFjdGl2aXR5LmVuYWJsZWQgPT09IGZhbHNlIHx8IF8uaXNFbXB0eShhY3Rpdml0eS5pbnRlbnRGaWx0ZXJzKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB7YWN0aW9ucywgY2F0ZWdvcmllc30gb2YgYWN0aXZpdHkuaW50ZW50RmlsdGVycykge1xuICAgICAgaWYgKF8uaXNFbXB0eShhY3Rpb25zKSB8fCBfLmlzRW1wdHkoY2F0ZWdvcmllcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzTWFpbkFjdGlvbiA9IGFjdGlvbnMuc29tZSgoe25hbWV9KSA9PiBuYW1lID09PSBNQUlOX0FDVElPTik7XG4gICAgICBjb25zdCBpc0xhdW5jaGVyQ2F0ZWdvcnkgPSBjYXRlZ29yaWVzLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gTEFVTkNIRVJfQ0FURUdPUlkpO1xuICAgICAgaWYgKGlzTWFpbkFjdGlvbiAmJiBpc0xhdW5jaGVyQ2F0ZWdvcnkpIHtcbiAgICAgICAgcmVzdWx0LmFjdGl2aXR5ID0gYWN0aXZpdHkubmFtZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYXBrIHN0cmluZ3MgZnJvbSBhYXB0IHRvb2wgb3V0cHV0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJhd091dHB1dCBUaGUgYWN0dWFsIHRvb2wgb3V0cHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnTWFya2VyIFRoZSBjb25maWcgbWFya2VyLiBVc3VhbGx5XG4gKiBhIGxhbmd1YWdlIGFiYnJldmlhdGlvbiBvciBgKGRlZmF1bHQpYFxuICogQHJldHVybnMge09iamVjdH0gU3RyaW5ncyBpZHMgdG8gdmFsdWVzIG1hcHBpbmcuIFBsdXJhbFxuICogdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyBhcnJheXMuIElmIG5vIGNvbmZpZyBmb3VuZCBmb3IgdGhlXG4gKiBnaXZlbiBtYXJrZXIgdGhlbiBhbiBlbXB0eSBtYXBwaW5nIGlzIHJldHVybmVkLlxuICovXG5mdW5jdGlvbiBwYXJzZUFhcHRTdHJpbmdzIChyYXdPdXRwdXQsIGNvbmZpZ01hcmtlcikge1xuICBjb25zdCBub3JtYWxpemVTdHJpbmdNYXRjaCA9IGZ1bmN0aW9uIChzKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZSgvXCIkLywgJycpLnJlcGxhY2UoL15cIi8sICcnKS5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJyk7XG4gIH07XG5cbiAgY29uc3QgYXBrU3RyaW5ncyA9IHt9O1xuICBsZXQgaXNJbkNvbmZpZyA9IGZhbHNlO1xuICBsZXQgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICBsZXQgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gIC8vIFRoZSBwYXR0ZXJuIG1hdGNoZXMgYW55IHF1b3RlZCBjb250ZW50IGluY2x1ZGluZyBlc2NhcGVkIHF1b3Rlc1xuICBjb25zdCBxdW90ZWRTdHJpbmdQYXR0ZXJuID0gL1wiW15cIlxcXFxdKig/OlxcXFwuW15cIlxcXFxdKikqXCIvO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgcmF3T3V0cHV0LnNwbGl0KG9zLkVPTCkpIHtcbiAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuICAgIGlmIChfLmlzRW1wdHkodHJpbW1lZExpbmUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoWydjb25maWcnLCAndHlwZScsICdzcGVjJywgJ1BhY2thZ2UnXS5zb21lKCh4KSA9PiB0cmltbWVkTGluZS5zdGFydHNXaXRoKHgpKSkge1xuICAgICAgaXNJbkNvbmZpZyA9IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoYGNvbmZpZyAke2NvbmZpZ01hcmtlcn06YCk7XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghaXNJbkNvbmZpZykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJ3Jlc291cmNlJykpIHtcbiAgICAgIGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuXG4gICAgICBpZiAodHJpbW1lZExpbmUuaW5jbHVkZXMoJzpzdHJpbmcvJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvOnN0cmluZ1xcLyhcXFMrKTovLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCc6cGx1cmFscy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC86cGx1cmFsc1xcLyhcXFMrKTovLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICAgIGlzSW5QbHVyYWxHcm91cCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50UmVzb3VyY2VJZCAmJiB0cmltbWVkTGluZS5zdGFydHNXaXRoKCcoc3RyaW5nJykpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gcXVvdGVkU3RyaW5nUGF0dGVybi5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSA9IG5vcm1hbGl6ZVN0cmluZ01hdGNoKG1hdGNoWzBdKTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50UmVzb3VyY2VJZCAmJiBpc0luUGx1cmFsR3JvdXAgJiYgdHJpbW1lZExpbmUuaW5jbHVkZXMoJzogKHN0cmluZycpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHF1b3RlZFN0cmluZ1BhdHRlcm4uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gPSBbXG4gICAgICAgICAgLi4uKGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdIHx8IFtdKSxcbiAgICAgICAgICBub3JtYWxpemVTdHJpbmdNYXRjaChtYXRjaFswXSksXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFwa1N0cmluZ3M7XG59XG5cbi8qKlxuICogUGFyc2VzIGFwayBzdHJpbmdzIGZyb20gYWFwdDIgdG9vbCBvdXRwdXRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3T3V0cHV0IFRoZSBhY3R1YWwgdG9vbCBvdXRwdXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWdNYXJrZXIgVGhlIGNvbmZpZyBtYXJrZXIuIFVzdWFsbHlcbiAqIGEgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uIG9yIGFuIGVtcHR5IHN0cmluZyBmb3IgdGhlIGRlZmF1bHQgb25lXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBTdHJpbmdzIGlkcyB0byB2YWx1ZXMgbWFwcGluZy4gUGx1cmFsXG4gKiB2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGFzIGFycmF5cy4gSWYgbm8gY29uZmlnIGZvdW5kIGZvciB0aGVcbiAqIGdpdmVuIG1hcmtlciB0aGVuIGFuIGVtcHR5IG1hcHBpbmcgaXMgcmV0dXJuZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQWFwdDJTdHJpbmdzIChyYXdPdXRwdXQsIGNvbmZpZ01hcmtlcikge1xuICBjb25zdCBhbGxMaW5lcyA9IHJhd091dHB1dC5zcGxpdChvcy5FT0wpO1xuICBmdW5jdGlvbiBleHRyYWN0Q29udGVudCAoc3RhcnRJZHgpIHtcbiAgICBsZXQgaWR4ID0gc3RhcnRJZHg7XG4gICAgY29uc3Qgc3RhcnRDaGFyUG9zID0gYWxsTGluZXNbc3RhcnRJZHhdLmluZGV4T2YoJ1wiJyk7XG4gICAgaWYgKHN0YXJ0Q2hhclBvcyA8IDApIHtcbiAgICAgIHJldHVybiBbbnVsbCwgaWR4XTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgIHdoaWxlIChpZHggPCBhbGxMaW5lcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmF0aW9uQ2hhck1hdGNoID0gL1wiJC8uZXhlYyhhbGxMaW5lc1tpZHhdKTtcbiAgICAgIGlmICh0ZXJtaW5hdGlvbkNoYXJNYXRjaCkge1xuICAgICAgICBjb25zdCB0ZXJtaW5hdGlvbkNoYXJQb3MgPSB0ZXJtaW5hdGlvbkNoYXJNYXRjaC5pbmRleDtcbiAgICAgICAgaWYgKHN0YXJ0SWR4ID09PSBpZHgpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgYWxsTGluZXNbaWR4XS5zdWJzdHJpbmcoc3RhcnRDaGFyUG9zICsgMSwgdGVybWluYXRpb25DaGFyUG9zKSxcbiAgICAgICAgICAgIGlkeFxuICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgJHtyZXN1bHR9XFxcXG4ke18udHJpbVN0YXJ0KGFsbExpbmVzW2lkeF0uc3Vic3RyaW5nKDAsIHRlcm1pbmF0aW9uQ2hhclBvcykpfWAsXG4gICAgICAgICAgaWR4LFxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgaWYgKGlkeCA+IHN0YXJ0SWR4KSB7XG4gICAgICAgIHJlc3VsdCArPSBgXFxcXG4ke18udHJpbVN0YXJ0KGFsbExpbmVzW2lkeF0pfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gYWxsTGluZXNbaWR4XS5zdWJzdHJpbmcoc3RhcnRDaGFyUG9zICsgMSk7XG4gICAgICB9XG4gICAgICArK2lkeDtcbiAgICB9XG4gICAgcmV0dXJuIFtyZXN1bHQsIGlkeF07XG4gIH1cblxuICBjb25zdCBhcGtTdHJpbmdzID0ge307XG4gIGxldCBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gIGxldCBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgbGV0IGlzSW5DdXJyZW50Q29uZmlnID0gZmFsc2U7XG4gIGxldCBsaW5lSW5kZXggPSAwO1xuICB3aGlsZSAobGluZUluZGV4IDwgYWxsTGluZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgdHJpbW1lZExpbmUgPSBhbGxMaW5lc1tsaW5lSW5kZXhdLnRyaW0oKTtcbiAgICBpZiAoXy5pc0VtcHR5KHRyaW1tZWRMaW5lKSkge1xuICAgICAgKytsaW5lSW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoWyd0eXBlJywgJ1BhY2thZ2UnXS5zb21lKCh4KSA9PiB0cmltbWVkTGluZS5zdGFydHNXaXRoKHgpKSkge1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gICAgICBpc0luQ3VycmVudENvbmZpZyA9IGZhbHNlO1xuICAgICAgKytsaW5lSW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aCgncmVzb3VyY2UnKSkge1xuICAgICAgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICBpc0luQ3VycmVudENvbmZpZyA9IGZhbHNlO1xuXG4gICAgICBpZiAodHJpbW1lZExpbmUuaW5jbHVkZXMoJ3N0cmluZy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC9zdHJpbmdcXC8oXFxTKykvLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCdwbHVyYWxzLycpKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gL3BsdXJhbHNcXC8oXFxTKykvLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG1hdGNoWzFdO1xuICAgICAgICAgIGlzSW5QbHVyYWxHcm91cCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICsrbGluZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRSZXNvdXJjZUlkKSB7XG4gICAgICBpZiAoaXNJblBsdXJhbEdyb3VwKSB7XG4gICAgICAgIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKCcoJykpIHtcbiAgICAgICAgICBpc0luQ3VycmVudENvbmZpZyA9IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoYCgke2NvbmZpZ01hcmtlcn0pYCk7XG4gICAgICAgICAgKytsaW5lSW5kZXg7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSW5DdXJyZW50Q29uZmlnKSB7XG4gICAgICAgICAgY29uc3QgW2NvbnRlbnQsIGlkeF0gPSBleHRyYWN0Q29udGVudChsaW5lSW5kZXgpO1xuICAgICAgICAgIGxpbmVJbmRleCA9IGlkeDtcbiAgICAgICAgICBpZiAoXy5pc1N0cmluZyhjb250ZW50KSkge1xuICAgICAgICAgICAgYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gPSBbXG4gICAgICAgICAgICAgIC4uLihhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSB8fCBbXSksXG4gICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKGAoJHtjb25maWdNYXJrZXJ9KWApKSB7XG4gICAgICAgIGNvbnN0IFtjb250ZW50LCBpZHhdID0gZXh0cmFjdENvbnRlbnQobGluZUluZGV4KTtcbiAgICAgICAgbGluZUluZGV4ID0gaWR4O1xuICAgICAgICBpZiAoXy5pc1N0cmluZyhjb250ZW50KSkge1xuICAgICAgICAgIGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdID0gY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgICsrbGluZUluZGV4O1xuICB9XG4gIHJldHVybiBhcGtTdHJpbmdzO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGNvbmZpZyBtYXJrZXIsIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIHBhcnNlLi4gbWV0aG9kc1xuICogdG8gbWFrZSBpdCBjb21wYXRpYmxlIHdpdGggcmVzb3VyY2UgZm9ybWF0cyBnZW5lcmF0ZWQgYnkgYWFwdCgyKSB0b29sXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZmlnc0dldHRlciBUaGUgZnVuY3Rpb24gd2hvc2UgcmVzdWx0IGlzIGEgbGlzdFxuICogb2YgYXBrIGNvbmZpZ3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXNpcmVkTWFya2VyIFRoZSBkZXNpcmVkIGNvbmZpZyBtYXJrZXIgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZWZhdWx0TWFya2VyIFRoZSBkZWZhdWx0IGNvbmZpZyBtYXJrZXIgdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBjb25maWcgbWFya2VyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZvcm1hdENvbmZpZ01hcmtlciAoY29uZmlnc0dldHRlciwgZGVzaXJlZE1hcmtlciwgZGVmYXVsdE1hcmtlcikge1xuICBsZXQgY29uZmlnTWFya2VyID0gZGVzaXJlZE1hcmtlciB8fCBkZWZhdWx0TWFya2VyO1xuICBpZiAoY29uZmlnTWFya2VyLmluY2x1ZGVzKCctJykgJiYgIWNvbmZpZ01hcmtlci5pbmNsdWRlcygnLXInKSkge1xuICAgIGNvbmZpZ01hcmtlciA9IGNvbmZpZ01hcmtlci5yZXBsYWNlKCctJywgJy1yJyk7XG4gIH1cbiAgY29uc3QgY29uZmlncyA9IGF3YWl0IGNvbmZpZ3NHZXR0ZXIoKTtcbiAgbG9nLmRlYnVnKGBSZXNvdXJjZSBjb25maWd1cmF0aW9uczogJHtKU09OLnN0cmluZ2lmeShjb25maWdzKX1gKTtcbiAgLy8gQXNzdW1lIHRoZSAnZW4nIGNvbmZpZ3VyYXRpb24gaXMgdGhlIGRlZmF1bHQgb25lXG4gIGlmIChjb25maWdNYXJrZXIudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdlbicpXG4gICAgJiYgIWNvbmZpZ3Muc29tZSgoeCkgPT4geC50cmltKCkgPT09IGNvbmZpZ01hcmtlcikpIHtcbiAgICBsb2cuZGVidWcoYFJlc291cmNlIGNvbmZpZ3VyYXRpb24gbmFtZSAnJHtjb25maWdNYXJrZXJ9JyBpcyB1bmtub3duLiBgICtcbiAgICAgIGBSZXBsYWNpbmcgaXQgd2l0aCAnJHtkZWZhdWx0TWFya2VyfSdgKTtcbiAgICBjb25maWdNYXJrZXIgPSBkZWZhdWx0TWFya2VyO1xuICB9IGVsc2Uge1xuICAgIGxvZy5kZWJ1ZyhgU2VsZWN0ZWQgY29uZmlndXJhdGlvbjogJyR7Y29uZmlnTWFya2VyfSdgKTtcbiAgfVxuICByZXR1cm4gY29uZmlnTWFya2VyO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgb3V0cHV0IGluIEpTT04gZm9ybWF0IHJldHJpZXZlZCBmcm9tXG4gKiB0aGUgY29ycmVzcG9uZGluZyBBcHBpdW0gU2V0dGluZ3MgYnJvYWRjYXN0IGNhbGxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG91dHB1dCBUaGUgYWN0dWFsIGNvbW1hbmQgb3V0cHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gZW50aXR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgZW50aXR5IHdoaWNoIGlzXG4gKiBnb2luZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBwYXJzZWQgSlNPTiBvYmplY3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgb3V0cHV0IGNhbm5vdCBiZSBwYXJzZWRcbiAqIGFzIGEgdmFsaWQgSlNPTlxuICovXG5mdW5jdGlvbiBwYXJzZUpzb25EYXRhIChvdXRwdXQsIGVudGl0eU5hbWUpIHtcbiAgaWYgKCEvXFxicmVzdWx0PS0xXFxiLy50ZXN0KG91dHB1dCkgfHwgIS9cXGJkYXRhPVwiLy50ZXN0KG91dHB1dCkpIHtcbiAgICBsb2cuZGVidWcob3V0cHV0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSAke2VudGl0eU5hbWV9IGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICAnQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gL1xcYmRhdGE9KFwiLispLy5leGVjKG91dHB1dCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICBsb2cuZGVidWcob3V0cHV0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSAke2VudGl0eU5hbWV9IGZyb20gdGhlIGNvbW1hbmQgb3V0cHV0LiBgICtcbiAgICAgICdDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gIH1cbiAgY29uc3QganNvblN0ciA9IF8udHJpbShtYXRjaFsxXSkucmVwbGFjZSgvKF5cIil8KFwiJCkvZywgJycpO1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25TdHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGpzb25TdHIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlICR7ZW50aXR5TmFtZX0gZnJvbSB0aGUgcmVzdWx0aW5nIGRhdGEgc3RyaW5nLiBgICtcbiAgICAgICdDaGVjayB0aGUgc2VydmVyIGxvZyBmb3IgbW9yZSBkZXRhaWxzJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSBnaXZlbiBsYW5ndWFnZSBhbmQgY291bnRyeSBhYmJyZXZpYXRpb25zXG4gKiB0byBBVkQgYXJndW1lbnRzIGFycmF5XG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBsYW5ndWFnZSBMYW5ndWFnZSBuYW1lLCBmb3IgZXhhbXBsZSAnZnInXG4gKiBAcGFyYW0gez9zdHJpbmd9IGNvdW50cnkgQ291bnRyeSBuYW1lLCBmb3IgZXhhbXBsZSAnQ0EnXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gVGhlIGdlbmVyYXRlZCBhcmd1bWVudHMuIFRoZVxuICogcmVzdWx0aW5nIGFycmF5IG1pZ2h0IGJlIGVtcHR5IGlmIGJvdGggYXJndW1lbnRzIGFyZSBlbXB0eVxuICovXG5mdW5jdGlvbiB0b0F2ZExvY2FsZUFyZ3MgKGxhbmd1YWdlLCBjb3VudHJ5KSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBpZiAobGFuZ3VhZ2UgJiYgXy5pc1N0cmluZyhsYW5ndWFnZSkpIHtcbiAgICByZXN1bHQucHVzaCgnLXByb3AnLCBgcGVyc2lzdC5zeXMubGFuZ3VhZ2U9JHtsYW5ndWFnZS50b0xvd2VyQ2FzZSgpfWApO1xuICB9XG4gIGlmIChjb3VudHJ5ICYmIF8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICByZXN1bHQucHVzaCgnLXByb3AnLCBgcGVyc2lzdC5zeXMuY291bnRyeT0ke2NvdW50cnkudG9VcHBlckNhc2UoKX1gKTtcbiAgfVxuICBsZXQgbG9jYWxlO1xuICBpZiAoXy5pc1N0cmluZyhsYW5ndWFnZSkgJiYgXy5pc1N0cmluZyhjb3VudHJ5KSAmJiBsYW5ndWFnZSAmJiBjb3VudHJ5KSB7XG4gICAgbG9jYWxlID0gbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSArICctJyArIGNvdW50cnkudG9VcHBlckNhc2UoKTtcbiAgfSBlbHNlIGlmIChsYW5ndWFnZSAmJiBfLmlzU3RyaW5nKGxhbmd1YWdlKSkge1xuICAgIGxvY2FsZSA9IGxhbmd1YWdlLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAoY291bnRyeSAmJiBfLmlzU3RyaW5nKGNvdW50cnkpKSB7XG4gICAgbG9jYWxlID0gY291bnRyeTtcbiAgfVxuICBpZiAobG9jYWxlKSB7XG4gICAgcmVzdWx0LnB1c2goJy1wcm9wJywgYHBlcnNpc3Quc3lzLmxvY2FsZT0ke2xvY2FsZX1gKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBBbmRyb2lkIHByZWZlcmVuY2VzIHJvb3RcbiAqXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgZm9sZGVyIG9yIGBudWxsYCBpZiB0aGUgZm9sZGVyIGNhbm5vdCBiZSBmb3VuZFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBbmRyb2lkUHJlZnNSb290ICgpIHtcbiAgbGV0IGxvY2F0aW9uID0gcHJvY2Vzcy5lbnYuQU5EUk9JRF9FTVVMQVRPUl9IT01FO1xuICBpZiAoYXdhaXQgZGlyRXhpc3RzKGxvY2F0aW9uKSkge1xuICAgIHJldHVybiBsb2NhdGlvbjtcbiAgfVxuXG4gIGlmIChsb2NhdGlvbikge1xuICAgIGxvZy53YXJuKGBUaGUgdmFsdWUgb2YgdGhlIEFORFJPSURfRU1VTEFUT1JfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnJHtsb2NhdGlvbn0nIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnlgKTtcbiAgfVxuXG4gIGNvbnN0IGhvbWUgPSBwcm9jZXNzLmVudi5IT01FIHx8IHByb2Nlc3MuZW52LlVTRVJQUk9GSUxFO1xuICBpZiAoaG9tZSkge1xuICAgIGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGhvbWUsICcuYW5kcm9pZCcpO1xuICB9XG5cbiAgaWYgKCFhd2FpdCBkaXJFeGlzdHMobG9jYXRpb24pKSB7XG4gICAgbG9nLmRlYnVnKGBBbmRyb2lkIGNvbmZpZyByb290ICcke2xvY2F0aW9ufScgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeWApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgcGF0aCBleGlzdHMgb24gdGhlIGZpbGVzeXN0ZW0gYW5kIGlzIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBsb2NhdGlvbiBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnlcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5hc3luYyBmdW5jdGlvbiBkaXJFeGlzdHMgKGxvY2F0aW9uKSB7XG4gIHJldHVybiBsb2NhdGlvblxuICAgICYmIGF3YWl0IGZzLmV4aXN0cyhsb2NhdGlvbilcbiAgICAmJiAoYXdhaXQgZnMuc3RhdChsb2NhdGlvbikpLmlzRGlyZWN0b3J5KCk7XG59XG5cbi8qKlxuICogRXNjYXBlcyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gY29tbWFuZCBsaW5lIGFyZ3VtZW50cy5cbiAqIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIHBvc3NpYmxlIGlzc3VlcyB3aXRoIGhvdyBzeXN0ZW0gYHNwYXduYFxuICogY2FsbCBoYW5kbGVzIHRoZW0uXG4gKiBTZWUgaHR0cHM6Ly9kaXNjdXNzLmFwcGl1bS5pby90L2hvdy10by1tb2RpZnktd2QtcHJveHktYW5kLXVpYXV0b21hdG9yMi1zb3VyY2UtY29kZS10by1zdXBwb3J0LXVuaWNvZGUvMzM0NjZcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZyBOb24tZXNjYXBlZCBhcmd1bWVudCBzdHJpbmdcbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIGFyZ3VtZW50XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVNoZWxsQXJnIChhcmcpIHtcbiAgYXJnID0gYCR7YXJnfWA7XG4gIGlmIChzeXN0ZW0uaXNXaW5kb3dzKCkpIHtcbiAgICByZXR1cm4gL1smfF5cXHNdLy50ZXN0KGFyZykgPyBgXCIke2FyZy5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYCA6IGFyZztcbiAgfVxuICByZXR1cm4gYXJnLnJlcGxhY2UoLyYvZywgJ1xcXFwmJyk7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBuYW1lIG9mIGxhdW5jaGFibGUgcGFja2FnZSBhY3Rpdml0eVxuICogZnJvbSBkdW1wc3lzIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHVtcHN5cyB0aGUgYWN0dWFsIGR1bXBzeXMgb3V0cHV0XG4gKiBAcmV0dXJucyB7c3RyaW5nW119IEVpdGhlciB0aGUgZnVsbHkgcXVhbGlmaWVkXG4gKiBhY3Rpdml0eSBuYW1lIGFzIGEgc2luZ2xlIGxpc3QgaXRlbSBvciBhbiBlbXB0eSBsaXN0IGlmIG5vdGhpbmcgY291bGQgYmUgcGFyc2VkLlxuICogSW4gQW5kcm9pZCA2IGFuZCBvbGRlciB0aGVyZSBpcyBubyByZWxpYWJsZSB3YXkgdG8gZGV0ZXJtaW5lXG4gKiB0aGUgY2F0ZWdvcnkgbmFtZSBmb3IgdGhlIGdpdmVuIGFjdGl2aXR5LCBzbyB0aGlzIEFQSSBqdXN0XG4gKiByZXR1cm5zIGFsbCBhY3Rpdml0eSBuYW1lcyBiZWxvbmdpbmcgdG8gJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJ1xuICogd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCB0aGUgYXBwIG1hbmlmZXN0IGNvdWxkIGJlIHBhcnNlZCBuZXh0XG4gKiBpbiBvcmRlciB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgbmFtZXMgZm9yIHRoZXNlLlxuICovXG5mdW5jdGlvbiBwYXJzZUxhdW5jaGFibGVBY3Rpdml0eU5hbWVzIChkdW1wc3lzKSB7XG4gIGNvbnN0IG1haW5BY3Rpdml0eU5hbWVSZSA9IG5ldyBSZWdFeHAoYF5cXFxccyoke18uZXNjYXBlUmVnRXhwKE1BSU5fQUNUSU9OKX06JGApO1xuICBjb25zdCBjYXRlZ29yeU5hbWVSZSA9IC9eXFxzKkNhdGVnb3J5OlxccytcIihbYS16QS1aMC05Ll8vLV0rKVwiJC87XG4gIGNvbnN0IGJsb2NrcyA9IFtdO1xuICBsZXQgYmxvY2tTdGFydEluZGVudDtcbiAgbGV0IGJsb2NrID0gW107XG4gIGZvciAoY29uc3QgbGluZSBvZiBkdW1wc3lzLnNwbGl0KCdcXG4nKS5tYXAoXy50cmltRW5kKSkge1xuICAgIGNvbnN0IGN1cnJlbnRJbmRlbnQgPSBsaW5lLmxlbmd0aCAtIF8udHJpbVN0YXJ0KGxpbmUpLmxlbmd0aDtcbiAgICBpZiAobWFpbkFjdGl2aXR5TmFtZVJlLnRlc3QobGluZSkpIHtcbiAgICAgIGJsb2NrU3RhcnRJbmRlbnQgPSBjdXJyZW50SW5kZW50O1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYmxvY2spKSB7XG4gICAgICAgIGJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgICAgICAgYmxvY2sgPSBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoXy5pc05pbChibG9ja1N0YXJ0SW5kZW50KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRJbmRlbnQgPiBibG9ja1N0YXJ0SW5kZW50KSB7XG4gICAgICBibG9jay5wdXNoKGxpbmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIV8uaXNFbXB0eShibG9jaykpIHtcbiAgICAgICAgYmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgICBibG9jayA9IFtdO1xuICAgICAgfVxuICAgICAgYmxvY2tTdGFydEluZGVudCA9IG51bGw7XG4gICAgfVxuICB9XG4gIGlmICghXy5pc0VtcHR5KGJsb2NrKSkge1xuICAgIGJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYmxvY2tzKSB7XG4gICAgbGV0IGhhc0NhdGVnb3J5ID0gZmFsc2U7XG4gICAgbGV0IGlzTGF1bmNoZXJDYXRlZ29yeSA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBpdGVtKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGNhdGVnb3J5TmFtZVJlLmV4ZWMobGluZSk7XG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBoYXNDYXRlZ29yeSA9IHRydWU7XG4gICAgICBpc0xhdW5jaGVyQ2F0ZWdvcnkgPSBtYXRjaFsxXSA9PT0gTEFVTkNIRVJfQ0FURUdPUlk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gT24gb2xkZXIgQW5kcm9pZCB2ZXJzaW9ucyB0aGUgY2F0ZWdvcnkgbmFtZVxuICAgIC8vIG1pZ2h0IG5vdCBiZSBsaXN0ZWQsIHNvIHdlIGp1c3QgdHJ5IHRvIGZldGNoXG4gICAgLy8gYWxsIG1hdGNoZXMgaW5zdGVhZFxuICAgIGlmIChoYXNDYXRlZ29yeSAmJiAhaXNMYXVuY2hlckNhdGVnb3J5KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGFjdGl2aXR5TmFtZVN0ciBvZiBpdGVtLm1hcChfLnRyaW0pLmZpbHRlcihCb29sZWFuKSkge1xuICAgICAgY29uc3QgZnFBY3Rpdml0eU5hbWUgPSBhY3Rpdml0eU5hbWVTdHIuc3BsaXQoL1xccysvKVsxXTtcbiAgICAgIGlmICghbWF0Y2hDb21wb25lbnROYW1lKGZxQWN0aXZpdHlOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTGF1bmNoZXJDYXRlZ29yeSkge1xuICAgICAgICByZXR1cm4gW2ZxQWN0aXZpdHlOYW1lXTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKGZxQWN0aXZpdHlOYW1lKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdmFsaWQgY29tcG9uZW50IG5hbWVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NTdHJpbmcgVGhlIHN0cmluZyB0byB2ZXJpZnlcbiAqIEByZXR1cm4gez9BcnJheTxNYXRjaD59IFRoZSByZXN1bHQgb2YgUmVnZXhwLmV4ZWMgb3BlcmF0aW9uXG4gKiBvciBfbnVsbF8gaWYgbm8gbWF0Y2hlcyBhcmUgZm91bmRcbiAqL1xuZnVuY3Rpb24gbWF0Y2hDb21wb25lbnROYW1lIChjbGFzc1N0cmluZykge1xuICAvLyBzb21lLnBhY2thZ2Uvc29tZS5wYWNrYWdlLkFjdGl2aXR5XG4gIHJldHVybiAvXlthLXowLTkuL19dKyQvaS5leGVjKGNsYXNzU3RyaW5nKTtcbn1cblxuZXhwb3J0IHtcbiAgZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCwgdW56aXBGaWxlLFxuICBnZXRJTUVMaXN0RnJvbU91dHB1dCwgZ2V0SmF2YUZvck9zLCBpc1Nob3dpbmdMb2Nrc2NyZWVuLCBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQsXG4gIGdldFN1cmZhY2VPcmllbnRhdGlvbiwgaXNTY3JlZW5PbkZ1bGx5LCBidWlsZFN0YXJ0Q21kLCBnZXRKYXZhSG9tZSxcbiAgZ2V0U2RrVG9vbHNWZXJzaW9uLCBnZXRBcGtzaWduZXJGb3JPcywgZ2V0QnVpbGRUb29sc0RpcnMsXG4gIGdldEFwa2FuYWx5emVyRm9yT3MsIGdldE9wZW5Tc2xGb3JPcywgZXh0cmFjdE1hdGNoaW5nUGVybWlzc2lvbnMsIEFQS1NfRVhURU5TSU9OLFxuICBBUEtfSU5TVEFMTF9USU1FT1VULCBBUEtTX0lOU1RBTExfVElNRU9VVCwgYnVpbGRJbnN0YWxsQXJncywgQVBLX0VYVEVOU0lPTixcbiAgREVGQVVMVF9BREJfRVhFQ19USU1FT1VULCBwYXJzZU1hbmlmZXN0LCBwYXJzZUFhcHRTdHJpbmdzLCBwYXJzZUFhcHQyU3RyaW5ncyxcbiAgZm9ybWF0Q29uZmlnTWFya2VyLCBwYXJzZUpzb25EYXRhLCB1bnNpZ25BcGssIHRvQXZkTG9jYWxlQXJncywgcmVxdWlyZVNka1Jvb3QsXG4gIGdldFNka1Jvb3RGcm9tRW52LCBnZXRBbmRyb2lkUHJlZnNSb290LCBkaXJFeGlzdHMsIGVzY2FwZVNoZWxsQXJnLFxuICBwYXJzZUxhdW5jaGFibGVBY3Rpdml0eU5hbWVzLCBtYXRjaENvbXBvbmVudE5hbWUsIGdldFJlc291cmNlUGF0aFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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
|