appium-adb 9.10.6 → 9.10.7
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/build/lib/helpers.js +8 -9
- package/lib/helpers.js +7 -7
- package/package.json +1 -1
package/build/lib/helpers.js
CHANGED
|
@@ -68,22 +68,21 @@ const MAIN_ACTION = 'android.intent.action.MAIN';
|
|
|
68
68
|
const LAUNCHER_CATEGORY = 'android.intent.category.LAUNCHER';
|
|
69
69
|
|
|
70
70
|
const getModuleRoot = _lodash.default.memoize(function getModuleRoot() {
|
|
71
|
-
|
|
71
|
+
let currentDir = _path.default.dirname(_path.default.resolve(__filename));
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
const currentDir = _path.default.join(_path.default.sep, ...pathParts.slice(0, pathItemIdx));
|
|
73
|
+
let isAtFsRoot = false;
|
|
75
74
|
|
|
75
|
+
while (!isAtFsRoot) {
|
|
76
76
|
const manifestPath = _path.default.join(currentDir, 'package.json');
|
|
77
77
|
|
|
78
78
|
try {
|
|
79
|
-
if (
|
|
80
|
-
continue;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (JSON.parse(_fs2.default.readFileSync(manifestPath, 'utf8')).name === 'appium-adb') {
|
|
79
|
+
if (_fs2.default.existsSync(manifestPath) && JSON.parse(_fs2.default.readFileSync(manifestPath, 'utf8')).name === 'appium-adb') {
|
|
84
80
|
return currentDir;
|
|
85
81
|
}
|
|
86
82
|
} catch (ign) {}
|
|
83
|
+
|
|
84
|
+
currentDir = _path.default.dirname(currentDir);
|
|
85
|
+
isAtFsRoot = currentDir.length <= _path.default.dirname(currentDir).length;
|
|
87
86
|
}
|
|
88
87
|
|
|
89
88
|
throw new Error('Cannot find the root folder of the appium-adb Node.js module');
|
|
@@ -974,4 +973,4 @@ function parseLaunchableActivityNames(dumpsys) {
|
|
|
974
973
|
function matchComponentName(classString) {
|
|
975
974
|
return /^[a-z0-9./_]+$/i.exec(classString);
|
|
976
975
|
}
|
|
977
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUEtTX0VYVEVOU0lPTiIsIkFQS19FWFRFTlNJT04iLCJBUEtfSU5TVEFMTF9USU1FT1VUIiwiQVBLU19JTlNUQUxMX1RJTUVPVVQiLCJERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQiLCJNQUlOX0FDVElPTiIsIkxBVU5DSEVSX0NBVEVHT1JZIiwiZ2V0TW9kdWxlUm9vdCIsIl8iLCJtZW1vaXplIiwicGF0aFBhcnRzIiwicGF0aCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJzcGxpdCIsInNlcCIsInBhdGhJdGVtSWR4IiwibGVuZ3RoIiwiY3VycmVudERpciIsImpvaW4iLCJzbGljZSIsIm1hbmlmZXN0UGF0aCIsIl9mcyIsImV4aXN0c1N5bmMiLCJKU09OIiwicGFyc2UiLCJyZWFkRmlsZVN5bmMiLCJuYW1lIiwiaWduIiwiRXJyb3IiLCJnZXRTZGtSb290RnJvbUVudiIsInByb2Nlc3MiLCJlbnYiLCJBTkRST0lEX0hPTUUiLCJBTkRST0lEX1NES19ST09UIiwicmVxdWlyZVNka1Jvb3QiLCJjdXN0b21Sb290Iiwic2RrUm9vdCIsImRvY01zZyIsImlzRW1wdHkiLCJmcyIsImV4aXN0cyIsInN0YXRzIiwic3RhdCIsImlzRGlyZWN0b3J5IiwiZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCIsInByb3BzUGF0aHMiLCJnbG9iIiwiY3dkIiwiYWJzb2x1dGUiLCJwbGF0Zm9ybXNNYXBwaW5nIiwicHJvcHNQYXRoIiwicHJvcHNDb250ZW50IiwicmVhZEZpbGUiLCJwbGF0Zm9ybVBhdGgiLCJkaXJuYW1lIiwicGxhdGZvcm0iLCJiYXNlbmFtZSIsIm1hdGNoIiwiZXhlYyIsImxvZyIsIndhcm4iLCJwYXJzZUludCIsInJlY2VudFNka1ZlcnNpb24iLCJrZXlzIiwic29ydCIsInJldmVyc2UiLCJyZXN1bHQiLCJkZWJ1ZyIsInN0cmluZ2lmeSIsInVuemlwRmlsZSIsInppcFBhdGgiLCJkc3RSb290IiwiemlwIiwiYXNzZXJ0VmFsaWRaaXAiLCJleHRyYWN0QWxsVG8iLCJ1bnNpZ25BcGsiLCJhcGtQYXRoIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwibWV0YUluZkZvbGRlck5hbWUiLCJoYXNNZXRhSW5mIiwicmVhZEVudHJpZXMiLCJlbnRyeSIsImZpbGVOYW1lIiwic3RhcnRzV2l0aCIsInRtcFppcFJvb3QiLCJyaW1yYWYiLCJ0bXBSZXN1bHRQYXRoIiwidG9BcmNoaXZlIiwidW5saW5rIiwibXYiLCJnZXRJTUVMaXN0RnJvbU91dHB1dCIsInN0ZG91dCIsImVuZ2luZXMiLCJsaW5lIiwicHVzaCIsInRyaW0iLCJyZXBsYWNlIiwiZ2V0SmF2YUhvbWUiLCJKQVZBX0hPTUUiLCJnZXRKYXZhRm9yT3MiLCJqYXZhSG9tZSIsImVyck1zZyIsImVyciIsIm1lc3NhZ2UiLCJleGVjdXRhYmxlTmFtZSIsInN5c3RlbSIsImlzV2luZG93cyIsInJlc3VsdFBhdGgiLCJ3aGljaCIsImdldE9wZW5Tc2xGb3JPcyIsImJpbmFyeU5hbWUiLCJnZXRBcGtzaWduZXJGb3JPcyIsInN5c0hlbHBlcnMiLCJnZXRCaW5hcnlGcm9tU2RrUm9vdCIsImdldEFwa2FuYWx5emVyRm9yT3MiLCJpc1Nob3dpbmdMb2Nrc2NyZWVuIiwiZHVtcHN5cyIsInNvbWUiLCJ4IiwiaW5jbHVkZXMiLCJldmVyeSIsInRlc3QiLCJpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQiLCJtIiwiZ2V0U3VyZmFjZU9yaWVudGF0aW9uIiwiaXNTY3JlZW5PbkZ1bGx5IiwiYnVpbGRTdGFydENtZCIsInN0YXJ0QXBwT3B0aW9ucyIsImFwaUxldmVsIiwidXNlciIsIndhaXRGb3JMYXVuY2giLCJwa2ciLCJhY3Rpdml0eSIsImFjdGlvbiIsImNhdGVnb3J5Iiwic3RvcEFwcCIsImZsYWdzIiwiY21kIiwidXRpbCIsImhhc1ZhbHVlIiwib3B0aW9uYWxJbnRlbnRBcmd1bWVudHMiLCJwYXJzZUtleVZhbHVlIiwic3RyIiwic3BhY2UiLCJpbmRleE9mIiwic3Vic3RyaW5nIiwicmUiLCJhcmdzIiwiYXBwbHkiLCJmbGFnIiwiZmxhZ1BvcyIsInByZXZBcmdzIiwiZ2V0U2RrVG9vbHNWZXJzaW9uIiwiYW5kcm9pZEhvbWUiLCJwcm9wZXJ0aWVzUGF0aCIsInByb3BlcnRpZXNDb250ZW50IiwidmVyc2lvbk1hdGNoZXIiLCJSZWdFeHAiLCJtYWpvciIsIm1pbm9yIiwiYnVpbGQiLCJnZXRCdWlsZFRvb2xzRGlycyIsImJ1aWxkVG9vbHNEaXJzIiwibWFwIiwiZGlyIiwiYSIsImIiLCJzZW12ZXIiLCJyY29tcGFyZSIsInBhaXIiLCJwYWlycyIsIkIiLCJtdGltZSIsInZhbHVlT2YiLCJpbmZvIiwiZXh0cmFjdE1hdGNoaW5nUGVybWlzc2lvbnMiLCJkdW1wc3lzT3V0cHV0IiwiZ3JvdXBOYW1lcyIsImdyYW50ZWRTdGF0ZSIsImdyb3VwUGF0dGVybkJ5TmFtZSIsImdyb3VwTmFtZSIsImVzY2FwZVJlZ0V4cCIsImluZGVudFBhdHRlcm4iLCJwZXJtaXNzaW9uTmFtZVBhdHRlcm4iLCJncmFudGVkU3RhdGVQYXR0ZXJuIiwiZ3JvdXBNYXRjaCIsImxpbmVzIiwidGl0bGVJbmRlbnQiLCJzZWFyY2giLCJjdXJyZW50SW5kZW50IiwicGVybWlzc2lvbk5hbWVNYXRjaCIsIml0ZW0iLCJwZXJtaXNzaW9uIiwiZ3JhbnRlZFN0YXRlTWF0Y2giLCJncmFudGVkIiwiZmlsdGVyZWRSZXN1bHQiLCJmaWx0ZXIiLCJpc0Jvb2xlYW4iLCJwbHVyYWxpemUiLCJidWlsZEluc3RhbGxBcmdzIiwib3B0aW9ucyIsImFsbG93VGVzdFBhY2thZ2VzIiwidXNlU2RjYXJkIiwiZ3JhbnRQZXJtaXNzaW9ucyIsInBhcnRpYWxJbnN0YWxsIiwicGFyc2VNYW5pZmVzdCIsIm1hbmlmZXN0IiwicGFja2FnZSIsInZlcnNpb25Db2RlIiwidmVyc2lvbk5hbWUiLCJhcHBsaWNhdGlvbiIsImFjdGl2aXRpZXMiLCJhY3Rpdml0eUFsaWFzZXMiLCJlbmFibGVkIiwiaW50ZW50RmlsdGVycyIsImFjdGlvbnMiLCJjYXRlZ29yaWVzIiwiaXNNYWluQWN0aW9uIiwiaXNMYXVuY2hlckNhdGVnb3J5IiwicGFyc2VBYXB0U3RyaW5ncyIsInJhd091dHB1dCIsImNvbmZpZ01hcmtlciIsIm5vcm1hbGl6ZVN0cmluZ01hdGNoIiwicyIsImFwa1N0cmluZ3MiLCJpc0luQ29uZmlnIiwiY3VycmVudFJlc291cmNlSWQiLCJpc0luUGx1cmFsR3JvdXAiLCJxdW90ZWRTdHJpbmdQYXR0ZXJuIiwib3MiLCJFT0wiLCJ0cmltbWVkTGluZSIsInBhcnNlQWFwdDJTdHJpbmdzIiwiYWxsTGluZXMiLCJleHRyYWN0Q29udGVudCIsInN0YXJ0SWR4IiwiaWR4Iiwic3RhcnRDaGFyUG9zIiwidGVybWluYXRpb25DaGFyTWF0Y2giLCJ0ZXJtaW5hdGlvbkNoYXJQb3MiLCJpbmRleCIsInRyaW1TdGFydCIsImlzSW5DdXJyZW50Q29uZmlnIiwibGluZUluZGV4IiwiY29udGVudCIsImlzU3RyaW5nIiwiZm9ybWF0Q29uZmlnTWFya2VyIiwiY29uZmlnc0dldHRlciIsImRlc2lyZWRNYXJrZXIiLCJkZWZhdWx0TWFya2VyIiwiY29uZmlncyIsInRvTG93ZXJDYXNlIiwicGFyc2VKc29uRGF0YSIsIm91dHB1dCIsImVudGl0eU5hbWUiLCJqc29uU3RyIiwiZSIsInRvQXZkTG9jYWxlQXJncyIsImxhbmd1YWdlIiwiY291bnRyeSIsInRvVXBwZXJDYXNlIiwibG9jYWxlIiwiZ2V0QW5kcm9pZFByZWZzUm9vdCIsImxvY2F0aW9uIiwiQU5EUk9JRF9FTVVMQVRPUl9IT01FIiwiZGlyRXhpc3RzIiwiaG9tZSIsIkhPTUUiLCJVU0VSUFJPRklMRSIsImVzY2FwZVNoZWxsQXJnIiwiYXJnIiwicGFyc2VMYXVuY2hhYmxlQWN0aXZpdHlOYW1lcyIsIm1haW5BY3Rpdml0eU5hbWVSZSIsImNhdGVnb3J5TmFtZVJlIiwiYmxvY2tzIiwiYmxvY2tTdGFydEluZGVudCIsImJsb2NrIiwidHJpbUVuZCIsImlzTmlsIiwiaGFzQ2F0ZWdvcnkiLCJhY3Rpdml0eU5hbWVTdHIiLCJCb29sZWFuIiwiZnFBY3Rpdml0eU5hbWUiLCJtYXRjaENvbXBvbmVudE5hbWUiLCJjbGFzc1N0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oZWxwZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc3lzdGVtLCBmcywgemlwLCB1dGlsLCB0ZW1wRGlyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgX2ZzIGZyb20gJ2ZzJztcblxuY29uc3QgQVBLU19FWFRFTlNJT04gPSAnLmFwa3MnO1xuY29uc3QgQVBLX0VYVEVOU0lPTiA9ICcuYXBrJztcbmNvbnN0IEFQS19JTlNUQUxMX1RJTUVPVVQgPSA2MDAwMDtcbmNvbnN0IEFQS1NfSU5TVEFMTF9USU1FT1VUID0gQVBLX0lOU1RBTExfVElNRU9VVCAqIDI7XG5jb25zdCBERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQgPSAyMDAwMDsgLy8gaW4gbWlsbGlzZWNvbmRzXG5jb25zdCBNQUlOX0FDVElPTiA9ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTic7XG5jb25zdCBMQVVOQ0hFUl9DQVRFR09SWSA9ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUic7XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgcGF0aCB0byB0aGUgY3VycmVudCBtb2R1bGUncyByb290IGZvbGRlclxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gbW9kdWxlIHJvb3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY3VycmVudCBtb2R1bGUgcm9vdCBmb2xkZXIgY2Fubm90IGJlIGRldGVybWluZWRcbiAqL1xuY29uc3QgZ2V0TW9kdWxlUm9vdCA9IF8ubWVtb2l6ZShmdW5jdGlvbiBnZXRNb2R1bGVSb290ICgpIHtcbiAgY29uc3QgcGF0aFBhcnRzID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSkuc3BsaXQocGF0aC5zZXApO1xuICBmb3IgKGxldCBwYXRoSXRlbUlkeCA9IHBhdGhQYXJ0cy5sZW5ndGg7IHBhdGhJdGVtSWR4ID4gMDsgLS1wYXRoSXRlbUlkeCkge1xuICAgIGNvbnN0IGN1cnJlbnREaXIgPSBwYXRoLmpvaW4ocGF0aC5zZXAsIC4uLihwYXRoUGFydHMuc2xpY2UoMCwgcGF0aEl0ZW1JZHgpKSk7XG4gICAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aC5qb2luKGN1cnJlbnREaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfZnMuZXhpc3RzU3luYyhtYW5pZmVzdFBhdGgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKEpTT04ucGFyc2UoX2ZzLnJlYWRGaWxlU3luYyhtYW5pZmVzdFBhdGgsICd1dGY4JykpLm5hbWUgPT09ICdhcHBpdW0tYWRiJykge1xuICAgICAgICByZXR1cm4gY3VycmVudERpcjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCB0aGUgcm9vdCBmb2xkZXIgb2YgdGhlIGFwcGl1bS1hZGIgTm9kZS5qcyBtb2R1bGUnKTtcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHBhdGggdG8gU0RLIHJvb3QgZm9sZGVyIGZyb20gdGhlIHN5c3RlbSBlbnZpcm9ubWVudFxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gdGhlIFNESyByb290IGZvbGRlclxuICovXG5mdW5jdGlvbiBnZXRTZGtSb290RnJvbUVudiAoKSB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5BTkRST0lEX0hPTUUgfHwgcHJvY2Vzcy5lbnYuQU5EUk9JRF9TREtfUk9PVDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBwYXRoIHRvIFNESyByb290IGZvbGRlclxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgU0RLIHJvb3QgZm9sZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgZWl0aGVyIHRoZSBjb3JyZXNwb25kaW5nIGVudiB2YXJpYWJsZSBpcyB1bnNldCBvciBpc1xuICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBmaWxlIHN5c3RlbSBlbnRyeVxuICovXG5hc3luYyBmdW5jdGlvbiByZXF1aXJlU2RrUm9vdCAoY3VzdG9tUm9vdCA9IG51bGwpIHtcbiAgY29uc3Qgc2RrUm9vdCA9IGN1c3RvbVJvb3QgfHwgZ2V0U2RrUm9vdEZyb21FbnYoKTtcbiAgY29uc3QgZG9jTXNnID0gJ1JlYWQgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL2NvbW1hbmQtbGluZS92YXJpYWJsZXMgZm9yIG1vcmUgZGV0YWlscyc7XG4gIGlmIChfLmlzRW1wdHkoc2RrUm9vdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5laXRoZXIgQU5EUk9JRF9IT01FIG5vciBBTkRST0lEX1NES19ST09UIGVudmlyb25tZW50IHZhcmlhYmxlIHdhcyBleHBvcnRlZC4gJHtkb2NNc2d9YCk7XG4gIH1cblxuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzZGtSb290KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEFuZHJvaWQgU0RLIHJvb3QgZm9sZGVyICcke3Nka1Jvb3R9JyBkb2VzIG5vdCBleGlzdCBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uICR7ZG9jTXNnfWApO1xuICB9XG4gIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChzZGtSb290KTtcbiAgaWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQW5kcm9pZCBTREsgcm9vdCAnJHtzZGtSb290fScgbXVzdCBiZSBhIGZvbGRlci4gJHtkb2NNc2d9YCk7XG4gIH1cbiAgcmV0dXJuIHNka1Jvb3Q7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGxhdGZvcm1JbmZvXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBsYXRmb3JtIC0gVGhlIHBsYXRmb3JtIG5hbWUsIGZvciBleGFtcGxlIGBhbmRyb2lkLTI0YFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGxhdGZvcm1QYXRoIC0gRnVsbCBwYXRoIHRvIHRoZSBwbGF0Zm9ybSBTREsgZm9sZGVyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBwYXRoIHRvIHRoZSByZWNlbnQgaW5zdGFsbGVkIEFuZHJvaWQgcGxhdGZvcm0uXG4gKlxuICogQHJldHVybiB7UGxhdGZvcm1JbmZvfSBUaGUgcmVzdWx0aW5nIHBhdGggdG8gdGhlIG5ld2VzdCBpbnN0YWxsZWQgcGxhdGZvcm0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGggKHNka1Jvb3QpIHtcbiAgY29uc3QgcHJvcHNQYXRocyA9IGF3YWl0IGZzLmdsb2IoJyovYnVpbGQucHJvcCcsIHtcbiAgICBjd2Q6IHBhdGgucmVzb2x2ZShzZGtSb290LCAncGxhdGZvcm1zJyksXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gIH0pO1xuICBjb25zdCBwbGF0Zm9ybXNNYXBwaW5nID0ge307XG4gIGZvciAoY29uc3QgcHJvcHNQYXRoIG9mIHByb3BzUGF0aHMpIHtcbiAgICBjb25zdCBwcm9wc0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwcm9wc1BhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBsYXRmb3JtUGF0aCA9IHBhdGguZGlybmFtZShwcm9wc1BhdGgpO1xuICAgIGNvbnN0IHBsYXRmb3JtID0gcGF0aC5iYXNlbmFtZShwbGF0Zm9ybVBhdGgpO1xuICAgIGNvbnN0IG1hdGNoID0gL3JvXFwuYnVpbGRcXC52ZXJzaW9uXFwuc2RrPShcXGQrKS8uZXhlYyhwcm9wc0NvbnRlbnQpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgcmVhZCB0aGUgU0RLIHZlcnNpb24gZnJvbSAnJHtwcm9wc1BhdGh9Jy4gU2tpcHBpbmcgJyR7cGxhdGZvcm19J2ApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHBsYXRmb3Jtc01hcHBpbmdbcGFyc2VJbnQobWF0Y2hbMV0sIDEwKV0gPSB7XG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIHBsYXRmb3JtUGF0aCxcbiAgICB9O1xuICB9XG4gIGlmIChfLmlzRW1wdHkocGxhdGZvcm1zTWFwcGluZykpIHtcbiAgICBsb2cud2FybihgRm91bmQgemVybyBwbGF0Zm9ybSBmb2xkZXJzIGF0ICcke3BhdGgucmVzb2x2ZShzZGtSb290LCAncGxhdGZvcm1zJyl9Jy4gYCArXG4gICAgICBgRG8geW91IGhhdmUgYW55IEFuZHJvaWQgU0RLcyBpbnN0YWxsZWQ/YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsYXRmb3JtOiBudWxsLFxuICAgICAgcGxhdGZvcm1QYXRoOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBjb25zdCByZWNlbnRTZGtWZXJzaW9uID0gXy5rZXlzKHBsYXRmb3Jtc01hcHBpbmcpLnNvcnQoKS5yZXZlcnNlKClbMF07XG4gIGNvbnN0IHJlc3VsdCA9IHBsYXRmb3Jtc01hcHBpbmdbcmVjZW50U2RrVmVyc2lvbl07XG4gIGxvZy5kZWJ1ZyhgRm91bmQgdGhlIG1vc3QgcmVjZW50IEFuZHJvaWQgcGxhdGZvcm06ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW56aXBGaWxlICh6aXBQYXRoLCBkc3RSb290ID0gcGF0aC5kaXJuYW1lKHppcFBhdGgpKSB7XG4gIGxvZy5kZWJ1ZyhgVW56aXBwaW5nICcke3ppcFBhdGh9JyB0byAnJHtkc3RSb290fSdgKTtcbiAgYXdhaXQgemlwLmFzc2VydFZhbGlkWmlwKHppcFBhdGgpO1xuICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHppcFBhdGgsIGRzdFJvb3QpO1xuICBsb2cuZGVidWcoJ1VuemlwIHN1Y2Nlc3NmdWwnKTtcbn1cblxuLyoqXG4gKiBVbnNpZ25zIHRoZSBnaXZlbiBhcGsgYnkgcmVtb3ZpbmcgdGhlXG4gKiBNRVRBLUlORiBmb2xkZXIgcmVjdXJzaXZlbHkgZnJvbSB0aGUgYXJjaGl2ZS5cbiAqICEhISBUaGUgZnVuY3Rpb24gb3ZlcndyaXRlcyB0aGUgZ2l2ZW4gYXBrIGFmdGVyIHN1Y2Nlc3NmdWwgdW5zaWduaW5nICEhIVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtQYXRoIFRoZSBwYXRoIHRvIHRoZSBhcGtcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGFwayBoYXMgYmVlbiBzdWNjZXNzZnVsbHlcbiAqIHVuc2lnbmVkIGFuZCBvdmVyd3JpdHRlblxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgdGhlIHVuc2lnbiBvcGVyYXRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdW5zaWduQXBrIChhcGtQYXRoKSB7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgY29uc3QgbWV0YUluZkZvbGRlck5hbWUgPSAnTUVUQS1JTkYnO1xuICB0cnkge1xuICAgIGxldCBoYXNNZXRhSW5mID0gZmFsc2U7XG4gICAgYXdhaXQgemlwLnJlYWRFbnRyaWVzKGFwa1BhdGgsICh7ZW50cnl9KSA9PiB7XG4gICAgICBoYXNNZXRhSW5mID0gZW50cnkuZmlsZU5hbWUuc3RhcnRzV2l0aChgJHttZXRhSW5mRm9sZGVyTmFtZX0vYCk7XG4gICAgICAvLyBlbnRyaWVzIGl0ZXJhdGlvbiBzdG9wcyBhZnRlciBgZmFsc2VgIGlzIHJldHVybmVkXG4gICAgICByZXR1cm4gIWhhc01ldGFJbmY7XG4gICAgfSk7XG4gICAgaWYgKCFoYXNNZXRhSW5mKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHRtcFppcFJvb3QgPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgJ2FwaycpO1xuICAgIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oYXBrUGF0aCwgdG1wWmlwUm9vdCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHBhdGgucmVzb2x2ZSh0bXBaaXBSb290LCBtZXRhSW5mRm9sZGVyTmFtZSkpO1xuICAgIGNvbnN0IHRtcFJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgcGF0aC5iYXNlbmFtZShhcGtQYXRoKSk7XG4gICAgYXdhaXQgemlwLnRvQXJjaGl2ZSh0bXBSZXN1bHRQYXRoLCB7XG4gICAgICBjd2Q6IHRtcFppcFJvb3QsXG4gICAgfSk7XG4gICAgYXdhaXQgZnMudW5saW5rKGFwa1BhdGgpO1xuICAgIGF3YWl0IGZzLm12KHRtcFJlc3VsdFBhdGgsIGFwa1BhdGgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJTUVMaXN0RnJvbU91dHB1dCAoc3Rkb3V0KSB7XG4gIGxldCBlbmdpbmVzID0gW107XG4gIGZvciAobGV0IGxpbmUgb2Ygc3Rkb3V0LnNwbGl0KCdcXG4nKSkge1xuICAgIGlmIChsaW5lLmxlbmd0aCA+IDAgJiYgbGluZVswXSAhPT0gJyAnKSB7XG4gICAgICAvLyByZW1vdmUgbmV3bGluZSBhbmQgdHJhaWxpbmcgY29sb24sIGFuZCBhZGQgdG8gdGhlIGxpc3RcbiAgICAgIGVuZ2luZXMucHVzaChsaW5lLnRyaW0oKS5yZXBsYWNlKC86JC8sICcnKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbmdpbmVzO1xufVxuXG5jb25zdCBnZXRKYXZhSG9tZSA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRKYXZhSG9tZSAoKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3MuZW52LkpBVkFfSE9NRTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBKQVZBX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcycpO1xuICB9XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBKQVZBX0hPTUUgbG9jYXRpb24gJyR7cmVzdWx0fScgbXVzdCBleGlzdGApO1xuICB9XG4gIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChyZXN1bHQpO1xuICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBKQVZBX0hPTUUgbG9jYXRpb24gJyR7cmVzdWx0fScgbXVzdCBiZSBhIHZhbGlkIGZvbGRlcmApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuY29uc3QgZ2V0SmF2YUZvck9zID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldEphdmFGb3JPcyAoKSB7XG4gIGxldCBqYXZhSG9tZTtcbiAgbGV0IGVyck1zZztcbiAgdHJ5IHtcbiAgICBqYXZhSG9tZSA9IGF3YWl0IGdldEphdmFIb21lKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVyck1zZyA9IGVyci5tZXNzYWdlO1xuICB9XG4gIGNvbnN0IGV4ZWN1dGFibGVOYW1lID0gYGphdmEke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG4gIGlmIChqYXZhSG9tZSkge1xuICAgIGNvbnN0IHJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUoamF2YUhvbWUsICdiaW4nLCBleGVjdXRhYmxlTmFtZSk7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgICAgcmV0dXJuIHJlc3VsdFBhdGg7XG4gICAgfVxuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZzLndoaWNoKGV4ZWN1dGFibGVOYW1lKTtcbiAgfSBjYXRjaCAoaWduKSB7fVxuICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtleGVjdXRhYmxlTmFtZX0nIGJpbmFyeSBjb3VsZCBub3QgYmUgZm91bmQgYCArXG4gICAgYG5laXRoZXIgaW4gUEFUSCBub3IgdW5kZXIgSkFWQV9IT01FICgke2Vyck1zZyB8fCBwYXRoLnJlc29sdmUoamF2YUhvbWUsICdiaW4nKX0pYCk7XG59KTtcblxuY29uc3QgZ2V0T3BlblNzbEZvck9zID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCBiaW5hcnlOYW1lID0gYG9wZW5zc2wke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZzLndoaWNoKGJpbmFyeU5hbWUpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBvcGVuc3NsIHRvb2wgbXVzdCBiZSBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbSBhbmQgYXZhaWxhYmxlIG9uIHRoZSBwYXRoJyk7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGFwa3NpZ25lciB0b29sXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN5c0hlbHBlcnMgLSBBbiBpbnN0YW5jZSBjb250YWluaW5nIHN5c3RlbUNhbGxNZXRob2RzIGhlbHBlciBtZXRob2RzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBbiBhYnNvbHV0ZSBwYXRoIHRvIGFwa3NpZ25lciB0b29sLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSB0b29sIGlzIG5vdCBwcmVzZW50IG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QXBrc2lnbmVyRm9yT3MgKHN5c0hlbHBlcnMpIHtcbiAgcmV0dXJuIGF3YWl0IHN5c0hlbHBlcnMuZ2V0QmluYXJ5RnJvbVNka1Jvb3QoJ2Fwa3NpZ25lci5qYXInKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGFic29sdXRlIHBhdGggdG8gYXBrYW5hbHl6ZXIgdG9vbC5cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby9jb21tYW5kLWxpbmUvYXBrYW5hbHl6ZXIuaHRtbFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzeXNIZWxwZXJzIC0gQW4gaW5zdGFuY2UgY29udGFpbmluZyBzeXN0ZW1DYWxsTWV0aG9kcyBoZWxwZXIgbWV0aG9kc1xuICogQHJldHVybnMge3N0cmluZ30gQW4gYWJzb2x1dGUgcGF0aCB0byBhcGthbmFseXplciB0b29sLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSB0b29sIGlzIG5vdCBwcmVzZW50IG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QXBrYW5hbHl6ZXJGb3JPcyAoc3lzSGVscGVycykge1xuICByZXR1cm4gYXdhaXQgc3lzSGVscGVycy5nZXRCaW5hcnlGcm9tU2RrUm9vdCgnYXBrYW5hbHl6ZXInKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgbVNob3dpbmdMb2Nrc2NyZWVuIG9yIG1EcmVhbWluZ0xvY2tzY3JlZW4gaW4gZHVtcHN5cyBvdXRwdXQgdG8gZGV0ZXJtaW5lXG4gKiBpZiBsb2NrIHNjcmVlbiBpcyBzaG93aW5nXG4gKlxuICogQSBub3RlOiBgYWRiIHNoZWxsIGR1bXBzeXMgdHJ1c3RgIHBlcmZvcm1zIGJldHRlciB3aGlsZSBkZXRlY3RpbmcgdGhlIGxvY2tlZCBzY3JlZW4gc3RhdGVcbiAqIGluIGNvbXBhcmlzb24gdG8gYGFkYiBkdW1wc3lzIHdpbmRvd2Agb3V0cHV0IHBhcnNpbmcuXG4gKiBCdXQgdGhlIHRydXN0IGNvbW1hbmQgZG9lcyBub3Qgd29yayBmb3IgYFN3aXBlYCB1bmxvY2sgcGF0dGVybi5cbiAqXG4gKiBJbiBzb21lIEFuZHJvaWQgZGV2aWNlcyAoUHJvYmFibHkgYXJvdW5kIEFuZHJvaWQgMTArKSwgYG1TaG93aW5nTG9ja3NjcmVlbmAgYW5kIGBtRHJlYW1pbmdMb2Nrc2NyZWVuYFxuICogZG8gbm90IHdvcmsgdG8gZGV0ZWN0IGxvY2sgc3RhdHVzLiBJbnN0ZWFkLCBrZXlndWFyZCBwcmVmZXJlbmNlcyBoZWxwcyB0byBkZXRlY3QgdGhlIGxvY2sgY29uZGl0aW9uLlxuICogU29tZSBkZXZpY2VzIHN1Y2ggYXMgQW5kcm9pZCBUViBkbyBub3QgaGF2ZSBrZXlndWFyZCwgc28gd2Ugc2hvdWxkIGtlZXBcbiAqIHNjcmVlbiBjb25kaXRpb24gYXMgdGhpcyBwcmltYXJ5IG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHVtcHN5cyAtIFRoZSBvdXRwdXQgb2YgZHVtcHN5cyB3aW5kb3cgY29tbWFuZC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbG9jayBzY3JlZW4gaXMgc2hvd2luZy5cbiAqL1xuZnVuY3Rpb24gaXNTaG93aW5nTG9ja3NjcmVlbiAoZHVtcHN5cykge1xuICByZXR1cm4gXy5zb21lKFsnbVNob3dpbmdMb2Nrc2NyZWVuPXRydWUnLCAnbURyZWFtaW5nTG9ja3NjcmVlbj10cnVlJ10sICh4KSA9PiBkdW1wc3lzLmluY2x1ZGVzKHgpKVxuICAgIC8vIGBtSXNTaG93aW5nYCBhbmQgYG1JbnB1dFJlc3RyaWN0ZWRgIGFyZSBgdHJ1ZWAgaW4gbG9jayBjb25kaXRpb24uIGBmYWxzZWAgaXMgdW5sb2NrIGNvbmRpdGlvbi5cbiAgICB8fCBfLmV2ZXJ5KFsvS2V5Z3VhcmRTdGF0ZU1vbml0b3JbXFxuXFxzXSttSXNTaG93aW5nPXRydWUvLCAvXFxzK21JbnB1dFJlc3RyaWN0ZWQ9dHJ1ZS9dLCAoeCkgPT4geC50ZXN0KGR1bXBzeXMpKTtcbn1cblxuLypcbiAqIENoZWNrcyBtQ3VycmVudEZvY3VzIGluIGR1bXBzeXMgb3V0cHV0IHRvIGRldGVybWluZSBpZiBLZXlndWFyZCBpcyBhY3RpdmF0ZWRcbiAqL1xuZnVuY3Rpb24gaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkIChkdW1wc3lzKSB7XG4gIGxldCBtID0gL21DdXJyZW50Rm9jdXMuK0tleWd1YXJkL2dpLmV4ZWMoZHVtcHN5cyk7XG4gIHJldHVybiAobSAmJiBtLmxlbmd0aCAmJiBtWzBdKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuLypcbiAqIFJlYWRzIFN1cmZhY2VPcmllbnRhdGlvbiBpbiBkdW1wc3lzIG91dHB1dFxuICovXG5mdW5jdGlvbiBnZXRTdXJmYWNlT3JpZW50YXRpb24gKGR1bXBzeXMpIHtcbiAgbGV0IG0gPSAvU3VyZmFjZU9yaWVudGF0aW9uOiBcXGQvZ2kuZXhlYyhkdW1wc3lzKTtcbiAgcmV0dXJuIG0gJiYgcGFyc2VJbnQobVswXS5zcGxpdCgnOicpWzFdLCAxMCk7XG59XG5cbi8qXG4gKiBDaGVja3MgbVNjcmVlbk9uRnVsbHkgaW4gZHVtcHN5cyBvdXRwdXQgdG8gZGV0ZXJtaW5lIGlmIHNjcmVlbiBpcyBzaG93aW5nXG4gKiBEZWZhdWx0IGlzIHRydWVcbiAqL1xuZnVuY3Rpb24gaXNTY3JlZW5PbkZ1bGx5IChkdW1wc3lzKSB7XG4gIGxldCBtID0gL21TY3JlZW5PbkZ1bGx5PVxcdysvZ2kuZXhlYyhkdW1wc3lzKTtcbiAgcmV0dXJuICFtIHx8IC8vIGlmIGluZm9ybWF0aW9uIGlzIG1pc3Npbmcgd2UgYXNzdW1lIHNjcmVlbiBpcyBmdWxseSBvblxuICAgICAgICAgKG0gJiYgbS5sZW5ndGggPiAwICYmIG1bMF0uc3BsaXQoJz0nKVsxXSA9PT0gJ3RydWUnKSB8fCBmYWxzZTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgY29tbWFuZCBsaW5lIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZ2l2ZW5cbiAqIGFwcGxpY2F0aW9uIHN0YXJ0dXAgb3B0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3RhcnRBcHBPcHRpb25zfSBzdGFydEFwcE9wdGlvbnMgLSBBcHBsaWNhdGlvbiBvcHRpb25zIG1hcHBpbmdcbiAqIEBwYXJhbSB7bnVtYmVyfSBhcGlMZXZlbCAtIFRoZSBhY3R1YWwgT1MgQVBJIGxldmVsXG4gKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn0gVGhlIGFjdHVhbCBjb21tYW5kIGxpbmUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gYnVpbGRTdGFydENtZCAoc3RhcnRBcHBPcHRpb25zLCBhcGlMZXZlbCkge1xuICBjb25zdCB7XG4gICAgdXNlcixcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICAgIHBrZyxcbiAgICBhY3Rpdml0eSxcbiAgICBhY3Rpb24sXG4gICAgY2F0ZWdvcnksXG4gICAgc3RvcEFwcCxcbiAgICBmbGFncyxcbiAgfSA9IHN0YXJ0QXBwT3B0aW9ucztcbiAgY29uc3QgY21kID0gWydhbScsICdzdGFydCddO1xuICBpZiAodXRpbC5oYXNWYWx1ZSh1c2VyKSkge1xuICAgIGNtZC5wdXNoKCctLXVzZXInLCB1c2VyKTtcbiAgfVxuICBpZiAod2FpdEZvckxhdW5jaCkge1xuICAgIGNtZC5wdXNoKCctVycpO1xuICB9XG4gIGlmIChhY3Rpdml0eSAmJiBwa2cpIHtcbiAgICBjbWQucHVzaCgnLW4nLCBgJHtwa2d9LyR7YWN0aXZpdHl9YCk7XG4gIH1cbiAgaWYgKHN0b3BBcHAgJiYgYXBpTGV2ZWwgPj0gMTUpIHtcbiAgICBjbWQucHVzaCgnLVMnKTtcbiAgfVxuICBpZiAoYWN0aW9uKSB7XG4gICAgY21kLnB1c2goJy1hJywgYWN0aW9uKTtcbiAgfVxuICBpZiAoY2F0ZWdvcnkpIHtcbiAgICBjbWQucHVzaCgnLWMnLCBjYXRlZ29yeSk7XG4gIH1cbiAgaWYgKGZsYWdzKSB7XG4gICAgY21kLnB1c2goJy1mJywgZmxhZ3MpO1xuICB9XG4gIGlmIChzdGFydEFwcE9wdGlvbnMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMpIHtcbiAgICAvLyBleHBlY3Qgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgdG8gYmUgYSBzaW5nbGUgc3RyaW5nIG9mIHRoZSBmb3JtOlxuICAgIC8vICAgICBcIi1mbGFnIGtleVwiXG4gICAgLy8gICAgIFwiLWZsYWcga2V5IHZhbHVlXCJcbiAgICAvLyBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZXNlIChlLmcuLCBcIi1mbGFnMSBrZXkxIC1mbGFnMiBrZXkyIHZhbHVlMlwiKVxuXG4gICAgLy8gdGFrZSBhIHN0cmluZyBhbmQgcGFyc2Ugb3V0IHRoZSBwYXJ0IGJlZm9yZSBhbnkgc3BhY2VzLCBhbmQgYW55dGhpbmcgYWZ0ZXJcbiAgICAvLyB0aGUgZmlyc3Qgc3BhY2VcbiAgICBsZXQgcGFyc2VLZXlWYWx1ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgICBsZXQgc3BhY2UgPSBzdHIuaW5kZXhPZignICcpO1xuICAgICAgaWYgKHNwYWNlID09PSAtMSkge1xuICAgICAgICByZXR1cm4gc3RyLmxlbmd0aCA/IFtzdHJdIDogW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW3N0ci5zdWJzdHJpbmcoMCwgc3BhY2UpLnRyaW0oKSwgc3RyLnN1YnN0cmluZyhzcGFjZSArIDEpLnRyaW0oKV07XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGN5Y2xlIHRocm91Z2ggdGhlIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIGFuZCBwdWxsIG91dCB0aGUgYXJndW1lbnRzXG4gICAgLy8gYWRkIGEgc3BhY2UgaW5pdGlhbGx5IHNvIGZsYWdzIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGZyb20gYXJndW1lbnRzIHRoYXRcbiAgICAvLyBoYXZlIGludGVybmFsIGh5cGhlbnNcbiAgICBsZXQgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgPSBgICR7c3RhcnRBcHBPcHRpb25zLm9wdGlvbmFsSW50ZW50QXJndW1lbnRzfWA7XG4gICAgbGV0IHJlID0gLyAoLVteXFxzXSspICguKykvO1xuICAgIHdoaWxlICh0cnVlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICBsZXQgYXJncyA9IHJlLmV4ZWMob3B0aW9uYWxJbnRlbnRBcmd1bWVudHMpO1xuICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgIGlmIChvcHRpb25hbEludGVudEFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBubyBtb3JlIGZsYWdzLCBzbyB0aGUgcmVtYWluZGVyIGNhbiBiZSB0cmVhdGVkIGFzICdrZXknIG9yICdrZXkgdmFsdWUnXG4gICAgICAgICAgY21kLnB1c2guYXBwbHkoY21kLCBwYXJzZUtleVZhbHVlKG9wdGlvbmFsSW50ZW50QXJndW1lbnRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgYXJlIGRvbmVcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIHRha2UgdGhlIGZsYWcgYW5kIHNlZSBpZiBpdCBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmdcbiAgICAgIC8vIGlmIGl0IGlzIG5vdCwgdGhlbiBpdCBtZWFucyB3ZSBoYXZlIGJlZW4gdGhyb3VnaCBhbHJlYWR5LCBhbmRcbiAgICAgIC8vIHdoYXQgaXMgYmVmb3JlIHRoZSBmbGFnIGlzIHRoZSBhcmd1bWVudCBmb3IgdGhlIHByZXZpb3VzIGZsYWdcbiAgICAgIGxldCBmbGFnID0gYXJnc1sxXTtcbiAgICAgIGxldCBmbGFnUG9zID0gb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMuaW5kZXhPZihmbGFnKTtcbiAgICAgIGlmIChmbGFnUG9zICE9PSAwKSB7XG4gICAgICAgIGxldCBwcmV2QXJncyA9IG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLnN1YnN0cmluZygwLCBmbGFnUG9zKTtcbiAgICAgICAgY21kLnB1c2guYXBwbHkoY21kLCBwYXJzZUtleVZhbHVlKHByZXZBcmdzKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCB0aGUgZmxhZywgYXMgdGhlcmUgYXJlIG5vIG1vcmUgZWFybGllciBhcmd1bWVudHNcbiAgICAgIGNtZC5wdXNoKGZsYWcpO1xuXG4gICAgICAvLyBtYWtlIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIGhvbGQgdGhlIHJlbWFpbmRlclxuICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgPSBhcmdzWzJdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY21kO1xufVxuXG5jb25zdCBnZXRTZGtUb29sc1ZlcnNpb24gPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0U2RrVG9vbHNWZXJzaW9uICgpIHtcbiAgY29uc3QgYW5kcm9pZEhvbWUgPSBwcm9jZXNzLmVudi5BTkRST0lEX0hPTUU7XG4gIGlmICghYW5kcm9pZEhvbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FORFJPSURfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBleHBlY3RlZCB0byBiZSBzZXQnKTtcbiAgfVxuICBjb25zdCBwcm9wZXJ0aWVzUGF0aCA9IHBhdGgucmVzb2x2ZShhbmRyb2lkSG9tZSwgJ3Rvb2xzJywgJ3NvdXJjZS5wcm9wZXJ0aWVzJyk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHByb3BlcnRpZXNQYXRoKSkge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgZmluZCAke3Byb3BlcnRpZXNQYXRofSBmaWxlIHRvIHJlYWQgU0RLIHZlcnNpb24gZnJvbWApO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwcm9wZXJ0aWVzQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb3BlcnRpZXNQYXRoLCAndXRmOCcpO1xuICBjb25zdCB2ZXJzaW9uTWF0Y2hlciA9IG5ldyBSZWdFeHAoL1BrZ1xcLlJldmlzaW9uPShcXGQrKVxcLj8oXFxkKyk/XFwuPyhcXGQrKT8vKTtcbiAgY29uc3QgbWF0Y2ggPSB2ZXJzaW9uTWF0Y2hlci5leGVjKHByb3BlcnRpZXNDb250ZW50KTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1ham9yOiBwYXJzZUludChtYXRjaFsxXSwgMTApLFxuICAgICAgbWlub3I6IG1hdGNoWzJdID8gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKSA6IDAsXG4gICAgICBidWlsZDogbWF0Y2hbM10gPyBwYXJzZUludChtYXRjaFszXSwgMTApIDogMFxuICAgIH07XG4gIH1cbiAgbG9nLndhcm4oYENhbm5vdCBwYXJzZSBcIlBrZy5SZXZpc2lvblwiIHZhbHVlIGZyb20gJHtwcm9wZXJ0aWVzUGF0aH1gKTtcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyBmdWxsIHBhdGhzIHRvIGFsbCAnYnVpbGQtdG9vbHMnIHN1YmZvbGRlcnMgdW5kZXIgdGhlIHBhcnRpY3VsYXJcbiAqIFNESyByb290IGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZGtSb290IC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgQW5kcm9pZCBTREsgcm9vdCBmb2xkZXJcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBUaGUgZnVsbCBwYXRocyB0byB0aGUgcmVzdWx0aW5nIGZvbGRlcnMgc29ydGVkIGJ5XG4gKiBtb2RpZmljYXRpb24gZGF0ZSAodGhlIG5ld2VzdCBjb21lcyBmaXJzdCkgb3IgYW4gZW1wdHkgbGlzdCBpZiBubyBtYWN0aGVzIHdlcmUgZm91bmRcbiAqL1xuY29uc3QgZ2V0QnVpbGRUb29sc0RpcnMgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0QnVpbGRUb29sc0RpcnMgKHNka1Jvb3QpIHtcbiAgbGV0IGJ1aWxkVG9vbHNEaXJzID0gYXdhaXQgZnMuZ2xvYignKi8nLCB7XG4gICAgY3dkOiBwYXRoLnJlc29sdmUoc2RrUm9vdCwgJ2J1aWxkLXRvb2xzJyksXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gIH0pO1xuICB0cnkge1xuICAgIGJ1aWxkVG9vbHNEaXJzID0gYnVpbGRUb29sc0RpcnNcbiAgICAgIC5tYXAoKGRpcikgPT4gW3BhdGguYmFzZW5hbWUoZGlyKSwgZGlyXSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBzZW12ZXIucmNvbXBhcmUoYVswXSwgYlswXSkpXG4gICAgICAubWFwKChwYWlyKSA9PiBwYWlyWzFdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYENhbm5vdCBzb3J0IGJ1aWxkLXRvb2xzIGZvbGRlcnMgJHtKU09OLnN0cmluZ2lmeShidWlsZFRvb2xzRGlycy5tYXAoKGRpcikgPT4gcGF0aC5iYXNlbmFtZShkaXIpKSl9IGAgK1xuICAgICAgYGJ5IHNlbWFudGljIHZlcnNpb24gbmFtZXMuYCk7XG4gICAgbG9nLndhcm4oYEZhbGxpbmcgYmFjayB0byBzb3J0aW5nIGJ5IG1vZGlmaWNhdGlvbiBkYXRlLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBjb25zdCBwYWlycyA9IGF3YWl0IEIubWFwKGJ1aWxkVG9vbHNEaXJzLCBhc3luYyAoZGlyKSA9PiBbKGF3YWl0IGZzLnN0YXQoZGlyKSkubXRpbWUudmFsdWVPZigpLCBkaXJdKTtcbiAgICBidWlsZFRvb2xzRGlycyA9IHBhaXJzXG4gICAgICAuc29ydCgoYSwgYikgPT4gYVswXSA8IGJbMF0pXG4gICAgICAubWFwKChwYWlyKSA9PiBwYWlyWzFdKTtcbiAgfVxuICBsb2cuaW5mbyhgRm91bmQgJHtidWlsZFRvb2xzRGlycy5sZW5ndGh9ICdidWlsZC10b29scycgZm9sZGVycyB1bmRlciAnJHtzZGtSb290fScgKG5ld2VzdCBmaXJzdCk6YCk7XG4gIGZvciAobGV0IGRpciBvZiBidWlsZFRvb2xzRGlycykge1xuICAgIGxvZy5pbmZvKGAgICAgJHtkaXJ9YCk7XG4gIH1cbiAgcmV0dXJuIGJ1aWxkVG9vbHNEaXJzO1xufSk7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb24gbmFtZXMgZW5jb2RlZCBpbiBgZHVtcHN5cyBwYWNrYWdlYCBjb21tYW5kIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHVtcHN5c091dHB1dCAtIFRoZSBhY3R1YWwgY29tbWFuZCBvdXRwdXQuXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGdyb3VwTmFtZXMgLSBUaGUgbGlzdCBvZiBncm91cCBuYW1lcyB0byBsaXN0IHBlcm1pc3Npb25zIGZvci5cbiAqIEBwYXJhbSB7P2Jvb2xlYW59IGdyYW50ZWRTdGF0ZSAtIFRoZSBleHBlY3RlZCBzdGF0ZSBvZiBgZ3JhbnRlZGAgYXR0cmlidXRlIHRvIGZpbHRlciB3aXRoLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gZmlsdGVyaW5nIGlzIGRvbmUgaWYgdGhlIHBhcmFtZXRlciBpcyBub3Qgc2V0LlxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBsaXN0IG9mIG1hdGNoZWQgcGVybWlzc2lvbiBuYW1lcyBvciBhbiBlbXB0eSBsaXN0IGlmIG5vIG1hdGNoZXMgd2VyZSBmb3VuZC5cbiAqL1xuY29uc3QgZXh0cmFjdE1hdGNoaW5nUGVybWlzc2lvbnMgPSBmdW5jdGlvbiAoZHVtcHN5c091dHB1dCwgZ3JvdXBOYW1lcywgZ3JhbnRlZFN0YXRlID0gbnVsbCkge1xuICBjb25zdCBncm91cFBhdHRlcm5CeU5hbWUgPSAoZ3JvdXBOYW1lKSA9PiBuZXcgUmVnRXhwKGBeKFxcXFxzKiR7Xy5lc2NhcGVSZWdFeHAoZ3JvdXBOYW1lKX0gcGVybWlzc2lvbnM6W1xcXFxzXFxcXFNdKylgLCAnbScpO1xuICBjb25zdCBpbmRlbnRQYXR0ZXJuID0gL1xcU3wkLztcbiAgY29uc3QgcGVybWlzc2lvbk5hbWVQYXR0ZXJuID0gL2FuZHJvaWRcXC5cXHcqXFwuP3Blcm1pc3Npb25cXC5cXHcrLztcbiAgY29uc3QgZ3JhbnRlZFN0YXRlUGF0dGVybiA9IC9cXGJncmFudGVkPShcXHcrKS87XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGNvbnN0IGdyb3VwTmFtZSBvZiBncm91cE5hbWVzKSB7XG4gICAgY29uc3QgZ3JvdXBNYXRjaCA9IGdyb3VwUGF0dGVybkJ5TmFtZShncm91cE5hbWUpLmV4ZWMoZHVtcHN5c091dHB1dCk7XG4gICAgaWYgKCFncm91cE1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lcyA9IGdyb3VwTWF0Y2hbMV0uc3BsaXQoJ1xcbicpO1xuICAgIGlmIChsaW5lcy5sZW5ndGggPCAyKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0aXRsZUluZGVudCA9IGxpbmVzWzBdLnNlYXJjaChpbmRlbnRQYXR0ZXJuKTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMuc2xpY2UoMSkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRlbnQgPSBsaW5lLnNlYXJjaChpbmRlbnRQYXR0ZXJuKTtcbiAgICAgIGlmIChjdXJyZW50SW5kZW50IDw9IHRpdGxlSW5kZW50KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwZXJtaXNzaW9uTmFtZU1hdGNoID0gcGVybWlzc2lvbk5hbWVQYXR0ZXJuLmV4ZWMobGluZSk7XG4gICAgICBpZiAoIXBlcm1pc3Npb25OYW1lTWF0Y2gpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICBwZXJtaXNzaW9uOiBwZXJtaXNzaW9uTmFtZU1hdGNoWzBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdyYW50ZWRTdGF0ZU1hdGNoID0gZ3JhbnRlZFN0YXRlUGF0dGVybi5leGVjKGxpbmUpO1xuICAgICAgaWYgKGdyYW50ZWRTdGF0ZU1hdGNoKSB7XG4gICAgICAgIGl0ZW0uZ3JhbnRlZCA9IGdyYW50ZWRTdGF0ZU1hdGNoWzFdID09PSAndHJ1ZSc7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBmaWx0ZXJlZFJlc3VsdCA9IHJlc3VsdFxuICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFfLmlzQm9vbGVhbihncmFudGVkU3RhdGUpIHx8IGl0ZW0uZ3JhbnRlZCA9PT0gZ3JhbnRlZFN0YXRlKVxuICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0ucGVybWlzc2lvbik7XG4gIGxvZy5kZWJ1ZyhgUmV0cmlldmVkICR7dXRpbC5wbHVyYWxpemUoJ3Blcm1pc3Npb24nLCBmaWx0ZXJlZFJlc3VsdC5sZW5ndGgsIHRydWUpfSBgICtcbiAgICBgZnJvbSAke2dyb3VwTmFtZXN9ICR7dXRpbC5wbHVyYWxpemUoJ2dyb3VwJywgZ3JvdXBOYW1lcy5sZW5ndGgsIGZhbHNlKX1gKTtcbiAgcmV0dXJuIGZpbHRlcmVkUmVzdWx0O1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogVHJhbnNmb3JtcyBnaXZlbiBvcHRpb25zIGludG8gdGhlIGxpc3Qgb2YgYGFkYiBpbnN0YWxsLmluc3RhbGwtbXVsdGlwbGVgIGNvbW1hbmQgYXJndW1lbnRzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFwaUxldmVsIC0gVGhlIGN1cnJlbnQgQVBJIGxldmVsXG4gKiBAcGFyYW0gez9JbnN0YWxsT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG1hcHBpbmcgdG8gdHJhbnNmb3JtXG4gKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn0gVGhlIGFycmF5IG9mIGFyZ3VtZW50c1xuICovXG5mdW5jdGlvbiBidWlsZEluc3RhbGxBcmdzIChhcGlMZXZlbCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gIGlmICghdXRpbC5oYXNWYWx1ZShvcHRpb25zLnJlcGxhY2UpIHx8IG9wdGlvbnMucmVwbGFjZSkge1xuICAgIHJlc3VsdC5wdXNoKCctcicpO1xuICB9XG4gIGlmIChvcHRpb25zLmFsbG93VGVzdFBhY2thZ2VzKSB7XG4gICAgcmVzdWx0LnB1c2goJy10Jyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMudXNlU2RjYXJkKSB7XG4gICAgcmVzdWx0LnB1c2goJy1zJyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMuZ3JhbnRQZXJtaXNzaW9ucykge1xuICAgIGlmIChhcGlMZXZlbCA8IDIzKSB7XG4gICAgICBsb2cuZGVidWcoYFNraXBwaW5nIHBlcm1pc3Npb25zIGdyYW50IG9wdGlvbiwgc2luY2UgYCArXG4gICAgICAgICAgICAgICAgYHRoZSBjdXJyZW50IEFQSSBsZXZlbCAke2FwaUxldmVsfSBkb2VzIG5vdCBzdXBwb3J0IGFwcGxpY2F0aW9ucyBgICtcbiAgICAgICAgICAgICAgICBgcGVybWlzc2lvbnMgY3VzdG9taXphdGlvbmApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaCgnLWcnKTtcbiAgICB9XG4gIH1cbiAgLy8gRm9yIG11bHRpcGxlLWluc3RhbGxcbiAgaWYgKG9wdGlvbnMucGFydGlhbEluc3RhbGwpIHtcbiAgICByZXN1bHQucHVzaCgnLXAnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTWFuaWZlc3RJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGtnIC0gVGhlIGFwcGxpY2F0aW9uIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpdml0eSAtIFRoZSBuYW1lIG9mIHRoZSBtYWluIHBhY2thZ2UgYWN0aXZpdHlcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdmVyc2lvbkNvZGUgLSBUaGUgdmVyc2lvbiBjb2RlIG51bWJlciAobWlnaHQgYmUgYE5hTmApXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZlcnNpb25OYW1lIC0gVGhlIHZlcnNpb24gbmFtZSAobWlnaHQgYmUgYG51bGxgKVxuICovXG5cbi8qKlxuICogUGVyZm9ybSBwYXJzaW5nIG9mIHRoZSBtYW5pZmVzdCBvYmplY3QgaW4gb3JkZXJcbiAqIHRvIGV4dHJhY3Qgc29tZSB2aXRhbCB2YWx1ZXMgZnJvbSBpdFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBtYW5pZmVzdCBUaGUgbWFuaWZlc3QgY29udGVudCBmb3JtYXR0ZWQgYXMgSlNPTlxuICogU2VlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2FkYmtpdC1hcGtyZWFkZXIgZm9yIGRldGFpbGVkIGZvcm1hdCBkZXNjcmlwdGlvblxuICogQHJldHVybnMge01hbmlmZXN0SW5mb31cbiAqL1xuZnVuY3Rpb24gcGFyc2VNYW5pZmVzdCAobWFuaWZlc3QpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHBrZzogbWFuaWZlc3QucGFja2FnZSxcbiAgICB2ZXJzaW9uQ29kZTogcGFyc2VJbnQobWFuaWZlc3QudmVyc2lvbkNvZGUsIDEwKSxcbiAgICB2ZXJzaW9uTmFtZTogbWFuaWZlc3QudmVyc2lvbk5hbWUgfHwgbnVsbCxcbiAgfTtcbiAgaWYgKCFtYW5pZmVzdC5hcHBsaWNhdGlvbikge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBMb29rIGZvciBlbmFibGVkIGFjdGl2aXR5IG9yIGFjdGl2aXR5LWFsaWFzIHdpdGhcbiAgLy8gYWN0aW9uID09IGFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIGFuZFxuICAvLyBjYXRlZ29yeSA9PSBhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUlxuICBmb3IgKGNvbnN0IGFjdGl2aXR5IG9mIFtcbiAgICAuLi5tYW5pZmVzdC5hcHBsaWNhdGlvbi5hY3Rpdml0aWVzLFxuICAgIC4uLm1hbmlmZXN0LmFwcGxpY2F0aW9uLmFjdGl2aXR5QWxpYXNlcyxcbiAgXSkge1xuICAgIGlmIChhY3Rpdml0eS5lbmFibGVkID09PSBmYWxzZSB8fCBfLmlzRW1wdHkoYWN0aXZpdHkuaW50ZW50RmlsdGVycykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qge2FjdGlvbnMsIGNhdGVnb3JpZXN9IG9mIGFjdGl2aXR5LmludGVudEZpbHRlcnMpIHtcbiAgICAgIGlmIChfLmlzRW1wdHkoYWN0aW9ucykgfHwgXy5pc0VtcHR5KGNhdGVnb3JpZXMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc01haW5BY3Rpb24gPSBhY3Rpb25zLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gTUFJTl9BQ1RJT04pO1xuICAgICAgY29uc3QgaXNMYXVuY2hlckNhdGVnb3J5ID0gY2F0ZWdvcmllcy5zb21lKCh7bmFtZX0pID0+IG5hbWUgPT09IExBVU5DSEVSX0NBVEVHT1JZKTtcbiAgICAgIGlmIChpc01haW5BY3Rpb24gJiYgaXNMYXVuY2hlckNhdGVnb3J5KSB7XG4gICAgICAgIHJlc3VsdC5hY3Rpdml0eSA9IGFjdGl2aXR5Lm5hbWU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUGFyc2VzIGFwayBzdHJpbmdzIGZyb20gYWFwdCB0b29sIG91dHB1dFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByYXdPdXRwdXQgVGhlIGFjdHVhbCB0b29sIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZ01hcmtlciBUaGUgY29uZmlnIG1hcmtlci4gVXN1YWxseVxuICogYSBsYW5ndWFnZSBhYmJyZXZpYXRpb24gb3IgYChkZWZhdWx0KWBcbiAqIEByZXR1cm5zIHtPYmplY3R9IFN0cmluZ3MgaWRzIHRvIHZhbHVlcyBtYXBwaW5nLiBQbHVyYWxcbiAqIHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgYXJyYXlzLiBJZiBubyBjb25maWcgZm91bmQgZm9yIHRoZVxuICogZ2l2ZW4gbWFya2VyIHRoZW4gYW4gZW1wdHkgbWFwcGluZyBpcyByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VBYXB0U3RyaW5ncyAocmF3T3V0cHV0LCBjb25maWdNYXJrZXIpIHtcbiAgY29uc3Qgbm9ybWFsaXplU3RyaW5nTWF0Y2ggPSBmdW5jdGlvbiAocykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoL1wiJC8sICcnKS5yZXBsYWNlKC9eXCIvLCAnJykucmVwbGFjZSgvXFxcXFwiL2csICdcIicpO1xuICB9O1xuXG4gIGNvbnN0IGFwa1N0cmluZ3MgPSB7fTtcbiAgbGV0IGlzSW5Db25maWcgPSBmYWxzZTtcbiAgbGV0IGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgbGV0IGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAvLyBUaGUgcGF0dGVybiBtYXRjaGVzIGFueSBxdW90ZWQgY29udGVudCBpbmNsdWRpbmcgZXNjYXBlZCBxdW90ZXNcbiAgY29uc3QgcXVvdGVkU3RyaW5nUGF0dGVybiA9IC9cIlteXCJcXFxcXSooPzpcXFxcLlteXCJcXFxcXSopKlwiLztcbiAgZm9yIChjb25zdCBsaW5lIG9mIHJhd091dHB1dC5zcGxpdChvcy5FT0wpKSB7XG4gICAgY29uc3QgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICBpZiAoXy5pc0VtcHR5KHRyaW1tZWRMaW5lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFsnY29uZmlnJywgJ3R5cGUnLCAnc3BlYycsICdQYWNrYWdlJ10uc29tZSgoeCkgPT4gdHJpbW1lZExpbmUuc3RhcnRzV2l0aCh4KSkpIHtcbiAgICAgIGlzSW5Db25maWcgPSB0cmltbWVkTGluZS5zdGFydHNXaXRoKGBjb25maWcgJHtjb25maWdNYXJrZXJ9OmApO1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzSW5Db25maWcpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKCdyZXNvdXJjZScpKSB7XG4gICAgICBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcblxuICAgICAgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCc6c3RyaW5nLycpKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gLzpzdHJpbmdcXC8oXFxTKyk6Ly5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cmltbWVkTGluZS5pbmNsdWRlcygnOnBsdXJhbHMvJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvOnBsdXJhbHNcXC8oXFxTKyk6Ly5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgICBpc0luUGx1cmFsR3JvdXAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFJlc291cmNlSWQgJiYgdHJpbW1lZExpbmUuc3RhcnRzV2l0aCgnKHN0cmluZycpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHF1b3RlZFN0cmluZ1BhdHRlcm4uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gPSBub3JtYWxpemVTdHJpbmdNYXRjaChtYXRjaFswXSk7XG4gICAgICB9XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFJlc291cmNlSWQgJiYgaXNJblBsdXJhbEdyb3VwICYmIHRyaW1tZWRMaW5lLmluY2x1ZGVzKCc6IChzdHJpbmcnKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBxdW90ZWRTdHJpbmdQYXR0ZXJuLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdID0gW1xuICAgICAgICAgIC4uLihhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSB8fCBbXSksXG4gICAgICAgICAgbm9ybWFsaXplU3RyaW5nTWF0Y2gobWF0Y2hbMF0pLFxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcGtTdHJpbmdzO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhcGsgc3RyaW5ncyBmcm9tIGFhcHQyIHRvb2wgb3V0cHV0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJhd091dHB1dCBUaGUgYWN0dWFsIHRvb2wgb3V0cHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnTWFya2VyIFRoZSBjb25maWcgbWFya2VyLiBVc3VhbGx5XG4gKiBhIGxhbmd1YWdlIGFiYnJldmlhdGlvbiBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIHRoZSBkZWZhdWx0IG9uZVxuICogQHJldHVybnMge09iamVjdH0gU3RyaW5ncyBpZHMgdG8gdmFsdWVzIG1hcHBpbmcuIFBsdXJhbFxuICogdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyBhcnJheXMuIElmIG5vIGNvbmZpZyBmb3VuZCBmb3IgdGhlXG4gKiBnaXZlbiBtYXJrZXIgdGhlbiBhbiBlbXB0eSBtYXBwaW5nIGlzIHJldHVybmVkLlxuICovXG5mdW5jdGlvbiBwYXJzZUFhcHQyU3RyaW5ncyAocmF3T3V0cHV0LCBjb25maWdNYXJrZXIpIHtcbiAgY29uc3QgYWxsTGluZXMgPSByYXdPdXRwdXQuc3BsaXQob3MuRU9MKTtcbiAgZnVuY3Rpb24gZXh0cmFjdENvbnRlbnQgKHN0YXJ0SWR4KSB7XG4gICAgbGV0IGlkeCA9IHN0YXJ0SWR4O1xuICAgIGNvbnN0IHN0YXJ0Q2hhclBvcyA9IGFsbExpbmVzW3N0YXJ0SWR4XS5pbmRleE9mKCdcIicpO1xuICAgIGlmIChzdGFydENoYXJQb3MgPCAwKSB7XG4gICAgICByZXR1cm4gW251bGwsIGlkeF07XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSAnJztcbiAgICB3aGlsZSAoaWR4IDwgYWxsTGluZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkNoYXJNYXRjaCA9IC9cIiQvLmV4ZWMoYWxsTGluZXNbaWR4XSk7XG4gICAgICBpZiAodGVybWluYXRpb25DaGFyTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGVybWluYXRpb25DaGFyUG9zID0gdGVybWluYXRpb25DaGFyTWF0Y2guaW5kZXg7XG4gICAgICAgIGlmIChzdGFydElkeCA9PT0gaWR4KSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGFsbExpbmVzW2lkeF0uc3Vic3RyaW5nKHN0YXJ0Q2hhclBvcyArIDEsIHRlcm1pbmF0aW9uQ2hhclBvcyksXG4gICAgICAgICAgICBpZHhcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYCR7cmVzdWx0fVxcXFxuJHtfLnRyaW1TdGFydChhbGxMaW5lc1tpZHhdLnN1YnN0cmluZygwLCB0ZXJtaW5hdGlvbkNoYXJQb3MpKX1gLFxuICAgICAgICAgIGlkeCxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICAgIGlmIChpZHggPiBzdGFydElkeCkge1xuICAgICAgICByZXN1bHQgKz0gYFxcXFxuJHtfLnRyaW1TdGFydChhbGxMaW5lc1tpZHhdKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IGFsbExpbmVzW2lkeF0uc3Vic3RyaW5nKHN0YXJ0Q2hhclBvcyArIDEpO1xuICAgICAgfVxuICAgICAgKytpZHg7XG4gICAgfVxuICAgIHJldHVybiBbcmVzdWx0LCBpZHhdO1xuICB9XG5cbiAgY29uc3QgYXBrU3RyaW5ncyA9IHt9O1xuICBsZXQgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICBsZXQgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gIGxldCBpc0luQ3VycmVudENvbmZpZyA9IGZhbHNlO1xuICBsZXQgbGluZUluZGV4ID0gMDtcbiAgd2hpbGUgKGxpbmVJbmRleCA8IGFsbExpbmVzLmxlbmd0aCkge1xuICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gYWxsTGluZXNbbGluZUluZGV4XS50cmltKCk7XG4gICAgaWYgKF8uaXNFbXB0eSh0cmltbWVkTGluZSkpIHtcbiAgICAgICsrbGluZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFsndHlwZScsICdQYWNrYWdlJ10uc29tZSgoeCkgPT4gdHJpbW1lZExpbmUuc3RhcnRzV2l0aCh4KSkpIHtcbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgICAgIGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAgICAgaXNJbkN1cnJlbnRDb25maWcgPSBmYWxzZTtcbiAgICAgICsrbGluZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJ3Jlc291cmNlJykpIHtcbiAgICAgIGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgaXNJbkN1cnJlbnRDb25maWcgPSBmYWxzZTtcblxuICAgICAgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCdzdHJpbmcvJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvc3RyaW5nXFwvKFxcUyspLy5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cmltbWVkTGluZS5pbmNsdWRlcygncGx1cmFscy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC9wbHVyYWxzXFwvKFxcUyspLy5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgICBpc0luUGx1cmFsR3JvdXAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICArK2xpbmVJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50UmVzb3VyY2VJZCkge1xuICAgICAgaWYgKGlzSW5QbHVyYWxHcm91cCkge1xuICAgICAgICBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aCgnKCcpKSB7XG4gICAgICAgICAgaXNJbkN1cnJlbnRDb25maWcgPSB0cmltbWVkTGluZS5zdGFydHNXaXRoKGAoJHtjb25maWdNYXJrZXJ9KWApO1xuICAgICAgICAgICsrbGluZUluZGV4O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0luQ3VycmVudENvbmZpZykge1xuICAgICAgICAgIGNvbnN0IFtjb250ZW50LCBpZHhdID0gZXh0cmFjdENvbnRlbnQobGluZUluZGV4KTtcbiAgICAgICAgICBsaW5lSW5kZXggPSBpZHg7XG4gICAgICAgICAgaWYgKF8uaXNTdHJpbmcoY29udGVudCkpIHtcbiAgICAgICAgICAgIGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdID0gW1xuICAgICAgICAgICAgICAuLi4oYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gfHwgW10pLFxuICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aChgKCR7Y29uZmlnTWFya2VyfSlgKSkge1xuICAgICAgICBjb25zdCBbY29udGVudCwgaWR4XSA9IGV4dHJhY3RDb250ZW50KGxpbmVJbmRleCk7XG4gICAgICAgIGxpbmVJbmRleCA9IGlkeDtcbiAgICAgICAgaWYgKF8uaXNTdHJpbmcoY29udGVudCkpIHtcbiAgICAgICAgICBhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSA9IGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICArK2xpbmVJbmRleDtcbiAgfVxuICByZXR1cm4gYXBrU3RyaW5ncztcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBjb25maWcgbWFya2VyLCB3aGljaCBpcyB0aGVuIHBhc3NlZCB0byBwYXJzZS4uIG1ldGhvZHNcbiAqIHRvIG1ha2UgaXQgY29tcGF0aWJsZSB3aXRoIHJlc291cmNlIGZvcm1hdHMgZ2VuZXJhdGVkIGJ5IGFhcHQoMikgdG9vbFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmZpZ3NHZXR0ZXIgVGhlIGZ1bmN0aW9uIHdob3NlIHJlc3VsdCBpcyBhIGxpc3RcbiAqIG9mIGFwayBjb25maWdzXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzaXJlZE1hcmtlciBUaGUgZGVzaXJlZCBjb25maWcgbWFya2VyIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVmYXVsdE1hcmtlciBUaGUgZGVmYXVsdCBjb25maWcgbWFya2VyIHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgY29uZmlnIG1hcmtlclxuICovXG5hc3luYyBmdW5jdGlvbiBmb3JtYXRDb25maWdNYXJrZXIgKGNvbmZpZ3NHZXR0ZXIsIGRlc2lyZWRNYXJrZXIsIGRlZmF1bHRNYXJrZXIpIHtcbiAgbGV0IGNvbmZpZ01hcmtlciA9IGRlc2lyZWRNYXJrZXIgfHwgZGVmYXVsdE1hcmtlcjtcbiAgaWYgKGNvbmZpZ01hcmtlci5pbmNsdWRlcygnLScpICYmICFjb25maWdNYXJrZXIuaW5jbHVkZXMoJy1yJykpIHtcbiAgICBjb25maWdNYXJrZXIgPSBjb25maWdNYXJrZXIucmVwbGFjZSgnLScsICctcicpO1xuICB9XG4gIGNvbnN0IGNvbmZpZ3MgPSBhd2FpdCBjb25maWdzR2V0dGVyKCk7XG4gIGxvZy5kZWJ1ZyhgUmVzb3VyY2UgY29uZmlndXJhdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoY29uZmlncyl9YCk7XG4gIC8vIEFzc3VtZSB0aGUgJ2VuJyBjb25maWd1cmF0aW9uIGlzIHRoZSBkZWZhdWx0IG9uZVxuICBpZiAoY29uZmlnTWFya2VyLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnZW4nKVxuICAgICYmICFjb25maWdzLnNvbWUoKHgpID0+IHgudHJpbSgpID09PSBjb25maWdNYXJrZXIpKSB7XG4gICAgbG9nLmRlYnVnKGBSZXNvdXJjZSBjb25maWd1cmF0aW9uIG5hbWUgJyR7Y29uZmlnTWFya2VyfScgaXMgdW5rbm93bi4gYCArXG4gICAgICBgUmVwbGFjaW5nIGl0IHdpdGggJyR7ZGVmYXVsdE1hcmtlcn0nYCk7XG4gICAgY29uZmlnTWFya2VyID0gZGVmYXVsdE1hcmtlcjtcbiAgfSBlbHNlIHtcbiAgICBsb2cuZGVidWcoYFNlbGVjdGVkIGNvbmZpZ3VyYXRpb246ICcke2NvbmZpZ01hcmtlcn0nYCk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpZ01hcmtlcjtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIG91dHB1dCBpbiBKU09OIGZvcm1hdCByZXRyaWV2ZWQgZnJvbVxuICogdGhlIGNvcnJlc3BvbmRpbmcgQXBwaXVtIFNldHRpbmdzIGJyb2FkY2FzdCBjYWxsc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXQgVGhlIGFjdHVhbCBjb21tYW5kIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGVudGl0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudGl0eSB3aGljaCBpc1xuICogZ29pbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcGFyc2VkIEpTT04gb2JqZWN0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG91dHB1dCBjYW5ub3QgYmUgcGFyc2VkXG4gKiBhcyBhIHZhbGlkIEpTT05cbiAqL1xuZnVuY3Rpb24gcGFyc2VKc29uRGF0YSAob3V0cHV0LCBlbnRpdHlOYW1lKSB7XG4gIGlmICghL1xcYnJlc3VsdD0tMVxcYi8udGVzdChvdXRwdXQpIHx8ICEvXFxiZGF0YT1cIi8udGVzdChvdXRwdXQpKSB7XG4gICAgbG9nLmRlYnVnKG91dHB1dCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgJHtlbnRpdHlOYW1lfSBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgJ0NoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IC9cXGJkYXRhPShcIi4rKS8uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgbG9nLmRlYnVnKG91dHB1dCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgJHtlbnRpdHlOYW1lfSBmcm9tIHRoZSBjb21tYW5kIG91dHB1dC4gYCArXG4gICAgICAnQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICB9XG4gIGNvbnN0IGpzb25TdHIgPSBfLnRyaW0obWF0Y2hbMV0pLnJlcGxhY2UoLyheXCIpfChcIiQpL2csICcnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1Zyhqc29uU3RyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSAke2VudGl0eU5hbWV9IGZyb20gdGhlIHJlc3VsdGluZyBkYXRhIHN0cmluZy4gYCArXG4gICAgICAnQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICB9XG59XG5cbi8qKlxuICogVHJhbnNmb3JtcyB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgYW5kIGNvdW50cnkgYWJicmV2aWF0aW9uc1xuICogdG8gQVZEIGFyZ3VtZW50cyBhcnJheVxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbGFuZ3VhZ2UgTGFuZ3VhZ2UgbmFtZSwgZm9yIGV4YW1wbGUgJ2ZyJ1xuICogQHBhcmFtIHs/c3RyaW5nfSBjb3VudHJ5IENvdW50cnkgbmFtZSwgZm9yIGV4YW1wbGUgJ0NBJ1xuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBnZW5lcmF0ZWQgYXJndW1lbnRzLiBUaGVcbiAqIHJlc3VsdGluZyBhcnJheSBtaWdodCBiZSBlbXB0eSBpZiBib3RoIGFyZ3VtZW50cyBhcmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gdG9BdmRMb2NhbGVBcmdzIChsYW5ndWFnZSwgY291bnRyeSkge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGxhbmd1YWdlICYmIF8uaXNTdHJpbmcobGFuZ3VhZ2UpKSB7XG4gICAgcmVzdWx0LnB1c2goJy1wcm9wJywgYHBlcnNpc3Quc3lzLmxhbmd1YWdlPSR7bGFuZ3VhZ2UudG9Mb3dlckNhc2UoKX1gKTtcbiAgfVxuICBpZiAoY291bnRyeSAmJiBfLmlzU3RyaW5nKGNvdW50cnkpKSB7XG4gICAgcmVzdWx0LnB1c2goJy1wcm9wJywgYHBlcnNpc3Quc3lzLmNvdW50cnk9JHtjb3VudHJ5LnRvVXBwZXJDYXNlKCl9YCk7XG4gIH1cbiAgbGV0IGxvY2FsZTtcbiAgaWYgKF8uaXNTdHJpbmcobGFuZ3VhZ2UpICYmIF8uaXNTdHJpbmcoY291bnRyeSkgJiYgbGFuZ3VhZ2UgJiYgY291bnRyeSkge1xuICAgIGxvY2FsZSA9IGxhbmd1YWdlLnRvTG93ZXJDYXNlKCkgKyAnLScgKyBjb3VudHJ5LnRvVXBwZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAobGFuZ3VhZ2UgJiYgXy5pc1N0cmluZyhsYW5ndWFnZSkpIHtcbiAgICBsb2NhbGUgPSBsYW5ndWFnZS50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKGNvdW50cnkgJiYgXy5pc1N0cmluZyhjb3VudHJ5KSkge1xuICAgIGxvY2FsZSA9IGNvdW50cnk7XG4gIH1cbiAgaWYgKGxvY2FsZSkge1xuICAgIHJlc3VsdC5wdXNoKCctcHJvcCcsIGBwZXJzaXN0LnN5cy5sb2NhbGU9JHtsb2NhbGV9YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgQW5kcm9pZCBwcmVmZXJlbmNlcyByb290XG4gKlxuICogQHJldHVybnMgez9zdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gdGhlIGZvbGRlciBvciBgbnVsbGAgaWYgdGhlIGZvbGRlciBjYW5ub3QgYmUgZm91bmRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QW5kcm9pZFByZWZzUm9vdCAoKSB7XG4gIGxldCBsb2NhdGlvbiA9IHByb2Nlc3MuZW52LkFORFJPSURfRU1VTEFUT1JfSE9NRTtcbiAgaWYgKGF3YWl0IGRpckV4aXN0cyhsb2NhdGlvbikpIHtcbiAgICByZXR1cm4gbG9jYXRpb247XG4gIH1cblxuICBpZiAobG9jYXRpb24pIHtcbiAgICBsb2cud2FybihgVGhlIHZhbHVlIG9mIHRoZSBBTkRST0lEX0VNVUxBVE9SX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgJyR7bG9jYXRpb259JyBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5YCk7XG4gIH1cblxuICBjb25zdCBob21lID0gcHJvY2Vzcy5lbnYuSE9NRSB8fCBwcm9jZXNzLmVudi5VU0VSUFJPRklMRTtcbiAgaWYgKGhvbWUpIHtcbiAgICBsb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShob21lLCAnLmFuZHJvaWQnKTtcbiAgfVxuXG4gIGlmICghYXdhaXQgZGlyRXhpc3RzKGxvY2F0aW9uKSkge1xuICAgIGxvZy5kZWJ1ZyhgQW5kcm9pZCBjb25maWcgcm9vdCAnJHtsb2NhdGlvbn0nIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnlgKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBsb2NhdGlvbjtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHBhdGggZXhpc3RzIG9uIHRoZSBmaWxlc3lzdGVtIGFuZCBpcyBhIGRpcmVjdG9yeVxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbG9jYXRpb24gVGhlIGZ1bGwgcGF0aCB0byB0aGUgZGlyZWN0b3J5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGlyRXhpc3RzIChsb2NhdGlvbikge1xuICByZXR1cm4gbG9jYXRpb25cbiAgICAmJiBhd2FpdCBmcy5leGlzdHMobG9jYXRpb24pXG4gICAgJiYgKGF3YWl0IGZzLnN0YXQobG9jYXRpb24pKS5pc0RpcmVjdG9yeSgpO1xufVxuXG4vKipcbiAqIEVzY2FwZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXG4gKiBUaGlzIGlzIG5lZWRlZCB0byBhdm9pZCBwb3NzaWJsZSBpc3N1ZXMgd2l0aCBob3cgc3lzdGVtIGBzcGF3bmBcbiAqIGNhbGwgaGFuZGxlcyB0aGVtLlxuICogU2VlIGh0dHBzOi8vZGlzY3Vzcy5hcHBpdW0uaW8vdC9ob3ctdG8tbW9kaWZ5LXdkLXByb3h5LWFuZC11aWF1dG9tYXRvcjItc291cmNlLWNvZGUtdG8tc3VwcG9ydC11bmljb2RlLzMzNDY2XG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmcgTm9uLWVzY2FwZWQgYXJndW1lbnQgc3RyaW5nXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBhcmd1bWVudFxuICovXG5mdW5jdGlvbiBlc2NhcGVTaGVsbEFyZyAoYXJnKSB7XG4gIGFyZyA9IGAke2FyZ31gO1xuICBpZiAoc3lzdGVtLmlzV2luZG93cygpKSB7XG4gICAgcmV0dXJuIC9bJnxeXFxzXS8udGVzdChhcmcpID8gYFwiJHthcmcucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImAgOiBhcmc7XG4gIH1cbiAgcmV0dXJuIGFyZy5yZXBsYWNlKC8mL2csICdcXFxcJicpO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgbmFtZSBvZiBsYXVuY2hhYmxlIHBhY2thZ2UgYWN0aXZpdHlcbiAqIGZyb20gZHVtcHN5cyBvdXRwdXQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGR1bXBzeXMgdGhlIGFjdHVhbCBkdW1wc3lzIG91dHB1dFxuICogQHJldHVybnMge3N0cmluZ1tdfSBFaXRoZXIgdGhlIGZ1bGx5IHF1YWxpZmllZFxuICogYWN0aXZpdHkgbmFtZSBhcyBhIHNpbmdsZSBsaXN0IGl0ZW0gb3IgYW4gZW1wdHkgbGlzdCBpZiBub3RoaW5nIGNvdWxkIGJlIHBhcnNlZC5cbiAqIEluIEFuZHJvaWQgNiBhbmQgb2xkZXIgdGhlcmUgaXMgbm8gcmVsaWFibGUgd2F5IHRvIGRldGVybWluZVxuICogdGhlIGNhdGVnb3J5IG5hbWUgZm9yIHRoZSBnaXZlbiBhY3Rpdml0eSwgc28gdGhpcyBBUEkganVzdFxuICogcmV0dXJucyBhbGwgYWN0aXZpdHkgbmFtZXMgYmVsb25naW5nIHRvICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTidcbiAqIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgdGhlIGFwcCBtYW5pZmVzdCBjb3VsZCBiZSBwYXJzZWQgbmV4dFxuICogaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IG5hbWVzIGZvciB0aGVzZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VMYXVuY2hhYmxlQWN0aXZpdHlOYW1lcyAoZHVtcHN5cykge1xuICBjb25zdCBtYWluQWN0aXZpdHlOYW1lUmUgPSBuZXcgUmVnRXhwKGBeXFxcXHMqJHtfLmVzY2FwZVJlZ0V4cChNQUlOX0FDVElPTil9OiRgKTtcbiAgY29uc3QgY2F0ZWdvcnlOYW1lUmUgPSAvXlxccypDYXRlZ29yeTpcXHMrXCIoW2EtekEtWjAtOS5fLy1dKylcIiQvO1xuICBjb25zdCBibG9ja3MgPSBbXTtcbiAgbGV0IGJsb2NrU3RhcnRJbmRlbnQ7XG4gIGxldCBibG9jayA9IFtdO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgZHVtcHN5cy5zcGxpdCgnXFxuJykubWFwKF8udHJpbUVuZCkpIHtcbiAgICBjb25zdCBjdXJyZW50SW5kZW50ID0gbGluZS5sZW5ndGggLSBfLnRyaW1TdGFydChsaW5lKS5sZW5ndGg7XG4gICAgaWYgKG1haW5BY3Rpdml0eU5hbWVSZS50ZXN0KGxpbmUpKSB7XG4gICAgICBibG9ja1N0YXJ0SW5kZW50ID0gY3VycmVudEluZGVudDtcbiAgICAgIGlmICghXy5pc0VtcHR5KGJsb2NrKSkge1xuICAgICAgICBibG9ja3MucHVzaChibG9jayk7XG4gICAgICAgIGJsb2NrID0gW107XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKF8uaXNOaWwoYmxvY2tTdGFydEluZGVudCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50SW5kZW50ID4gYmxvY2tTdGFydEluZGVudCkge1xuICAgICAgYmxvY2sucHVzaChsaW5lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYmxvY2spKSB7XG4gICAgICAgIGJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgICAgICAgYmxvY2sgPSBbXTtcbiAgICAgIH1cbiAgICAgIGJsb2NrU3RhcnRJbmRlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxuICBpZiAoIV8uaXNFbXB0eShibG9jaykpIHtcbiAgICBibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGJsb2Nrcykge1xuICAgIGxldCBoYXNDYXRlZ29yeSA9IGZhbHNlO1xuICAgIGxldCBpc0xhdW5jaGVyQ2F0ZWdvcnkgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaXRlbSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBjYXRlZ29yeU5hbWVSZS5leGVjKGxpbmUpO1xuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaGFzQ2F0ZWdvcnkgPSB0cnVlO1xuICAgICAgaXNMYXVuY2hlckNhdGVnb3J5ID0gbWF0Y2hbMV0gPT09IExBVU5DSEVSX0NBVEVHT1JZO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIE9uIG9sZGVyIEFuZHJvaWQgdmVyc2lvbnMgdGhlIGNhdGVnb3J5IG5hbWVcbiAgICAvLyBtaWdodCBub3QgYmUgbGlzdGVkLCBzbyB3ZSBqdXN0IHRyeSB0byBmZXRjaFxuICAgIC8vIGFsbCBtYXRjaGVzIGluc3RlYWRcbiAgICBpZiAoaGFzQ2F0ZWdvcnkgJiYgIWlzTGF1bmNoZXJDYXRlZ29yeSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBhY3Rpdml0eU5hbWVTdHIgb2YgaXRlbS5tYXAoXy50cmltKS5maWx0ZXIoQm9vbGVhbikpIHtcbiAgICAgIGNvbnN0IGZxQWN0aXZpdHlOYW1lID0gYWN0aXZpdHlOYW1lU3RyLnNwbGl0KC9cXHMrLylbMV07XG4gICAgICBpZiAoIW1hdGNoQ29tcG9uZW50TmFtZShmcUFjdGl2aXR5TmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0xhdW5jaGVyQ2F0ZWdvcnkpIHtcbiAgICAgICAgcmV0dXJuIFtmcUFjdGl2aXR5TmFtZV07XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChmcUFjdGl2aXR5TmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIGNvbXBvbmVudCBuYW1lXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzU3RyaW5nIFRoZSBzdHJpbmcgdG8gdmVyaWZ5XG4gKiBAcmV0dXJuIHs/QXJyYXk8TWF0Y2g+fSBUaGUgcmVzdWx0IG9mIFJlZ2V4cC5leGVjIG9wZXJhdGlvblxuICogb3IgX251bGxfIGlmIG5vIG1hdGNoZXMgYXJlIGZvdW5kXG4gKi9cbmZ1bmN0aW9uIG1hdGNoQ29tcG9uZW50TmFtZSAoY2xhc3NTdHJpbmcpIHtcbiAgLy8gc29tZS5wYWNrYWdlL3NvbWUucGFja2FnZS5BY3Rpdml0eVxuICByZXR1cm4gL15bYS16MC05Li9fXSskL2kuZXhlYyhjbGFzc1N0cmluZyk7XG59XG5cbmV4cG9ydCB7XG4gIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgsIHVuemlwRmlsZSxcbiAgZ2V0SU1FTGlzdEZyb21PdXRwdXQsIGdldEphdmFGb3JPcywgaXNTaG93aW5nTG9ja3NjcmVlbiwgaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkLFxuICBnZXRTdXJmYWNlT3JpZW50YXRpb24sIGlzU2NyZWVuT25GdWxseSwgYnVpbGRTdGFydENtZCwgZ2V0SmF2YUhvbWUsXG4gIGdldFNka1Rvb2xzVmVyc2lvbiwgZ2V0QXBrc2lnbmVyRm9yT3MsIGdldEJ1aWxkVG9vbHNEaXJzLFxuICBnZXRBcGthbmFseXplckZvck9zLCBnZXRPcGVuU3NsRm9yT3MsIGV4dHJhY3RNYXRjaGluZ1Blcm1pc3Npb25zLCBBUEtTX0VYVEVOU0lPTixcbiAgQVBLX0lOU1RBTExfVElNRU9VVCwgQVBLU19JTlNUQUxMX1RJTUVPVVQsIGJ1aWxkSW5zdGFsbEFyZ3MsIEFQS19FWFRFTlNJT04sXG4gIERFRkFVTFRfQURCX0VYRUNfVElNRU9VVCwgcGFyc2VNYW5pZmVzdCwgcGFyc2VBYXB0U3RyaW5ncywgcGFyc2VBYXB0MlN0cmluZ3MsXG4gIGZvcm1hdENvbmZpZ01hcmtlciwgcGFyc2VKc29uRGF0YSwgdW5zaWduQXBrLCB0b0F2ZExvY2FsZUFyZ3MsIHJlcXVpcmVTZGtSb290LFxuICBnZXRTZGtSb290RnJvbUVudiwgZ2V0QW5kcm9pZFByZWZzUm9vdCwgZGlyRXhpc3RzLCBlc2NhcGVTaGVsbEFyZyxcbiAgcGFyc2VMYXVuY2hhYmxlQWN0aXZpdHlOYW1lcywgbWF0Y2hDb21wb25lbnROYW1lLCBnZXRNb2R1bGVSb290XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsY0FBYyxHQUFHLE9BQXZCOztBQUNBLE1BQU1DLGFBQWEsR0FBRyxNQUF0Qjs7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxLQUE1Qjs7QUFDQSxNQUFNQyxvQkFBb0IsR0FBR0QsbUJBQW1CLEdBQUcsQ0FBbkQ7O0FBQ0EsTUFBTUUsd0JBQXdCLEdBQUcsS0FBakM7O0FBQ0EsTUFBTUMsV0FBVyxHQUFHLDRCQUFwQjtBQUNBLE1BQU1DLGlCQUFpQixHQUFHLGtDQUExQjs7QUFRQSxNQUFNQyxhQUFhLEdBQUdDLGVBQUEsQ0FBRUMsT0FBRixDQUFVLFNBQVNGLGFBQVQsR0FBMEI7RUFDeEQsTUFBTUcsU0FBUyxHQUFHQyxhQUFBLENBQUtDLE9BQUwsQ0FBYUMsU0FBYixFQUF3QkMsS0FBeEIsQ0FBOEJILGFBQUEsQ0FBS0ksR0FBbkMsQ0FBbEI7O0VBQ0EsS0FBSyxJQUFJQyxXQUFXLEdBQUdOLFNBQVMsQ0FBQ08sTUFBakMsRUFBeUNELFdBQVcsR0FBRyxDQUF2RCxFQUEwRCxFQUFFQSxXQUE1RCxFQUF5RTtJQUN2RSxNQUFNRSxVQUFVLEdBQUdQLGFBQUEsQ0FBS1EsSUFBTCxDQUFVUixhQUFBLENBQUtJLEdBQWYsRUFBb0IsR0FBSUwsU0FBUyxDQUFDVSxLQUFWLENBQWdCLENBQWhCLEVBQW1CSixXQUFuQixDQUF4QixDQUFuQjs7SUFDQSxNQUFNSyxZQUFZLEdBQUdWLGFBQUEsQ0FBS1EsSUFBTCxDQUFVRCxVQUFWLEVBQXNCLGNBQXRCLENBQXJCOztJQUNBLElBQUk7TUFDRixJQUFJLENBQUNJLFlBQUEsQ0FBSUMsVUFBSixDQUFlRixZQUFmLENBQUwsRUFBbUM7UUFDakM7TUFDRDs7TUFDRCxJQUFJRyxJQUFJLENBQUNDLEtBQUwsQ0FBV0gsWUFBQSxDQUFJSSxZQUFKLENBQWlCTCxZQUFqQixFQUErQixNQUEvQixDQUFYLEVBQW1ETSxJQUFuRCxLQUE0RCxZQUFoRSxFQUE4RTtRQUM1RSxPQUFPVCxVQUFQO01BQ0Q7SUFDRixDQVBELENBT0UsT0FBT1UsR0FBUCxFQUFZLENBQUU7RUFDakI7O0VBQ0QsTUFBTSxJQUFJQyxLQUFKLENBQVUsOERBQVYsQ0FBTjtBQUNELENBZnFCLENBQXRCOzs7O0FBc0JBLFNBQVNDLGlCQUFULEdBQThCO0VBQzVCLE9BQU9DLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxZQUFaLElBQTRCRixPQUFPLENBQUNDLEdBQVIsQ0FBWUUsZ0JBQS9DO0FBQ0Q7O0FBU0QsZUFBZUMsY0FBZixDQUErQkMsVUFBVSxHQUFHLElBQTVDLEVBQWtEO0VBQ2hELE1BQU1DLE9BQU8sR0FBR0QsVUFBVSxJQUFJTixpQkFBaUIsRUFBL0M7RUFDQSxNQUFNUSxNQUFNLEdBQUcsbUZBQWY7O0VBQ0EsSUFBSTlCLGVBQUEsQ0FBRStCLE9BQUYsQ0FBVUYsT0FBVixDQUFKLEVBQXdCO0lBQ3RCLE1BQU0sSUFBSVIsS0FBSixDQUFXLGdGQUErRVMsTUFBTyxFQUFqRyxDQUFOO0VBQ0Q7O0VBRUQsSUFBSSxFQUFDLE1BQU1FLFdBQUEsQ0FBR0MsTUFBSCxDQUFVSixPQUFWLENBQVAsQ0FBSixFQUErQjtJQUM3QixNQUFNLElBQUlSLEtBQUosQ0FBVyxnQ0FBK0JRLE9BQVEsOENBQTZDQyxNQUFPLEVBQXRHLENBQU47RUFDRDs7RUFDRCxNQUFNSSxLQUFLLEdBQUcsTUFBTUYsV0FBQSxDQUFHRyxJQUFILENBQVFOLE9BQVIsQ0FBcEI7O0VBQ0EsSUFBSSxDQUFDSyxLQUFLLENBQUNFLFdBQU4sRUFBTCxFQUEwQjtJQUN4QixNQUFNLElBQUlmLEtBQUosQ0FBVyx5QkFBd0JRLE9BQVEsdUJBQXNCQyxNQUFPLEVBQXhFLENBQU47RUFDRDs7RUFDRCxPQUFPRCxPQUFQO0FBQ0Q7O0FBZUQsZUFBZVEseUJBQWYsQ0FBMENSLE9BQTFDLEVBQW1EO0VBQ2pELE1BQU1TLFVBQVUsR0FBRyxNQUFNTixXQUFBLENBQUdPLElBQUgsQ0FBUSxjQUFSLEVBQXdCO0lBQy9DQyxHQUFHLEVBQUVyQyxhQUFBLENBQUtDLE9BQUwsQ0FBYXlCLE9BQWIsRUFBc0IsV0FBdEIsQ0FEMEM7SUFFL0NZLFFBQVEsRUFBRTtFQUZxQyxDQUF4QixDQUF6QjtFQUlBLE1BQU1DLGdCQUFnQixHQUFHLEVBQXpCOztFQUNBLEtBQUssTUFBTUMsU0FBWCxJQUF3QkwsVUFBeEIsRUFBb0M7SUFDbEMsTUFBTU0sWUFBWSxHQUFHLE1BQU1aLFdBQUEsQ0FBR2EsUUFBSCxDQUFZRixTQUFaLEVBQXVCLE9BQXZCLENBQTNCOztJQUNBLE1BQU1HLFlBQVksR0FBRzNDLGFBQUEsQ0FBSzRDLE9BQUwsQ0FBYUosU0FBYixDQUFyQjs7SUFDQSxNQUFNSyxRQUFRLEdBQUc3QyxhQUFBLENBQUs4QyxRQUFMLENBQWNILFlBQWQsQ0FBakI7O0lBQ0EsTUFBTUksS0FBSyxHQUFHLGdDQUFnQ0MsSUFBaEMsQ0FBcUNQLFlBQXJDLENBQWQ7O0lBQ0EsSUFBSSxDQUFDTSxLQUFMLEVBQVk7TUFDVkUsZUFBQSxDQUFJQyxJQUFKLENBQVUscUNBQW9DVixTQUFVLGdCQUFlSyxRQUFTLEdBQWhGOztNQUNBO0lBQ0Q7O0lBQ0ROLGdCQUFnQixDQUFDWSxRQUFRLENBQUNKLEtBQUssQ0FBQyxDQUFELENBQU4sRUFBVyxFQUFYLENBQVQsQ0FBaEIsR0FBMkM7TUFDekNGLFFBRHlDO01BRXpDRjtJQUZ5QyxDQUEzQztFQUlEOztFQUNELElBQUk5QyxlQUFBLENBQUUrQixPQUFGLENBQVVXLGdCQUFWLENBQUosRUFBaUM7SUFDL0JVLGVBQUEsQ0FBSUMsSUFBSixDQUFVLG1DQUFrQ2xELGFBQUEsQ0FBS0MsT0FBTCxDQUFheUIsT0FBYixFQUFzQixXQUF0QixDQUFtQyxLQUF0RSxHQUNOLHlDQURIOztJQUVBLE9BQU87TUFDTG1CLFFBQVEsRUFBRSxJQURMO01BRUxGLFlBQVksRUFBRTtJQUZULENBQVA7RUFJRDs7RUFFRCxNQUFNUyxnQkFBZ0IsR0FBR3ZELGVBQUEsQ0FBRXdELElBQUYsQ0FBT2QsZ0JBQVAsRUFBeUJlLElBQXpCLEdBQWdDQyxPQUFoQyxHQUEwQyxDQUExQyxDQUF6Qjs7RUFDQSxNQUFNQyxNQUFNLEdBQUdqQixnQkFBZ0IsQ0FBQ2EsZ0JBQUQsQ0FBL0I7O0VBQ0FILGVBQUEsQ0FBSVEsS0FBSixDQUFXLDJDQUEwQzVDLElBQUksQ0FBQzZDLFNBQUwsQ0FBZUYsTUFBZixDQUF1QixFQUE1RTs7RUFDQSxPQUFPQSxNQUFQO0FBQ0Q7O0FBRUQsZUFBZUcsU0FBZixDQUEwQkMsT0FBMUIsRUFBbUNDLE9BQU8sR0FBRzdELGFBQUEsQ0FBSzRDLE9BQUwsQ0FBYWdCLE9BQWIsQ0FBN0MsRUFBb0U7RUFDbEVYLGVBQUEsQ0FBSVEsS0FBSixDQUFXLGNBQWFHLE9BQVEsU0FBUUMsT0FBUSxHQUFoRDs7RUFDQSxNQUFNQyxZQUFBLENBQUlDLGNBQUosQ0FBbUJILE9BQW5CLENBQU47RUFDQSxNQUFNRSxZQUFBLENBQUlFLFlBQUosQ0FBaUJKLE9BQWpCLEVBQTBCQyxPQUExQixDQUFOOztFQUNBWixlQUFBLENBQUlRLEtBQUosQ0FBVSxrQkFBVjtBQUNEOztBQVlELGVBQWVRLFNBQWYsQ0FBMEJDLE9BQTFCLEVBQW1DO0VBQ2pDLE1BQU1DLE9BQU8sR0FBRyxNQUFNQyxnQkFBQSxDQUFRQyxPQUFSLEVBQXRCO0VBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsVUFBMUI7O0VBQ0EsSUFBSTtJQUNGLElBQUlDLFVBQVUsR0FBRyxLQUFqQjtJQUNBLE1BQU1ULFlBQUEsQ0FBSVUsV0FBSixDQUFnQk4sT0FBaEIsRUFBeUIsQ0FBQztNQUFDTztJQUFELENBQUQsS0FBYTtNQUMxQ0YsVUFBVSxHQUFHRSxLQUFLLENBQUNDLFFBQU4sQ0FBZUMsVUFBZixDQUEyQixHQUFFTCxpQkFBa0IsR0FBL0MsQ0FBYjtNQUVBLE9BQU8sQ0FBQ0MsVUFBUjtJQUNELENBSkssQ0FBTjs7SUFLQSxJQUFJLENBQUNBLFVBQUwsRUFBaUI7TUFDZixPQUFPLEtBQVA7SUFDRDs7SUFDRCxNQUFNSyxVQUFVLEdBQUc1RSxhQUFBLENBQUtDLE9BQUwsQ0FBYWtFLE9BQWIsRUFBc0IsS0FBdEIsQ0FBbkI7O0lBQ0EsTUFBTUwsWUFBQSxDQUFJRSxZQUFKLENBQWlCRSxPQUFqQixFQUEwQlUsVUFBMUIsQ0FBTjtJQUNBLE1BQU0vQyxXQUFBLENBQUdnRCxNQUFILENBQVU3RSxhQUFBLENBQUtDLE9BQUwsQ0FBYTJFLFVBQWIsRUFBeUJOLGlCQUF6QixDQUFWLENBQU47O0lBQ0EsTUFBTVEsYUFBYSxHQUFHOUUsYUFBQSxDQUFLQyxPQUFMLENBQWFrRSxPQUFiLEVBQXNCbkUsYUFBQSxDQUFLOEMsUUFBTCxDQUFjb0IsT0FBZCxDQUF0QixDQUF0Qjs7SUFDQSxNQUFNSixZQUFBLENBQUlpQixTQUFKLENBQWNELGFBQWQsRUFBNkI7TUFDakN6QyxHQUFHLEVBQUV1QztJQUQ0QixDQUE3QixDQUFOO0lBR0EsTUFBTS9DLFdBQUEsQ0FBR21ELE1BQUgsQ0FBVWQsT0FBVixDQUFOO0lBQ0EsTUFBTXJDLFdBQUEsQ0FBR29ELEVBQUgsQ0FBTUgsYUFBTixFQUFxQlosT0FBckIsQ0FBTjtJQUNBLE9BQU8sSUFBUDtFQUNELENBcEJELFNBb0JVO0lBQ1IsTUFBTXJDLFdBQUEsQ0FBR2dELE1BQUgsQ0FBVVYsT0FBVixDQUFOO0VBQ0Q7QUFDRjs7QUFFRCxTQUFTZSxvQkFBVCxDQUErQkMsTUFBL0IsRUFBdUM7RUFDckMsSUFBSUMsT0FBTyxHQUFHLEVBQWQ7O0VBQ0EsS0FBSyxJQUFJQyxJQUFULElBQWlCRixNQUFNLENBQUNoRixLQUFQLENBQWEsSUFBYixDQUFqQixFQUFxQztJQUNuQyxJQUFJa0YsSUFBSSxDQUFDL0UsTUFBTCxHQUFjLENBQWQsSUFBbUIrRSxJQUFJLENBQUMsQ0FBRCxDQUFKLEtBQVksR0FBbkMsRUFBd0M7TUFFdENELE9BQU8sQ0FBQ0UsSUFBUixDQUFhRCxJQUFJLENBQUNFLElBQUwsR0FBWUMsT0FBWixDQUFvQixJQUFwQixFQUEwQixFQUExQixDQUFiO0lBQ0Q7RUFDRjs7RUFDRCxPQUFPSixPQUFQO0FBQ0Q7O0FBRUQsTUFBTUssV0FBVyxHQUFHNUYsZUFBQSxDQUFFQyxPQUFGLENBQVUsZUFBZTJGLFdBQWYsR0FBOEI7RUFDMUQsTUFBTWpDLE1BQU0sR0FBR3BDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZcUUsU0FBM0I7O0VBQ0EsSUFBSSxDQUFDbEMsTUFBTCxFQUFhO0lBQ1gsTUFBTSxJQUFJdEMsS0FBSixDQUFVLHVFQUFWLENBQU47RUFDRDs7RUFDRCxJQUFJLEVBQUMsTUFBTVcsV0FBQSxDQUFHQyxNQUFILENBQVUwQixNQUFWLENBQVAsQ0FBSixFQUE4QjtJQUM1QixNQUFNLElBQUl0QyxLQUFKLENBQVcsMkJBQTBCc0MsTUFBTyxjQUE1QyxDQUFOO0VBQ0Q7O0VBQ0QsTUFBTXpCLEtBQUssR0FBRyxNQUFNRixXQUFBLENBQUdHLElBQUgsQ0FBUXdCLE1BQVIsQ0FBcEI7O0VBQ0EsSUFBSSxDQUFDekIsS0FBSyxDQUFDRSxXQUFOLEVBQUwsRUFBMEI7SUFDeEIsTUFBTSxJQUFJZixLQUFKLENBQVcsMkJBQTBCc0MsTUFBTywwQkFBNUMsQ0FBTjtFQUNEOztFQUNELE9BQU9BLE1BQVA7QUFDRCxDQWJtQixDQUFwQjs7OztBQWVBLE1BQU1tQyxZQUFZLEdBQUc5RixlQUFBLENBQUVDLE9BQUYsQ0FBVSxlQUFlNkYsWUFBZixHQUErQjtFQUM1RCxJQUFJQyxRQUFKO0VBQ0EsSUFBSUMsTUFBSjs7RUFDQSxJQUFJO0lBQ0ZELFFBQVEsR0FBRyxNQUFNSCxXQUFXLEVBQTVCO0VBQ0QsQ0FGRCxDQUVFLE9BQU9LLEdBQVAsRUFBWTtJQUNaRCxNQUFNLEdBQUdDLEdBQUcsQ0FBQ0MsT0FBYjtFQUNEOztFQUNELE1BQU1DLGNBQWMsR0FBSSxPQUFNQyxlQUFBLENBQU9DLFNBQVAsS0FBcUIsTUFBckIsR0FBOEIsRUFBRyxFQUEvRDs7RUFDQSxJQUFJTixRQUFKLEVBQWM7SUFDWixNQUFNTyxVQUFVLEdBQUduRyxhQUFBLENBQUtDLE9BQUwsQ0FBYTJGLFFBQWIsRUFBdUIsS0FBdkIsRUFBOEJJLGNBQTlCLENBQW5COztJQUNBLElBQUksTUFBTW5FLFdBQUEsQ0FBR0MsTUFBSCxDQUFVcUUsVUFBVixDQUFWLEVBQWlDO01BQy9CLE9BQU9BLFVBQVA7SUFDRDtFQUNGOztFQUNELElBQUk7SUFDRixPQUFPLE1BQU10RSxXQUFBLENBQUd1RSxLQUFILENBQVNKLGNBQVQsQ0FBYjtFQUNELENBRkQsQ0FFRSxPQUFPL0UsR0FBUCxFQUFZLENBQUU7O0VBQ2hCLE1BQU0sSUFBSUMsS0FBSixDQUFXLFFBQU84RSxjQUFlLDhCQUF2QixHQUNiLHdDQUF1Q0gsTUFBTSxJQUFJN0YsYUFBQSxDQUFLQyxPQUFMLENBQWEyRixRQUFiLEVBQXVCLEtBQXZCLENBQThCLEdBRDVFLENBQU47QUFFRCxDQXBCb0IsQ0FBckI7Ozs7QUFzQkEsTUFBTVMsZUFBZSxHQUFHLGtCQUFrQjtFQUN4QyxNQUFNQyxVQUFVLEdBQUksVUFBU0wsZUFBQSxDQUFPQyxTQUFQLEtBQXFCLE1BQXJCLEdBQThCLEVBQUcsRUFBOUQ7O0VBQ0EsSUFBSTtJQUNGLE9BQU8sTUFBTXJFLFdBQUEsQ0FBR3VFLEtBQUgsQ0FBU0UsVUFBVCxDQUFiO0VBQ0QsQ0FGRCxDQUVFLE9BQU9SLEdBQVAsRUFBWTtJQUNaLE1BQU0sSUFBSTVFLEtBQUosQ0FBVSw0RUFBVixDQUFOO0VBQ0Q7QUFDRixDQVBEOzs7O0FBZ0JBLGVBQWVxRixpQkFBZixDQUFrQ0MsVUFBbEMsRUFBOEM7RUFDNUMsT0FBTyxNQUFNQSxVQUFVLENBQUNDLG9CQUFYLENBQWdDLGVBQWhDLENBQWI7QUFDRDs7QUFVRCxlQUFlQyxtQkFBZixDQUFvQ0YsVUFBcEMsRUFBZ0Q7RUFDOUMsT0FBTyxNQUFNQSxVQUFVLENBQUNDLG9CQUFYLENBQWdDLGFBQWhDLENBQWI7QUFDRDs7QUFrQkQsU0FBU0UsbUJBQVQsQ0FBOEJDLE9BQTlCLEVBQXVDO0VBQ3JDLE9BQU8vRyxlQUFBLENBQUVnSCxJQUFGLENBQU8sQ0FBQyx5QkFBRCxFQUE0QiwwQkFBNUIsQ0FBUCxFQUFpRUMsQ0FBRCxJQUFPRixPQUFPLENBQUNHLFFBQVIsQ0FBaUJELENBQWpCLENBQXZFLEtBRUZqSCxlQUFBLENBQUVtSCxLQUFGLENBQVEsQ0FBQyw0Q0FBRCxFQUErQywwQkFBL0MsQ0FBUixFQUFxRkYsQ0FBRCxJQUFPQSxDQUFDLENBQUNHLElBQUYsQ0FBT0wsT0FBUCxDQUEzRixDQUZMO0FBR0Q7O0FBS0QsU0FBU00sd0JBQVQsQ0FBbUNOLE9BQW5DLEVBQTRDO0VBQzFDLElBQUlPLENBQUMsR0FBRyw0QkFBNEJuRSxJQUE1QixDQUFpQzRELE9BQWpDLENBQVI7RUFDQSxPQUFRTyxDQUFDLElBQUlBLENBQUMsQ0FBQzdHLE1BQVAsSUFBaUI2RyxDQUFDLENBQUMsQ0FBRCxDQUFuQixHQUEwQixJQUExQixHQUFpQyxLQUF4QztBQUNEOztBQUtELFNBQVNDLHFCQUFULENBQWdDUixPQUFoQyxFQUF5QztFQUN2QyxJQUFJTyxDQUFDLEdBQUcsMkJBQTJCbkUsSUFBM0IsQ0FBZ0M0RCxPQUFoQyxDQUFSO0VBQ0EsT0FBT08sQ0FBQyxJQUFJaEUsUUFBUSxDQUFDZ0UsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLaEgsS0FBTCxDQUFXLEdBQVgsRUFBZ0IsQ0FBaEIsQ0FBRCxFQUFxQixFQUFyQixDQUFwQjtBQUNEOztBQU1ELFNBQVNrSCxlQUFULENBQTBCVCxPQUExQixFQUFtQztFQUNqQyxJQUFJTyxDQUFDLEdBQUcsdUJBQXVCbkUsSUFBdkIsQ0FBNEI0RCxPQUE1QixDQUFSO0VBQ0EsT0FBTyxDQUFDTyxDQUFELElBQ0NBLENBQUMsSUFBSUEsQ0FBQyxDQUFDN0csTUFBRixHQUFXLENBQWhCLElBQXFCNkcsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLaEgsS0FBTCxDQUFXLEdBQVgsRUFBZ0IsQ0FBaEIsTUFBdUIsTUFEN0MsSUFDd0QsS0FEL0Q7QUFFRDs7QUFVRCxTQUFTbUgsYUFBVCxDQUF3QkMsZUFBeEIsRUFBeUNDLFFBQXpDLEVBQW1EO0VBQ2pELE1BQU07SUFDSkMsSUFESTtJQUVKQyxhQUZJO0lBR0pDLEdBSEk7SUFJSkMsUUFKSTtJQUtKQyxNQUxJO0lBTUpDLFFBTkk7SUFPSkMsT0FQSTtJQVFKQztFQVJJLElBU0ZULGVBVEo7RUFVQSxNQUFNVSxHQUFHLEdBQUcsQ0FBQyxJQUFELEVBQU8sT0FBUCxDQUFaOztFQUNBLElBQUlDLGFBQUEsQ0FBS0MsUUFBTCxDQUFjVixJQUFkLENBQUosRUFBeUI7SUFDdkJRLEdBQUcsQ0FBQzNDLElBQUosQ0FBUyxRQUFULEVBQW1CbUMsSUFBbkI7RUFDRDs7RUFDRCxJQUFJQyxhQUFKLEVBQW1CO0lBQ2pCTyxHQUFHLENBQUMzQyxJQUFKLENBQVMsSUFBVDtFQUNEOztFQUNELElBQUlzQyxRQUFRLElBQUlELEdBQWhCLEVBQXFCO0lBQ25CTSxHQUFHLENBQUMzQyxJQUFKLENBQVMsSUFBVCxFQUFnQixHQUFFcUMsR0FBSSxJQUFHQyxRQUFTLEVBQWxDO0VBQ0Q7O0VBQ0QsSUFBSUcsT0FBTyxJQUFJUCxRQUFRLElBQUksRUFBM0IsRUFBK0I7SUFDN0JTLEdBQUcsQ0FBQzNDLElBQUosQ0FBUyxJQUFUO0VBQ0Q7O0VBQ0QsSUFBSXVDLE1BQUosRUFBWTtJQUNWSSxHQUFHLENBQUMzQyxJQUFKLENBQVMsSUFBVCxFQUFldUMsTUFBZjtFQUNEOztFQUNELElBQUlDLFFBQUosRUFBYztJQUNaRyxHQUFHLENBQUMzQyxJQUFKLENBQVMsSUFBVCxFQUFld0MsUUFBZjtFQUNEOztFQUNELElBQUlFLEtBQUosRUFBVztJQUNUQyxHQUFHLENBQUMzQyxJQUFKLENBQVMsSUFBVCxFQUFlMEMsS0FBZjtFQUNEOztFQUNELElBQUlULGVBQWUsQ0FBQ2EsdUJBQXBCLEVBQTZDO0lBUTNDLElBQUlDLGFBQWEsR0FBRyxVQUFVQyxHQUFWLEVBQWU7TUFDakNBLEdBQUcsR0FBR0EsR0FBRyxDQUFDL0MsSUFBSixFQUFOO01BQ0EsSUFBSWdELEtBQUssR0FBR0QsR0FBRyxDQUFDRSxPQUFKLENBQVksR0FBWixDQUFaOztNQUNBLElBQUlELEtBQUssS0FBSyxDQUFDLENBQWYsRUFBa0I7UUFDaEIsT0FBT0QsR0FBRyxDQUFDaEksTUFBSixHQUFhLENBQUNnSSxHQUFELENBQWIsR0FBcUIsRUFBNUI7TUFDRCxDQUZELE1BRU87UUFDTCxPQUFPLENBQUNBLEdBQUcsQ0FBQ0csU0FBSixDQUFjLENBQWQsRUFBaUJGLEtBQWpCLEVBQXdCaEQsSUFBeEIsRUFBRCxFQUFpQytDLEdBQUcsQ0FBQ0csU0FBSixDQUFjRixLQUFLLEdBQUcsQ0FBdEIsRUFBeUJoRCxJQUF6QixFQUFqQyxDQUFQO01BQ0Q7SUFDRixDQVJEOztJQWFBLElBQUk2Qyx1QkFBdUIsR0FBSSxJQUFHYixlQUFlLENBQUNhLHVCQUF3QixFQUExRTtJQUNBLElBQUlNLEVBQUUsR0FBRyxpQkFBVDs7SUFDQSxPQUFPLElBQVAsRUFBYTtNQUNYLElBQUlDLElBQUksR0FBR0QsRUFBRSxDQUFDMUYsSUFBSCxDQUFRb0YsdUJBQVIsQ0FBWDs7TUFDQSxJQUFJLENBQUNPLElBQUwsRUFBVztRQUNULElBQUlQLHVCQUF1QixDQUFDOUgsTUFBNUIsRUFBb0M7VUFFbEMySCxHQUFHLENBQUMzQyxJQUFKLENBQVNzRCxLQUFULENBQWVYLEdBQWYsRUFBb0JJLGFBQWEsQ0FBQ0QsdUJBQUQsQ0FBakM7UUFDRDs7UUFFRDtNQUNEOztNQUtELElBQUlTLElBQUksR0FBR0YsSUFBSSxDQUFDLENBQUQsQ0FBZjtNQUNBLElBQUlHLE9BQU8sR0FBR1YsdUJBQXVCLENBQUNJLE9BQXhCLENBQWdDSyxJQUFoQyxDQUFkOztNQUNBLElBQUlDLE9BQU8sS0FBSyxDQUFoQixFQUFtQjtRQUNqQixJQUFJQyxRQUFRLEdBQUdYLHVCQUF1QixDQUFDSyxTQUF4QixDQUFrQyxDQUFsQyxFQUFxQ0ssT0FBckMsQ0FBZjtRQUNBYixHQUFHLENBQUMzQyxJQUFKLENBQVNzRCxLQUFULENBQWVYLEdBQWYsRUFBb0JJLGFBQWEsQ0FBQ1UsUUFBRCxDQUFqQztNQUNEOztNQUdEZCxHQUFHLENBQUMzQyxJQUFKLENBQVN1RCxJQUFUO01BR0FULHVCQUF1QixHQUFHTyxJQUFJLENBQUMsQ0FBRCxDQUE5QjtJQUNEO0VBQ0Y7O0VBQ0QsT0FBT1YsR0FBUDtBQUNEOztBQUVELE1BQU1lLGtCQUFrQixHQUFHbkosZUFBQSxDQUFFQyxPQUFGLENBQVUsZUFBZWtKLGtCQUFmLEdBQXFDO0VBQ3hFLE1BQU1DLFdBQVcsR0FBRzdILE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxZQUFoQzs7RUFDQSxJQUFJLENBQUMySCxXQUFMLEVBQWtCO0lBQ2hCLE1BQU0sSUFBSS9ILEtBQUosQ0FBVSx5REFBVixDQUFOO0VBQ0Q7O0VBQ0QsTUFBTWdJLGNBQWMsR0FBR2xKLGFBQUEsQ0FBS0MsT0FBTCxDQUFhZ0osV0FBYixFQUEwQixPQUExQixFQUFtQyxtQkFBbkMsQ0FBdkI7O0VBQ0EsSUFBSSxFQUFDLE1BQU1wSCxXQUFBLENBQUdDLE1BQUgsQ0FBVW9ILGNBQVYsQ0FBUCxDQUFKLEVBQXNDO0lBQ3BDakcsZUFBQSxDQUFJQyxJQUFKLENBQVUsZUFBY2dHLGNBQWUsZ0NBQXZDOztJQUNBO0VBQ0Q7O0VBQ0QsTUFBTUMsaUJBQWlCLEdBQUcsTUFBTXRILFdBQUEsQ0FBR2EsUUFBSCxDQUFZd0csY0FBWixFQUE0QixNQUE1QixDQUFoQztFQUNBLE1BQU1FLGNBQWMsR0FBRyxJQUFJQyxNQUFKLENBQVcsdUNBQVgsQ0FBdkI7RUFDQSxNQUFNdEcsS0FBSyxHQUFHcUcsY0FBYyxDQUFDcEcsSUFBZixDQUFvQm1HLGlCQUFwQixDQUFkOztFQUNBLElBQUlwRyxLQUFKLEVBQVc7SUFDVCxPQUFPO01BQ0x1RyxLQUFLLEVBQUVuRyxRQUFRLENBQUNKLEtBQUssQ0FBQyxDQUFELENBQU4sRUFBVyxFQUFYLENBRFY7TUFFTHdHLEtBQUssRUFBRXhHLEtBQUssQ0FBQyxDQUFELENBQUwsR0FBV0ksUUFBUSxDQUFDSixLQUFLLENBQUMsQ0FBRCxDQUFOLEVBQVcsRUFBWCxDQUFuQixHQUFvQyxDQUZ0QztNQUdMeUcsS0FBSyxFQUFFekcsS0FBSyxDQUFDLENBQUQsQ0FBTCxHQUFXSSxRQUFRLENBQUNKLEtBQUssQ0FBQyxDQUFELENBQU4sRUFBVyxFQUFYLENBQW5CLEdBQW9DO0lBSHRDLENBQVA7RUFLRDs7RUFDREUsZUFBQSxDQUFJQyxJQUFKLENBQVUsMENBQXlDZ0csY0FBZSxFQUFsRTtBQUNELENBckIwQixDQUEzQjs7OztBQStCQSxNQUFNTyxpQkFBaUIsR0FBRzVKLGVBQUEsQ0FBRUMsT0FBRixDQUFVLGVBQWUySixpQkFBZixDQUFrQy9ILE9BQWxDLEVBQTJDO0VBQzdFLElBQUlnSSxjQUFjLEdBQUcsTUFBTTdILFdBQUEsQ0FBR08sSUFBSCxDQUFRLElBQVIsRUFBYztJQUN2Q0MsR0FBRyxFQUFFckMsYUFBQSxDQUFLQyxPQUFMLENBQWF5QixPQUFiLEVBQXNCLGFBQXRCLENBRGtDO0lBRXZDWSxRQUFRLEVBQUU7RUFGNkIsQ0FBZCxDQUEzQjs7RUFJQSxJQUFJO0lBQ0ZvSCxjQUFjLEdBQUdBLGNBQWMsQ0FDNUJDLEdBRGMsQ0FDVEMsR0FBRCxJQUFTLENBQUM1SixhQUFBLENBQUs4QyxRQUFMLENBQWM4RyxHQUFkLENBQUQsRUFBcUJBLEdBQXJCLENBREMsRUFFZHRHLElBRmMsQ0FFVCxDQUFDdUcsQ0FBRCxFQUFJQyxDQUFKLEtBQVVDLGVBQUEsQ0FBT0MsUUFBUCxDQUFnQkgsQ0FBQyxDQUFDLENBQUQsQ0FBakIsRUFBc0JDLENBQUMsQ0FBQyxDQUFELENBQXZCLENBRkQsRUFHZEgsR0FIYyxDQUdUTSxJQUFELElBQVVBLElBQUksQ0FBQyxDQUFELENBSEosQ0FBakI7RUFJRCxDQUxELENBS0UsT0FBT25FLEdBQVAsRUFBWTtJQUNaN0MsZUFBQSxDQUFJQyxJQUFKLENBQVUsbUNBQWtDckMsSUFBSSxDQUFDNkMsU0FBTCxDQUFlZ0csY0FBYyxDQUFDQyxHQUFmLENBQW9CQyxHQUFELElBQVM1SixhQUFBLENBQUs4QyxRQUFMLENBQWM4RyxHQUFkLENBQTVCLENBQWYsQ0FBZ0UsR0FBbkcsR0FDTiw0QkFESDs7SUFFQTNHLGVBQUEsQ0FBSUMsSUFBSixDQUFVLGlFQUFnRTRDLEdBQUcsQ0FBQ0MsT0FBUSxFQUF0Rjs7SUFDQSxNQUFNbUUsS0FBSyxHQUFHLE1BQU1DLGlCQUFBLENBQUVSLEdBQUYsQ0FBTUQsY0FBTixFQUFzQixNQUFPRSxHQUFQLElBQWUsQ0FBQyxDQUFDLE1BQU0vSCxXQUFBLENBQUdHLElBQUgsQ0FBUTRILEdBQVIsQ0FBUCxFQUFxQlEsS0FBckIsQ0FBMkJDLE9BQTNCLEVBQUQsRUFBdUNULEdBQXZDLENBQXJDLENBQXBCO0lBQ0FGLGNBQWMsR0FBR1EsS0FBSyxDQUNuQjVHLElBRGMsQ0FDVCxDQUFDdUcsQ0FBRCxFQUFJQyxDQUFKLEtBQVVELENBQUMsQ0FBQyxDQUFELENBQUQsR0FBT0MsQ0FBQyxDQUFDLENBQUQsQ0FEVCxFQUVkSCxHQUZjLENBRVRNLElBQUQsSUFBVUEsSUFBSSxDQUFDLENBQUQsQ0FGSixDQUFqQjtFQUdEOztFQUNEaEgsZUFBQSxDQUFJcUgsSUFBSixDQUFVLFNBQVFaLGNBQWMsQ0FBQ3BKLE1BQU8saUNBQWdDb0IsT0FBUSxtQkFBaEY7O0VBQ0EsS0FBSyxJQUFJa0ksR0FBVCxJQUFnQkYsY0FBaEIsRUFBZ0M7SUFDOUJ6RyxlQUFBLENBQUlxSCxJQUFKLENBQVUsT0FBTVYsR0FBSSxFQUFwQjtFQUNEOztFQUNELE9BQU9GLGNBQVA7QUFDRCxDQXhCeUIsQ0FBMUI7Ozs7QUFtQ0EsTUFBTWEsMEJBQTBCLEdBQUcsVUFBVUMsYUFBVixFQUF5QkMsVUFBekIsRUFBcUNDLFlBQVksR0FBRyxJQUFwRCxFQUEwRDtFQUMzRixNQUFNQyxrQkFBa0IsR0FBSUMsU0FBRCxJQUFlLElBQUl2QixNQUFKLENBQVksU0FBUXhKLGVBQUEsQ0FBRWdMLFlBQUYsQ0FBZUQsU0FBZixDQUEwQix5QkFBOUMsRUFBd0UsR0FBeEUsQ0FBMUM7O0VBQ0EsTUFBTUUsYUFBYSxHQUFHLE1BQXRCO0VBQ0EsTUFBTUMscUJBQXFCLEdBQUcsZ0NBQTlCO0VBQ0EsTUFBTUMsbUJBQW1CLEdBQUcsaUJBQTVCO0VBQ0EsTUFBTXhILE1BQU0sR0FBRyxFQUFmOztFQUNBLEtBQUssTUFBTW9ILFNBQVgsSUFBd0JILFVBQXhCLEVBQW9DO0lBQ2xDLE1BQU1RLFVBQVUsR0FBR04sa0JBQWtCLENBQUNDLFNBQUQsQ0FBbEIsQ0FBOEI1SCxJQUE5QixDQUFtQ3dILGFBQW5DLENBQW5COztJQUNBLElBQUksQ0FBQ1MsVUFBTCxFQUFpQjtNQUNmO0lBQ0Q7O0lBRUQsTUFBTUMsS0FBSyxHQUFHRCxVQUFVLENBQUMsQ0FBRCxDQUFWLENBQWM5SyxLQUFkLENBQW9CLElBQXBCLENBQWQ7O0lBQ0EsSUFBSStLLEtBQUssQ0FBQzVLLE1BQU4sR0FBZSxDQUFuQixFQUFzQjtNQUNwQjtJQUNEOztJQUVELE1BQU02SyxXQUFXLEdBQUdELEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBU0UsTUFBVCxDQUFnQk4sYUFBaEIsQ0FBcEI7O0lBQ0EsS0FBSyxNQUFNekYsSUFBWCxJQUFtQjZGLEtBQUssQ0FBQ3pLLEtBQU4sQ0FBWSxDQUFaLENBQW5CLEVBQW1DO01BQ2pDLE1BQU00SyxhQUFhLEdBQUdoRyxJQUFJLENBQUMrRixNQUFMLENBQVlOLGFBQVosQ0FBdEI7O01BQ0EsSUFBSU8sYUFBYSxJQUFJRixXQUFyQixFQUFrQztRQUNoQztNQUNEOztNQUVELE1BQU1HLG1CQUFtQixHQUFHUCxxQkFBcUIsQ0FBQy9ILElBQXRCLENBQTJCcUMsSUFBM0IsQ0FBNUI7O01BQ0EsSUFBSSxDQUFDaUcsbUJBQUwsRUFBMEI7UUFDeEI7TUFDRDs7TUFDRCxNQUFNQyxJQUFJLEdBQUc7UUFDWEMsVUFBVSxFQUFFRixtQkFBbUIsQ0FBQyxDQUFEO01BRHBCLENBQWI7TUFHQSxNQUFNRyxpQkFBaUIsR0FBR1QsbUJBQW1CLENBQUNoSSxJQUFwQixDQUF5QnFDLElBQXpCLENBQTFCOztNQUNBLElBQUlvRyxpQkFBSixFQUF1QjtRQUNyQkYsSUFBSSxDQUFDRyxPQUFMLEdBQWVELGlCQUFpQixDQUFDLENBQUQsQ0FBakIsS0FBeUIsTUFBeEM7TUFDRDs7TUFDRGpJLE1BQU0sQ0FBQzhCLElBQVAsQ0FBWWlHLElBQVo7SUFDRDtFQUNGOztFQUVELE1BQU1JLGNBQWMsR0FBR25JLE1BQU0sQ0FDMUJvSSxNQURvQixDQUNaTCxJQUFELElBQVUsQ0FBQzFMLGVBQUEsQ0FBRWdNLFNBQUYsQ0FBWW5CLFlBQVosQ0FBRCxJQUE4QmEsSUFBSSxDQUFDRyxPQUFMLEtBQWlCaEIsWUFENUMsRUFFcEJmLEdBRm9CLENBRWY0QixJQUFELElBQVVBLElBQUksQ0FBQ0MsVUFGQyxDQUF2Qjs7RUFHQXZJLGVBQUEsQ0FBSVEsS0FBSixDQUFXLGFBQVl5RSxhQUFBLENBQUs0RCxTQUFMLENBQWUsWUFBZixFQUE2QkgsY0FBYyxDQUFDckwsTUFBNUMsRUFBb0QsSUFBcEQsQ0FBMEQsR0FBdkUsR0FDUCxRQUFPbUssVUFBVyxJQUFHdkMsYUFBQSxDQUFLNEQsU0FBTCxDQUFlLE9BQWYsRUFBd0JyQixVQUFVLENBQUNuSyxNQUFuQyxFQUEyQyxLQUEzQyxDQUFrRCxFQUQxRTs7RUFFQSxPQUFPcUwsY0FBUDtBQUNELENBN0NEOzs7O0FBdUVBLFNBQVNJLGdCQUFULENBQTJCdkUsUUFBM0IsRUFBcUN3RSxPQUFPLEdBQUcsRUFBL0MsRUFBbUQ7RUFDakQsTUFBTXhJLE1BQU0sR0FBRyxFQUFmOztFQUVBLElBQUksQ0FBQzBFLGFBQUEsQ0FBS0MsUUFBTCxDQUFjNkQsT0FBTyxDQUFDeEcsT0FBdEIsQ0FBRCxJQUFtQ3dHLE9BQU8sQ0FBQ3hHLE9BQS9DLEVBQXdEO0lBQ3REaEMsTUFBTSxDQUFDOEIsSUFBUCxDQUFZLElBQVo7RUFDRDs7RUFDRCxJQUFJMEcsT0FBTyxDQUFDQyxpQkFBWixFQUErQjtJQUM3QnpJLE1BQU0sQ0FBQzhCLElBQVAsQ0FBWSxJQUFaO0VBQ0Q7O0VBQ0QsSUFBSTBHLE9BQU8sQ0FBQ0UsU0FBWixFQUF1QjtJQUNyQjFJLE1BQU0sQ0FBQzhCLElBQVAsQ0FBWSxJQUFaO0VBQ0Q7O0VBQ0QsSUFBSTBHLE9BQU8sQ0FBQ0csZ0JBQVosRUFBOEI7SUFDNUIsSUFBSTNFLFFBQVEsR0FBRyxFQUFmLEVBQW1CO01BQ2pCdkUsZUFBQSxDQUFJUSxLQUFKLENBQVcsMkNBQUQsR0FDQyx5QkFBd0IrRCxRQUFTLGlDQURsQyxHQUVDLDJCQUZYO0lBR0QsQ0FKRCxNQUlPO01BQ0xoRSxNQUFNLENBQUM4QixJQUFQLENBQVksSUFBWjtJQUNEO0VBQ0Y7O0VBRUQsSUFBSTBHLE9BQU8sQ0FBQ0ksY0FBWixFQUE0QjtJQUMxQjVJLE1BQU0sQ0FBQzhCLElBQVAsQ0FBWSxJQUFaO0VBQ0Q7O0VBRUQsT0FBTzlCLE1BQVA7QUFDRDs7QUFrQkQsU0FBUzZJLGFBQVQsQ0FBd0JDLFFBQXhCLEVBQWtDO0VBQ2hDLE1BQU05SSxNQUFNLEdBQUc7SUFDYm1FLEdBQUcsRUFBRTJFLFFBQVEsQ0FBQ0MsT0FERDtJQUViQyxXQUFXLEVBQUVySixRQUFRLENBQUNtSixRQUFRLENBQUNFLFdBQVYsRUFBdUIsRUFBdkIsQ0FGUjtJQUdiQyxXQUFXLEVBQUVILFFBQVEsQ0FBQ0csV0FBVCxJQUF3QjtFQUh4QixDQUFmOztFQUtBLElBQUksQ0FBQ0gsUUFBUSxDQUFDSSxXQUFkLEVBQTJCO0lBQ3pCLE9BQU9sSixNQUFQO0VBQ0Q7O0VBS0QsS0FBSyxNQUFNb0UsUUFBWCxJQUF1QixDQUNyQixHQUFHMEUsUUFBUSxDQUFDSSxXQUFULENBQXFCQyxVQURILEVBRXJCLEdBQUdMLFFBQVEsQ0FBQ0ksV0FBVCxDQUFxQkUsZUFGSCxDQUF2QixFQUdHO0lBQ0QsSUFBSWhGLFFBQVEsQ0FBQ2lGLE9BQVQsS0FBcUIsS0FBckIsSUFBOEJoTixlQUFBLENBQUUrQixPQUFGLENBQVVnRyxRQUFRLENBQUNrRixhQUFuQixDQUFsQyxFQUFxRTtNQUNuRTtJQUNEOztJQUVELEtBQUssTUFBTTtNQUFDQyxPQUFEO01BQVVDO0lBQVYsQ0FBWCxJQUFvQ3BGLFFBQVEsQ0FBQ2tGLGFBQTdDLEVBQTREO01BQzFELElBQUlqTixlQUFBLENBQUUrQixPQUFGLENBQVVtTCxPQUFWLEtBQXNCbE4sZUFBQSxDQUFFK0IsT0FBRixDQUFVb0wsVUFBVixDQUExQixFQUFpRDtRQUMvQztNQUNEOztNQUVELE1BQU1DLFlBQVksR0FBR0YsT0FBTyxDQUFDbEcsSUFBUixDQUFhLENBQUM7UUFBQzdGO01BQUQsQ0FBRCxLQUFZQSxJQUFJLEtBQUt0QixXQUFsQyxDQUFyQjtNQUNBLE1BQU13TixrQkFBa0IsR0FBR0YsVUFBVSxDQUFDbkcsSUFBWCxDQUFnQixDQUFDO1FBQUM3RjtNQUFELENBQUQsS0FBWUEsSUFBSSxLQUFLckIsaUJBQXJDLENBQTNCOztNQUNBLElBQUlzTixZQUFZLElBQUlDLGtCQUFwQixFQUF3QztRQUN0QzFKLE1BQU0sQ0FBQ29FLFFBQVAsR0FBa0JBLFFBQVEsQ0FBQzVHLElBQTNCO1FBQ0EsT0FBT3dDLE1BQVA7TUFDRDtJQUNGO0VBQ0Y7O0VBQ0QsT0FBT0EsTUFBUDtBQUNEOztBQVlELFNBQVMySixnQkFBVCxDQUEyQkMsU0FBM0IsRUFBc0NDLFlBQXRDLEVBQW9EO0VBQ2xELE1BQU1DLG9CQUFvQixHQUFHLFVBQVVDLENBQVYsRUFBYTtJQUN4QyxPQUFPQSxDQUFDLENBQUMvSCxPQUFGLENBQVUsSUFBVixFQUFnQixFQUFoQixFQUFvQkEsT0FBcEIsQ0FBNEIsSUFBNUIsRUFBa0MsRUFBbEMsRUFBc0NBLE9BQXRDLENBQThDLE1BQTlDLEVBQXNELEdBQXRELENBQVA7RUFDRCxDQUZEOztFQUlBLE1BQU1nSSxVQUFVLEdBQUcsRUFBbkI7RUFDQSxJQUFJQyxVQUFVLEdBQUcsS0FBakI7RUFDQSxJQUFJQyxpQkFBaUIsR0FBRyxJQUF4QjtFQUNBLElBQUlDLGVBQWUsR0FBRyxLQUF0QjtFQUVBLE1BQU1DLG1CQUFtQixHQUFHLDBCQUE1Qjs7RUFDQSxLQUFLLE1BQU12SSxJQUFYLElBQW1CK0gsU0FBUyxDQUFDak4sS0FBVixDQUFnQjBOLFdBQUEsQ0FBR0MsR0FBbkIsQ0FBbkIsRUFBNEM7SUFDMUMsTUFBTUMsV0FBVyxHQUFHMUksSUFBSSxDQUFDRSxJQUFMLEVBQXBCOztJQUNBLElBQUkxRixlQUFBLENBQUUrQixPQUFGLENBQVVtTSxXQUFWLENBQUosRUFBNEI7TUFDMUI7SUFDRDs7SUFFRCxJQUFJLENBQUMsUUFBRCxFQUFXLE1BQVgsRUFBbUIsTUFBbkIsRUFBMkIsU0FBM0IsRUFBc0NsSCxJQUF0QyxDQUE0Q0MsQ0FBRCxJQUFPaUgsV0FBVyxDQUFDcEosVUFBWixDQUF1Qm1DLENBQXZCLENBQWxELENBQUosRUFBa0Y7TUFDaEYyRyxVQUFVLEdBQUdNLFdBQVcsQ0FBQ3BKLFVBQVosQ0FBd0IsVUFBUzBJLFlBQWEsR0FBOUMsQ0FBYjtNQUNBSyxpQkFBaUIsR0FBRyxJQUFwQjtNQUNBQyxlQUFlLEdBQUcsS0FBbEI7TUFDQTtJQUNEOztJQUVELElBQUksQ0FBQ0YsVUFBTCxFQUFpQjtNQUNmO0lBQ0Q7O0lBRUQsSUFBSU0sV0FBVyxDQUFDcEosVUFBWixDQUF1QixVQUF2QixDQUFKLEVBQXdDO01BQ3RDZ0osZUFBZSxHQUFHLEtBQWxCO01BQ0FELGlCQUFpQixHQUFHLElBQXBCOztNQUVBLElBQUlLLFdBQVcsQ0FBQ2hILFFBQVosQ0FBcUIsVUFBckIsQ0FBSixFQUFzQztRQUNwQyxNQUFNaEUsS0FBSyxHQUFHLGtCQUFrQkMsSUFBbEIsQ0FBdUIrSyxXQUF2QixDQUFkOztRQUNBLElBQUloTCxLQUFKLEVBQVc7VUFDVDJLLGlCQUFpQixHQUFHM0ssS0FBSyxDQUFDLENBQUQsQ0FBekI7UUFDRDtNQUNGLENBTEQsTUFLTyxJQUFJZ0wsV0FBVyxDQUFDaEgsUUFBWixDQUFxQixXQUFyQixDQUFKLEVBQXVDO1FBQzVDLE1BQU1oRSxLQUFLLEdBQUcsbUJBQW1CQyxJQUFuQixDQUF3QitLLFdBQXhCLENBQWQ7O1FBQ0EsSUFBSWhMLEtBQUosRUFBVztVQUNUMkssaUJBQWlCLEdBQUczSyxLQUFLLENBQUMsQ0FBRCxDQUF6QjtVQUNBNEssZUFBZSxHQUFHLElBQWxCO1FBQ0Q7TUFDRjs7TUFDRDtJQUNEOztJQUVELElBQUlELGlCQUFpQixJQUFJSyxXQUFXLENBQUNwSixVQUFaLENBQXVCLFNBQXZCLENBQXpCLEVBQTREO01BQzFELE1BQU01QixLQUFLLEdBQUc2SyxtQkFBbUIsQ0FBQzVLLElBQXBCLENBQXlCK0ssV0FBekIsQ0FBZDs7TUFDQSxJQUFJaEwsS0FBSixFQUFXO1FBQ1R5SyxVQUFVLENBQUNFLGlCQUFELENBQVYsR0FBZ0NKLG9CQUFvQixDQUFDdkssS0FBSyxDQUFDLENBQUQsQ0FBTixDQUFwRDtNQUNEOztNQUNEMkssaUJBQWlCLEdBQUcsSUFBcEI7TUFDQTtJQUNEOztJQUVELElBQUlBLGlCQUFpQixJQUFJQyxlQUFyQixJQUF3Q0ksV0FBVyxDQUFDaEgsUUFBWixDQUFxQixXQUFyQixDQUE1QyxFQUErRTtNQUM3RSxNQUFNaEUsS0FBSyxHQUFHNkssbUJBQW1CLENBQUM1SyxJQUFwQixDQUF5QitLLFdBQXpCLENBQWQ7O01BQ0EsSUFBSWhMLEtBQUosRUFBVztRQUNUeUssVUFBVSxDQUFDRSxpQkFBRCxDQUFWLEdBQWdDLENBQzlCLElBQUlGLFVBQVUsQ0FBQ0UsaUJBQUQsQ0FBVixJQUFpQyxFQUFyQyxDQUQ4QixFQUU5Qkosb0JBQW9CLENBQUN2SyxLQUFLLENBQUMsQ0FBRCxDQUFOLENBRlUsQ0FBaEM7TUFJRDs7TUFDRDtJQUNEO0VBQ0Y7O0VBQ0QsT0FBT3lLLFVBQVA7QUFDRDs7QUFZRCxTQUFTUSxpQkFBVCxDQUE0QlosU0FBNUIsRUFBdUNDLFlBQXZDLEVBQXFEO0VBQ25ELE1BQU1ZLFFBQVEsR0FBR2IsU0FBUyxDQUFDak4sS0FBVixDQUFnQjBOLFdBQUEsQ0FBR0MsR0FBbkIsQ0FBakI7O0VBQ0EsU0FBU0ksY0FBVCxDQUF5QkMsUUFBekIsRUFBbUM7SUFDakMsSUFBSUMsR0FBRyxHQUFHRCxRQUFWO0lBQ0EsTUFBTUUsWUFBWSxHQUFHSixRQUFRLENBQUNFLFFBQUQsQ0FBUixDQUFtQjNGLE9BQW5CLENBQTJCLEdBQTNCLENBQXJCOztJQUNBLElBQUk2RixZQUFZLEdBQUcsQ0FBbkIsRUFBc0I7TUFDcEIsT0FBTyxDQUFDLElBQUQsRUFBT0QsR0FBUCxDQUFQO0lBQ0Q7O0lBQ0QsSUFBSTVLLE1BQU0sR0FBRyxFQUFiOztJQUNBLE9BQU80SyxHQUFHLEdBQUdILFFBQVEsQ0FBQzNOLE1BQXRCLEVBQThCO01BQzVCLE1BQU1nTyxvQkFBb0IsR0FBRyxLQUFLdEwsSUFBTCxDQUFVaUwsUUFBUSxDQUFDRyxHQUFELENBQWxCLENBQTdCOztNQUNBLElBQUlFLG9CQUFKLEVBQTBCO1FBQ3hCLE1BQU1DLGtCQUFrQixHQUFHRCxvQkFBb0IsQ0FBQ0UsS0FBaEQ7O1FBQ0EsSUFBSUwsUUFBUSxLQUFLQyxHQUFqQixFQUFzQjtVQUNwQixPQUFPLENBQ0xILFFBQVEsQ0FBQ0csR0FBRCxDQUFSLENBQWMzRixTQUFkLENBQXdCNEYsWUFBWSxHQUFHLENBQXZDLEVBQTBDRSxrQkFBMUMsQ0FESyxFQUVMSCxHQUZLLENBQVA7UUFJRDs7UUFDRCxPQUFPLENBQ0osR0FBRTVLLE1BQU8sTUFBSzNELGVBQUEsQ0FBRTRPLFNBQUYsQ0FBWVIsUUFBUSxDQUFDRyxHQUFELENBQVIsQ0FBYzNGLFNBQWQsQ0FBd0IsQ0FBeEIsRUFBMkI4RixrQkFBM0IsQ0FBWixDQUE0RCxFQUR0RSxFQUVMSCxHQUZLLENBQVA7TUFJRDs7TUFDRCxJQUFJQSxHQUFHLEdBQUdELFFBQVYsRUFBb0I7UUFDbEIzSyxNQUFNLElBQUssTUFBSzNELGVBQUEsQ0FBRTRPLFNBQUYsQ0FBWVIsUUFBUSxDQUFDRyxHQUFELENBQXBCLENBQTJCLEVBQTNDO01BQ0QsQ0FGRCxNQUVPO1FBQ0w1SyxNQUFNLElBQUl5SyxRQUFRLENBQUNHLEdBQUQsQ0FBUixDQUFjM0YsU0FBZCxDQUF3QjRGLFlBQVksR0FBRyxDQUF2QyxDQUFWO01BQ0Q7O01BQ0QsRUFBRUQsR0FBRjtJQUNEOztJQUNELE9BQU8sQ0FBQzVLLE1BQUQsRUFBUzRLLEdBQVQsQ0FBUDtFQUNEOztFQUVELE1BQU1aLFVBQVUsR0FBRyxFQUFuQjtFQUNBLElBQUlFLGlCQUFpQixHQUFHLElBQXhCO0VBQ0EsSUFBSUMsZUFBZSxHQUFHLEtBQXRCO0VBQ0EsSUFBSWUsaUJBQWlCLEdBQUcsS0FBeEI7RUFDQSxJQUFJQyxTQUFTLEdBQUcsQ0FBaEI7O0VBQ0EsT0FBT0EsU0FBUyxHQUFHVixRQUFRLENBQUMzTixNQUE1QixFQUFvQztJQUNsQyxNQUFNeU4sV0FBVyxHQUFHRSxRQUFRLENBQUNVLFNBQUQsQ0FBUixDQUFvQnBKLElBQXBCLEVBQXBCOztJQUNBLElBQUkxRixlQUFBLENBQUUrQixPQUFGLENBQVVtTSxXQUFWLENBQUosRUFBNEI7TUFDMUIsRUFBRVksU0FBRjtNQUNBO0lBQ0Q7O0lBRUQsSUFBSSxDQUFDLE1BQUQsRUFBUyxTQUFULEVBQW9COUgsSUFBcEIsQ0FBMEJDLENBQUQsSUFBT2lILFdBQVcsQ0FBQ3BKLFVBQVosQ0FBdUJtQyxDQUF2QixDQUFoQyxDQUFKLEVBQWdFO01BQzlENEcsaUJBQWlCLEdBQUcsSUFBcEI7TUFDQUMsZUFBZSxHQUFHLEtBQWxCO01BQ0FlLGlCQUFpQixHQUFHLEtBQXBCO01BQ0EsRUFBRUMsU0FBRjtNQUNBO0lBQ0Q7O0lBRUQsSUFBSVosV0FBVyxDQUFDcEosVUFBWixDQUF1QixVQUF2QixDQUFKLEVBQXdDO01BQ3RDZ0osZUFBZSxHQUFHLEtBQWxCO01BQ0FELGlCQUFpQixHQUFHLElBQXBCO01BQ0FnQixpQkFBaUIsR0FBRyxLQUFwQjs7TUFFQSxJQUFJWCxXQUFXLENBQUNoSCxRQUFaLENBQXFCLFNBQXJCLENBQUosRUFBcUM7UUFDbkMsTUFBTWhFLEtBQUssR0FBRyxnQkFBZ0JDLElBQWhCLENBQXFCK0ssV0FBckIsQ0FBZDs7UUFDQSxJQUFJaEwsS0FBSixFQUFXO1VBQ1QySyxpQkFBaUIsR0FBRzNLLEtBQUssQ0FBQyxDQUFELENBQXpCO1FBQ0Q7TUFDRixDQUxELE1BS08sSUFBSWdMLFdBQVcsQ0FBQ2hILFFBQVosQ0FBcUIsVUFBckIsQ0FBSixFQUFzQztRQUMzQyxNQUFNaEUsS0FBSyxHQUFHLGlCQUFpQkMsSUFBakIsQ0FBc0IrSyxXQUF0QixDQUFkOztRQUNBLElBQUloTCxLQUFKLEVBQVc7VUFDVDJLLGlCQUFpQixHQUFHM0ssS0FBSyxDQUFDLENBQUQsQ0FBekI7VUFDQTRLLGVBQWUsR0FBRyxJQUFsQjtRQUNEO01BQ0Y7O01BQ0QsRUFBRWdCLFNBQUY7TUFDQTtJQUNEOztJQUVELElBQUlqQixpQkFBSixFQUF1QjtNQUNyQixJQUFJQyxlQUFKLEVBQXFCO1FBQ25CLElBQUlJLFdBQVcsQ0FBQ3BKLFVBQVosQ0FBdUIsR0FBdkIsQ0FBSixFQUFpQztVQUMvQitKLGlCQUFpQixHQUFHWCxXQUFXLENBQUNwSixVQUFaLENBQXdCLElBQUcwSSxZQUFhLEdBQXhDLENBQXBCO1VBQ0EsRUFBRXNCLFNBQUY7VUFDQTtRQUNEOztRQUNELElBQUlELGlCQUFKLEVBQXVCO1VBQ3JCLE1BQU0sQ0FBQ0UsT0FBRCxFQUFVUixHQUFWLElBQWlCRixjQUFjLENBQUNTLFNBQUQsQ0FBckM7VUFDQUEsU0FBUyxHQUFHUCxHQUFaOztVQUNBLElBQUl2TyxlQUFBLENBQUVnUCxRQUFGLENBQVdELE9BQVgsQ0FBSixFQUF5QjtZQUN2QnBCLFVBQVUsQ0FBQ0UsaUJBQUQsQ0FBVixHQUFnQyxDQUM5QixJQUFJRixVQUFVLENBQUNFLGlCQUFELENBQVYsSUFBaUMsRUFBckMsQ0FEOEIsRUFFOUJrQixPQUY4QixDQUFoQztVQUlEO1FBQ0Y7TUFDRixDQWhCRCxNQWdCTyxJQUFJYixXQUFXLENBQUNwSixVQUFaLENBQXdCLElBQUcwSSxZQUFhLEdBQXhDLENBQUosRUFBaUQ7UUFDdEQsTUFBTSxDQUFDdUIsT0FBRCxFQUFVUixHQUFWLElBQWlCRixjQUFjLENBQUNTLFNBQUQsQ0FBckM7UUFDQUEsU0FBUyxHQUFHUCxHQUFaOztRQUNBLElBQUl2TyxlQUFBLENBQUVnUCxRQUFGLENBQVdELE9BQVgsQ0FBSixFQUF5QjtVQUN2QnBCLFVBQVUsQ0FBQ0UsaUJBQUQsQ0FBVixHQUFnQ2tCLE9BQWhDO1FBQ0Q7O1FBQ0RsQixpQkFBaUIsR0FBRyxJQUFwQjtNQUNEO0lBQ0Y7O0lBQ0QsRUFBRWlCLFNBQUY7RUFDRDs7RUFDRCxPQUFPbkIsVUFBUDtBQUNEOztBQVlELGVBQWVzQixrQkFBZixDQUFtQ0MsYUFBbkMsRUFBa0RDLGFBQWxELEVBQWlFQyxhQUFqRSxFQUFnRjtFQUM5RSxJQUFJNUIsWUFBWSxHQUFHMkIsYUFBYSxJQUFJQyxhQUFwQzs7RUFDQSxJQUFJNUIsWUFBWSxDQUFDdEcsUUFBYixDQUFzQixHQUF0QixLQUE4QixDQUFDc0csWUFBWSxDQUFDdEcsUUFBYixDQUFzQixJQUF0QixDQUFuQyxFQUFnRTtJQUM5RHNHLFlBQVksR0FBR0EsWUFBWSxDQUFDN0gsT0FBYixDQUFxQixHQUFyQixFQUEwQixJQUExQixDQUFmO0VBQ0Q7O0VBQ0QsTUFBTTBKLE9BQU8sR0FBRyxNQUFNSCxhQUFhLEVBQW5DOztFQUNBOUwsZUFBQSxDQUFJUSxLQUFKLENBQVcsNEJBQTJCNUMsSUFBSSxDQUFDNkMsU0FBTCxDQUFld0wsT0FBZixDQUF3QixFQUE5RDs7RUFFQSxJQUFJN0IsWUFBWSxDQUFDOEIsV0FBYixHQUEyQnhLLFVBQTNCLENBQXNDLElBQXRDLEtBQ0MsQ0FBQ3VLLE9BQU8sQ0FBQ3JJLElBQVIsQ0FBY0MsQ0FBRCxJQUFPQSxDQUFDLENBQUN2QixJQUFGLE9BQWE4SCxZQUFqQyxDQUROLEVBQ3NEO0lBQ3BEcEssZUFBQSxDQUFJUSxLQUFKLENBQVcsZ0NBQStCNEosWUFBYSxnQkFBN0MsR0FDUCxzQkFBcUI0QixhQUFjLEdBRHRDOztJQUVBNUIsWUFBWSxHQUFHNEIsYUFBZjtFQUNELENBTEQsTUFLTztJQUNMaE0sZUFBQSxDQUFJUSxLQUFKLENBQVcsNEJBQTJCNEosWUFBYSxHQUFuRDtFQUNEOztFQUNELE9BQU9BLFlBQVA7QUFDRDs7QUFhRCxTQUFTK0IsYUFBVCxDQUF3QkMsTUFBeEIsRUFBZ0NDLFVBQWhDLEVBQTRDO0VBQzFDLElBQUksQ0FBQyxnQkFBZ0JySSxJQUFoQixDQUFxQm9JLE1BQXJCLENBQUQsSUFBaUMsQ0FBQyxXQUFXcEksSUFBWCxDQUFnQm9JLE1BQWhCLENBQXRDLEVBQStEO0lBQzdEcE0sZUFBQSxDQUFJUSxLQUFKLENBQVU0TCxNQUFWOztJQUNBLE1BQU0sSUFBSW5PLEtBQUosQ0FBVyxtQkFBa0JvTyxVQUFXLG9CQUE5QixHQUNkLHVDQURJLENBQU47RUFFRDs7RUFDRCxNQUFNdk0sS0FBSyxHQUFHLGVBQWVDLElBQWYsQ0FBb0JxTSxNQUFwQixDQUFkOztFQUNBLElBQUksQ0FBQ3RNLEtBQUwsRUFBWTtJQUNWRSxlQUFBLENBQUlRLEtBQUosQ0FBVTRMLE1BQVY7O0lBQ0EsTUFBTSxJQUFJbk8sS0FBSixDQUFXLGdCQUFlb08sVUFBVyw0QkFBM0IsR0FDZCx1Q0FESSxDQUFOO0VBRUQ7O0VBQ0QsTUFBTUMsT0FBTyxHQUFHMVAsZUFBQSxDQUFFMEYsSUFBRixDQUFPeEMsS0FBSyxDQUFDLENBQUQsQ0FBWixFQUFpQnlDLE9BQWpCLENBQXlCLFlBQXpCLEVBQXVDLEVBQXZDLENBQWhCOztFQUNBLElBQUk7SUFDRixPQUFPM0UsSUFBSSxDQUFDQyxLQUFMLENBQVd5TyxPQUFYLENBQVA7RUFDRCxDQUZELENBRUUsT0FBT0MsQ0FBUCxFQUFVO0lBQ1Z2TSxlQUFBLENBQUlRLEtBQUosQ0FBVThMLE9BQVY7O0lBQ0EsTUFBTSxJQUFJck8sS0FBSixDQUFXLGdCQUFlb08sVUFBVyxtQ0FBM0IsR0FDZCx1Q0FESSxDQUFOO0VBRUQ7QUFDRjs7QUFXRCxTQUFTRyxlQUFULENBQTBCQyxRQUExQixFQUFvQ0MsT0FBcEMsRUFBNkM7RUFDM0MsTUFBTW5NLE1BQU0sR0FBRyxFQUFmOztFQUNBLElBQUlrTSxRQUFRLElBQUk3UCxlQUFBLENBQUVnUCxRQUFGLENBQVdhLFFBQVgsQ0FBaEIsRUFBc0M7SUFDcENsTSxNQUFNLENBQUM4QixJQUFQLENBQVksT0FBWixFQUFzQix3QkFBdUJvSyxRQUFRLENBQUNQLFdBQVQsRUFBdUIsRUFBcEU7RUFDRDs7RUFDRCxJQUFJUSxPQUFPLElBQUk5UCxlQUFBLENBQUVnUCxRQUFGLENBQVdjLE9BQVgsQ0FBZixFQUFvQztJQUNsQ25NLE1BQU0sQ0FBQzhCLElBQVAsQ0FBWSxPQUFaLEVBQXNCLHVCQUFzQnFLLE9BQU8sQ0FBQ0MsV0FBUixFQUFzQixFQUFsRTtFQUNEOztFQUNELElBQUlDLE1BQUo7O0VBQ0EsSUFBSWhRLGVBQUEsQ0FBRWdQLFFBQUYsQ0FBV2EsUUFBWCxLQUF3QjdQLGVBQUEsQ0FBRWdQLFFBQUYsQ0FBV2MsT0FBWCxDQUF4QixJQUErQ0QsUUFBL0MsSUFBMkRDLE9BQS9ELEVBQXdFO0lBQ3RFRSxNQUFNLEdBQUdILFFBQVEsQ0FBQ1AsV0FBVCxLQUF5QixHQUF6QixHQUErQlEsT0FBTyxDQUFDQyxXQUFSLEVBQXhDO0VBQ0QsQ0FGRCxNQUVPLElBQUlGLFFBQVEsSUFBSTdQLGVBQUEsQ0FBRWdQLFFBQUYsQ0FBV2EsUUFBWCxDQUFoQixFQUFzQztJQUMzQ0csTUFBTSxHQUFHSCxRQUFRLENBQUNQLFdBQVQsRUFBVDtFQUNELENBRk0sTUFFQSxJQUFJUSxPQUFPLElBQUk5UCxlQUFBLENBQUVnUCxRQUFGLENBQVdjLE9BQVgsQ0FBZixFQUFvQztJQUN6Q0UsTUFBTSxHQUFHRixPQUFUO0VBQ0Q7O0VBQ0QsSUFBSUUsTUFBSixFQUFZO0lBQ1ZyTSxNQUFNLENBQUM4QixJQUFQLENBQVksT0FBWixFQUFzQixzQkFBcUJ1SyxNQUFPLEVBQWxEO0VBQ0Q7O0VBQ0QsT0FBT3JNLE1BQVA7QUFDRDs7QUFPRCxlQUFlc00sbUJBQWYsR0FBc0M7RUFDcEMsSUFBSUMsUUFBUSxHQUFHM08sT0FBTyxDQUFDQyxHQUFSLENBQVkyTyxxQkFBM0I7O0VBQ0EsSUFBSSxNQUFNQyxTQUFTLENBQUNGLFFBQUQsQ0FBbkIsRUFBK0I7SUFDN0IsT0FBT0EsUUFBUDtFQUNEOztFQUVELElBQUlBLFFBQUosRUFBYztJQUNaOU0sZUFBQSxDQUFJQyxJQUFKLENBQVUsZ0VBQStENk0sUUFBUyxnQ0FBbEY7RUFDRDs7RUFFRCxNQUFNRyxJQUFJLEdBQUc5TyxPQUFPLENBQUNDLEdBQVIsQ0FBWThPLElBQVosSUFBb0IvTyxPQUFPLENBQUNDLEdBQVIsQ0FBWStPLFdBQTdDOztFQUNBLElBQUlGLElBQUosRUFBVTtJQUNSSCxRQUFRLEdBQUcvUCxhQUFBLENBQUtDLE9BQUwsQ0FBYWlRLElBQWIsRUFBbUIsVUFBbkIsQ0FBWDtFQUNEOztFQUVELElBQUksRUFBQyxNQUFNRCxTQUFTLENBQUNGLFFBQUQsQ0FBaEIsQ0FBSixFQUFnQztJQUM5QjlNLGVBQUEsQ0FBSVEsS0FBSixDQUFXLHdCQUF1QnNNLFFBQVMsZ0NBQTNDOztJQUNBLE9BQU8sSUFBUDtFQUNEOztFQUVELE9BQU9BLFFBQVA7QUFDRDs7QUFRRCxlQUFlRSxTQUFmLENBQTBCRixRQUExQixFQUFvQztFQUNsQyxPQUFPQSxRQUFRLEtBQ1YsTUFBTWxPLFdBQUEsQ0FBR0MsTUFBSCxDQUFVaU8sUUFBVixDQURJLENBQVIsSUFFRixDQUFDLE1BQU1sTyxXQUFBLENBQUdHLElBQUgsQ0FBUStOLFFBQVIsQ0FBUCxFQUEwQjlOLFdBQTFCLEVBRkw7QUFHRDs7QUFZRCxTQUFTb08sY0FBVCxDQUF5QkMsR0FBekIsRUFBOEI7RUFDNUJBLEdBQUcsR0FBSSxHQUFFQSxHQUFJLEVBQWI7O0VBQ0EsSUFBSXJLLGVBQUEsQ0FBT0MsU0FBUCxFQUFKLEVBQXdCO0lBQ3RCLE9BQU8sVUFBVWUsSUFBVixDQUFlcUosR0FBZixJQUF1QixJQUFHQSxHQUFHLENBQUM5SyxPQUFKLENBQVksSUFBWixFQUFrQixJQUFsQixDQUF3QixHQUFsRCxHQUF1RDhLLEdBQTlEO0VBQ0Q7O0VBQ0QsT0FBT0EsR0FBRyxDQUFDOUssT0FBSixDQUFZLElBQVosRUFBa0IsS0FBbEIsQ0FBUDtBQUNEOztBQWVELFNBQVMrSyw0QkFBVCxDQUF1QzNKLE9BQXZDLEVBQWdEO0VBQzlDLE1BQU00SixrQkFBa0IsR0FBRyxJQUFJbkgsTUFBSixDQUFZLFFBQU94SixlQUFBLENBQUVnTCxZQUFGLENBQWVuTCxXQUFmLENBQTRCLElBQS9DLENBQTNCO0VBQ0EsTUFBTStRLGNBQWMsR0FBRyx1Q0FBdkI7RUFDQSxNQUFNQyxNQUFNLEdBQUcsRUFBZjtFQUNBLElBQUlDLGdCQUFKO0VBQ0EsSUFBSUMsS0FBSyxHQUFHLEVBQVo7O0VBQ0EsS0FBSyxNQUFNdkwsSUFBWCxJQUFtQnVCLE9BQU8sQ0FBQ3pHLEtBQVIsQ0FBYyxJQUFkLEVBQW9Cd0osR0FBcEIsQ0FBd0I5SixlQUFBLENBQUVnUixPQUExQixDQUFuQixFQUF1RDtJQUNyRCxNQUFNeEYsYUFBYSxHQUFHaEcsSUFBSSxDQUFDL0UsTUFBTCxHQUFjVCxlQUFBLENBQUU0TyxTQUFGLENBQVlwSixJQUFaLEVBQWtCL0UsTUFBdEQ7O0lBQ0EsSUFBSWtRLGtCQUFrQixDQUFDdkosSUFBbkIsQ0FBd0I1QixJQUF4QixDQUFKLEVBQW1DO01BQ2pDc0wsZ0JBQWdCLEdBQUd0RixhQUFuQjs7TUFDQSxJQUFJLENBQUN4TCxlQUFBLENBQUUrQixPQUFGLENBQVVnUCxLQUFWLENBQUwsRUFBdUI7UUFDckJGLE1BQU0sQ0FBQ3BMLElBQVAsQ0FBWXNMLEtBQVo7UUFDQUEsS0FBSyxHQUFHLEVBQVI7TUFDRDs7TUFDRDtJQUNEOztJQUNELElBQUkvUSxlQUFBLENBQUVpUixLQUFGLENBQVFILGdCQUFSLENBQUosRUFBK0I7TUFDN0I7SUFDRDs7SUFFRCxJQUFJdEYsYUFBYSxHQUFHc0YsZ0JBQXBCLEVBQXNDO01BQ3BDQyxLQUFLLENBQUN0TCxJQUFOLENBQVdELElBQVg7SUFDRCxDQUZELE1BRU87TUFDTCxJQUFJLENBQUN4RixlQUFBLENBQUUrQixPQUFGLENBQVVnUCxLQUFWLENBQUwsRUFBdUI7UUFDckJGLE1BQU0sQ0FBQ3BMLElBQVAsQ0FBWXNMLEtBQVo7UUFDQUEsS0FBSyxHQUFHLEVBQVI7TUFDRDs7TUFDREQsZ0JBQWdCLEdBQUcsSUFBbkI7SUFDRDtFQUNGOztFQUNELElBQUksQ0FBQzlRLGVBQUEsQ0FBRStCLE9BQUYsQ0FBVWdQLEtBQVYsQ0FBTCxFQUF1QjtJQUNyQkYsTUFBTSxDQUFDcEwsSUFBUCxDQUFZc0wsS0FBWjtFQUNEOztFQUVELE1BQU1wTixNQUFNLEdBQUcsRUFBZjs7RUFDQSxLQUFLLE1BQU0rSCxJQUFYLElBQW1CbUYsTUFBbkIsRUFBMkI7SUFDekIsSUFBSUssV0FBVyxHQUFHLEtBQWxCO0lBQ0EsSUFBSTdELGtCQUFrQixHQUFHLEtBQXpCOztJQUNBLEtBQUssTUFBTTdILElBQVgsSUFBbUJrRyxJQUFuQixFQUF5QjtNQUN2QixNQUFNeEksS0FBSyxHQUFHME4sY0FBYyxDQUFDek4sSUFBZixDQUFvQnFDLElBQXBCLENBQWQ7O01BQ0EsSUFBSSxDQUFDdEMsS0FBTCxFQUFZO1FBQ1Y7TUFDRDs7TUFFRGdPLFdBQVcsR0FBRyxJQUFkO01BQ0E3RCxrQkFBa0IsR0FBR25LLEtBQUssQ0FBQyxDQUFELENBQUwsS0FBYXBELGlCQUFsQztNQUNBO0lBQ0Q7O0lBSUQsSUFBSW9SLFdBQVcsSUFBSSxDQUFDN0Qsa0JBQXBCLEVBQXdDO01BQ3RDO0lBQ0Q7O0lBRUQsS0FBSyxNQUFNOEQsZUFBWCxJQUE4QnpGLElBQUksQ0FBQzVCLEdBQUwsQ0FBUzlKLGVBQUEsQ0FBRTBGLElBQVgsRUFBaUJxRyxNQUFqQixDQUF3QnFGLE9BQXhCLENBQTlCLEVBQWdFO01BQzlELE1BQU1DLGNBQWMsR0FBR0YsZUFBZSxDQUFDN1EsS0FBaEIsQ0FBc0IsS0FBdEIsRUFBNkIsQ0FBN0IsQ0FBdkI7O01BQ0EsSUFBSSxDQUFDZ1Isa0JBQWtCLENBQUNELGNBQUQsQ0FBdkIsRUFBeUM7UUFDdkM7TUFDRDs7TUFFRCxJQUFJaEUsa0JBQUosRUFBd0I7UUFDdEIsT0FBTyxDQUFDZ0UsY0FBRCxDQUFQO01BQ0Q7O01BQ0QxTixNQUFNLENBQUM4QixJQUFQLENBQVk0TCxjQUFaO0lBQ0Q7RUFDRjs7RUFDRCxPQUFPMU4sTUFBUDtBQUNEOztBQVNELFNBQVMyTixrQkFBVCxDQUE2QkMsV0FBN0IsRUFBMEM7RUFFeEMsT0FBTyxrQkFBa0JwTyxJQUFsQixDQUF1Qm9PLFdBQXZCLENBQVA7QUFDRCJ9
|
|
976
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUEtTX0VYVEVOU0lPTiIsIkFQS19FWFRFTlNJT04iLCJBUEtfSU5TVEFMTF9USU1FT1VUIiwiQVBLU19JTlNUQUxMX1RJTUVPVVQiLCJERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQiLCJNQUlOX0FDVElPTiIsIkxBVU5DSEVSX0NBVEVHT1JZIiwiZ2V0TW9kdWxlUm9vdCIsIl8iLCJtZW1vaXplIiwiY3VycmVudERpciIsInBhdGgiLCJkaXJuYW1lIiwicmVzb2x2ZSIsIl9fZmlsZW5hbWUiLCJpc0F0RnNSb290IiwibWFuaWZlc3RQYXRoIiwiam9pbiIsIl9mcyIsImV4aXN0c1N5bmMiLCJKU09OIiwicGFyc2UiLCJyZWFkRmlsZVN5bmMiLCJuYW1lIiwiaWduIiwibGVuZ3RoIiwiRXJyb3IiLCJnZXRTZGtSb290RnJvbUVudiIsInByb2Nlc3MiLCJlbnYiLCJBTkRST0lEX0hPTUUiLCJBTkRST0lEX1NES19ST09UIiwicmVxdWlyZVNka1Jvb3QiLCJjdXN0b21Sb290Iiwic2RrUm9vdCIsImRvY01zZyIsImlzRW1wdHkiLCJmcyIsImV4aXN0cyIsInN0YXRzIiwic3RhdCIsImlzRGlyZWN0b3J5IiwiZ2V0QW5kcm9pZFBsYXRmb3JtQW5kUGF0aCIsInByb3BzUGF0aHMiLCJnbG9iIiwiY3dkIiwiYWJzb2x1dGUiLCJwbGF0Zm9ybXNNYXBwaW5nIiwicHJvcHNQYXRoIiwicHJvcHNDb250ZW50IiwicmVhZEZpbGUiLCJwbGF0Zm9ybVBhdGgiLCJwbGF0Zm9ybSIsImJhc2VuYW1lIiwibWF0Y2giLCJleGVjIiwibG9nIiwid2FybiIsInBhcnNlSW50IiwicmVjZW50U2RrVmVyc2lvbiIsImtleXMiLCJzb3J0IiwicmV2ZXJzZSIsInJlc3VsdCIsImRlYnVnIiwic3RyaW5naWZ5IiwidW56aXBGaWxlIiwiemlwUGF0aCIsImRzdFJvb3QiLCJ6aXAiLCJhc3NlcnRWYWxpZFppcCIsImV4dHJhY3RBbGxUbyIsInVuc2lnbkFwayIsImFwa1BhdGgiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJtZXRhSW5mRm9sZGVyTmFtZSIsImhhc01ldGFJbmYiLCJyZWFkRW50cmllcyIsImVudHJ5IiwiZmlsZU5hbWUiLCJzdGFydHNXaXRoIiwidG1wWmlwUm9vdCIsInJpbXJhZiIsInRtcFJlc3VsdFBhdGgiLCJ0b0FyY2hpdmUiLCJ1bmxpbmsiLCJtdiIsImdldElNRUxpc3RGcm9tT3V0cHV0Iiwic3Rkb3V0IiwiZW5naW5lcyIsImxpbmUiLCJzcGxpdCIsInB1c2giLCJ0cmltIiwicmVwbGFjZSIsImdldEphdmFIb21lIiwiSkFWQV9IT01FIiwiZ2V0SmF2YUZvck9zIiwiamF2YUhvbWUiLCJlcnJNc2ciLCJlcnIiLCJtZXNzYWdlIiwiZXhlY3V0YWJsZU5hbWUiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJyZXN1bHRQYXRoIiwid2hpY2giLCJnZXRPcGVuU3NsRm9yT3MiLCJiaW5hcnlOYW1lIiwiZ2V0QXBrc2lnbmVyRm9yT3MiLCJzeXNIZWxwZXJzIiwiZ2V0QmluYXJ5RnJvbVNka1Jvb3QiLCJnZXRBcGthbmFseXplckZvck9zIiwiaXNTaG93aW5nTG9ja3NjcmVlbiIsImR1bXBzeXMiLCJzb21lIiwieCIsImluY2x1ZGVzIiwiZXZlcnkiLCJ0ZXN0IiwiaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkIiwibSIsImdldFN1cmZhY2VPcmllbnRhdGlvbiIsImlzU2NyZWVuT25GdWxseSIsImJ1aWxkU3RhcnRDbWQiLCJzdGFydEFwcE9wdGlvbnMiLCJhcGlMZXZlbCIsInVzZXIiLCJ3YWl0Rm9yTGF1bmNoIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJjYXRlZ29yeSIsInN0b3BBcHAiLCJmbGFncyIsImNtZCIsInV0aWwiLCJoYXNWYWx1ZSIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwicGFyc2VLZXlWYWx1ZSIsInN0ciIsInNwYWNlIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInJlIiwiYXJncyIsImFwcGx5IiwiZmxhZyIsImZsYWdQb3MiLCJwcmV2QXJncyIsImdldFNka1Rvb2xzVmVyc2lvbiIsImFuZHJvaWRIb21lIiwicHJvcGVydGllc1BhdGgiLCJwcm9wZXJ0aWVzQ29udGVudCIsInZlcnNpb25NYXRjaGVyIiwiUmVnRXhwIiwibWFqb3IiLCJtaW5vciIsImJ1aWxkIiwiZ2V0QnVpbGRUb29sc0RpcnMiLCJidWlsZFRvb2xzRGlycyIsIm1hcCIsImRpciIsImEiLCJiIiwic2VtdmVyIiwicmNvbXBhcmUiLCJwYWlyIiwicGFpcnMiLCJCIiwibXRpbWUiLCJ2YWx1ZU9mIiwiaW5mbyIsImV4dHJhY3RNYXRjaGluZ1Blcm1pc3Npb25zIiwiZHVtcHN5c091dHB1dCIsImdyb3VwTmFtZXMiLCJncmFudGVkU3RhdGUiLCJncm91cFBhdHRlcm5CeU5hbWUiLCJncm91cE5hbWUiLCJlc2NhcGVSZWdFeHAiLCJpbmRlbnRQYXR0ZXJuIiwicGVybWlzc2lvbk5hbWVQYXR0ZXJuIiwiZ3JhbnRlZFN0YXRlUGF0dGVybiIsImdyb3VwTWF0Y2giLCJsaW5lcyIsInRpdGxlSW5kZW50Iiwic2VhcmNoIiwic2xpY2UiLCJjdXJyZW50SW5kZW50IiwicGVybWlzc2lvbk5hbWVNYXRjaCIsIml0ZW0iLCJwZXJtaXNzaW9uIiwiZ3JhbnRlZFN0YXRlTWF0Y2giLCJncmFudGVkIiwiZmlsdGVyZWRSZXN1bHQiLCJmaWx0ZXIiLCJpc0Jvb2xlYW4iLCJwbHVyYWxpemUiLCJidWlsZEluc3RhbGxBcmdzIiwib3B0aW9ucyIsImFsbG93VGVzdFBhY2thZ2VzIiwidXNlU2RjYXJkIiwiZ3JhbnRQZXJtaXNzaW9ucyIsInBhcnRpYWxJbnN0YWxsIiwicGFyc2VNYW5pZmVzdCIsIm1hbmlmZXN0IiwicGFja2FnZSIsInZlcnNpb25Db2RlIiwidmVyc2lvbk5hbWUiLCJhcHBsaWNhdGlvbiIsImFjdGl2aXRpZXMiLCJhY3Rpdml0eUFsaWFzZXMiLCJlbmFibGVkIiwiaW50ZW50RmlsdGVycyIsImFjdGlvbnMiLCJjYXRlZ29yaWVzIiwiaXNNYWluQWN0aW9uIiwiaXNMYXVuY2hlckNhdGVnb3J5IiwicGFyc2VBYXB0U3RyaW5ncyIsInJhd091dHB1dCIsImNvbmZpZ01hcmtlciIsIm5vcm1hbGl6ZVN0cmluZ01hdGNoIiwicyIsImFwa1N0cmluZ3MiLCJpc0luQ29uZmlnIiwiY3VycmVudFJlc291cmNlSWQiLCJpc0luUGx1cmFsR3JvdXAiLCJxdW90ZWRTdHJpbmdQYXR0ZXJuIiwib3MiLCJFT0wiLCJ0cmltbWVkTGluZSIsInBhcnNlQWFwdDJTdHJpbmdzIiwiYWxsTGluZXMiLCJleHRyYWN0Q29udGVudCIsInN0YXJ0SWR4IiwiaWR4Iiwic3RhcnRDaGFyUG9zIiwidGVybWluYXRpb25DaGFyTWF0Y2giLCJ0ZXJtaW5hdGlvbkNoYXJQb3MiLCJpbmRleCIsInRyaW1TdGFydCIsImlzSW5DdXJyZW50Q29uZmlnIiwibGluZUluZGV4IiwiY29udGVudCIsImlzU3RyaW5nIiwiZm9ybWF0Q29uZmlnTWFya2VyIiwiY29uZmlnc0dldHRlciIsImRlc2lyZWRNYXJrZXIiLCJkZWZhdWx0TWFya2VyIiwiY29uZmlncyIsInRvTG93ZXJDYXNlIiwicGFyc2VKc29uRGF0YSIsIm91dHB1dCIsImVudGl0eU5hbWUiLCJqc29uU3RyIiwiZSIsInRvQXZkTG9jYWxlQXJncyIsImxhbmd1YWdlIiwiY291bnRyeSIsInRvVXBwZXJDYXNlIiwibG9jYWxlIiwiZ2V0QW5kcm9pZFByZWZzUm9vdCIsImxvY2F0aW9uIiwiQU5EUk9JRF9FTVVMQVRPUl9IT01FIiwiZGlyRXhpc3RzIiwiaG9tZSIsIkhPTUUiLCJVU0VSUFJPRklMRSIsImVzY2FwZVNoZWxsQXJnIiwiYXJnIiwicGFyc2VMYXVuY2hhYmxlQWN0aXZpdHlOYW1lcyIsIm1haW5BY3Rpdml0eU5hbWVSZSIsImNhdGVnb3J5TmFtZVJlIiwiYmxvY2tzIiwiYmxvY2tTdGFydEluZGVudCIsImJsb2NrIiwidHJpbUVuZCIsImlzTmlsIiwiaGFzQ2F0ZWdvcnkiLCJhY3Rpdml0eU5hbWVTdHIiLCJCb29sZWFuIiwiZnFBY3Rpdml0eU5hbWUiLCJtYXRjaENvbXBvbmVudE5hbWUiLCJjbGFzc1N0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oZWxwZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc3lzdGVtLCBmcywgemlwLCB1dGlsLCB0ZW1wRGlyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXIuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgX2ZzIGZyb20gJ2ZzJztcblxuY29uc3QgQVBLU19FWFRFTlNJT04gPSAnLmFwa3MnO1xuY29uc3QgQVBLX0VYVEVOU0lPTiA9ICcuYXBrJztcbmNvbnN0IEFQS19JTlNUQUxMX1RJTUVPVVQgPSA2MDAwMDtcbmNvbnN0IEFQS1NfSU5TVEFMTF9USU1FT1VUID0gQVBLX0lOU1RBTExfVElNRU9VVCAqIDI7XG5jb25zdCBERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQgPSAyMDAwMDsgLy8gaW4gbWlsbGlzZWNvbmRzXG5jb25zdCBNQUlOX0FDVElPTiA9ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTic7XG5jb25zdCBMQVVOQ0hFUl9DQVRFR09SWSA9ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUic7XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgcGF0aCB0byB0aGUgY3VycmVudCBtb2R1bGUncyByb290IGZvbGRlclxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gbW9kdWxlIHJvb3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY3VycmVudCBtb2R1bGUgcm9vdCBmb2xkZXIgY2Fubm90IGJlIGRldGVybWluZWRcbiAqL1xuY29uc3QgZ2V0TW9kdWxlUm9vdCA9IF8ubWVtb2l6ZShmdW5jdGlvbiBnZXRNb2R1bGVSb290ICgpIHtcbiAgbGV0IGN1cnJlbnREaXIgPSBwYXRoLmRpcm5hbWUocGF0aC5yZXNvbHZlKF9fZmlsZW5hbWUpKTtcbiAgbGV0IGlzQXRGc1Jvb3QgPSBmYWxzZTtcbiAgd2hpbGUgKCFpc0F0RnNSb290KSB7XG4gICAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aC5qb2luKGN1cnJlbnREaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgaWYgKF9mcy5leGlzdHNTeW5jKG1hbmlmZXN0UGF0aCkgJiZcbiAgICAgICAgICBKU09OLnBhcnNlKF9mcy5yZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoLCAndXRmOCcpKS5uYW1lID09PSAnYXBwaXVtLWFkYicpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnREaXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIGN1cnJlbnREaXIgPSBwYXRoLmRpcm5hbWUoY3VycmVudERpcik7XG4gICAgaXNBdEZzUm9vdCA9IGN1cnJlbnREaXIubGVuZ3RoIDw9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKS5sZW5ndGg7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCB0aGUgcm9vdCBmb2xkZXIgb2YgdGhlIGFwcGl1bS1hZGIgTm9kZS5qcyBtb2R1bGUnKTtcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIHBhdGggdG8gU0RLIHJvb3QgZm9sZGVyIGZyb20gdGhlIHN5c3RlbSBlbnZpcm9ubWVudFxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gdGhlIFNESyByb290IGZvbGRlclxuICovXG5mdW5jdGlvbiBnZXRTZGtSb290RnJvbUVudiAoKSB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5BTkRST0lEX0hPTUUgfHwgcHJvY2Vzcy5lbnYuQU5EUk9JRF9TREtfUk9PVDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBwYXRoIHRvIFNESyByb290IGZvbGRlclxuICpcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZ1bGwgcGF0aCB0byB0aGUgU0RLIHJvb3QgZm9sZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgZWl0aGVyIHRoZSBjb3JyZXNwb25kaW5nIGVudiB2YXJpYWJsZSBpcyB1bnNldCBvciBpc1xuICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBmaWxlIHN5c3RlbSBlbnRyeVxuICovXG5hc3luYyBmdW5jdGlvbiByZXF1aXJlU2RrUm9vdCAoY3VzdG9tUm9vdCA9IG51bGwpIHtcbiAgY29uc3Qgc2RrUm9vdCA9IGN1c3RvbVJvb3QgfHwgZ2V0U2RrUm9vdEZyb21FbnYoKTtcbiAgY29uc3QgZG9jTXNnID0gJ1JlYWQgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL2NvbW1hbmQtbGluZS92YXJpYWJsZXMgZm9yIG1vcmUgZGV0YWlscyc7XG4gIGlmIChfLmlzRW1wdHkoc2RrUm9vdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5laXRoZXIgQU5EUk9JRF9IT01FIG5vciBBTkRST0lEX1NES19ST09UIGVudmlyb25tZW50IHZhcmlhYmxlIHdhcyBleHBvcnRlZC4gJHtkb2NNc2d9YCk7XG4gIH1cblxuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzZGtSb290KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIEFuZHJvaWQgU0RLIHJvb3QgZm9sZGVyICcke3Nka1Jvb3R9JyBkb2VzIG5vdCBleGlzdCBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uICR7ZG9jTXNnfWApO1xuICB9XG4gIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChzZGtSb290KTtcbiAgaWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQW5kcm9pZCBTREsgcm9vdCAnJHtzZGtSb290fScgbXVzdCBiZSBhIGZvbGRlci4gJHtkb2NNc2d9YCk7XG4gIH1cbiAgcmV0dXJuIHNka1Jvb3Q7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGxhdGZvcm1JbmZvXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHBsYXRmb3JtIC0gVGhlIHBsYXRmb3JtIG5hbWUsIGZvciBleGFtcGxlIGBhbmRyb2lkLTI0YFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gcGxhdGZvcm1QYXRoIC0gRnVsbCBwYXRoIHRvIHRoZSBwbGF0Zm9ybSBTREsgZm9sZGVyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBwYXRoIHRvIHRoZSByZWNlbnQgaW5zdGFsbGVkIEFuZHJvaWQgcGxhdGZvcm0uXG4gKlxuICogQHJldHVybiB7UGxhdGZvcm1JbmZvfSBUaGUgcmVzdWx0aW5nIHBhdGggdG8gdGhlIG5ld2VzdCBpbnN0YWxsZWQgcGxhdGZvcm0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGggKHNka1Jvb3QpIHtcbiAgY29uc3QgcHJvcHNQYXRocyA9IGF3YWl0IGZzLmdsb2IoJyovYnVpbGQucHJvcCcsIHtcbiAgICBjd2Q6IHBhdGgucmVzb2x2ZShzZGtSb290LCAncGxhdGZvcm1zJyksXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gIH0pO1xuICBjb25zdCBwbGF0Zm9ybXNNYXBwaW5nID0ge307XG4gIGZvciAoY29uc3QgcHJvcHNQYXRoIG9mIHByb3BzUGF0aHMpIHtcbiAgICBjb25zdCBwcm9wc0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwcm9wc1BhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBsYXRmb3JtUGF0aCA9IHBhdGguZGlybmFtZShwcm9wc1BhdGgpO1xuICAgIGNvbnN0IHBsYXRmb3JtID0gcGF0aC5iYXNlbmFtZShwbGF0Zm9ybVBhdGgpO1xuICAgIGNvbnN0IG1hdGNoID0gL3JvXFwuYnVpbGRcXC52ZXJzaW9uXFwuc2RrPShcXGQrKS8uZXhlYyhwcm9wc0NvbnRlbnQpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGxvZy53YXJuKGBDYW5ub3QgcmVhZCB0aGUgU0RLIHZlcnNpb24gZnJvbSAnJHtwcm9wc1BhdGh9Jy4gU2tpcHBpbmcgJyR7cGxhdGZvcm19J2ApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHBsYXRmb3Jtc01hcHBpbmdbcGFyc2VJbnQobWF0Y2hbMV0sIDEwKV0gPSB7XG4gICAgICBwbGF0Zm9ybSxcbiAgICAgIHBsYXRmb3JtUGF0aCxcbiAgICB9O1xuICB9XG4gIGlmIChfLmlzRW1wdHkocGxhdGZvcm1zTWFwcGluZykpIHtcbiAgICBsb2cud2FybihgRm91bmQgemVybyBwbGF0Zm9ybSBmb2xkZXJzIGF0ICcke3BhdGgucmVzb2x2ZShzZGtSb290LCAncGxhdGZvcm1zJyl9Jy4gYCArXG4gICAgICBgRG8geW91IGhhdmUgYW55IEFuZHJvaWQgU0RLcyBpbnN0YWxsZWQ/YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsYXRmb3JtOiBudWxsLFxuICAgICAgcGxhdGZvcm1QYXRoOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBjb25zdCByZWNlbnRTZGtWZXJzaW9uID0gXy5rZXlzKHBsYXRmb3Jtc01hcHBpbmcpLnNvcnQoKS5yZXZlcnNlKClbMF07XG4gIGNvbnN0IHJlc3VsdCA9IHBsYXRmb3Jtc01hcHBpbmdbcmVjZW50U2RrVmVyc2lvbl07XG4gIGxvZy5kZWJ1ZyhgRm91bmQgdGhlIG1vc3QgcmVjZW50IEFuZHJvaWQgcGxhdGZvcm06ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW56aXBGaWxlICh6aXBQYXRoLCBkc3RSb290ID0gcGF0aC5kaXJuYW1lKHppcFBhdGgpKSB7XG4gIGxvZy5kZWJ1ZyhgVW56aXBwaW5nICcke3ppcFBhdGh9JyB0byAnJHtkc3RSb290fSdgKTtcbiAgYXdhaXQgemlwLmFzc2VydFZhbGlkWmlwKHppcFBhdGgpO1xuICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHppcFBhdGgsIGRzdFJvb3QpO1xuICBsb2cuZGVidWcoJ1VuemlwIHN1Y2Nlc3NmdWwnKTtcbn1cblxuLyoqXG4gKiBVbnNpZ25zIHRoZSBnaXZlbiBhcGsgYnkgcmVtb3ZpbmcgdGhlXG4gKiBNRVRBLUlORiBmb2xkZXIgcmVjdXJzaXZlbHkgZnJvbSB0aGUgYXJjaGl2ZS5cbiAqICEhISBUaGUgZnVuY3Rpb24gb3ZlcndyaXRlcyB0aGUgZ2l2ZW4gYXBrIGFmdGVyIHN1Y2Nlc3NmdWwgdW5zaWduaW5nICEhIVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtQYXRoIFRoZSBwYXRoIHRvIHRoZSBhcGtcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGFwayBoYXMgYmVlbiBzdWNjZXNzZnVsbHlcbiAqIHVuc2lnbmVkIGFuZCBvdmVyd3JpdHRlblxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgdGhlIHVuc2lnbiBvcGVyYXRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdW5zaWduQXBrIChhcGtQYXRoKSB7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgY29uc3QgbWV0YUluZkZvbGRlck5hbWUgPSAnTUVUQS1JTkYnO1xuICB0cnkge1xuICAgIGxldCBoYXNNZXRhSW5mID0gZmFsc2U7XG4gICAgYXdhaXQgemlwLnJlYWRFbnRyaWVzKGFwa1BhdGgsICh7ZW50cnl9KSA9PiB7XG4gICAgICBoYXNNZXRhSW5mID0gZW50cnkuZmlsZU5hbWUuc3RhcnRzV2l0aChgJHttZXRhSW5mRm9sZGVyTmFtZX0vYCk7XG4gICAgICAvLyBlbnRyaWVzIGl0ZXJhdGlvbiBzdG9wcyBhZnRlciBgZmFsc2VgIGlzIHJldHVybmVkXG4gICAgICByZXR1cm4gIWhhc01ldGFJbmY7XG4gICAgfSk7XG4gICAgaWYgKCFoYXNNZXRhSW5mKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHRtcFppcFJvb3QgPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgJ2FwaycpO1xuICAgIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oYXBrUGF0aCwgdG1wWmlwUm9vdCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHBhdGgucmVzb2x2ZSh0bXBaaXBSb290LCBtZXRhSW5mRm9sZGVyTmFtZSkpO1xuICAgIGNvbnN0IHRtcFJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgcGF0aC5iYXNlbmFtZShhcGtQYXRoKSk7XG4gICAgYXdhaXQgemlwLnRvQXJjaGl2ZSh0bXBSZXN1bHRQYXRoLCB7XG4gICAgICBjd2Q6IHRtcFppcFJvb3QsXG4gICAgfSk7XG4gICAgYXdhaXQgZnMudW5saW5rKGFwa1BhdGgpO1xuICAgIGF3YWl0IGZzLm12KHRtcFJlc3VsdFBhdGgsIGFwa1BhdGgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJTUVMaXN0RnJvbU91dHB1dCAoc3Rkb3V0KSB7XG4gIGxldCBlbmdpbmVzID0gW107XG4gIGZvciAobGV0IGxpbmUgb2Ygc3Rkb3V0LnNwbGl0KCdcXG4nKSkge1xuICAgIGlmIChsaW5lLmxlbmd0aCA+IDAgJiYgbGluZVswXSAhPT0gJyAnKSB7XG4gICAgICAvLyByZW1vdmUgbmV3bGluZSBhbmQgdHJhaWxpbmcgY29sb24sIGFuZCBhZGQgdG8gdGhlIGxpc3RcbiAgICAgIGVuZ2luZXMucHVzaChsaW5lLnRyaW0oKS5yZXBsYWNlKC86JC8sICcnKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbmdpbmVzO1xufVxuXG5jb25zdCBnZXRKYXZhSG9tZSA9IF8ubWVtb2l6ZShhc3luYyBmdW5jdGlvbiBnZXRKYXZhSG9tZSAoKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3MuZW52LkpBVkFfSE9NRTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBKQVZBX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcycpO1xuICB9XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHJlc3VsdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBKQVZBX0hPTUUgbG9jYXRpb24gJyR7cmVzdWx0fScgbXVzdCBleGlzdGApO1xuICB9XG4gIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChyZXN1bHQpO1xuICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBKQVZBX0hPTUUgbG9jYXRpb24gJyR7cmVzdWx0fScgbXVzdCBiZSBhIHZhbGlkIGZvbGRlcmApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuY29uc3QgZ2V0SmF2YUZvck9zID0gXy5tZW1vaXplKGFzeW5jIGZ1bmN0aW9uIGdldEphdmFGb3JPcyAoKSB7XG4gIGxldCBqYXZhSG9tZTtcbiAgbGV0IGVyck1zZztcbiAgdHJ5IHtcbiAgICBqYXZhSG9tZSA9IGF3YWl0IGdldEphdmFIb21lKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVyck1zZyA9IGVyci5tZXNzYWdlO1xuICB9XG4gIGNvbnN0IGV4ZWN1dGFibGVOYW1lID0gYGphdmEke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG4gIGlmIChqYXZhSG9tZSkge1xuICAgIGNvbnN0IHJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUoamF2YUhvbWUsICdiaW4nLCBleGVjdXRhYmxlTmFtZSk7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgICAgcmV0dXJuIHJlc3VsdFBhdGg7XG4gICAgfVxuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZzLndoaWNoKGV4ZWN1dGFibGVOYW1lKTtcbiAgfSBjYXRjaCAoaWduKSB7fVxuICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtleGVjdXRhYmxlTmFtZX0nIGJpbmFyeSBjb3VsZCBub3QgYmUgZm91bmQgYCArXG4gICAgYG5laXRoZXIgaW4gUEFUSCBub3IgdW5kZXIgSkFWQV9IT01FICgke2Vyck1zZyB8fCBwYXRoLnJlc29sdmUoamF2YUhvbWUsICdiaW4nKX0pYCk7XG59KTtcblxuY29uc3QgZ2V0T3BlblNzbEZvck9zID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCBiaW5hcnlOYW1lID0gYG9wZW5zc2wke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZzLndoaWNoKGJpbmFyeU5hbWUpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBvcGVuc3NsIHRvb2wgbXVzdCBiZSBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbSBhbmQgYXZhaWxhYmxlIG9uIHRoZSBwYXRoJyk7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGFwa3NpZ25lciB0b29sXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHN5c0hlbHBlcnMgLSBBbiBpbnN0YW5jZSBjb250YWluaW5nIHN5c3RlbUNhbGxNZXRob2RzIGhlbHBlciBtZXRob2RzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBbiBhYnNvbHV0ZSBwYXRoIHRvIGFwa3NpZ25lciB0b29sLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSB0b29sIGlzIG5vdCBwcmVzZW50IG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QXBrc2lnbmVyRm9yT3MgKHN5c0hlbHBlcnMpIHtcbiAgcmV0dXJuIGF3YWl0IHN5c0hlbHBlcnMuZ2V0QmluYXJ5RnJvbVNka1Jvb3QoJ2Fwa3NpZ25lci5qYXInKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGFic29sdXRlIHBhdGggdG8gYXBrYW5hbHl6ZXIgdG9vbC5cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby9jb21tYW5kLWxpbmUvYXBrYW5hbHl6ZXIuaHRtbFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBzeXNIZWxwZXJzIC0gQW4gaW5zdGFuY2UgY29udGFpbmluZyBzeXN0ZW1DYWxsTWV0aG9kcyBoZWxwZXIgbWV0aG9kc1xuICogQHJldHVybnMge3N0cmluZ30gQW4gYWJzb2x1dGUgcGF0aCB0byBhcGthbmFseXplciB0b29sLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSB0b29sIGlzIG5vdCBwcmVzZW50IG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QXBrYW5hbHl6ZXJGb3JPcyAoc3lzSGVscGVycykge1xuICByZXR1cm4gYXdhaXQgc3lzSGVscGVycy5nZXRCaW5hcnlGcm9tU2RrUm9vdCgnYXBrYW5hbHl6ZXInKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgbVNob3dpbmdMb2Nrc2NyZWVuIG9yIG1EcmVhbWluZ0xvY2tzY3JlZW4gaW4gZHVtcHN5cyBvdXRwdXQgdG8gZGV0ZXJtaW5lXG4gKiBpZiBsb2NrIHNjcmVlbiBpcyBzaG93aW5nXG4gKlxuICogQSBub3RlOiBgYWRiIHNoZWxsIGR1bXBzeXMgdHJ1c3RgIHBlcmZvcm1zIGJldHRlciB3aGlsZSBkZXRlY3RpbmcgdGhlIGxvY2tlZCBzY3JlZW4gc3RhdGVcbiAqIGluIGNvbXBhcmlzb24gdG8gYGFkYiBkdW1wc3lzIHdpbmRvd2Agb3V0cHV0IHBhcnNpbmcuXG4gKiBCdXQgdGhlIHRydXN0IGNvbW1hbmQgZG9lcyBub3Qgd29yayBmb3IgYFN3aXBlYCB1bmxvY2sgcGF0dGVybi5cbiAqXG4gKiBJbiBzb21lIEFuZHJvaWQgZGV2aWNlcyAoUHJvYmFibHkgYXJvdW5kIEFuZHJvaWQgMTArKSwgYG1TaG93aW5nTG9ja3NjcmVlbmAgYW5kIGBtRHJlYW1pbmdMb2Nrc2NyZWVuYFxuICogZG8gbm90IHdvcmsgdG8gZGV0ZWN0IGxvY2sgc3RhdHVzLiBJbnN0ZWFkLCBrZXlndWFyZCBwcmVmZXJlbmNlcyBoZWxwcyB0byBkZXRlY3QgdGhlIGxvY2sgY29uZGl0aW9uLlxuICogU29tZSBkZXZpY2VzIHN1Y2ggYXMgQW5kcm9pZCBUViBkbyBub3QgaGF2ZSBrZXlndWFyZCwgc28gd2Ugc2hvdWxkIGtlZXBcbiAqIHNjcmVlbiBjb25kaXRpb24gYXMgdGhpcyBwcmltYXJ5IG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHVtcHN5cyAtIFRoZSBvdXRwdXQgb2YgZHVtcHN5cyB3aW5kb3cgY29tbWFuZC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbG9jayBzY3JlZW4gaXMgc2hvd2luZy5cbiAqL1xuZnVuY3Rpb24gaXNTaG93aW5nTG9ja3NjcmVlbiAoZHVtcHN5cykge1xuICByZXR1cm4gXy5zb21lKFsnbVNob3dpbmdMb2Nrc2NyZWVuPXRydWUnLCAnbURyZWFtaW5nTG9ja3NjcmVlbj10cnVlJ10sICh4KSA9PiBkdW1wc3lzLmluY2x1ZGVzKHgpKVxuICAgIC8vIGBtSXNTaG93aW5nYCBhbmQgYG1JbnB1dFJlc3RyaWN0ZWRgIGFyZSBgdHJ1ZWAgaW4gbG9jayBjb25kaXRpb24uIGBmYWxzZWAgaXMgdW5sb2NrIGNvbmRpdGlvbi5cbiAgICB8fCBfLmV2ZXJ5KFsvS2V5Z3VhcmRTdGF0ZU1vbml0b3JbXFxuXFxzXSttSXNTaG93aW5nPXRydWUvLCAvXFxzK21JbnB1dFJlc3RyaWN0ZWQ9dHJ1ZS9dLCAoeCkgPT4geC50ZXN0KGR1bXBzeXMpKTtcbn1cblxuLypcbiAqIENoZWNrcyBtQ3VycmVudEZvY3VzIGluIGR1bXBzeXMgb3V0cHV0IHRvIGRldGVybWluZSBpZiBLZXlndWFyZCBpcyBhY3RpdmF0ZWRcbiAqL1xuZnVuY3Rpb24gaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkIChkdW1wc3lzKSB7XG4gIGxldCBtID0gL21DdXJyZW50Rm9jdXMuK0tleWd1YXJkL2dpLmV4ZWMoZHVtcHN5cyk7XG4gIHJldHVybiAobSAmJiBtLmxlbmd0aCAmJiBtWzBdKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuLypcbiAqIFJlYWRzIFN1cmZhY2VPcmllbnRhdGlvbiBpbiBkdW1wc3lzIG91dHB1dFxuICovXG5mdW5jdGlvbiBnZXRTdXJmYWNlT3JpZW50YXRpb24gKGR1bXBzeXMpIHtcbiAgbGV0IG0gPSAvU3VyZmFjZU9yaWVudGF0aW9uOiBcXGQvZ2kuZXhlYyhkdW1wc3lzKTtcbiAgcmV0dXJuIG0gJiYgcGFyc2VJbnQobVswXS5zcGxpdCgnOicpWzFdLCAxMCk7XG59XG5cbi8qXG4gKiBDaGVja3MgbVNjcmVlbk9uRnVsbHkgaW4gZHVtcHN5cyBvdXRwdXQgdG8gZGV0ZXJtaW5lIGlmIHNjcmVlbiBpcyBzaG93aW5nXG4gKiBEZWZhdWx0IGlzIHRydWVcbiAqL1xuZnVuY3Rpb24gaXNTY3JlZW5PbkZ1bGx5IChkdW1wc3lzKSB7XG4gIGxldCBtID0gL21TY3JlZW5PbkZ1bGx5PVxcdysvZ2kuZXhlYyhkdW1wc3lzKTtcbiAgcmV0dXJuICFtIHx8IC8vIGlmIGluZm9ybWF0aW9uIGlzIG1pc3Npbmcgd2UgYXNzdW1lIHNjcmVlbiBpcyBmdWxseSBvblxuICAgICAgICAgKG0gJiYgbS5sZW5ndGggPiAwICYmIG1bMF0uc3BsaXQoJz0nKVsxXSA9PT0gJ3RydWUnKSB8fCBmYWxzZTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgY29tbWFuZCBsaW5lIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZ2l2ZW5cbiAqIGFwcGxpY2F0aW9uIHN0YXJ0dXAgb3B0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3RhcnRBcHBPcHRpb25zfSBzdGFydEFwcE9wdGlvbnMgLSBBcHBsaWNhdGlvbiBvcHRpb25zIG1hcHBpbmdcbiAqIEBwYXJhbSB7bnVtYmVyfSBhcGlMZXZlbCAtIFRoZSBhY3R1YWwgT1MgQVBJIGxldmVsXG4gKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn0gVGhlIGFjdHVhbCBjb21tYW5kIGxpbmUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gYnVpbGRTdGFydENtZCAoc3RhcnRBcHBPcHRpb25zLCBhcGlMZXZlbCkge1xuICBjb25zdCB7XG4gICAgdXNlcixcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICAgIHBrZyxcbiAgICBhY3Rpdml0eSxcbiAgICBhY3Rpb24sXG4gICAgY2F0ZWdvcnksXG4gICAgc3RvcEFwcCxcbiAgICBmbGFncyxcbiAgfSA9IHN0YXJ0QXBwT3B0aW9ucztcbiAgY29uc3QgY21kID0gWydhbScsICdzdGFydCddO1xuICBpZiAodXRpbC5oYXNWYWx1ZSh1c2VyKSkge1xuICAgIGNtZC5wdXNoKCctLXVzZXInLCB1c2VyKTtcbiAgfVxuICBpZiAod2FpdEZvckxhdW5jaCkge1xuICAgIGNtZC5wdXNoKCctVycpO1xuICB9XG4gIGlmIChhY3Rpdml0eSAmJiBwa2cpIHtcbiAgICBjbWQucHVzaCgnLW4nLCBgJHtwa2d9LyR7YWN0aXZpdHl9YCk7XG4gIH1cbiAgaWYgKHN0b3BBcHAgJiYgYXBpTGV2ZWwgPj0gMTUpIHtcbiAgICBjbWQucHVzaCgnLVMnKTtcbiAgfVxuICBpZiAoYWN0aW9uKSB7XG4gICAgY21kLnB1c2goJy1hJywgYWN0aW9uKTtcbiAgfVxuICBpZiAoY2F0ZWdvcnkpIHtcbiAgICBjbWQucHVzaCgnLWMnLCBjYXRlZ29yeSk7XG4gIH1cbiAgaWYgKGZsYWdzKSB7XG4gICAgY21kLnB1c2goJy1mJywgZmxhZ3MpO1xuICB9XG4gIGlmIChzdGFydEFwcE9wdGlvbnMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMpIHtcbiAgICAvLyBleHBlY3Qgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgdG8gYmUgYSBzaW5nbGUgc3RyaW5nIG9mIHRoZSBmb3JtOlxuICAgIC8vICAgICBcIi1mbGFnIGtleVwiXG4gICAgLy8gICAgIFwiLWZsYWcga2V5IHZhbHVlXCJcbiAgICAvLyBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZXNlIChlLmcuLCBcIi1mbGFnMSBrZXkxIC1mbGFnMiBrZXkyIHZhbHVlMlwiKVxuXG4gICAgLy8gdGFrZSBhIHN0cmluZyBhbmQgcGFyc2Ugb3V0IHRoZSBwYXJ0IGJlZm9yZSBhbnkgc3BhY2VzLCBhbmQgYW55dGhpbmcgYWZ0ZXJcbiAgICAvLyB0aGUgZmlyc3Qgc3BhY2VcbiAgICBsZXQgcGFyc2VLZXlWYWx1ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgICBsZXQgc3BhY2UgPSBzdHIuaW5kZXhPZignICcpO1xuICAgICAgaWYgKHNwYWNlID09PSAtMSkge1xuICAgICAgICByZXR1cm4gc3RyLmxlbmd0aCA/IFtzdHJdIDogW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW3N0ci5zdWJzdHJpbmcoMCwgc3BhY2UpLnRyaW0oKSwgc3RyLnN1YnN0cmluZyhzcGFjZSArIDEpLnRyaW0oKV07XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGN5Y2xlIHRocm91Z2ggdGhlIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIGFuZCBwdWxsIG91dCB0aGUgYXJndW1lbnRzXG4gICAgLy8gYWRkIGEgc3BhY2UgaW5pdGlhbGx5IHNvIGZsYWdzIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGZyb20gYXJndW1lbnRzIHRoYXRcbiAgICAvLyBoYXZlIGludGVybmFsIGh5cGhlbnNcbiAgICBsZXQgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgPSBgICR7c3RhcnRBcHBPcHRpb25zLm9wdGlvbmFsSW50ZW50QXJndW1lbnRzfWA7XG4gICAgbGV0IHJlID0gLyAoLVteXFxzXSspICguKykvO1xuICAgIHdoaWxlICh0cnVlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICBsZXQgYXJncyA9IHJlLmV4ZWMob3B0aW9uYWxJbnRlbnRBcmd1bWVudHMpO1xuICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgIGlmIChvcHRpb25hbEludGVudEFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBubyBtb3JlIGZsYWdzLCBzbyB0aGUgcmVtYWluZGVyIGNhbiBiZSB0cmVhdGVkIGFzICdrZXknIG9yICdrZXkgdmFsdWUnXG4gICAgICAgICAgY21kLnB1c2guYXBwbHkoY21kLCBwYXJzZUtleVZhbHVlKG9wdGlvbmFsSW50ZW50QXJndW1lbnRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgYXJlIGRvbmVcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIHRha2UgdGhlIGZsYWcgYW5kIHNlZSBpZiBpdCBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmdcbiAgICAgIC8vIGlmIGl0IGlzIG5vdCwgdGhlbiBpdCBtZWFucyB3ZSBoYXZlIGJlZW4gdGhyb3VnaCBhbHJlYWR5LCBhbmRcbiAgICAgIC8vIHdoYXQgaXMgYmVmb3JlIHRoZSBmbGFnIGlzIHRoZSBhcmd1bWVudCBmb3IgdGhlIHByZXZpb3VzIGZsYWdcbiAgICAgIGxldCBmbGFnID0gYXJnc1sxXTtcbiAgICAgIGxldCBmbGFnUG9zID0gb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMuaW5kZXhPZihmbGFnKTtcbiAgICAgIGlmIChmbGFnUG9zICE9PSAwKSB7XG4gICAgICAgIGxldCBwcmV2QXJncyA9IG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLnN1YnN0cmluZygwLCBmbGFnUG9zKTtcbiAgICAgICAgY21kLnB1c2guYXBwbHkoY21kLCBwYXJzZUtleVZhbHVlKHByZXZBcmdzKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCB0aGUgZmxhZywgYXMgdGhlcmUgYXJlIG5vIG1vcmUgZWFybGllciBhcmd1bWVudHNcbiAgICAgIGNtZC5wdXNoKGZsYWcpO1xuXG4gICAgICAvLyBtYWtlIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzIGhvbGQgdGhlIHJlbWFpbmRlclxuICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMgPSBhcmdzWzJdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY21kO1xufVxuXG5jb25zdCBnZXRTZGtUb29sc1ZlcnNpb24gPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0U2RrVG9vbHNWZXJzaW9uICgpIHtcbiAgY29uc3QgYW5kcm9pZEhvbWUgPSBwcm9jZXNzLmVudi5BTkRST0lEX0hPTUU7XG4gIGlmICghYW5kcm9pZEhvbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FORFJPSURfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBleHBlY3RlZCB0byBiZSBzZXQnKTtcbiAgfVxuICBjb25zdCBwcm9wZXJ0aWVzUGF0aCA9IHBhdGgucmVzb2x2ZShhbmRyb2lkSG9tZSwgJ3Rvb2xzJywgJ3NvdXJjZS5wcm9wZXJ0aWVzJyk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHByb3BlcnRpZXNQYXRoKSkge1xuICAgIGxvZy53YXJuKGBDYW5ub3QgZmluZCAke3Byb3BlcnRpZXNQYXRofSBmaWxlIHRvIHJlYWQgU0RLIHZlcnNpb24gZnJvbWApO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwcm9wZXJ0aWVzQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHByb3BlcnRpZXNQYXRoLCAndXRmOCcpO1xuICBjb25zdCB2ZXJzaW9uTWF0Y2hlciA9IG5ldyBSZWdFeHAoL1BrZ1xcLlJldmlzaW9uPShcXGQrKVxcLj8oXFxkKyk/XFwuPyhcXGQrKT8vKTtcbiAgY29uc3QgbWF0Y2ggPSB2ZXJzaW9uTWF0Y2hlci5leGVjKHByb3BlcnRpZXNDb250ZW50KTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1ham9yOiBwYXJzZUludChtYXRjaFsxXSwgMTApLFxuICAgICAgbWlub3I6IG1hdGNoWzJdID8gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKSA6IDAsXG4gICAgICBidWlsZDogbWF0Y2hbM10gPyBwYXJzZUludChtYXRjaFszXSwgMTApIDogMFxuICAgIH07XG4gIH1cbiAgbG9nLndhcm4oYENhbm5vdCBwYXJzZSBcIlBrZy5SZXZpc2lvblwiIHZhbHVlIGZyb20gJHtwcm9wZXJ0aWVzUGF0aH1gKTtcbn0pO1xuXG4vKipcbiAqIFJldHJpZXZlcyBmdWxsIHBhdGhzIHRvIGFsbCAnYnVpbGQtdG9vbHMnIHN1YmZvbGRlcnMgdW5kZXIgdGhlIHBhcnRpY3VsYXJcbiAqIFNESyByb290IGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZGtSb290IC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgQW5kcm9pZCBTREsgcm9vdCBmb2xkZXJcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBUaGUgZnVsbCBwYXRocyB0byB0aGUgcmVzdWx0aW5nIGZvbGRlcnMgc29ydGVkIGJ5XG4gKiBtb2RpZmljYXRpb24gZGF0ZSAodGhlIG5ld2VzdCBjb21lcyBmaXJzdCkgb3IgYW4gZW1wdHkgbGlzdCBpZiBubyBtYWN0aGVzIHdlcmUgZm91bmRcbiAqL1xuY29uc3QgZ2V0QnVpbGRUb29sc0RpcnMgPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0QnVpbGRUb29sc0RpcnMgKHNka1Jvb3QpIHtcbiAgbGV0IGJ1aWxkVG9vbHNEaXJzID0gYXdhaXQgZnMuZ2xvYignKi8nLCB7XG4gICAgY3dkOiBwYXRoLnJlc29sdmUoc2RrUm9vdCwgJ2J1aWxkLXRvb2xzJyksXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gIH0pO1xuICB0cnkge1xuICAgIGJ1aWxkVG9vbHNEaXJzID0gYnVpbGRUb29sc0RpcnNcbiAgICAgIC5tYXAoKGRpcikgPT4gW3BhdGguYmFzZW5hbWUoZGlyKSwgZGlyXSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBzZW12ZXIucmNvbXBhcmUoYVswXSwgYlswXSkpXG4gICAgICAubWFwKChwYWlyKSA9PiBwYWlyWzFdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYENhbm5vdCBzb3J0IGJ1aWxkLXRvb2xzIGZvbGRlcnMgJHtKU09OLnN0cmluZ2lmeShidWlsZFRvb2xzRGlycy5tYXAoKGRpcikgPT4gcGF0aC5iYXNlbmFtZShkaXIpKSl9IGAgK1xuICAgICAgYGJ5IHNlbWFudGljIHZlcnNpb24gbmFtZXMuYCk7XG4gICAgbG9nLndhcm4oYEZhbGxpbmcgYmFjayB0byBzb3J0aW5nIGJ5IG1vZGlmaWNhdGlvbiBkYXRlLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBjb25zdCBwYWlycyA9IGF3YWl0IEIubWFwKGJ1aWxkVG9vbHNEaXJzLCBhc3luYyAoZGlyKSA9PiBbKGF3YWl0IGZzLnN0YXQoZGlyKSkubXRpbWUudmFsdWVPZigpLCBkaXJdKTtcbiAgICBidWlsZFRvb2xzRGlycyA9IHBhaXJzXG4gICAgICAuc29ydCgoYSwgYikgPT4gYVswXSA8IGJbMF0pXG4gICAgICAubWFwKChwYWlyKSA9PiBwYWlyWzFdKTtcbiAgfVxuICBsb2cuaW5mbyhgRm91bmQgJHtidWlsZFRvb2xzRGlycy5sZW5ndGh9ICdidWlsZC10b29scycgZm9sZGVycyB1bmRlciAnJHtzZGtSb290fScgKG5ld2VzdCBmaXJzdCk6YCk7XG4gIGZvciAobGV0IGRpciBvZiBidWlsZFRvb2xzRGlycykge1xuICAgIGxvZy5pbmZvKGAgICAgJHtkaXJ9YCk7XG4gIH1cbiAgcmV0dXJuIGJ1aWxkVG9vbHNEaXJzO1xufSk7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHBlcm1pc3Npb24gbmFtZXMgZW5jb2RlZCBpbiBgZHVtcHN5cyBwYWNrYWdlYCBjb21tYW5kIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHVtcHN5c091dHB1dCAtIFRoZSBhY3R1YWwgY29tbWFuZCBvdXRwdXQuXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGdyb3VwTmFtZXMgLSBUaGUgbGlzdCBvZiBncm91cCBuYW1lcyB0byBsaXN0IHBlcm1pc3Npb25zIGZvci5cbiAqIEBwYXJhbSB7P2Jvb2xlYW59IGdyYW50ZWRTdGF0ZSAtIFRoZSBleHBlY3RlZCBzdGF0ZSBvZiBgZ3JhbnRlZGAgYXR0cmlidXRlIHRvIGZpbHRlciB3aXRoLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gZmlsdGVyaW5nIGlzIGRvbmUgaWYgdGhlIHBhcmFtZXRlciBpcyBub3Qgc2V0LlxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBsaXN0IG9mIG1hdGNoZWQgcGVybWlzc2lvbiBuYW1lcyBvciBhbiBlbXB0eSBsaXN0IGlmIG5vIG1hdGNoZXMgd2VyZSBmb3VuZC5cbiAqL1xuY29uc3QgZXh0cmFjdE1hdGNoaW5nUGVybWlzc2lvbnMgPSBmdW5jdGlvbiAoZHVtcHN5c091dHB1dCwgZ3JvdXBOYW1lcywgZ3JhbnRlZFN0YXRlID0gbnVsbCkge1xuICBjb25zdCBncm91cFBhdHRlcm5CeU5hbWUgPSAoZ3JvdXBOYW1lKSA9PiBuZXcgUmVnRXhwKGBeKFxcXFxzKiR7Xy5lc2NhcGVSZWdFeHAoZ3JvdXBOYW1lKX0gcGVybWlzc2lvbnM6W1xcXFxzXFxcXFNdKylgLCAnbScpO1xuICBjb25zdCBpbmRlbnRQYXR0ZXJuID0gL1xcU3wkLztcbiAgY29uc3QgcGVybWlzc2lvbk5hbWVQYXR0ZXJuID0gL2FuZHJvaWRcXC5cXHcqXFwuP3Blcm1pc3Npb25cXC5cXHcrLztcbiAgY29uc3QgZ3JhbnRlZFN0YXRlUGF0dGVybiA9IC9cXGJncmFudGVkPShcXHcrKS87XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGNvbnN0IGdyb3VwTmFtZSBvZiBncm91cE5hbWVzKSB7XG4gICAgY29uc3QgZ3JvdXBNYXRjaCA9IGdyb3VwUGF0dGVybkJ5TmFtZShncm91cE5hbWUpLmV4ZWMoZHVtcHN5c091dHB1dCk7XG4gICAgaWYgKCFncm91cE1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lcyA9IGdyb3VwTWF0Y2hbMV0uc3BsaXQoJ1xcbicpO1xuICAgIGlmIChsaW5lcy5sZW5ndGggPCAyKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0aXRsZUluZGVudCA9IGxpbmVzWzBdLnNlYXJjaChpbmRlbnRQYXR0ZXJuKTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMuc2xpY2UoMSkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRlbnQgPSBsaW5lLnNlYXJjaChpbmRlbnRQYXR0ZXJuKTtcbiAgICAgIGlmIChjdXJyZW50SW5kZW50IDw9IHRpdGxlSW5kZW50KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwZXJtaXNzaW9uTmFtZU1hdGNoID0gcGVybWlzc2lvbk5hbWVQYXR0ZXJuLmV4ZWMobGluZSk7XG4gICAgICBpZiAoIXBlcm1pc3Npb25OYW1lTWF0Y2gpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICBwZXJtaXNzaW9uOiBwZXJtaXNzaW9uTmFtZU1hdGNoWzBdLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdyYW50ZWRTdGF0ZU1hdGNoID0gZ3JhbnRlZFN0YXRlUGF0dGVybi5leGVjKGxpbmUpO1xuICAgICAgaWYgKGdyYW50ZWRTdGF0ZU1hdGNoKSB7XG4gICAgICAgIGl0ZW0uZ3JhbnRlZCA9IGdyYW50ZWRTdGF0ZU1hdGNoWzFdID09PSAndHJ1ZSc7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBmaWx0ZXJlZFJlc3VsdCA9IHJlc3VsdFxuICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFfLmlzQm9vbGVhbihncmFudGVkU3RhdGUpIHx8IGl0ZW0uZ3JhbnRlZCA9PT0gZ3JhbnRlZFN0YXRlKVxuICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0ucGVybWlzc2lvbik7XG4gIGxvZy5kZWJ1ZyhgUmV0cmlldmVkICR7dXRpbC5wbHVyYWxpemUoJ3Blcm1pc3Npb24nLCBmaWx0ZXJlZFJlc3VsdC5sZW5ndGgsIHRydWUpfSBgICtcbiAgICBgZnJvbSAke2dyb3VwTmFtZXN9ICR7dXRpbC5wbHVyYWxpemUoJ2dyb3VwJywgZ3JvdXBOYW1lcy5sZW5ndGgsIGZhbHNlKX1gKTtcbiAgcmV0dXJuIGZpbHRlcmVkUmVzdWx0O1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogVHJhbnNmb3JtcyBnaXZlbiBvcHRpb25zIGludG8gdGhlIGxpc3Qgb2YgYGFkYiBpbnN0YWxsLmluc3RhbGwtbXVsdGlwbGVgIGNvbW1hbmQgYXJndW1lbnRzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFwaUxldmVsIC0gVGhlIGN1cnJlbnQgQVBJIGxldmVsXG4gKiBAcGFyYW0gez9JbnN0YWxsT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG1hcHBpbmcgdG8gdHJhbnNmb3JtXG4gKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn0gVGhlIGFycmF5IG9mIGFyZ3VtZW50c1xuICovXG5mdW5jdGlvbiBidWlsZEluc3RhbGxBcmdzIChhcGlMZXZlbCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gIGlmICghdXRpbC5oYXNWYWx1ZShvcHRpb25zLnJlcGxhY2UpIHx8IG9wdGlvbnMucmVwbGFjZSkge1xuICAgIHJlc3VsdC5wdXNoKCctcicpO1xuICB9XG4gIGlmIChvcHRpb25zLmFsbG93VGVzdFBhY2thZ2VzKSB7XG4gICAgcmVzdWx0LnB1c2goJy10Jyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMudXNlU2RjYXJkKSB7XG4gICAgcmVzdWx0LnB1c2goJy1zJyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMuZ3JhbnRQZXJtaXNzaW9ucykge1xuICAgIGlmIChhcGlMZXZlbCA8IDIzKSB7XG4gICAgICBsb2cuZGVidWcoYFNraXBwaW5nIHBlcm1pc3Npb25zIGdyYW50IG9wdGlvbiwgc2luY2UgYCArXG4gICAgICAgICAgICAgICAgYHRoZSBjdXJyZW50IEFQSSBsZXZlbCAke2FwaUxldmVsfSBkb2VzIG5vdCBzdXBwb3J0IGFwcGxpY2F0aW9ucyBgICtcbiAgICAgICAgICAgICAgICBgcGVybWlzc2lvbnMgY3VzdG9taXphdGlvbmApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaCgnLWcnKTtcbiAgICB9XG4gIH1cbiAgLy8gRm9yIG11bHRpcGxlLWluc3RhbGxcbiAgaWYgKG9wdGlvbnMucGFydGlhbEluc3RhbGwpIHtcbiAgICByZXN1bHQucHVzaCgnLXAnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTWFuaWZlc3RJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGtnIC0gVGhlIGFwcGxpY2F0aW9uIGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpdml0eSAtIFRoZSBuYW1lIG9mIHRoZSBtYWluIHBhY2thZ2UgYWN0aXZpdHlcbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdmVyc2lvbkNvZGUgLSBUaGUgdmVyc2lvbiBjb2RlIG51bWJlciAobWlnaHQgYmUgYE5hTmApXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHZlcnNpb25OYW1lIC0gVGhlIHZlcnNpb24gbmFtZSAobWlnaHQgYmUgYG51bGxgKVxuICovXG5cbi8qKlxuICogUGVyZm9ybSBwYXJzaW5nIG9mIHRoZSBtYW5pZmVzdCBvYmplY3QgaW4gb3JkZXJcbiAqIHRvIGV4dHJhY3Qgc29tZSB2aXRhbCB2YWx1ZXMgZnJvbSBpdFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBtYW5pZmVzdCBUaGUgbWFuaWZlc3QgY29udGVudCBmb3JtYXR0ZWQgYXMgSlNPTlxuICogU2VlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2FkYmtpdC1hcGtyZWFkZXIgZm9yIGRldGFpbGVkIGZvcm1hdCBkZXNjcmlwdGlvblxuICogQHJldHVybnMge01hbmlmZXN0SW5mb31cbiAqL1xuZnVuY3Rpb24gcGFyc2VNYW5pZmVzdCAobWFuaWZlc3QpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHBrZzogbWFuaWZlc3QucGFja2FnZSxcbiAgICB2ZXJzaW9uQ29kZTogcGFyc2VJbnQobWFuaWZlc3QudmVyc2lvbkNvZGUsIDEwKSxcbiAgICB2ZXJzaW9uTmFtZTogbWFuaWZlc3QudmVyc2lvbk5hbWUgfHwgbnVsbCxcbiAgfTtcbiAgaWYgKCFtYW5pZmVzdC5hcHBsaWNhdGlvbikge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBMb29rIGZvciBlbmFibGVkIGFjdGl2aXR5IG9yIGFjdGl2aXR5LWFsaWFzIHdpdGhcbiAgLy8gYWN0aW9uID09IGFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIGFuZFxuICAvLyBjYXRlZ29yeSA9PSBhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUlxuICBmb3IgKGNvbnN0IGFjdGl2aXR5IG9mIFtcbiAgICAuLi5tYW5pZmVzdC5hcHBsaWNhdGlvbi5hY3Rpdml0aWVzLFxuICAgIC4uLm1hbmlmZXN0LmFwcGxpY2F0aW9uLmFjdGl2aXR5QWxpYXNlcyxcbiAgXSkge1xuICAgIGlmIChhY3Rpdml0eS5lbmFibGVkID09PSBmYWxzZSB8fCBfLmlzRW1wdHkoYWN0aXZpdHkuaW50ZW50RmlsdGVycykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qge2FjdGlvbnMsIGNhdGVnb3JpZXN9IG9mIGFjdGl2aXR5LmludGVudEZpbHRlcnMpIHtcbiAgICAgIGlmIChfLmlzRW1wdHkoYWN0aW9ucykgfHwgXy5pc0VtcHR5KGNhdGVnb3JpZXMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc01haW5BY3Rpb24gPSBhY3Rpb25zLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gTUFJTl9BQ1RJT04pO1xuICAgICAgY29uc3QgaXNMYXVuY2hlckNhdGVnb3J5ID0gY2F0ZWdvcmllcy5zb21lKCh7bmFtZX0pID0+IG5hbWUgPT09IExBVU5DSEVSX0NBVEVHT1JZKTtcbiAgICAgIGlmIChpc01haW5BY3Rpb24gJiYgaXNMYXVuY2hlckNhdGVnb3J5KSB7XG4gICAgICAgIHJlc3VsdC5hY3Rpdml0eSA9IGFjdGl2aXR5Lm5hbWU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUGFyc2VzIGFwayBzdHJpbmdzIGZyb20gYWFwdCB0b29sIG91dHB1dFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByYXdPdXRwdXQgVGhlIGFjdHVhbCB0b29sIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZ01hcmtlciBUaGUgY29uZmlnIG1hcmtlci4gVXN1YWxseVxuICogYSBsYW5ndWFnZSBhYmJyZXZpYXRpb24gb3IgYChkZWZhdWx0KWBcbiAqIEByZXR1cm5zIHtPYmplY3R9IFN0cmluZ3MgaWRzIHRvIHZhbHVlcyBtYXBwaW5nLiBQbHVyYWxcbiAqIHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgYXJyYXlzLiBJZiBubyBjb25maWcgZm91bmQgZm9yIHRoZVxuICogZ2l2ZW4gbWFya2VyIHRoZW4gYW4gZW1wdHkgbWFwcGluZyBpcyByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VBYXB0U3RyaW5ncyAocmF3T3V0cHV0LCBjb25maWdNYXJrZXIpIHtcbiAgY29uc3Qgbm9ybWFsaXplU3RyaW5nTWF0Y2ggPSBmdW5jdGlvbiAocykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoL1wiJC8sICcnKS5yZXBsYWNlKC9eXCIvLCAnJykucmVwbGFjZSgvXFxcXFwiL2csICdcIicpO1xuICB9O1xuXG4gIGNvbnN0IGFwa1N0cmluZ3MgPSB7fTtcbiAgbGV0IGlzSW5Db25maWcgPSBmYWxzZTtcbiAgbGV0IGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgbGV0IGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAvLyBUaGUgcGF0dGVybiBtYXRjaGVzIGFueSBxdW90ZWQgY29udGVudCBpbmNsdWRpbmcgZXNjYXBlZCBxdW90ZXNcbiAgY29uc3QgcXVvdGVkU3RyaW5nUGF0dGVybiA9IC9cIlteXCJcXFxcXSooPzpcXFxcLlteXCJcXFxcXSopKlwiLztcbiAgZm9yIChjb25zdCBsaW5lIG9mIHJhd091dHB1dC5zcGxpdChvcy5FT0wpKSB7XG4gICAgY29uc3QgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICBpZiAoXy5pc0VtcHR5KHRyaW1tZWRMaW5lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFsnY29uZmlnJywgJ3R5cGUnLCAnc3BlYycsICdQYWNrYWdlJ10uc29tZSgoeCkgPT4gdHJpbW1lZExpbmUuc3RhcnRzV2l0aCh4KSkpIHtcbiAgICAgIGlzSW5Db25maWcgPSB0cmltbWVkTGluZS5zdGFydHNXaXRoKGBjb25maWcgJHtjb25maWdNYXJrZXJ9OmApO1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzSW5Db25maWcpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh0cmltbWVkTGluZS5zdGFydHNXaXRoKCdyZXNvdXJjZScpKSB7XG4gICAgICBpc0luUGx1cmFsR3JvdXAgPSBmYWxzZTtcbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcblxuICAgICAgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCc6c3RyaW5nLycpKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gLzpzdHJpbmdcXC8oXFxTKyk6Ly5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cmltbWVkTGluZS5pbmNsdWRlcygnOnBsdXJhbHMvJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvOnBsdXJhbHNcXC8oXFxTKyk6Ly5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgICBpc0luUGx1cmFsR3JvdXAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFJlc291cmNlSWQgJiYgdHJpbW1lZExpbmUuc3RhcnRzV2l0aCgnKHN0cmluZycpKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHF1b3RlZFN0cmluZ1BhdHRlcm4uZXhlYyh0cmltbWVkTGluZSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gPSBub3JtYWxpemVTdHJpbmdNYXRjaChtYXRjaFswXSk7XG4gICAgICB9XG4gICAgICBjdXJyZW50UmVzb3VyY2VJZCA9IG51bGw7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFJlc291cmNlSWQgJiYgaXNJblBsdXJhbEdyb3VwICYmIHRyaW1tZWRMaW5lLmluY2x1ZGVzKCc6IChzdHJpbmcnKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBxdW90ZWRTdHJpbmdQYXR0ZXJuLmV4ZWModHJpbW1lZExpbmUpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdID0gW1xuICAgICAgICAgIC4uLihhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSB8fCBbXSksXG4gICAgICAgICAgbm9ybWFsaXplU3RyaW5nTWF0Y2gobWF0Y2hbMF0pLFxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcGtTdHJpbmdzO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhcGsgc3RyaW5ncyBmcm9tIGFhcHQyIHRvb2wgb3V0cHV0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJhd091dHB1dCBUaGUgYWN0dWFsIHRvb2wgb3V0cHV0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnTWFya2VyIFRoZSBjb25maWcgbWFya2VyLiBVc3VhbGx5XG4gKiBhIGxhbmd1YWdlIGFiYnJldmlhdGlvbiBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIHRoZSBkZWZhdWx0IG9uZVxuICogQHJldHVybnMge09iamVjdH0gU3RyaW5ncyBpZHMgdG8gdmFsdWVzIG1hcHBpbmcuIFBsdXJhbFxuICogdmFsdWVzIGFyZSByZXByZXNlbnRlZCBhcyBhcnJheXMuIElmIG5vIGNvbmZpZyBmb3VuZCBmb3IgdGhlXG4gKiBnaXZlbiBtYXJrZXIgdGhlbiBhbiBlbXB0eSBtYXBwaW5nIGlzIHJldHVybmVkLlxuICovXG5mdW5jdGlvbiBwYXJzZUFhcHQyU3RyaW5ncyAocmF3T3V0cHV0LCBjb25maWdNYXJrZXIpIHtcbiAgY29uc3QgYWxsTGluZXMgPSByYXdPdXRwdXQuc3BsaXQob3MuRU9MKTtcbiAgZnVuY3Rpb24gZXh0cmFjdENvbnRlbnQgKHN0YXJ0SWR4KSB7XG4gICAgbGV0IGlkeCA9IHN0YXJ0SWR4O1xuICAgIGNvbnN0IHN0YXJ0Q2hhclBvcyA9IGFsbExpbmVzW3N0YXJ0SWR4XS5pbmRleE9mKCdcIicpO1xuICAgIGlmIChzdGFydENoYXJQb3MgPCAwKSB7XG4gICAgICByZXR1cm4gW251bGwsIGlkeF07XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSAnJztcbiAgICB3aGlsZSAoaWR4IDwgYWxsTGluZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkNoYXJNYXRjaCA9IC9cIiQvLmV4ZWMoYWxsTGluZXNbaWR4XSk7XG4gICAgICBpZiAodGVybWluYXRpb25DaGFyTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGVybWluYXRpb25DaGFyUG9zID0gdGVybWluYXRpb25DaGFyTWF0Y2guaW5kZXg7XG4gICAgICAgIGlmIChzdGFydElkeCA9PT0gaWR4KSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGFsbExpbmVzW2lkeF0uc3Vic3RyaW5nKHN0YXJ0Q2hhclBvcyArIDEsIHRlcm1pbmF0aW9uQ2hhclBvcyksXG4gICAgICAgICAgICBpZHhcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYCR7cmVzdWx0fVxcXFxuJHtfLnRyaW1TdGFydChhbGxMaW5lc1tpZHhdLnN1YnN0cmluZygwLCB0ZXJtaW5hdGlvbkNoYXJQb3MpKX1gLFxuICAgICAgICAgIGlkeCxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICAgIGlmIChpZHggPiBzdGFydElkeCkge1xuICAgICAgICByZXN1bHQgKz0gYFxcXFxuJHtfLnRyaW1TdGFydChhbGxMaW5lc1tpZHhdKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IGFsbExpbmVzW2lkeF0uc3Vic3RyaW5nKHN0YXJ0Q2hhclBvcyArIDEpO1xuICAgICAgfVxuICAgICAgKytpZHg7XG4gICAgfVxuICAgIHJldHVybiBbcmVzdWx0LCBpZHhdO1xuICB9XG5cbiAgY29uc3QgYXBrU3RyaW5ncyA9IHt9O1xuICBsZXQgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICBsZXQgaXNJblBsdXJhbEdyb3VwID0gZmFsc2U7XG4gIGxldCBpc0luQ3VycmVudENvbmZpZyA9IGZhbHNlO1xuICBsZXQgbGluZUluZGV4ID0gMDtcbiAgd2hpbGUgKGxpbmVJbmRleCA8IGFsbExpbmVzLmxlbmd0aCkge1xuICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gYWxsTGluZXNbbGluZUluZGV4XS50cmltKCk7XG4gICAgaWYgKF8uaXNFbXB0eSh0cmltbWVkTGluZSkpIHtcbiAgICAgICsrbGluZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKFsndHlwZScsICdQYWNrYWdlJ10uc29tZSgoeCkgPT4gdHJpbW1lZExpbmUuc3RhcnRzV2l0aCh4KSkpIHtcbiAgICAgIGN1cnJlbnRSZXNvdXJjZUlkID0gbnVsbDtcbiAgICAgIGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAgICAgaXNJbkN1cnJlbnRDb25maWcgPSBmYWxzZTtcbiAgICAgICsrbGluZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJ3Jlc291cmNlJykpIHtcbiAgICAgIGlzSW5QbHVyYWxHcm91cCA9IGZhbHNlO1xuICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgaXNJbkN1cnJlbnRDb25maWcgPSBmYWxzZTtcblxuICAgICAgaWYgKHRyaW1tZWRMaW5lLmluY2x1ZGVzKCdzdHJpbmcvJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvc3RyaW5nXFwvKFxcUyspLy5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cmltbWVkTGluZS5pbmNsdWRlcygncGx1cmFscy8nKSkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC9wbHVyYWxzXFwvKFxcUyspLy5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgICBpc0luUGx1cmFsR3JvdXAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICArK2xpbmVJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50UmVzb3VyY2VJZCkge1xuICAgICAgaWYgKGlzSW5QbHVyYWxHcm91cCkge1xuICAgICAgICBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aCgnKCcpKSB7XG4gICAgICAgICAgaXNJbkN1cnJlbnRDb25maWcgPSB0cmltbWVkTGluZS5zdGFydHNXaXRoKGAoJHtjb25maWdNYXJrZXJ9KWApO1xuICAgICAgICAgICsrbGluZUluZGV4O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0luQ3VycmVudENvbmZpZykge1xuICAgICAgICAgIGNvbnN0IFtjb250ZW50LCBpZHhdID0gZXh0cmFjdENvbnRlbnQobGluZUluZGV4KTtcbiAgICAgICAgICBsaW5lSW5kZXggPSBpZHg7XG4gICAgICAgICAgaWYgKF8uaXNTdHJpbmcoY29udGVudCkpIHtcbiAgICAgICAgICAgIGFwa1N0cmluZ3NbY3VycmVudFJlc291cmNlSWRdID0gW1xuICAgICAgICAgICAgICAuLi4oYXBrU3RyaW5nc1tjdXJyZW50UmVzb3VyY2VJZF0gfHwgW10pLFxuICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aChgKCR7Y29uZmlnTWFya2VyfSlgKSkge1xuICAgICAgICBjb25zdCBbY29udGVudCwgaWR4XSA9IGV4dHJhY3RDb250ZW50KGxpbmVJbmRleCk7XG4gICAgICAgIGxpbmVJbmRleCA9IGlkeDtcbiAgICAgICAgaWYgKF8uaXNTdHJpbmcoY29udGVudCkpIHtcbiAgICAgICAgICBhcGtTdHJpbmdzW2N1cnJlbnRSZXNvdXJjZUlkXSA9IGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudFJlc291cmNlSWQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICArK2xpbmVJbmRleDtcbiAgfVxuICByZXR1cm4gYXBrU3RyaW5ncztcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBjb25maWcgbWFya2VyLCB3aGljaCBpcyB0aGVuIHBhc3NlZCB0byBwYXJzZS4uIG1ldGhvZHNcbiAqIHRvIG1ha2UgaXQgY29tcGF0aWJsZSB3aXRoIHJlc291cmNlIGZvcm1hdHMgZ2VuZXJhdGVkIGJ5IGFhcHQoMikgdG9vbFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmZpZ3NHZXR0ZXIgVGhlIGZ1bmN0aW9uIHdob3NlIHJlc3VsdCBpcyBhIGxpc3RcbiAqIG9mIGFwayBjb25maWdzXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzaXJlZE1hcmtlciBUaGUgZGVzaXJlZCBjb25maWcgbWFya2VyIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVmYXVsdE1hcmtlciBUaGUgZGVmYXVsdCBjb25maWcgbWFya2VyIHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgY29uZmlnIG1hcmtlclxuICovXG5hc3luYyBmdW5jdGlvbiBmb3JtYXRDb25maWdNYXJrZXIgKGNvbmZpZ3NHZXR0ZXIsIGRlc2lyZWRNYXJrZXIsIGRlZmF1bHRNYXJrZXIpIHtcbiAgbGV0IGNvbmZpZ01hcmtlciA9IGRlc2lyZWRNYXJrZXIgfHwgZGVmYXVsdE1hcmtlcjtcbiAgaWYgKGNvbmZpZ01hcmtlci5pbmNsdWRlcygnLScpICYmICFjb25maWdNYXJrZXIuaW5jbHVkZXMoJy1yJykpIHtcbiAgICBjb25maWdNYXJrZXIgPSBjb25maWdNYXJrZXIucmVwbGFjZSgnLScsICctcicpO1xuICB9XG4gIGNvbnN0IGNvbmZpZ3MgPSBhd2FpdCBjb25maWdzR2V0dGVyKCk7XG4gIGxvZy5kZWJ1ZyhgUmVzb3VyY2UgY29uZmlndXJhdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoY29uZmlncyl9YCk7XG4gIC8vIEFzc3VtZSB0aGUgJ2VuJyBjb25maWd1cmF0aW9uIGlzIHRoZSBkZWZhdWx0IG9uZVxuICBpZiAoY29uZmlnTWFya2VyLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnZW4nKVxuICAgICYmICFjb25maWdzLnNvbWUoKHgpID0+IHgudHJpbSgpID09PSBjb25maWdNYXJrZXIpKSB7XG4gICAgbG9nLmRlYnVnKGBSZXNvdXJjZSBjb25maWd1cmF0aW9uIG5hbWUgJyR7Y29uZmlnTWFya2VyfScgaXMgdW5rbm93bi4gYCArXG4gICAgICBgUmVwbGFjaW5nIGl0IHdpdGggJyR7ZGVmYXVsdE1hcmtlcn0nYCk7XG4gICAgY29uZmlnTWFya2VyID0gZGVmYXVsdE1hcmtlcjtcbiAgfSBlbHNlIHtcbiAgICBsb2cuZGVidWcoYFNlbGVjdGVkIGNvbmZpZ3VyYXRpb246ICcke2NvbmZpZ01hcmtlcn0nYCk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpZ01hcmtlcjtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIG91dHB1dCBpbiBKU09OIGZvcm1hdCByZXRyaWV2ZWQgZnJvbVxuICogdGhlIGNvcnJlc3BvbmRpbmcgQXBwaXVtIFNldHRpbmdzIGJyb2FkY2FzdCBjYWxsc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXQgVGhlIGFjdHVhbCBjb21tYW5kIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGVudGl0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudGl0eSB3aGljaCBpc1xuICogZ29pbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcGFyc2VkIEpTT04gb2JqZWN0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG91dHB1dCBjYW5ub3QgYmUgcGFyc2VkXG4gKiBhcyBhIHZhbGlkIEpTT05cbiAqL1xuZnVuY3Rpb24gcGFyc2VKc29uRGF0YSAob3V0cHV0LCBlbnRpdHlOYW1lKSB7XG4gIGlmICghL1xcYnJlc3VsdD0tMVxcYi8udGVzdChvdXRwdXQpIHx8ICEvXFxiZGF0YT1cIi8udGVzdChvdXRwdXQpKSB7XG4gICAgbG9nLmRlYnVnKG91dHB1dCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgJHtlbnRpdHlOYW1lfSBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgJ0NoZWNrIHRoZSBzZXJ2ZXIgbG9nIGZvciBtb3JlIGRldGFpbHMnKTtcbiAgfVxuICBjb25zdCBtYXRjaCA9IC9cXGJkYXRhPShcIi4rKS8uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgbG9nLmRlYnVnKG91dHB1dCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgJHtlbnRpdHlOYW1lfSBmcm9tIHRoZSBjb21tYW5kIG91dHB1dC4gYCArXG4gICAgICAnQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICB9XG4gIGNvbnN0IGpzb25TdHIgPSBfLnRyaW0obWF0Y2hbMV0pLnJlcGxhY2UoLyheXCIpfChcIiQpL2csICcnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1Zyhqc29uU3RyKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSAke2VudGl0eU5hbWV9IGZyb20gdGhlIHJlc3VsdGluZyBkYXRhIHN0cmluZy4gYCArXG4gICAgICAnQ2hlY2sgdGhlIHNlcnZlciBsb2cgZm9yIG1vcmUgZGV0YWlscycpO1xuICB9XG59XG5cbi8qKlxuICogVHJhbnNmb3JtcyB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgYW5kIGNvdW50cnkgYWJicmV2aWF0aW9uc1xuICogdG8gQVZEIGFyZ3VtZW50cyBhcnJheVxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbGFuZ3VhZ2UgTGFuZ3VhZ2UgbmFtZSwgZm9yIGV4YW1wbGUgJ2ZyJ1xuICogQHBhcmFtIHs/c3RyaW5nfSBjb3VudHJ5IENvdW50cnkgbmFtZSwgZm9yIGV4YW1wbGUgJ0NBJ1xuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IFRoZSBnZW5lcmF0ZWQgYXJndW1lbnRzLiBUaGVcbiAqIHJlc3VsdGluZyBhcnJheSBtaWdodCBiZSBlbXB0eSBpZiBib3RoIGFyZ3VtZW50cyBhcmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gdG9BdmRMb2NhbGVBcmdzIChsYW5ndWFnZSwgY291bnRyeSkge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGxhbmd1YWdlICYmIF8uaXNTdHJpbmcobGFuZ3VhZ2UpKSB7XG4gICAgcmVzdWx0LnB1c2goJy1wcm9wJywgYHBlcnNpc3Quc3lzLmxhbmd1YWdlPSR7bGFuZ3VhZ2UudG9Mb3dlckNhc2UoKX1gKTtcbiAgfVxuICBpZiAoY291bnRyeSAmJiBfLmlzU3RyaW5nKGNvdW50cnkpKSB7XG4gICAgcmVzdWx0LnB1c2goJy1wcm9wJywgYHBlcnNpc3Quc3lzLmNvdW50cnk9JHtjb3VudHJ5LnRvVXBwZXJDYXNlKCl9YCk7XG4gIH1cbiAgbGV0IGxvY2FsZTtcbiAgaWYgKF8uaXNTdHJpbmcobGFuZ3VhZ2UpICYmIF8uaXNTdHJpbmcoY291bnRyeSkgJiYgbGFuZ3VhZ2UgJiYgY291bnRyeSkge1xuICAgIGxvY2FsZSA9IGxhbmd1YWdlLnRvTG93ZXJDYXNlKCkgKyAnLScgKyBjb3VudHJ5LnRvVXBwZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAobGFuZ3VhZ2UgJiYgXy5pc1N0cmluZyhsYW5ndWFnZSkpIHtcbiAgICBsb2NhbGUgPSBsYW5ndWFnZS50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKGNvdW50cnkgJiYgXy5pc1N0cmluZyhjb3VudHJ5KSkge1xuICAgIGxvY2FsZSA9IGNvdW50cnk7XG4gIH1cbiAgaWYgKGxvY2FsZSkge1xuICAgIHJlc3VsdC5wdXNoKCctcHJvcCcsIGBwZXJzaXN0LnN5cy5sb2NhbGU9JHtsb2NhbGV9YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgQW5kcm9pZCBwcmVmZXJlbmNlcyByb290XG4gKlxuICogQHJldHVybnMgez9zdHJpbmd9IFRoZSBmdWxsIHBhdGggdG8gdGhlIGZvbGRlciBvciBgbnVsbGAgaWYgdGhlIGZvbGRlciBjYW5ub3QgYmUgZm91bmRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0QW5kcm9pZFByZWZzUm9vdCAoKSB7XG4gIGxldCBsb2NhdGlvbiA9IHByb2Nlc3MuZW52LkFORFJPSURfRU1VTEFUT1JfSE9NRTtcbiAgaWYgKGF3YWl0IGRpckV4aXN0cyhsb2NhdGlvbikpIHtcbiAgICByZXR1cm4gbG9jYXRpb247XG4gIH1cblxuICBpZiAobG9jYXRpb24pIHtcbiAgICBsb2cud2FybihgVGhlIHZhbHVlIG9mIHRoZSBBTkRST0lEX0VNVUxBVE9SX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgJyR7bG9jYXRpb259JyBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5YCk7XG4gIH1cblxuICBjb25zdCBob21lID0gcHJvY2Vzcy5lbnYuSE9NRSB8fCBwcm9jZXNzLmVudi5VU0VSUFJPRklMRTtcbiAgaWYgKGhvbWUpIHtcbiAgICBsb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShob21lLCAnLmFuZHJvaWQnKTtcbiAgfVxuXG4gIGlmICghYXdhaXQgZGlyRXhpc3RzKGxvY2F0aW9uKSkge1xuICAgIGxvZy5kZWJ1ZyhgQW5kcm9pZCBjb25maWcgcm9vdCAnJHtsb2NhdGlvbn0nIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnlgKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBsb2NhdGlvbjtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHBhdGggZXhpc3RzIG9uIHRoZSBmaWxlc3lzdGVtIGFuZCBpcyBhIGRpcmVjdG9yeVxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbG9jYXRpb24gVGhlIGZ1bGwgcGF0aCB0byB0aGUgZGlyZWN0b3J5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGlyRXhpc3RzIChsb2NhdGlvbikge1xuICByZXR1cm4gbG9jYXRpb25cbiAgICAmJiBhd2FpdCBmcy5leGlzdHMobG9jYXRpb24pXG4gICAgJiYgKGF3YWl0IGZzLnN0YXQobG9jYXRpb24pKS5pc0RpcmVjdG9yeSgpO1xufVxuXG4vKipcbiAqIEVzY2FwZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuXG4gKiBUaGlzIGlzIG5lZWRlZCB0byBhdm9pZCBwb3NzaWJsZSBpc3N1ZXMgd2l0aCBob3cgc3lzdGVtIGBzcGF3bmBcbiAqIGNhbGwgaGFuZGxlcyB0aGVtLlxuICogU2VlIGh0dHBzOi8vZGlzY3Vzcy5hcHBpdW0uaW8vdC9ob3ctdG8tbW9kaWZ5LXdkLXByb3h5LWFuZC11aWF1dG9tYXRvcjItc291cmNlLWNvZGUtdG8tc3VwcG9ydC11bmljb2RlLzMzNDY2XG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmcgTm9uLWVzY2FwZWQgYXJndW1lbnQgc3RyaW5nXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBhcmd1bWVudFxuICovXG5mdW5jdGlvbiBlc2NhcGVTaGVsbEFyZyAoYXJnKSB7XG4gIGFyZyA9IGAke2FyZ31gO1xuICBpZiAoc3lzdGVtLmlzV2luZG93cygpKSB7XG4gICAgcmV0dXJuIC9bJnxeXFxzXS8udGVzdChhcmcpID8gYFwiJHthcmcucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImAgOiBhcmc7XG4gIH1cbiAgcmV0dXJuIGFyZy5yZXBsYWNlKC8mL2csICdcXFxcJicpO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgbmFtZSBvZiBsYXVuY2hhYmxlIHBhY2thZ2UgYWN0aXZpdHlcbiAqIGZyb20gZHVtcHN5cyBvdXRwdXQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGR1bXBzeXMgdGhlIGFjdHVhbCBkdW1wc3lzIG91dHB1dFxuICogQHJldHVybnMge3N0cmluZ1tdfSBFaXRoZXIgdGhlIGZ1bGx5IHF1YWxpZmllZFxuICogYWN0aXZpdHkgbmFtZSBhcyBhIHNpbmdsZSBsaXN0IGl0ZW0gb3IgYW4gZW1wdHkgbGlzdCBpZiBub3RoaW5nIGNvdWxkIGJlIHBhcnNlZC5cbiAqIEluIEFuZHJvaWQgNiBhbmQgb2xkZXIgdGhlcmUgaXMgbm8gcmVsaWFibGUgd2F5IHRvIGRldGVybWluZVxuICogdGhlIGNhdGVnb3J5IG5hbWUgZm9yIHRoZSBnaXZlbiBhY3Rpdml0eSwgc28gdGhpcyBBUEkganVzdFxuICogcmV0dXJucyBhbGwgYWN0aXZpdHkgbmFtZXMgYmVsb25naW5nIHRvICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTidcbiAqIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgdGhlIGFwcCBtYW5pZmVzdCBjb3VsZCBiZSBwYXJzZWQgbmV4dFxuICogaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IG5hbWVzIGZvciB0aGVzZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VMYXVuY2hhYmxlQWN0aXZpdHlOYW1lcyAoZHVtcHN5cykge1xuICBjb25zdCBtYWluQWN0aXZpdHlOYW1lUmUgPSBuZXcgUmVnRXhwKGBeXFxcXHMqJHtfLmVzY2FwZVJlZ0V4cChNQUlOX0FDVElPTil9OiRgKTtcbiAgY29uc3QgY2F0ZWdvcnlOYW1lUmUgPSAvXlxccypDYXRlZ29yeTpcXHMrXCIoW2EtekEtWjAtOS5fLy1dKylcIiQvO1xuICBjb25zdCBibG9ja3MgPSBbXTtcbiAgbGV0IGJsb2NrU3RhcnRJbmRlbnQ7XG4gIGxldCBibG9jayA9IFtdO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgZHVtcHN5cy5zcGxpdCgnXFxuJykubWFwKF8udHJpbUVuZCkpIHtcbiAgICBjb25zdCBjdXJyZW50SW5kZW50ID0gbGluZS5sZW5ndGggLSBfLnRyaW1TdGFydChsaW5lKS5sZW5ndGg7XG4gICAgaWYgKG1haW5BY3Rpdml0eU5hbWVSZS50ZXN0KGxpbmUpKSB7XG4gICAgICBibG9ja1N0YXJ0SW5kZW50ID0gY3VycmVudEluZGVudDtcbiAgICAgIGlmICghXy5pc0VtcHR5KGJsb2NrKSkge1xuICAgICAgICBibG9ja3MucHVzaChibG9jayk7XG4gICAgICAgIGJsb2NrID0gW107XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKF8uaXNOaWwoYmxvY2tTdGFydEluZGVudCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50SW5kZW50ID4gYmxvY2tTdGFydEluZGVudCkge1xuICAgICAgYmxvY2sucHVzaChsaW5lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYmxvY2spKSB7XG4gICAgICAgIGJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgICAgICAgYmxvY2sgPSBbXTtcbiAgICAgIH1cbiAgICAgIGJsb2NrU3RhcnRJbmRlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxuICBpZiAoIV8uaXNFbXB0eShibG9jaykpIHtcbiAgICBibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGJsb2Nrcykge1xuICAgIGxldCBoYXNDYXRlZ29yeSA9IGZhbHNlO1xuICAgIGxldCBpc0xhdW5jaGVyQ2F0ZWdvcnkgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaXRlbSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBjYXRlZ29yeU5hbWVSZS5leGVjKGxpbmUpO1xuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaGFzQ2F0ZWdvcnkgPSB0cnVlO1xuICAgICAgaXNMYXVuY2hlckNhdGVnb3J5ID0gbWF0Y2hbMV0gPT09IExBVU5DSEVSX0NBVEVHT1JZO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIE9uIG9sZGVyIEFuZHJvaWQgdmVyc2lvbnMgdGhlIGNhdGVnb3J5IG5hbWVcbiAgICAvLyBtaWdodCBub3QgYmUgbGlzdGVkLCBzbyB3ZSBqdXN0IHRyeSB0byBmZXRjaFxuICAgIC8vIGFsbCBtYXRjaGVzIGluc3RlYWRcbiAgICBpZiAoaGFzQ2F0ZWdvcnkgJiYgIWlzTGF1bmNoZXJDYXRlZ29yeSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBhY3Rpdml0eU5hbWVTdHIgb2YgaXRlbS5tYXAoXy50cmltKS5maWx0ZXIoQm9vbGVhbikpIHtcbiAgICAgIGNvbnN0IGZxQWN0aXZpdHlOYW1lID0gYWN0aXZpdHlOYW1lU3RyLnNwbGl0KC9cXHMrLylbMV07XG4gICAgICBpZiAoIW1hdGNoQ29tcG9uZW50TmFtZShmcUFjdGl2aXR5TmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0xhdW5jaGVyQ2F0ZWdvcnkpIHtcbiAgICAgICAgcmV0dXJuIFtmcUFjdGl2aXR5TmFtZV07XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChmcUFjdGl2aXR5TmFtZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIGNvbXBvbmVudCBuYW1lXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzU3RyaW5nIFRoZSBzdHJpbmcgdG8gdmVyaWZ5XG4gKiBAcmV0dXJuIHs/QXJyYXk8TWF0Y2g+fSBUaGUgcmVzdWx0IG9mIFJlZ2V4cC5leGVjIG9wZXJhdGlvblxuICogb3IgX251bGxfIGlmIG5vIG1hdGNoZXMgYXJlIGZvdW5kXG4gKi9cbmZ1bmN0aW9uIG1hdGNoQ29tcG9uZW50TmFtZSAoY2xhc3NTdHJpbmcpIHtcbiAgLy8gc29tZS5wYWNrYWdlL3NvbWUucGFja2FnZS5BY3Rpdml0eVxuICByZXR1cm4gL15bYS16MC05Li9fXSskL2kuZXhlYyhjbGFzc1N0cmluZyk7XG59XG5cbmV4cG9ydCB7XG4gIGdldEFuZHJvaWRQbGF0Zm9ybUFuZFBhdGgsIHVuemlwRmlsZSxcbiAgZ2V0SU1FTGlzdEZyb21PdXRwdXQsIGdldEphdmFGb3JPcywgaXNTaG93aW5nTG9ja3NjcmVlbiwgaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkLFxuICBnZXRTdXJmYWNlT3JpZW50YXRpb24sIGlzU2NyZWVuT25GdWxseSwgYnVpbGRTdGFydENtZCwgZ2V0SmF2YUhvbWUsXG4gIGdldFNka1Rvb2xzVmVyc2lvbiwgZ2V0QXBrc2lnbmVyRm9yT3MsIGdldEJ1aWxkVG9vbHNEaXJzLFxuICBnZXRBcGthbmFseXplckZvck9zLCBnZXRPcGVuU3NsRm9yT3MsIGV4dHJhY3RNYXRjaGluZ1Blcm1pc3Npb25zLCBBUEtTX0VYVEVOU0lPTixcbiAgQVBLX0lOU1RBTExfVElNRU9VVCwgQVBLU19JTlNUQUxMX1RJTUVPVVQsIGJ1aWxkSW5zdGFsbEFyZ3MsIEFQS19FWFRFTlNJT04sXG4gIERFRkFVTFRfQURCX0VYRUNfVElNRU9VVCwgcGFyc2VNYW5pZmVzdCwgcGFyc2VBYXB0U3RyaW5ncywgcGFyc2VBYXB0MlN0cmluZ3MsXG4gIGZvcm1hdENvbmZpZ01hcmtlciwgcGFyc2VKc29uRGF0YSwgdW5zaWduQXBrLCB0b0F2ZExvY2FsZUFyZ3MsIHJlcXVpcmVTZGtSb290LFxuICBnZXRTZGtSb290RnJvbUVudiwgZ2V0QW5kcm9pZFByZWZzUm9vdCwgZGlyRXhpc3RzLCBlc2NhcGVTaGVsbEFyZyxcbiAgcGFyc2VMYXVuY2hhYmxlQWN0aXZpdHlOYW1lcywgbWF0Y2hDb21wb25lbnROYW1l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
|
package/lib/helpers.js
CHANGED
|
@@ -22,18 +22,18 @@ const LAUNCHER_CATEGORY = 'android.intent.category.LAUNCHER';
|
|
|
22
22
|
* @throws {Error} If the current module root folder cannot be determined
|
|
23
23
|
*/
|
|
24
24
|
const getModuleRoot = _.memoize(function getModuleRoot () {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
let currentDir = path.dirname(path.resolve(__filename));
|
|
26
|
+
let isAtFsRoot = false;
|
|
27
|
+
while (!isAtFsRoot) {
|
|
28
28
|
const manifestPath = path.join(currentDir, 'package.json');
|
|
29
29
|
try {
|
|
30
|
-
if (
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
if (JSON.parse(_fs.readFileSync(manifestPath, 'utf8')).name === 'appium-adb') {
|
|
30
|
+
if (_fs.existsSync(manifestPath) &&
|
|
31
|
+
JSON.parse(_fs.readFileSync(manifestPath, 'utf8')).name === 'appium-adb') {
|
|
34
32
|
return currentDir;
|
|
35
33
|
}
|
|
36
34
|
} catch (ign) {}
|
|
35
|
+
currentDir = path.dirname(currentDir);
|
|
36
|
+
isAtFsRoot = currentDir.length <= path.dirname(currentDir).length;
|
|
37
37
|
}
|
|
38
38
|
throw new Error('Cannot find the root folder of the appium-adb Node.js module');
|
|
39
39
|
});
|