@kontur.candy/tools 2.145.0 → 2.147.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js +27 -1
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +9 -1
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js +14 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +6 -0
- package/distr/Common/IterableUtils.js +1 -1
- package/distr/Common/ModelPath/BuildIterationSequence.js +3 -2
- package/distr/Common/ModelPath/ModelPath.js +7 -1
- package/distr/Common/StringArrayKey.js +4 -12
- package/distr/Common/hashUtils.js +17 -0
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +16 -4
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +63 -33
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +81 -51
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,11 +10,12 @@ var _ModelPath = require("./ModelPath");
|
|
|
10
10
|
function buildIterationSequence(modelPath) {
|
|
11
11
|
const result = [];
|
|
12
12
|
const tokens = modelPath.getPathPartsAsArray();
|
|
13
|
+
const createPathFunc = modelPath.isAbsolute() ? _ModelPath.createAbsoluteFromTokens : _ModelPath.createRelativeFromTokens;
|
|
13
14
|
|
|
14
15
|
for (let i = 0; i < tokens.length; i++) {
|
|
15
16
|
if (tokens[i] === _ModelPath.PathTokens.each) {
|
|
16
17
|
result.push({
|
|
17
|
-
iterable: (
|
|
18
|
+
iterable: createPathFunc(tokens.slice(0, i)),
|
|
18
19
|
suffix: (0, _ModelPath.createRelativeFromTokens)(tokens.slice(i + 1))
|
|
19
20
|
});
|
|
20
21
|
}
|
|
@@ -22,4 +23,4 @@ function buildIterationSequence(modelPath) {
|
|
|
22
23
|
|
|
23
24
|
return result;
|
|
24
25
|
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvQnVpbGRJdGVyYXRpb25TZXF1ZW5jZS50cyJdLCJuYW1lcyI6WyJidWlsZEl0ZXJhdGlvblNlcXVlbmNlIiwibW9kZWxQYXRoIiwicmVzdWx0IiwidG9rZW5zIiwiZ2V0UGF0aFBhcnRzQXNBcnJheSIsImNyZWF0ZVBhdGhGdW5jIiwiaXNBYnNvbHV0ZSIsImNyZWF0ZUFic29sdXRlRnJvbVRva2VucyIsImNyZWF0ZVJlbGF0aXZlRnJvbVRva2VucyIsImkiLCJsZW5ndGgiLCJQYXRoVG9rZW5zIiwiZWFjaCIsInB1c2giLCJpdGVyYWJsZSIsInNsaWNlIiwic3VmZml4Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBYU8sU0FBU0Esc0JBQVQsQ0FDSEMsU0FERyxFQUU4QjtBQUNqQyxRQUFNQyxNQUF5QyxHQUFHLEVBQWxEO0FBQ0EsUUFBTUMsTUFBTSxHQUFHRixTQUFTLENBQUNHLG1CQUFWLEVBQWY7QUFDQSxRQUFNQyxjQUFjLEdBQUdKLFNBQVMsQ0FBQ0ssVUFBVixLQUF5QkMsbUNBQXpCLEdBQW9EQyxtQ0FBM0U7O0FBQ0EsT0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHTixNQUFNLENBQUNPLE1BQTNCLEVBQW1DRCxDQUFDLEVBQXBDLEVBQXdDO0FBQ3BDLFFBQUlOLE1BQU0sQ0FBQ00sQ0FBRCxDQUFOLEtBQWNFLHNCQUFXQyxJQUE3QixFQUFtQztBQUMvQlYsTUFBQUEsTUFBTSxDQUFDVyxJQUFQLENBQVk7QUFDUkMsUUFBQUEsUUFBUSxFQUFFVCxjQUFjLENBQUNGLE1BQU0sQ0FBQ1ksS0FBUCxDQUFhLENBQWIsRUFBZ0JOLENBQWhCLENBQUQsQ0FEaEI7QUFFUk8sUUFBQUEsTUFBTSxFQUFFLHlDQUF5QmIsTUFBTSxDQUFDWSxLQUFQLENBQWFOLENBQUMsR0FBRyxDQUFqQixDQUF6QjtBQUZBLE9BQVo7QUFJSDtBQUNKOztBQUNELFNBQU9QLE1BQVA7QUFDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgY3JlYXRlQWJzb2x1dGVGcm9tVG9rZW5zLFxuICAgIGNyZWF0ZVJlbGF0aXZlRnJvbVRva2VucyxcbiAgICBNb2RlbFBhdGgsXG4gICAgUGF0aFRva2VucyxcbiAgICBSZWxhdGl2ZU1vZGVsUGF0aCxcbn0gZnJvbSBcIi4vTW9kZWxQYXRoXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXRlcmF0aW9uRW50cnk8VE1vZGVsUGF0aCBleHRlbmRzIE1vZGVsUGF0aD4ge1xuICAgIGl0ZXJhYmxlOiBUTW9kZWxQYXRoO1xuICAgIHN1ZmZpeDogUmVsYXRpdmVNb2RlbFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEl0ZXJhdGlvblNlcXVlbmNlPFRNb2RlbFBhdGggZXh0ZW5kcyBNb2RlbFBhdGg+KFxuICAgIG1vZGVsUGF0aDogVE1vZGVsUGF0aFxuKTogQXJyYXk8SXRlcmF0aW9uRW50cnk8VE1vZGVsUGF0aD4+IHtcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PEl0ZXJhdGlvbkVudHJ5PFRNb2RlbFBhdGg+PiA9IFtdO1xuICAgIGNvbnN0IHRva2VucyA9IG1vZGVsUGF0aC5nZXRQYXRoUGFydHNBc0FycmF5KCk7XG4gICAgY29uc3QgY3JlYXRlUGF0aEZ1bmMgPSBtb2RlbFBhdGguaXNBYnNvbHV0ZSgpID8gY3JlYXRlQWJzb2x1dGVGcm9tVG9rZW5zIDogY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0b2tlbnNbaV0gPT09IFBhdGhUb2tlbnMuZWFjaCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIGl0ZXJhYmxlOiBjcmVhdGVQYXRoRnVuYyh0b2tlbnMuc2xpY2UoMCwgaSkpIGFzIFRNb2RlbFBhdGgsXG4gICAgICAgICAgICAgICAgc3VmZml4OiBjcmVhdGVSZWxhdGl2ZUZyb21Ub2tlbnModG9rZW5zLnNsaWNlKGkgKyAxKSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIl19
|
|
@@ -23,6 +23,8 @@ var _IterableUtils = require("../IterableUtils");
|
|
|
23
23
|
|
|
24
24
|
var _TypingUtils = require("../TypingUtils");
|
|
25
25
|
|
|
26
|
+
var _hashUtils = require("../hashUtils");
|
|
27
|
+
|
|
26
28
|
var _EachCurrentCollision = require("./EachCurrentCollision");
|
|
27
29
|
|
|
28
30
|
var _ModelPathBuilder = require("./ModelPathBuilder");
|
|
@@ -186,6 +188,10 @@ class AbsoluteModelFieldPath {
|
|
|
186
188
|
this.field = fieldName;
|
|
187
189
|
}
|
|
188
190
|
|
|
191
|
+
getHash() {
|
|
192
|
+
return this.path.getHash() + (0, _hashUtils.getSimpleHashByString)(this.field);
|
|
193
|
+
}
|
|
194
|
+
|
|
189
195
|
isEquals(modelPath, eachCurrentCollision = _EachCurrentCollision.EachCurrentCollision.AreSame) {
|
|
190
196
|
return this.path.isEquals(modelPath.path, eachCurrentCollision) && this.field === modelPath.field;
|
|
191
197
|
}
|
|
@@ -600,4 +606,4 @@ class ModelPathImpl {
|
|
|
600
606
|
}
|
|
601
607
|
|
|
602
608
|
exports.ModelPathImpl = ModelPathImpl;
|
|
603
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvTW9kZWxQYXRoLnRzIl0sIm5hbWVzIjpbIkVhY2hTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJDdXJyZW50U3ltYm9sIiwiUGF0aFRva2VucyIsImlzTXVsdGlUb2tlbiIsInBhcnQiLCJlYWNoIiwiY3VycmVudCIsImlzU2ltcGxlVG9rZW4iLCJpc0luc3RhbmNlVG9rZW4iLCJ0ZXN0IiwiaXNNb2RlbFBhdGgiLCJwYXRoIiwiTW9kZWxQYXRoSW1wbCIsImNvbnZlcnRUb0xlZ2FjeVBhdGgiLCJ0b0xlZ2FjeVBhdGgiLCJjb252ZXJ0VG9BYnNvbHV0TW9kZWxQYXRoIiwiY3JlYXRlQWJzb2x1dGVGcm9tTWFzayIsImVtcHR5TW9kZWxQYXRoIiwiZW1wdHlBYnNvbHV0ZU1vZGVsUGF0aCIsImNyZWF0ZU1vZGVsUGF0aCIsImFic29sdXRlIiwicGFydFBhcnRTdHJpbmdzIiwic3BsaXQiLCJlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5Iiwic3RhcnRzV2l0aCIsInNsaWNlIiwiY3JlYXRlRnJvbU1hc2siLCJtdWx0aXBsaWNpdHlTeW1ib2wiLCJtYXAiLCJ4IiwicGFydHMiLCJzb21lIiwiRXJyb3IiLCJjcmVhdGVBYnNvbHV0ZSIsImNyZWF0ZVJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgiLCJjcmVhdGVBYnNvbHV0ZUZyb21Ub2tlbnMiLCJ0b2tlbnMiLCJjcmVhdGVBYnNvbHV0ZVJlc29sdmVkRnJvbVRva2VucyIsImNyZWF0ZVJlbGF0aXZlRnJvbVRva2VucyIsImpvaW5Nb2RlbFBhdGhzIiwicmVzdWx0UGFydHMiLCJqb2luSXRlbSIsInB1c2giLCJpc0Fic29sdXRlIiwiZ2V0UGF0aFBhcnRzQXNBcnJheSIsIkFycmF5IiwiaXNBcnJheSIsIkFic29sdXRlTW9kZWxGaWVsZFBhdGgiLCJjb25zdHJ1Y3RvciIsImZpZWxkTmFtZSIsImZpZWxkIiwiaXNFcXVhbHMiLCJtb2RlbFBhdGgiLCJlYWNoQ3VycmVudENvbGxpc2lvbiIsIkVhY2hDdXJyZW50Q29sbGlzaW9uIiwiQXJlU2FtZSIsImNyZWF0ZUZyb21TdHJpbmciLCJwYXRoV2l0aEZpZWxkTmFtZSIsImVuZHNXaXRoIiwicmVwbGFjZSIsImlzQWxsVG9rZW5zUmVzb2x2ZWQiLCJldmVyeSIsInBhdGhQYXJ0cyIsImxlZ2FjeVBhdGgiLCJmaWx0ZXIiLCJyZXNvbHZlZCIsImdldFBhdGhQYXJ0cyIsImdldFNpbXBsZVRva2Vuc1N0cmljdCIsInRva2VuIiwiZ2V0U2ltcGxlVG9rZW5zQXNBcnJheVN0cmljdCIsImpvaW5XaXRoIiwiaXNSZXNvbHZlZCIsInJlc29sdmVBbGwiLCJpbnN0YW5jZSIsImlzQ29udGFpbkl0ZXJhdGlvbiIsImlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24iLCJnZXRMYXN0TGlzdFBhdGgiLCJsYXN0SXRlcmF0aW9uSW5kZXgiLCJsYXN0SW5kZXhPZiIsImlzRW5kc1dpdGhJdGVyYXRpb24iLCJsYXN0SXRlbSIsIkl0ZXJVdGlscyIsImxhc3QiLCJ0b1N0cmluZyIsImxlbmd0aCIsInBhdGhQYXJ0VG9TdHJpbmciLCJqb2luIiwiSXRlcmF0b3IiLCJmcm9tIiwiemlwIiwidDEiLCJ0MiIsImdldEhhc2giLCJoYXNoIiwiY3VycmVudFN0ciIsIkFyZURpZmZlcmVudCIsInN0cmluZ0luZGV4IiwiY2hhckNvZGVBdCIsImlzSW5jbHVkZXMiLCJ0YXJnZXRUb2tlbnMiLCJpIiwibGVmdFBhcnQiLCJyaWdodFBhcnQiLCJpc0Zpbml0ZSIsIk51bWJlciIsImdldEl0ZXJhdGlvblJhbmsiLCJpc0VtcHR5IiwibWF0Y2hGb3IiLCJQYXRoTWF0Y2hlciIsIm1hdGNoIiwic3BsaXRCeU11bHRpcGxpY2l0eSIsImxhc3RTaW1wbGVQYXJ0cyIsIk1vZGVsUGF0aEJ1aWxkZXIiLCJhcHBlbmQiLCJlbXB0eSIsInRvUmVzb2x2ZWRQYXRoIiwibm9ybWFsaXplIiwicmVzdWx0VG9rZW5zIiwicGF0aFBhcnQiLCJwb3AiLCJ0b0N1cnJlbnRJdGVyYXRpb24iLCJ0b0VhY2hJdGVyYXRpb24iLCJ0b0Fic29sdXRlIiwiZ2V0QWxsUGFyZW50UGF0aHMiLCJyZXN1bHQiLCJza2lwTGFzdCIsInRvUGF0aCIsInRyaW1MYXN0U3RhcklmTGFzdFRva2VuIiwidW5kZWZpbmVkIiwiZ2V0UGFyZW50UGF0aCIsImFwcGx5SW5zdGFuY2VzRGlydHkiLCJpbnN0YW5jZXMiLCJpbnN0YW5jZUNvdW50ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLFVBQVUsR0FBR0MsTUFBTSxDQUFDQyxHQUFQLENBQVcsVUFBWCxDQUFuQjtBQUNBLE1BQU1DLGFBQWEsR0FBR0YsTUFBTSxDQUFDQyxHQUFQLENBQVcsYUFBWCxDQUF0Qjs7QUFFTyxNQUFNRSxVQUFOLENBQWlCO0FBSU0sU0FBWkMsWUFBWSxDQUFDQyxJQUFELEVBQWdGO0FBQ3RHLFdBQU9BLElBQUksS0FBS0YsVUFBVSxDQUFDRyxJQUFwQixJQUE0QkQsSUFBSSxLQUFLRixVQUFVLENBQUNJLE9BQXZEO0FBQ0g7O0FBRTBCLFNBQWJDLGFBQWEsQ0FBQ0gsSUFBRCxFQUE4QztBQUNyRSxXQUFPLE9BQU9BLElBQVAsS0FBZ0IsUUFBdkI7QUFDSDs7QUFFNEIsU0FBZkksZUFBZSxDQUFDSixJQUFELEVBQThDO0FBQ3ZFLFdBQU8sT0FBT0EsSUFBUCxLQUFnQixRQUFoQixJQUE0QixTQUFTSyxJQUFULENBQWNMLElBQWQsQ0FBbkM7QUFDSDs7QUFkbUI7OztBQUFYRixVLENBQ0tHLEksR0FBMEJQLFU7QUFEL0JJLFUsQ0FFS0ksTyxHQUFnQ0wsYTs7QUFtQjNDLFNBQVNTLFdBQVQsQ0FBcUJDLElBQXJCLEVBQWlGO0FBQ3BGLFNBQU8sT0FBT0EsSUFBUCxLQUFnQixRQUFoQixJQUE0QkEsSUFBSSxZQUFZQyxhQUFuRDtBQUNIOztBQUVNLFNBQVNDLG1CQUFULENBQTZCRixJQUE3QixF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R0FBRyxJQUFJWixrQ0FBSixDQUFxQixJQUFyQixDQUFmOztBQUNBLFNBQUssTUFBTTVDLEtBQVgsSUFBb0IsS0FBS0YsWUFBTCxFQUFwQixFQUF5QztBQUNyQyxVQUFJaEUsVUFBVSxDQUFDQyxZQUFYLENBQXdCaUUsS0FBeEIsS0FBa0NnRSxlQUFlLEdBQUdELFNBQVMsQ0FBQy9DLE1BQWxFLEVBQTBFO0FBQUE7O0FBQ3RFd0MsUUFBQUEsTUFBTSxDQUFDWCxNQUFQLDBCQUFja0IsU0FBUyxDQUFDQyxlQUFELENBQXZCLHlFQUE0QywwQkFBNUM7QUFDQUEsUUFBQUEsZUFBZTtBQUNsQixPQUhELE1BR087QUFDSFIsUUFBQUEsTUFBTSxDQUFDWCxNQUFQLENBQWM3QyxLQUFkO0FBQ0g7QUFDSixLQWJzRixDQWN2RjtBQUNBOzs7QUFDQSxXQUFPd0QsTUFBTSxDQUFDRSxNQUFQLEVBQVA7QUFDSDs7QUFFT3pDLEVBQUFBLGdCQUFnQixDQUFDaUMsUUFBRCxFQUE4QjtBQUNsRCxRQUFJLE9BQU9BLFFBQVAsS0FBb0IsUUFBeEIsRUFBa0M7QUFDOUIsYUFBT0EsUUFBUDtBQUNIOztBQUNELFFBQUlBLFFBQVEsS0FBS3BILFVBQVUsQ0FBQ0csSUFBNUIsRUFBa0M7QUFDOUIsYUFBTyxHQUFQO0FBQ0g7O0FBQ0QsUUFBSWlILFFBQVEsS0FBS3BILFVBQVUsQ0FBQ0ksT0FBNUIsRUFBcUM7QUFDakMsYUFBTyxHQUFQO0FBQ0g7O0FBQ0QsVUFBTSxJQUFJMEIsS0FBSixDQUFXLGdDQUErQixxQ0FBbUJzRixRQUFuQixDQUE2QixFQUF2RSxDQUFOO0FBQ0g7O0FBblZMIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmluZGluZ1BhdGgsIFZpZXdNb2RlbEZpZWxkTmFtZSB9IGZyb20gXCIuLi8uLi9FbmdpbmUvc3JjL0VuZ2luZS9Db3JlL0NvcmVUeXBlc1wiO1xuaW1wb3J0IHsgY291bnQsIEl0ZXJVdGlscywgcmV2ZXJzZUFycmF5IH0gZnJvbSBcIi4uL0l0ZXJhYmxlVXRpbHNcIjtcbmltcG9ydCB7IGVuc3VyZUFuZEdldFN0cmluZywgcmVqZWN0IH0gZnJvbSBcIi4uL1R5cGluZ1V0aWxzXCI7XG5cbmltcG9ydCB7IEVhY2hDdXJyZW50Q29sbGlzaW9uIH0gZnJvbSBcIi4vRWFjaEN1cnJlbnRDb2xsaXNpb25cIjtcbmltcG9ydCB7IE1vZGVsUGF0aEJ1aWxkZXIgfSBmcm9tIFwiLi9Nb2RlbFBhdGhCdWlsZGVyXCI7XG5pbXBvcnQgeyBQYXRoTWF0Y2hlciwgUGF0aE1hdGNoaW5nIH0gZnJvbSBcIi4vUGF0aE1hdGNoZXJcIjtcbmltcG9ydCB7IElFcXVhdGFibGUgfSBmcm9tIFwiLi9JRXF1YXRhYmxlXCI7XG5cbmNvbnN0IEVhY2hTeW1ib2wgPSBTeW1ib2wuZm9yKFwiX19FQUNIX19cIik7XG5jb25zdCBDdXJyZW50U3ltYm9sID0gU3ltYm9sLmZvcihcIl9fQ1VSUkVOVF9fXCIpO1xuXG5leHBvcnQgY2xhc3MgUGF0aFRva2VucyB7XG4gICAgcHVibGljIHN0YXRpYyBlYWNoOiB0eXBlb2YgRWFjaFN5bWJvbCA9IEVhY2hTeW1ib2w7XG4gICAgcHVibGljIHN0YXRpYyBjdXJyZW50OiB0eXBlb2YgQ3VycmVudFN5bWJvbCA9IEN1cnJlbnRTeW1ib2w7XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzTXVsdGlUb2tlbihwYXJ0OiB1bmRlZmluZWQgfCBQYXRoVG9rZW4pOiBwYXJ0IGlzIHR5cGVvZiBFYWNoU3ltYm9sIHwgdHlwZW9mIEN1cnJlbnRTeW1ib2wge1xuICAgICAgICByZXR1cm4gcGFydCA9PT0gUGF0aFRva2Vucy5lYWNoIHx8IHBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzU2ltcGxlVG9rZW4ocGFydDogdW5kZWZpbmVkIHwgUGF0aFRva2VuKTogcGFydCBpcyBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCI7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc0luc3RhbmNlVG9rZW4ocGFydDogdW5kZWZpbmVkIHwgUGF0aFRva2VuKTogcGFydCBpcyBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIgJiYgL15cXGQrJC9pLnRlc3QocGFydCk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBTaW1wbGVQYXRoVG9rZW4gPSBzdHJpbmc7XG5cbmV4cG9ydCB0eXBlIFBhdGhUb2tlbiA9IFNpbXBsZVBhdGhUb2tlbiB8IHR5cGVvZiBFYWNoU3ltYm9sIHwgdHlwZW9mIEN1cnJlbnRTeW1ib2w7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01vZGVsUGF0aChwYXRoOiBCaW5kaW5nUGF0aCB8IE1vZGVsUGF0aCB8IHVua25vd24pOiBwYXRoIGlzIE1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIHR5cGVvZiBwYXRoICE9PSBcInN0cmluZ1wiICYmIHBhdGggaW5zdGFuY2VvZiBNb2RlbFBhdGhJbXBsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvTGVnYWN5UGF0aChwYXRoOiBCaW5kaW5nUGF0aCB8IE1vZGVsUGF0aCk6IEJpbmRpbmdQYXRoIHtcbiAgICByZXR1cm4gaXNNb2RlbFBhdGgocGF0aCkgPyBwYXRoLnRvTGVnYWN5UGF0aCgpIDogcGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0Fic29sdXRNb2RlbFBhdGg8UiBleHRlbmRzIGJvb2xlYW4sIEEgZXh0ZW5kcyBib29sZWFuPihcbiAgICBwYXRoOiBCaW5kaW5nUGF0aCB8IElNb2RlbFBhdGg8UiwgQT5cbik6IElNb2RlbFBhdGg8UiwgdHJ1ZT47XG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvQWJzb2x1dE1vZGVsUGF0aChwYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlTW9kZWxQYXRoKTogQWJzb2x1dGVNb2RlbFBhdGgge1xuICAgIHJldHVybiBpc01vZGVsUGF0aChwYXRoKSA/IHBhdGggOiBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGgsIFBhdGhUb2tlbnMuZWFjaCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eU1vZGVsUGF0aCgpOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgZmFsc2U+KFtdLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eUFic29sdXRlTW9kZWxQYXRoKCk6IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihbXSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFBhdGgocGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogdHJ1ZSk6IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9kZWxQYXRoKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IGZhbHNlKTogUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFBhdGgocGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogXCJhdXRvXCIpOiBSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFBhdGgocGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogYm9vbGVhbiB8IFwiYXV0b1wiKTogUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIGNvbnN0IHBhcnRQYXJ0U3RyaW5ncyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICAgIGVuc3VyZVBsYWluUGF0aFBhcnRzRG9lc05vdENvbnRhaW5NdWx0aXBsaWNpdHkocGFydFBhcnRTdHJpbmdzKTtcbiAgICBpZiAoYWJzb2x1dGUgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBmYWxzZT4ocGFydFBhcnRTdHJpbmdzLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFic29sdXRlICYmIHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KHBhcnRQYXJ0U3RyaW5ncy5zbGljZSgxKSwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBib29sZWFuPihwYXJ0UGFydFN0cmluZ3MsIGFic29sdXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyb21NYXNrKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IHRydWUsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogQWJzb2x1dGVNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogZmFsc2UsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogUmVzb2x2ZWRNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogXCJhdXRvXCIsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyb21NYXNrKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IGJvb2xlYW4gfCBcImF1dG9cIiwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBNb2RlbFBhdGgge1xuICAgIGNvbnN0IHBhcnRQYXJ0U3RyaW5ncyA9IHBhdGguc3BsaXQoXCIvXCIpLm1hcCh4ID0+ICh4ID09PSBcIipcIiA/IG11bHRpcGxpY2l0eVN5bWJvbCA6IHgpKTtcbiAgICBpZiAoYWJzb2x1dGUgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3MsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWJzb2x1dGUgJiYgcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncywgYWJzb2x1dGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogQWJzb2x1dGVNb2RlbFBhdGgge1xuICAgIGNvbnN0IHBhcnRQYXJ0U3RyaW5ncyA9IHBhdGguc3BsaXQoXCIvXCIpLm1hcCh4ID0+ICh4ID09PSBcIipcIiA/IG11bHRpcGxpY2l0eVN5bWJvbCA6IHgpKTtcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncywgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZVBsYWluUGF0aFBhcnRzRG9lc05vdENvbnRhaW5NdWx0aXBsaWNpdHkocGFydHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKHBhcnRzLnNvbWUoeCA9PiB4ID09PSBcIipcIikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IG5vdCBjb250YWluICogc3ltYm9sXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFic29sdXRlKHBhdGg6IHN0cmluZyk6IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIGNvbnN0IHBhcnRQYXJ0U3RyaW5ncyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICAgIGVuc3VyZVBsYWluUGF0aFBhcnRzRG9lc05vdENvbnRhaW5NdWx0aXBsaWNpdHkocGFydFBhcnRTdHJpbmdzKTtcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KHBhcnRQYXJ0U3RyaW5ncywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoKHBhdGg6IHN0cmluZyk6IFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIGNvbnN0IHBhcnRQYXJ0U3RyaW5ncyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICAgIGVuc3VyZVBsYWluUGF0aFBhcnRzRG9lc05vdENvbnRhaW5NdWx0aXBsaWNpdHkocGFydFBhcnRTdHJpbmdzKTtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgZmFsc2U+KHBhcnRQYXJ0U3RyaW5ncywgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJzb2x1dGVGcm9tVG9rZW5zKHRva2VuczogUGF0aFRva2VuW10pOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPGZhbHNlLCB0cnVlPih0b2tlbnMsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJzb2x1dGVSZXNvbHZlZEZyb21Ub2tlbnModG9rZW5zOiBzdHJpbmdbXSk6IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIGVuc3VyZVBsYWluUGF0aFBhcnRzRG9lc05vdENvbnRhaW5NdWx0aXBsaWNpdHkodG9rZW5zKTtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4odG9rZW5zLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlRnJvbVRva2Vucyh0b2tlbnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWxhdGl2ZUZyb21Ub2tlbnModG9rZW5zOiByZWFkb25seSBQYXRoVG9rZW5bXSk6IFJlbGF0aXZlTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlRnJvbVRva2Vucyh0b2tlbnM6IHJlYWRvbmx5IFBhdGhUb2tlbltdKTogUmVsYXRpdmVNb2RlbFBhdGgge1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxmYWxzZSwgZmFsc2U+KHRva2VucywgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gam9pbk1vZGVsUGF0aHMoLi4ucGFydHM6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbiB8IFBhdGhUb2tlbltdPik6IE1vZGVsUGF0aCB7XG4gICAgbGV0IGFic29sdXRlID0gZmFsc2U7XG4gICAgbGV0IHJlc3VsdFBhcnRzOiBQYXRoVG9rZW5bXSA9IFtdO1xuICAgIGZvciAoY29uc3Qgam9pbkl0ZW0gb2YgcGFydHMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBqb2luSXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVzdWx0UGFydHMucHVzaChqb2luSXRlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb2RlbFBhdGgoam9pbkl0ZW0pKSB7XG4gICAgICAgICAgICBpZiAoam9pbkl0ZW0uaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICAgICAgYWJzb2x1dGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlc3VsdFBhcnRzID0gWy4uLmpvaW5JdGVtLmdldFBhdGhQYXJ0c0FzQXJyYXkoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdFBhcnRzLnB1c2goLi4uam9pbkl0ZW0uZ2V0UGF0aFBhcnRzQXNBcnJheSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGpvaW5JdGVtKSkge1xuICAgICAgICAgICAgcmVzdWx0UGFydHMucHVzaCguLi5qb2luSXRlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoUGF0aFRva2Vucy5pc011bHRpVG9rZW4oam9pbkl0ZW0pKSB7XG4gICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKGpvaW5JdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChyZXN1bHRQYXJ0cywgYWJzb2x1dGUpO1xufVxuXG5leHBvcnQgY2xhc3MgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgcHVibGljIHJlYWRvbmx5IHBhdGg6IEFic29sdXRlTW9kZWxQYXRoO1xuICAgIHB1YmxpYyByZWFkb25seSBmaWVsZDogVmlld01vZGVsRmllbGROYW1lIHwgXCIkZXJyb3JDb3VudFwiIHwgXCIkd2FybmluZ0NvdW50XCI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGF0aDogQWJzb2x1dGVNb2RlbFBhdGgsIGZpZWxkTmFtZTogVmlld01vZGVsRmllbGROYW1lIHwgXCIkZXJyb3JDb3VudFwiIHwgXCIkd2FybmluZ0NvdW50XCIpIHtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5maWVsZCA9IGZpZWxkTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFcXVhbHMoXG4gICAgICAgIG1vZGVsUGF0aDogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCxcbiAgICAgICAgZWFjaEN1cnJlbnRDb2xsaXNpb246IEVhY2hDdXJyZW50Q29sbGlzaW9uID0gRWFjaEN1cnJlbnRDb2xsaXNpb24uQXJlU2FtZVxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoLmlzRXF1YWxzKG1vZGVsUGF0aC5wYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbikgJiYgdGhpcy5maWVsZCA9PT0gbW9kZWxQYXRoLmZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRnJvbVN0cmluZyhwYXRoV2l0aEZpZWxkTmFtZTogc3RyaW5nKTogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kZXJyb3JDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJGVycm9yQ291bnRcIiwgXCJcIikpLFxuICAgICAgICAgICAgICAgIFwiJGVycm9yQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuJHdhcm5pbmdDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJHdhcm5pbmdDb3VudFwiLCBcIlwiKSksXG4gICAgICAgICAgICAgICAgXCIkd2FybmluZ0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lKSwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lOiBzdHJpbmcsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kZXJyb3JDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUucmVwbGFjZShcIi4kZXJyb3JDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIiRlcnJvckNvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhXaXRoRmllbGROYW1lLmVuZHNXaXRoKFwiLiR3YXJuaW5nQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJHdhcm5pbmdDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIiR3YXJuaW5nQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuZXJyb3JzQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuZXJyb3JzQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCJlcnJvcnNDb3VudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi53YXJuaW5nc0NvdW50XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlTW9kZWxGaWVsZFBhdGgoXG4gICAgICAgICAgICAgICAgY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoV2l0aEZpZWxkTmFtZS5yZXBsYWNlKFwiLndhcm5pbmdzQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCJ3YXJuaW5nc0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUsIG11bHRpcGxpY2l0eVN5bWJvbCksIFwidmFsdWVcIik7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb2RlbFBhdGg8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBleHRlbmRzIElFcXVhdGFibGU8SU1vZGVsUGF0aDxib29sZWFuLCBib29sZWFuPj4ge1xuICAgIHJlYWRvbmx5IHJlc29sdmVkOiBUUmVzb2x2ZWQ7XG4gICAgcmVhZG9ubHkgYWJzb2x1dGU6IFRBYnNvbHV0ZTtcblxuICAgIGlzRXF1YWxzKG1vZGVsUGF0aDogTW9kZWxQYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbj86IEVhY2hDdXJyZW50Q29sbGlzaW9uKTogYm9vbGVhbjtcbiAgICBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uPzogRWFjaEN1cnJlbnRDb2xsaXNpb24pOiBudW1iZXI7XG5cbiAgICBpc1Jlc29sdmVkKCk6IHRoaXMgaXMgSU1vZGVsUGF0aDx0cnVlLCBUQWJzb2x1dGU+O1xuICAgIGlzQWJzb2x1dGUoKTogdGhpcyBpcyBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG4gICAgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG5cbiAgICBqb2luV2l0aCguLi5wYXRoOiBzdHJpbmdbXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IFBhdGhUb2tlbltdKTogSU1vZGVsUGF0aDxib29sZWFuLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfCBzdHJpbmc+KTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIHRydWU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbj4pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG5cbiAgICBnZXRQYXRoUGFydHMoKTogSXRlcmFibGU8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRTaW1wbGVUb2tlbnNTdHJpY3QoKTogSXRlcmFibGU8U2ltcGxlUGF0aFRva2VuPjtcbiAgICBnZXRTaW1wbGVUb2tlbnNBc0FycmF5U3RyaWN0KCk6IHJlYWRvbmx5IFNpbXBsZVBhdGhUb2tlbltdO1xuXG4gICAgcmVzb2x2ZUFsbChpbnN0YW5jZTogc3RyaW5nKTogTW9kZWxQYXRoO1xuICAgIGlzQ29udGFpbkl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbjtcbiAgICBnZXRMYXN0TGlzdFBhdGgoKTogUGF0aFRva2VuW107XG4gICAgaXNFbmRzV2l0aEl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzSW5jbHVkZXMobW9kZWxQYXRoOiBNb2RlbFBhdGgpOiBib29sZWFuO1xuICAgIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyO1xuICAgIGlzRW1wdHkoKTogYm9vbGVhbjtcbiAgICBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZztcbiAgICBzcGxpdEJ5TXVsdGlwbGljaXR5KCk6IEl0ZXJhYmxlPFJlc29sdmVkTW9kZWxQYXRoIHwgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbD47XG4gICAgbm9ybWFsaXplKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT47XG4gICAgZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPjtcbiAgICB0cmltTGFzdFN0YXJJZkxhc3RUb2tlbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBnZXRQYXJlbnRQYXRoKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICAgIHRvTGVnYWN5UGF0aCgpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBSZXNvbHZlZE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8dHJ1ZSwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZU1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgdHJ1ZT47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoID0gSU1vZGVsUGF0aDx0cnVlLCB0cnVlPjtcblxuZXhwb3J0IHR5cGUgUmVsYXRpdmVNb2RlbFBhdGggPSBJTW9kZWxQYXRoPGJvb2xlYW4sIGZhbHNlPjtcbmV4cG9ydCB0eXBlIFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGggPSBJTW9kZWxQYXRoPHRydWUsIGZhbHNlPjtcblxudHlwZSBQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZCBleHRlbmRzIGJvb2xlYW4+ID0gVFJlc29sdmVkIGV4dGVuZHMgdHJ1ZSA/IHN0cmluZyA6IFBhdGhUb2tlbjtcblxudHlwZSBQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IEFycmF5PFBhdGhUb2tlblNwZWM8VFJlc29sdmVkPj47XG5cbnR5cGUgUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcblxuZnVuY3Rpb24gaXNBbGxUb2tlbnNSZXNvbHZlZDxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPih0b2tlbnM6IFJlYWRvbmx5UGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPik6IFRSZXNvbHZlZCB7XG4gICAgLy8g0K8g0YfRgtC+LdGC0L4g0L3QtdC80L7Qs9GDINGB0L7QvtCx0YDQsNC30LjRgtGMINC60LDQuiDRgtGD0YIg0LLRgdGRINGB0YLRgNC+0LPQviDQvdCw0L/QuNGB0LDRgtGMLi4uXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHJldHVybiB0b2tlbnMuZXZlcnkoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vZGVsUGF0aEltcGw8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBpbXBsZW1lbnRzIElFcXVhdGFibGU8TW9kZWxQYXRoPiwgSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT5cbntcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuczogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+O1xuICAgIHB1YmxpYyByZWFkb25seSBhYnNvbHV0ZTogVEFic29sdXRlO1xuICAgIHByaXZhdGUgbGVnYWN5UGF0aDogdW5kZWZpbmVkIHwgc3RyaW5nO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhdGhQYXJ0czogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+LCBhYnNvbHV0ZTogVEFic29sdXRlKSB7XG4gICAgICAgIHRoaXMudG9rZW5zID0gcGF0aFBhcnRzLmZpbHRlcih4ID0+IHggIT09IFwiXCIpO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gYWJzb2x1dGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXNvbHZlZCgpOiBUUmVzb2x2ZWQge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhdGhQYXJ0cygpOiBJdGVyYWJsZTxQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgKmdldFNpbXBsZVRva2Vuc1N0cmljdCgpOiBJdGVyYWJsZTxTaW1wbGVQYXRoVG9rZW4+IHtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKCFQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IG5vdCBjb250YWluIHNwZWMgdG9rZW5zXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2ltcGxlVG9rZW5zQXNBcnJheVN0cmljdCgpOiByZWFkb25seSBTaW1wbGVQYXRoVG9rZW5bXSB7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmICghUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBub3QgY29udGFpbiBzcGVjIHRva2Vuc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0LXQvdGC0LjRgNGD0LXRgiDRh9GC0L4g0LHRg9C00YPRgiDRgtC+0LvRjNC60L4gU2ltcGxlUGF0aFRva2VuLlxuICAgICAgICAvLyDQktGB0LUgbWFwINC4IGZpbHRlciDRg9Cx0YDQsNC90Ysg0LTQu9GPINC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLQuFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogc3RyaW5nW10pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogUGF0aFRva2VuW10pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHB1YmxpYyBqb2luV2l0aCguLi5wYXRoOiBBcnJheTxBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gam9pbk1vZGVsUGF0aHModGhpcywgLi4ucGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUmVzb2x2ZWQoKTogdGhpcyBpcyBJTW9kZWxQYXRoPHRydWUsIFRBYnNvbHV0ZT4ge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmVBbGwoaW5zdGFuY2U6IHN0cmluZyk6IE1vZGVsUGF0aCB7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMudG9rZW5zLm1hcCh0b2tlbiA9PiB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodG9rZW5zLCB0aGlzLmFic29sdXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDb250YWluSXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc29tZSh4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zb21lKHggPT4geCA9PT0gUGF0aFRva2Vucy5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGFzdExpc3RQYXRoKCk6IFBhdGhUb2tlbltdIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29udGFpbkl0ZXJhdGlvbigpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgY29udGFpbiBpdGVyYXRpb25cIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0L3RgtC40YDRg9C10YIsINGH0YLQviDQsdGD0LTQtdGCIFBhdGhUb2tlbnMuZWFjaFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IGxhc3RJdGVyYXRpb25JbmRleCA9IHRoaXMudG9rZW5zLmxhc3RJbmRleE9mKFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zbGljZSgwLCBsYXN0SXRlcmF0aW9uSW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VuZHNXaXRoSXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBsYXN0SXRlbSA9IEl0ZXJVdGlscy5sYXN0KHRoaXMudG9rZW5zKTtcbiAgICAgICAgcmV0dXJuIGxhc3RJdGVtID09IFBhdGhUb2tlbnMuZWFjaDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBYnNvbHV0ZSgpOiB0aGlzIGlzIElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFic29sdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRoaXMuYWJzb2x1dGUgPyBcIi9cIiA6IFwiXCIpICsgdGhpcy50b2tlbnMubWFwKHggPT4gdGhpcy5wYXRoUGFydFRvU3RyaW5nKHgpKS5qb2luKFwiL1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9MZWdhY3lQYXRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlZ2FjeVBhdGggPz8gKHRoaXMubGVnYWN5UGF0aCA9IHRoaXMudG9rZW5zLm1hcCh4ID0+IHRoaXMucGF0aFBhcnRUb1N0cmluZyh4KSkuam9pbihcIi9cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VxdWFscyhcbiAgICAgICAgbW9kZWxQYXRoOiBNb2RlbFBhdGgsXG4gICAgICAgIGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWVcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGVhY2hDdXJyZW50Q29sbGlzaW9uID09PSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVTYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b0xlZ2FjeVBhdGgoKSA9PT0gbW9kZWxQYXRoLnRvTGVnYWN5UGF0aCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWJzb2x1dGUoKSA9PT0gbW9kZWxQYXRoLmlzQWJzb2x1dGUoKSAmJlxuICAgICAgICAgICAgICAgIEl0ZXJhdG9yLmZyb20oSXRlclV0aWxzLnppcCh0aGlzLmdldFBhdGhQYXJ0cygpLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzKCkpKS5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgKFt0MSwgdDJdKSA9PiB0MSA9PT0gdDJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRgdC10LPQtNCwINGG0LXQu9C+0LUg0L/QvtC70L7QttC40YLQtdC70YzQvdC+0LUg0LHQtdC30LfQvdCw0LrQvtCy0L7QtSAzMi3QsdC40YLQvdC+0LUg0YfQuNGB0LvQvlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWUpOiBudW1iZXIge1xuICAgICAgICBsZXQgaGFzaCA9IDUzODE7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgcmV2ZXJzZUFycmF5KHRoaXMudG9rZW5zKSkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRTdHI6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IHRva2VuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZWFjaEN1cnJlbnRDb2xsaXNpb24gPT09IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZURpZmZlcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyID0gdG9rZW4gPT09IFBhdGhUb2tlbnMuZWFjaCA/IFwiKlwiIDogXCIhXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IFwiKlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzdHJpbmdJbmRleCA9IGN1cnJlbnRTdHIubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKHN0cmluZ0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgICAgICBoYXNoID0gKGhhc2ggKiAzMykgXiBjdXJyZW50U3RyLmNoYXJDb2RlQXQoLS1zdHJpbmdJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgICAgdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIEphdmFTY3JpcHQgZG9lcyBiaXR3aXNlIG9wZXJhdGlvbnMgKGxpa2UgWE9SLCBhYm92ZSkgb24gMzItYml0IHNpZ25lZFxuICAgICAgICAgICAgaW50ZWdlcnMuIFNpbmNlIHdlIHdhbnQgdGhlIHJlc3VsdHMgdG8gYmUgYWx3YXlzIHBvc2l0aXZlLCBjb252ZXJ0IHRoZVxuICAgICAgICAgICAgc2lnbmVkIGludCB0byBhbiB1bnNpZ25lZCBieSBkb2luZyBhbiB1bnNpZ25lZCBiaXRzaGlmdC5cbiAgICAgICovXG4gICAgICAgIHJldHVybiBoYXNoID4+PiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0luY2x1ZGVzKG1vZGVsUGF0aDogTW9kZWxQYXRoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFRva2VucyA9IG1vZGVsUGF0aC5nZXRQYXRoUGFydHNBc0FycmF5KCk7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggIT09IHRhcmdldFRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0UGFydCA9IHRoaXMudG9rZW5zW2ldO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRQYXJ0ID0gdGFyZ2V0VG9rZW5zW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsZWZ0UGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmlnaHRQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0UGFydCAhPT0gcmlnaHRQYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCB8fCBsZWZ0UGFydCA9PT0gUGF0aFRva2Vucy5lYWNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByaWdodFBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShOdW1iZXIocmlnaHRQYXJ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmN1cnJlbnQgJiYgcmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGNvdW50KEl0ZXJhdG9yLmZyb20odGhpcy50b2tlbnMpLmZpbHRlcih4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZyB7XG4gICAgICAgIGlmICghdGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG1hdGNoIG5vbiBhYnNvbHV0ZSBwYXRoICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb2RlbFBhdGguaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtYXRjaCBub24gYWJzb2x1dGUgcGF0aCAnJHttb2RlbFBhdGgudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhdGhNYXRjaGVyLm1hdGNoKHRoaXMudG9rZW5zLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzQXNBcnJheSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgKnNwbGl0QnlNdWx0aXBsaWNpdHkoKTogSXRlcmFibGU8UmVzb2x2ZWRNb2RlbFBhdGggfCB0eXBlb2YgRWFjaFN5bWJvbCB8IHR5cGVvZiBDdXJyZW50U3ltYm9sPiB7XG4gICAgICAgIGxldCBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0aGlzLmlzQWJzb2x1dGUoKSk7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgbGFzdFNpbXBsZVBhcnRzLmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGxhc3RTaW1wbGVQYXJ0cy50b1Jlc29sdmVkUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlpZWxkIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICB5aWVsZCBsYXN0U2ltcGxlUGFydHMudG9SZXNvbHZlZFBhdGgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBub3JtYWxpemUoKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBjb25zdCByZXN1bHRUb2tlbnM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoUGFydCBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFRva2Vucy5wb3AoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCBpcyBpbnZhbGlkICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChcIi4uXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGF0aFBhcnQgPT09IFwiLlwiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChwYXRoUGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgVEFic29sdXRlPihyZXN1bHRUb2tlbnMsIHRoaXMuYWJzb2x1dGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5INCh0L/QtdGG0LjRhNC40LrQsNGC0L7RgNGLINC80L3QvtC20LXRgdGC0LLQtdC90L3QvtGB0YLQuCBFYWNoINC30LDQvNC10L3Rj9C10YIg0L3QsCBDdXJyZW50XG4gICAgICovXG4gICAgcHVibGljIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOT1RFINCi0YPRgiDQvdC1INC/0L7Qu9GD0YfQsNC10YLRgdGPINC90LDQu9C+0LbQuNGC0Ywg0LTQuNGB0LrRgNC40LzQuNC90LDRgtC+0YBcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0czogUGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPiA9IHRoaXMudG9rZW5zLm1hcCh4ID0+XG4gICAgICAgICAgICAgICAgeCA9PT0gUGF0aFRva2Vucy5lYWNoID8gUGF0aFRva2Vucy5jdXJyZW50IDogeFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ocGF0aFBhcnRzLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBpZiAodGhpcy5pc1Jlc29sdmVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTk9URSDQotGD0YIg0L3QtSDQv9C+0LvRg9GH0LDQtdGC0YHRjyDQvdCw0LvQvtC20LjRgtGMINC00LjRgdC60YDQuNC80LjQvdCw0YLQvtGAXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBjb25zdCBwYXRoUGFydHM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSB0aGlzLnRva2Vucy5tYXAoeCA9PlxuICAgICAgICAgICAgICAgIHggPT09IFBhdGhUb2tlbnMuY3VycmVudCA/IFBhdGhUb2tlbnMuZWFjaCA6IHhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8VFJlc29sdmVkLCBUQWJzb2x1dGU+KHBhdGhQYXJ0cywgdGhpcy5hYnNvbHV0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCAnJHt0aGlzLnRvTGVnYWN5UGF0aCgpfSBpcyBub3QgYWJzb2x1dGUnYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgdHJ1ZT4odGhpcy50b2tlbnMsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyAqZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuaXNBYnNvbHV0ZSgpKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBJdGVyVXRpbHMuc2tpcExhc3QodGhpcy5nZXRQYXRoUGFydHMoKSwgMSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9rZW4pO1xuICAgICAgICAgICAgeWllbGQgcmVzdWx0LnRvUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaW1MYXN0U3RhcklmTGFzdFRva2VuKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBJdGVyVXRpbHMubGFzdCh0aGlzLnRva2Vucyk7XG4gICAgICAgIGlmIChsYXN0SXRlbSAhPSB1bmRlZmluZWQgJiYgUGF0aFRva2Vucy5pc011bHRpVG9rZW4obGFzdEl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodGhpcy50b2tlbnMuc2xpY2UoMCwgLTEpLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFyZW50UGF0aCgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuYWJzb2x1dGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIEl0ZXJVdGlscy5za2lwTGFzdCh0aGlzLmdldFBhdGhQYXJ0cygpLCAxKSkge1xuICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNvbHZlZCgpIHx8IGluc3RhbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbnN0YW5jZUNvdW50ZXIgPSAwO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0cnVlKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLmdldFBhdGhQYXJ0cygpKSB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc011bHRpVG9rZW4odG9rZW4pICYmIGluc3RhbmNlQ291bnRlciA8IGluc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGluc3RhbmNlc1tpbnN0YW5jZUNvdW50ZXJdID8/IHJlamVjdCgpKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNvdW50ZXIrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXRoUGFydFRvU3RyaW5nKHBhdGhQYXJ0OiBQYXRoVG9rZW4pOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIHBhdGhQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aFBhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBcIipcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiKlwiO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwYXRoIHBhcnQgc3BlY2lmaWVkOiAke2Vuc3VyZUFuZEdldFN0cmluZyhwYXRoUGFydCl9YCk7XG4gICAgfVxufVxuIl19
|
|
609
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvTW9kZWxQYXRoLnRzIl0sIm5hbWVzIjpbIkVhY2hTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJDdXJyZW50U3ltYm9sIiwiUGF0aFRva2VucyIsImlzTXVsdGlUb2tlbiIsInBhcnQiLCJlYWNoIiwiY3VycmVudCIsImlzU2ltcGxlVG9rZW4iLCJpc0luc3RhbmNlVG9rZW4iLCJ0ZXN0IiwiaXNNb2RlbFBhdGgiLCJwYXRoIiwiTW9kZWxQYXRoSW1wbCIsImNvbnZlcnRUb0xlZ2FjeVBhdGgiLCJ0b0xlZ2FjeVBhdGgiLCJjb252ZXJ0VG9BYnNvbHV0TW9kZWxQYXRoIiwiY3JlYXRlQWJzb2x1dGVGcm9tTWFzayIsImVtcHR5TW9kZWxQYXRoIiwiZW1wdHlBYnNvbHV0ZU1vZGVsUGF0aCIsImNyZWF0ZU1vZGVsUGF0aCIsImFic29sdXRlIiwicGFydFBhcnRTdHJpbmdzIiwic3BsaXQiLCJlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5Iiwic3RhcnRzV2l0aCIsInNsaWNlIiwiY3JlYXRlRnJvbU1hc2siLCJtdWx0aXBsaWNpdHlTeW1ib2wiLCJtYXAiLCJ4IiwicGFydHMiLCJzb21lIiwiRXJyb3IiLCJjcmVhdGVBYnNvbHV0ZSIsImNyZWF0ZVJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgiLCJjcmVhdGVBYnNvbHV0ZUZyb21Ub2tlbnMiLCJ0b2tlbnMiLCJjcmVhdGVBYnNvbHV0ZVJlc29sdmVkRnJvbVRva2VucyIsImNyZWF0ZVJlbGF0aXZlRnJvbVRva2VucyIsImpvaW5Nb2RlbFBhdGhzIiwicmVzdWx0UGFydHMiLCJqb2luSXRlbSIsInB1c2giLCJpc0Fic29sdXRlIiwiZ2V0UGF0aFBhcnRzQXNBcnJheSIsIkFycmF5IiwiaXNBcnJheSIsIkFic29sdXRlTW9kZWxGaWVsZFBhdGgiLCJjb25zdHJ1Y3RvciIsImZpZWxkTmFtZSIsImZpZWxkIiwiZ2V0SGFzaCIsImlzRXF1YWxzIiwibW9kZWxQYXRoIiwiZWFjaEN1cnJlbnRDb2xsaXNpb24iLCJFYWNoQ3VycmVudENvbGxpc2lvbiIsIkFyZVNhbWUiLCJjcmVhdGVGcm9tU3RyaW5nIiwicGF0aFdpdGhGaWVsZE5hbWUiLCJlbmRzV2l0aCIsInJlcGxhY2UiLCJpc0FsbFRva2Vuc1Jlc29sdmVkIiwiZXZlcnkiLCJwYXRoUGFydHMiLCJsZWdhY3lQYXRoIiwiZmlsdGVyIiwicmVzb2x2ZWQiLCJnZXRQYXRoUGFydHMiLCJnZXRTaW1wbGVUb2tlbnNTdHJpY3QiLCJ0b2tlbiIsImdldFNpbXBsZVRva2Vuc0FzQXJyYXlTdHJpY3QiLCJqb2luV2l0aCIsImlzUmVzb2x2ZWQiLCJyZXNvbHZlQWxsIiwiaW5zdGFuY2UiLCJpc0NvbnRhaW5JdGVyYXRpb24iLCJpc0NvbnRhaW5DdXJyZW50SXRlcmF0aW9uIiwiZ2V0TGFzdExpc3RQYXRoIiwibGFzdEl0ZXJhdGlvbkluZGV4IiwibGFzdEluZGV4T2YiLCJpc0VuZHNXaXRoSXRlcmF0aW9uIiwibGFzdEl0ZW0iLCJJdGVyVXRpbHMiLCJsYXN0IiwidG9TdHJpbmciLCJsZW5ndGgiLCJwYXRoUGFydFRvU3RyaW5nIiwiam9pbiIsIkl0ZXJhdG9yIiwiZnJvbSIsInppcCIsInQxIiwidDIiLCJoYXNoIiwiY3VycmVudFN0ciIsIkFyZURpZmZlcmVudCIsInN0cmluZ0luZGV4IiwiY2hhckNvZGVBdCIsImlzSW5jbHVkZXMiLCJ0YXJnZXRUb2tlbnMiLCJpIiwibGVmdFBhcnQiLCJyaWdodFBhcnQiLCJpc0Zpbml0ZSIsIk51bWJlciIsImdldEl0ZXJhdGlvblJhbmsiLCJpc0VtcHR5IiwibWF0Y2hGb3IiLCJQYXRoTWF0Y2hlciIsIm1hdGNoIiwic3BsaXRCeU11bHRpcGxpY2l0eSIsImxhc3RTaW1wbGVQYXJ0cyIsIk1vZGVsUGF0aEJ1aWxkZXIiLCJhcHBlbmQiLCJlbXB0eSIsInRvUmVzb2x2ZWRQYXRoIiwibm9ybWFsaXplIiwicmVzdWx0VG9rZW5zIiwicGF0aFBhcnQiLCJwb3AiLCJ0b0N1cnJlbnRJdGVyYXRpb24iLCJ0b0VhY2hJdGVyYXRpb24iLCJ0b0Fic29sdXRlIiwiZ2V0QWxsUGFyZW50UGF0aHMiLCJyZXN1bHQiLCJza2lwTGFzdCIsInRvUGF0aCIsInRyaW1MYXN0U3RhcklmTGFzdFRva2VuIiwidW5kZWZpbmVkIiwiZ2V0UGFyZW50UGF0aCIsImFwcGx5SW5zdGFuY2VzRGlydHkiLCJpbnN0YW5jZXMiLCJpbnN0YW5jZUNvdW50ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLFVBQVUsR0FBR0MsTUFBTSxDQUFDQyxHQUFQLENBQVcsVUFBWCxDQUFuQjtBQUNBLE1BQU1DLGFBQWEsR0FBR0YsTUFBTSxDQUFDQyxHQUFQLENBQVcsYUFBWCxDQUF0Qjs7QUFFTyxNQUFNRSxVQUFOLENBQWlCO0FBSU0sU0FBWkMsWUFBWSxDQUFDQyxJQUFELEVBQWdGO0FBQ3RHLFdBQU9BLElBQUksS0FBS0YsVUFBVSxDQUFDRyxJQUFwQixJQUE0QkQsSUFBSSxLQUFLRixVQUFVLENBQUNJLE9BQXZEO0FBQ0g7O0FBRTBCLFNBQWJDLGFBQWEsQ0FBQ0gsSUFBRCxFQUE4QztBQUNyRSxXQUFPLE9BQU9BLElBQVAsS0FBZ0IsUUFBdkI7QUFDSDs7QUFFNEIsU0FBZkksZUFBZSxDQUFDSixJQUFELEVBQThDO0FBQ3ZFLFdBQU8sT0FBT0EsSUFBUCxLQUFnQixRQUFoQixJQUE0QixTQUFTSyxJQUFULENBQWNMLElBQWQsQ0FBbkM7QUFDSDs7QUFkbUI7OztBQUFYRixVLENBQ0tHLEksR0FBMEJQLFU7QUFEL0JJLFUsQ0FFS0ksTyxHQUFnQ0wsYTs7QUFtQjNDLFNBQVNTLFdBQVQsQ0FBcUJDLElBQXJCLEVBQWlGO0FBQ3BGLFNBQU8sT0FBT0EsSUFBUCxLQUFnQixRQUFoQixJQUE0QkEsSUFBSSxZQUFZQyxhQUFuRDtBQUNIOztBQUVNLFNBQVNDLG1CQUFULENBQTZCRixJ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UyxDQUFDOUMsTUFBVixLQUFxQixDQUE5QyxFQUFpRDtBQUM3QyxhQUFPLElBQVA7QUFDSDs7QUFDRCxRQUFJK0MsZUFBZSxHQUFHLENBQXRCO0FBQ0EsVUFBTVIsTUFBTSxHQUFHLElBQUlaLGtDQUFKLENBQXFCLElBQXJCLENBQWY7O0FBQ0EsU0FBSyxNQUFNM0MsS0FBWCxJQUFvQixLQUFLRixZQUFMLEVBQXBCLEVBQXlDO0FBQ3JDLFVBQUlqRSxVQUFVLENBQUNDLFlBQVgsQ0FBd0JrRSxLQUF4QixLQUFrQytELGVBQWUsR0FBR0QsU0FBUyxDQUFDOUMsTUFBbEUsRUFBMEU7QUFBQTs7QUFDdEV1QyxRQUFBQSxNQUFNLENBQUNYLE1BQVAsMEJBQWNrQixTQUFTLENBQUNDLGVBQUQsQ0FBdkIseUVBQTRDLDBCQUE1QztBQUNBQSxRQUFBQSxlQUFlO0FBQ2xCLE9BSEQsTUFHTztBQUNIUixRQUFBQSxNQUFNLENBQUNYLE1BQVAsQ0FBYzVDLEtBQWQ7QUFDSDtBQUNKLEtBYnNGLENBY3ZGO0FBQ0E7OztBQUNBLFdBQU91RCxNQUFNLENBQUNFLE1BQVAsRUFBUDtBQUNIOztBQUVPeEMsRUFBQUEsZ0JBQWdCLENBQUNnQyxRQUFELEVBQThCO0FBQ2xELFFBQUksT0FBT0EsUUFBUCxLQUFvQixRQUF4QixFQUFrQztBQUM5QixhQUFPQSxRQUFQO0FBQ0g7O0FBQ0QsUUFBSUEsUUFBUSxLQUFLcEgsVUFBVSxDQUFDRyxJQUE1QixFQUFrQztBQUM5QixhQUFPLEdBQVA7QUFDSDs7QUFDRCxRQUFJaUgsUUFBUSxLQUFLcEgsVUFBVSxDQUFDSSxPQUE1QixFQUFxQztBQUNqQyxhQUFPLEdBQVA7QUFDSDs7QUFDRCxVQUFNLElBQUkwQixLQUFKLENBQVcsZ0NBQStCLHFDQUFtQnNGLFFBQW5CLENBQTZCLEVBQXZFLENBQU47QUFDSDs7QUFuVkwiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCaW5kaW5nUGF0aCwgVmlld01vZGVsRmllbGROYW1lIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9zcmMvRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgeyBjb3VudCwgSXRlclV0aWxzLCByZXZlcnNlQXJyYXkgfSBmcm9tIFwiLi4vSXRlcmFibGVVdGlsc1wiO1xuaW1wb3J0IHsgZW5zdXJlQW5kR2V0U3RyaW5nLCByZWplY3QgfSBmcm9tIFwiLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IGdldFNpbXBsZUhhc2hCeVN0cmluZyB9IGZyb20gXCIuLi9oYXNoVXRpbHNcIjtcblxuaW1wb3J0IHsgRWFjaEN1cnJlbnRDb2xsaXNpb24gfSBmcm9tIFwiLi9FYWNoQ3VycmVudENvbGxpc2lvblwiO1xuaW1wb3J0IHsgTW9kZWxQYXRoQnVpbGRlciB9IGZyb20gXCIuL01vZGVsUGF0aEJ1aWxkZXJcIjtcbmltcG9ydCB7IFBhdGhNYXRjaGVyLCBQYXRoTWF0Y2hpbmcgfSBmcm9tIFwiLi9QYXRoTWF0Y2hlclwiO1xuaW1wb3J0IHsgSUVxdWF0YWJsZSB9IGZyb20gXCIuL0lFcXVhdGFibGVcIjtcblxuY29uc3QgRWFjaFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJfX0VBQ0hfX1wiKTtcbmNvbnN0IEN1cnJlbnRTeW1ib2wgPSBTeW1ib2wuZm9yKFwiX19DVVJSRU5UX19cIik7XG5cbmV4cG9ydCBjbGFzcyBQYXRoVG9rZW5zIHtcbiAgICBwdWJsaWMgc3RhdGljIGVhY2g6IHR5cGVvZiBFYWNoU3ltYm9sID0gRWFjaFN5bWJvbDtcbiAgICBwdWJsaWMgc3RhdGljIGN1cnJlbnQ6IHR5cGVvZiBDdXJyZW50U3ltYm9sID0gQ3VycmVudFN5bWJvbDtcblxuICAgIHB1YmxpYyBzdGF0aWMgaXNNdWx0aVRva2VuKHBhcnQ6IHVuZGVmaW5lZCB8IFBhdGhUb2tlbik6IHBhcnQgaXMgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbCB7XG4gICAgICAgIHJldHVybiBwYXJ0ID09PSBQYXRoVG9rZW5zLmVhY2ggfHwgcGFydCA9PT0gUGF0aFRva2Vucy5jdXJyZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaXNTaW1wbGVUb2tlbihwYXJ0OiB1bmRlZmluZWQgfCBQYXRoVG9rZW4pOiBwYXJ0IGlzIHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzSW5zdGFuY2VUb2tlbihwYXJ0OiB1bmRlZmluZWQgfCBQYXRoVG9rZW4pOiBwYXJ0IGlzIHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcZCskL2kudGVzdChwYXJ0KTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFNpbXBsZVBhdGhUb2tlbiA9IHN0cmluZztcblxuZXhwb3J0IHR5cGUgUGF0aFRva2VuID0gU2ltcGxlUGF0aFRva2VuIHwgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTW9kZWxQYXRoKHBhdGg6IEJpbmRpbmdQYXRoIHwgTW9kZWxQYXRoIHwgdW5rbm93bik6IHBhdGggaXMgTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gdHlwZW9mIHBhdGggIT09IFwic3RyaW5nXCIgJiYgcGF0aCBpbnN0YW5jZW9mIE1vZGVsUGF0aEltcGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9MZWdhY3lQYXRoKHBhdGg6IEJpbmRpbmdQYXRoIHwgTW9kZWxQYXRoKTogQmluZGluZ1BhdGgge1xuICAgIHJldHVybiBpc01vZGVsUGF0aChwYXRoKSA/IHBhdGgudG9MZWdhY3lQYXRoKCkgOiBwYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvQWJzb2x1dE1vZGVsUGF0aDxSIGV4dGVuZHMgYm9vbGVhbiwgQSBleHRlbmRzIGJvb2xlYW4+KFxuICAgIHBhdGg6IEJpbmRpbmdQYXRoIHwgSU1vZGVsUGF0aDxSLCBBPlxuKTogSU1vZGVsUGF0aDxSLCB0cnVlPjtcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9BYnNvbHV0TW9kZWxQYXRoKHBhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVNb2RlbFBhdGgpOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIGlzTW9kZWxQYXRoKHBhdGgpID8gcGF0aCA6IGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aCwgUGF0aFRva2Vucy5lYWNoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5TW9kZWxQYXRoKCk6IFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBmYWxzZT4oW10sIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5QWJzb2x1dGVNb2RlbFBhdGgoKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KFtdLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiB0cnVlKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFBhdGgocGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogZmFsc2UpOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBcImF1dG9cIik6IFJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuIHwgXCJhdXRvXCIpOiBSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIGlmIChhYnNvbHV0ZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGZhbHNlPihwYXJ0UGFydFN0cmluZ3MsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWJzb2x1dGUgJiYgcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGJvb2xlYW4+KHBhcnRQYXJ0U3RyaW5ncywgYWJzb2x1dGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogdHJ1ZSwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBBYnNvbHV0ZU1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBmYWxzZSwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBcImF1dG9cIiwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogYm9vbGVhbiB8IFwiYXV0b1wiLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIikubWFwKHggPT4gKHggPT09IFwiKlwiID8gbXVsdGlwbGljaXR5U3ltYm9sIDogeCkpO1xuICAgIGlmIChhYnNvbHV0ZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhYnNvbHV0ZSAmJiBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLCBhYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGg6IHN0cmluZywgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIikubWFwKHggPT4gKHggPT09IFwiKlwiID8gbXVsdGlwbGljaXR5U3ltYm9sIDogeCkpO1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAocGFydHMuc29tZSh4ID0+IHggPT09IFwiKlwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3Qgbm90IGNvbnRhaW4gKiBzeW1ib2xcIik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJzb2x1dGUocGF0aDogc3RyaW5nKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgocGF0aDogc3RyaW5nKTogUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBmYWxzZT4ocGFydFBhcnRTdHJpbmdzLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZUZyb21Ub2tlbnModG9rZW5zOiBQYXRoVG9rZW5bXSk6IEFic29sdXRlTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8ZmFsc2UsIHRydWU+KHRva2VucywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZVJlc29sdmVkRnJvbVRva2Vucyh0b2tlbnM6IHN0cmluZ1tdKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eSh0b2tlbnMpO1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPih0b2tlbnMsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zKHRva2VuczogcmVhZG9ubHkgc3RyaW5nW10pOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlRnJvbVRva2Vucyh0b2tlbnM6IHJlYWRvbmx5IFBhdGhUb2tlbltdKTogUmVsYXRpdmVNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zKHRva2VuczogcmVhZG9ubHkgUGF0aFRva2VuW10pOiBSZWxhdGl2ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPGZhbHNlLCBmYWxzZT4odG9rZW5zLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luTW9kZWxQYXRocyguLi5wYXJ0czogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuIHwgUGF0aFRva2VuW10+KTogTW9kZWxQYXRoIHtcbiAgICBsZXQgYWJzb2x1dGUgPSBmYWxzZTtcbiAgICBsZXQgcmVzdWx0UGFydHM6IFBhdGhUb2tlbltdID0gW107XG4gICAgZm9yIChjb25zdCBqb2luSXRlbSBvZiBwYXJ0cykge1xuICAgICAgICBpZiAodHlwZW9mIGpvaW5JdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKGpvaW5JdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01vZGVsUGF0aChqb2luSXRlbSkpIHtcbiAgICAgICAgICAgIGlmIChqb2luSXRlbS5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICBhYnNvbHV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzdWx0UGFydHMgPSBbLi4uam9pbkl0ZW0uZ2V0UGF0aFBhcnRzQXNBcnJheSgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0UGFydHMucHVzaCguLi5qb2luSXRlbS5nZXRQYXRoUGFydHNBc0FycmF5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoam9pbkl0ZW0pKSB7XG4gICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKC4uLmpvaW5JdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChQYXRoVG9rZW5zLmlzTXVsdGlUb2tlbihqb2luSXRlbSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFBhcnRzLnB1c2goam9pbkl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHJlc3VsdFBhcnRzLCBhYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBjbGFzcyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoIGltcGxlbWVudHMgSUVxdWF0YWJsZTxBYnNvbHV0ZU1vZGVsRmllbGRQYXRoPiB7XG4gICAgcHVibGljIHJlYWRvbmx5IHBhdGg6IEFic29sdXRlTW9kZWxQYXRoO1xuICAgIHB1YmxpYyByZWFkb25seSBmaWVsZDogVmlld01vZGVsRmllbGROYW1lIHwgXCIkZXJyb3JDb3VudFwiIHwgXCIkd2FybmluZ0NvdW50XCI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGF0aDogQWJzb2x1dGVNb2RlbFBhdGgsIGZpZWxkTmFtZTogVmlld01vZGVsRmllbGROYW1lIHwgXCIkZXJyb3JDb3VudFwiIHwgXCIkd2FybmluZ0NvdW50XCIpIHtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5maWVsZCA9IGZpZWxkTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SGFzaCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoLmdldEhhc2goKSArIGdldFNpbXBsZUhhc2hCeVN0cmluZyh0aGlzLmZpZWxkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFcXVhbHMoXG4gICAgICAgIG1vZGVsUGF0aDogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCxcbiAgICAgICAgZWFjaEN1cnJlbnRDb2xsaXNpb246IEVhY2hDdXJyZW50Q29sbGlzaW9uID0gRWFjaEN1cnJlbnRDb2xsaXNpb24uQXJlU2FtZVxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoLmlzRXF1YWxzKG1vZGVsUGF0aC5wYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbikgJiYgdGhpcy5maWVsZCA9PT0gbW9kZWxQYXRoLmZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRnJvbVN0cmluZyhwYXRoV2l0aEZpZWxkTmFtZTogc3RyaW5nKTogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kZXJyb3JDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJGVycm9yQ291bnRcIiwgXCJcIikpLFxuICAgICAgICAgICAgICAgIFwiJGVycm9yQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuJHdhcm5pbmdDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJHdhcm5pbmdDb3VudFwiLCBcIlwiKSksXG4gICAgICAgICAgICAgICAgXCIkd2FybmluZ0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lKSwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lOiBzdHJpbmcsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kZXJyb3JDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUucmVwbGFjZShcIi4kZXJyb3JDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIiRlcnJvckNvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhXaXRoRmllbGROYW1lLmVuZHNXaXRoKFwiLiR3YXJuaW5nQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJHdhcm5pbmdDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIiR3YXJuaW5nQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuZXJyb3JzQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuZXJyb3JzQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCJlcnJvcnNDb3VudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi53YXJuaW5nc0NvdW50XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlTW9kZWxGaWVsZFBhdGgoXG4gICAgICAgICAgICAgICAgY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoV2l0aEZpZWxkTmFtZS5yZXBsYWNlKFwiLndhcm5pbmdzQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCJ3YXJuaW5nc0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUsIG11bHRpcGxpY2l0eVN5bWJvbCksIFwidmFsdWVcIik7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb2RlbFBhdGg8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBleHRlbmRzIElFcXVhdGFibGU8SU1vZGVsUGF0aDxib29sZWFuLCBib29sZWFuPj4ge1xuICAgIHJlYWRvbmx5IHJlc29sdmVkOiBUUmVzb2x2ZWQ7XG4gICAgcmVhZG9ubHkgYWJzb2x1dGU6IFRBYnNvbHV0ZTtcblxuICAgIGlzRXF1YWxzKG1vZGVsUGF0aDogTW9kZWxQYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbj86IEVhY2hDdXJyZW50Q29sbGlzaW9uKTogYm9vbGVhbjtcbiAgICBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uPzogRWFjaEN1cnJlbnRDb2xsaXNpb24pOiBudW1iZXI7XG5cbiAgICBpc1Jlc29sdmVkKCk6IHRoaXMgaXMgSU1vZGVsUGF0aDx0cnVlLCBUQWJzb2x1dGU+O1xuICAgIGlzQWJzb2x1dGUoKTogdGhpcyBpcyBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG4gICAgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG5cbiAgICBqb2luV2l0aCguLi5wYXRoOiBzdHJpbmdbXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IFBhdGhUb2tlbltdKTogSU1vZGVsUGF0aDxib29sZWFuLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfCBzdHJpbmc+KTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIHRydWU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbj4pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG5cbiAgICBnZXRQYXRoUGFydHMoKTogSXRlcmFibGU8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRTaW1wbGVUb2tlbnNTdHJpY3QoKTogSXRlcmFibGU8U2ltcGxlUGF0aFRva2VuPjtcbiAgICBnZXRTaW1wbGVUb2tlbnNBc0FycmF5U3RyaWN0KCk6IHJlYWRvbmx5IFNpbXBsZVBhdGhUb2tlbltdO1xuXG4gICAgcmVzb2x2ZUFsbChpbnN0YW5jZTogc3RyaW5nKTogTW9kZWxQYXRoO1xuICAgIGlzQ29udGFpbkl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbjtcbiAgICBnZXRMYXN0TGlzdFBhdGgoKTogUGF0aFRva2VuW107XG4gICAgaXNFbmRzV2l0aEl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzSW5jbHVkZXMobW9kZWxQYXRoOiBNb2RlbFBhdGgpOiBib29sZWFuO1xuICAgIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyO1xuICAgIGlzRW1wdHkoKTogYm9vbGVhbjtcbiAgICBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZztcbiAgICBzcGxpdEJ5TXVsdGlwbGljaXR5KCk6IEl0ZXJhYmxlPFJlc29sdmVkTW9kZWxQYXRoIHwgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbD47XG4gICAgbm9ybWFsaXplKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT47XG4gICAgZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPjtcbiAgICB0cmltTGFzdFN0YXJJZkxhc3RUb2tlbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBnZXRQYXJlbnRQYXRoKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICAgIHRvTGVnYWN5UGF0aCgpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBSZXNvbHZlZE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8dHJ1ZSwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZU1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgdHJ1ZT47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoID0gSU1vZGVsUGF0aDx0cnVlLCB0cnVlPjtcblxuZXhwb3J0IHR5cGUgUmVsYXRpdmVNb2RlbFBhdGggPSBJTW9kZWxQYXRoPGJvb2xlYW4sIGZhbHNlPjtcbmV4cG9ydCB0eXBlIFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGggPSBJTW9kZWxQYXRoPHRydWUsIGZhbHNlPjtcblxudHlwZSBQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZCBleHRlbmRzIGJvb2xlYW4+ID0gVFJlc29sdmVkIGV4dGVuZHMgdHJ1ZSA/IHN0cmluZyA6IFBhdGhUb2tlbjtcblxudHlwZSBQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IEFycmF5PFBhdGhUb2tlblNwZWM8VFJlc29sdmVkPj47XG5cbnR5cGUgUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcblxuZnVuY3Rpb24gaXNBbGxUb2tlbnNSZXNvbHZlZDxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPih0b2tlbnM6IFJlYWRvbmx5UGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPik6IFRSZXNvbHZlZCB7XG4gICAgLy8g0K8g0YfRgtC+LdGC0L4g0L3QtdC80L7Qs9GDINGB0L7QvtCx0YDQsNC30LjRgtGMINC60LDQuiDRgtGD0YIg0LLRgdGRINGB0YLRgNC+0LPQviDQvdCw0L/QuNGB0LDRgtGMLi4uXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHJldHVybiB0b2tlbnMuZXZlcnkoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vZGVsUGF0aEltcGw8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBpbXBsZW1lbnRzIElFcXVhdGFibGU8TW9kZWxQYXRoPiwgSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT5cbntcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuczogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+O1xuICAgIHB1YmxpYyByZWFkb25seSBhYnNvbHV0ZTogVEFic29sdXRlO1xuICAgIHByaXZhdGUgbGVnYWN5UGF0aDogdW5kZWZpbmVkIHwgc3RyaW5nO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhdGhQYXJ0czogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+LCBhYnNvbHV0ZTogVEFic29sdXRlKSB7XG4gICAgICAgIHRoaXMudG9rZW5zID0gcGF0aFBhcnRzLmZpbHRlcih4ID0+IHggIT09IFwiXCIpO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gYWJzb2x1dGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXNvbHZlZCgpOiBUUmVzb2x2ZWQge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhdGhQYXJ0cygpOiBJdGVyYWJsZTxQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgKmdldFNpbXBsZVRva2Vuc1N0cmljdCgpOiBJdGVyYWJsZTxTaW1wbGVQYXRoVG9rZW4+IHtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKCFQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IG5vdCBjb250YWluIHNwZWMgdG9rZW5zXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2ltcGxlVG9rZW5zQXNBcnJheVN0cmljdCgpOiByZWFkb25seSBTaW1wbGVQYXRoVG9rZW5bXSB7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmICghUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBub3QgY29udGFpbiBzcGVjIHRva2Vuc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0LXQvdGC0LjRgNGD0LXRgiDRh9GC0L4g0LHRg9C00YPRgiDRgtC+0LvRjNC60L4gU2ltcGxlUGF0aFRva2VuLlxuICAgICAgICAvLyDQktGB0LUgbWFwINC4IGZpbHRlciDRg9Cx0YDQsNC90Ysg0LTQu9GPINC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLQuFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogc3RyaW5nW10pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogUGF0aFRva2VuW10pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHB1YmxpYyBqb2luV2l0aCguLi5wYXRoOiBBcnJheTxBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gam9pbk1vZGVsUGF0aHModGhpcywgLi4ucGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUmVzb2x2ZWQoKTogdGhpcyBpcyBJTW9kZWxQYXRoPHRydWUsIFRBYnNvbHV0ZT4ge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmVBbGwoaW5zdGFuY2U6IHN0cmluZyk6IE1vZGVsUGF0aCB7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMudG9rZW5zLm1hcCh0b2tlbiA9PiB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodG9rZW5zLCB0aGlzLmFic29sdXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDb250YWluSXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc29tZSh4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zb21lKHggPT4geCA9PT0gUGF0aFRva2Vucy5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGFzdExpc3RQYXRoKCk6IFBhdGhUb2tlbltdIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29udGFpbkl0ZXJhdGlvbigpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgY29udGFpbiBpdGVyYXRpb25cIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0L3RgtC40YDRg9C10YIsINGH0YLQviDQsdGD0LTQtdGCIFBhdGhUb2tlbnMuZWFjaFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IGxhc3RJdGVyYXRpb25JbmRleCA9IHRoaXMudG9rZW5zLmxhc3RJbmRleE9mKFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zbGljZSgwLCBsYXN0SXRlcmF0aW9uSW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VuZHNXaXRoSXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBsYXN0SXRlbSA9IEl0ZXJVdGlscy5sYXN0KHRoaXMudG9rZW5zKTtcbiAgICAgICAgcmV0dXJuIGxhc3RJdGVtID09IFBhdGhUb2tlbnMuZWFjaDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBYnNvbHV0ZSgpOiB0aGlzIGlzIElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFic29sdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRoaXMuYWJzb2x1dGUgPyBcIi9cIiA6IFwiXCIpICsgdGhpcy50b2tlbnMubWFwKHggPT4gdGhpcy5wYXRoUGFydFRvU3RyaW5nKHgpKS5qb2luKFwiL1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9MZWdhY3lQYXRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlZ2FjeVBhdGggPz8gKHRoaXMubGVnYWN5UGF0aCA9IHRoaXMudG9rZW5zLm1hcCh4ID0+IHRoaXMucGF0aFBhcnRUb1N0cmluZyh4KSkuam9pbihcIi9cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VxdWFscyhcbiAgICAgICAgbW9kZWxQYXRoOiBNb2RlbFBhdGgsXG4gICAgICAgIGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWVcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGVhY2hDdXJyZW50Q29sbGlzaW9uID09PSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVTYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b0xlZ2FjeVBhdGgoKSA9PT0gbW9kZWxQYXRoLnRvTGVnYWN5UGF0aCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWJzb2x1dGUoKSA9PT0gbW9kZWxQYXRoLmlzQWJzb2x1dGUoKSAmJlxuICAgICAgICAgICAgICAgIEl0ZXJhdG9yLmZyb20oSXRlclV0aWxzLnppcCh0aGlzLmdldFBhdGhQYXJ0cygpLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzKCkpKS5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgKFt0MSwgdDJdKSA9PiB0MSA9PT0gdDJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRgdC10LPQtNCwINGG0LXQu9C+0LUg0L/QvtC70L7QttC40YLQtdC70YzQvdC+0LUg0LHQtdC30LfQvdCw0LrQvtCy0L7QtSAzMi3QsdC40YLQvdC+0LUg0YfQuNGB0LvQvlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWUpOiBudW1iZXIge1xuICAgICAgICBsZXQgaGFzaCA9IDUzODE7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgcmV2ZXJzZUFycmF5KHRoaXMudG9rZW5zKSkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRTdHI6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IHRva2VuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZWFjaEN1cnJlbnRDb2xsaXNpb24gPT09IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZURpZmZlcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyID0gdG9rZW4gPT09IFBhdGhUb2tlbnMuZWFjaCA/IFwiKlwiIDogXCIhXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IFwiKlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzdHJpbmdJbmRleCA9IGN1cnJlbnRTdHIubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKHN0cmluZ0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgICAgICBoYXNoID0gKGhhc2ggKiAzMykgXiBjdXJyZW50U3RyLmNoYXJDb2RlQXQoLS1zdHJpbmdJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgICAgdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIEphdmFTY3JpcHQgZG9lcyBiaXR3aXNlIG9wZXJhdGlvbnMgKGxpa2UgWE9SLCBhYm92ZSkgb24gMzItYml0IHNpZ25lZFxuICAgICAgICAgICAgaW50ZWdlcnMuIFNpbmNlIHdlIHdhbnQgdGhlIHJlc3VsdHMgdG8gYmUgYWx3YXlzIHBvc2l0aXZlLCBjb252ZXJ0IHRoZVxuICAgICAgICAgICAgc2lnbmVkIGludCB0byBhbiB1bnNpZ25lZCBieSBkb2luZyBhbiB1bnNpZ25lZCBiaXRzaGlmdC5cbiAgICAgICovXG4gICAgICAgIHJldHVybiBoYXNoID4+PiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0luY2x1ZGVzKG1vZGVsUGF0aDogTW9kZWxQYXRoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFRva2VucyA9IG1vZGVsUGF0aC5nZXRQYXRoUGFydHNBc0FycmF5KCk7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggIT09IHRhcmdldFRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0UGFydCA9IHRoaXMudG9rZW5zW2ldO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRQYXJ0ID0gdGFyZ2V0VG9rZW5zW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsZWZ0UGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmlnaHRQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0UGFydCAhPT0gcmlnaHRQYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCB8fCBsZWZ0UGFydCA9PT0gUGF0aFRva2Vucy5lYWNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByaWdodFBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShOdW1iZXIocmlnaHRQYXJ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmN1cnJlbnQgJiYgcmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGNvdW50KEl0ZXJhdG9yLmZyb20odGhpcy50b2tlbnMpLmZpbHRlcih4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZyB7XG4gICAgICAgIGlmICghdGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG1hdGNoIG5vbiBhYnNvbHV0ZSBwYXRoICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb2RlbFBhdGguaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtYXRjaCBub24gYWJzb2x1dGUgcGF0aCAnJHttb2RlbFBhdGgudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhdGhNYXRjaGVyLm1hdGNoKHRoaXMudG9rZW5zLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzQXNBcnJheSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgKnNwbGl0QnlNdWx0aXBsaWNpdHkoKTogSXRlcmFibGU8UmVzb2x2ZWRNb2RlbFBhdGggfCB0eXBlb2YgRWFjaFN5bWJvbCB8IHR5cGVvZiBDdXJyZW50U3ltYm9sPiB7XG4gICAgICAgIGxldCBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0aGlzLmlzQWJzb2x1dGUoKSk7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgbGFzdFNpbXBsZVBhcnRzLmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGxhc3RTaW1wbGVQYXJ0cy50b1Jlc29sdmVkUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlpZWxkIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICB5aWVsZCBsYXN0U2ltcGxlUGFydHMudG9SZXNvbHZlZFBhdGgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBub3JtYWxpemUoKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBjb25zdCByZXN1bHRUb2tlbnM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoUGFydCBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFRva2Vucy5wb3AoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCBpcyBpbnZhbGlkICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChcIi4uXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGF0aFBhcnQgPT09IFwiLlwiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChwYXRoUGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgVEFic29sdXRlPihyZXN1bHRUb2tlbnMsIHRoaXMuYWJzb2x1dGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5INCh0L/QtdGG0LjRhNC40LrQsNGC0L7RgNGLINC80L3QvtC20LXRgdGC0LLQtdC90L3QvtGB0YLQuCBFYWNoINC30LDQvNC10L3Rj9C10YIg0L3QsCBDdXJyZW50XG4gICAgICovXG4gICAgcHVibGljIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOT1RFINCi0YPRgiDQvdC1INC/0L7Qu9GD0YfQsNC10YLRgdGPINC90LDQu9C+0LbQuNGC0Ywg0LTQuNGB0LrRgNC40LzQuNC90LDRgtC+0YBcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0czogUGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPiA9IHRoaXMudG9rZW5zLm1hcCh4ID0+XG4gICAgICAgICAgICAgICAgeCA9PT0gUGF0aFRva2Vucy5lYWNoID8gUGF0aFRva2Vucy5jdXJyZW50IDogeFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ocGF0aFBhcnRzLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBpZiAodGhpcy5pc1Jlc29sdmVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTk9URSDQotGD0YIg0L3QtSDQv9C+0LvRg9GH0LDQtdGC0YHRjyDQvdCw0LvQvtC20LjRgtGMINC00LjRgdC60YDQuNC80LjQvdCw0YLQvtGAXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBjb25zdCBwYXRoUGFydHM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSB0aGlzLnRva2Vucy5tYXAoeCA9PlxuICAgICAgICAgICAgICAgIHggPT09IFBhdGhUb2tlbnMuY3VycmVudCA/IFBhdGhUb2tlbnMuZWFjaCA6IHhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8VFJlc29sdmVkLCBUQWJzb2x1dGU+KHBhdGhQYXJ0cywgdGhpcy5hYnNvbHV0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCAnJHt0aGlzLnRvTGVnYWN5UGF0aCgpfSBpcyBub3QgYWJzb2x1dGUnYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgdHJ1ZT4odGhpcy50b2tlbnMsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyAqZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuaXNBYnNvbHV0ZSgpKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBJdGVyVXRpbHMuc2tpcExhc3QodGhpcy5nZXRQYXRoUGFydHMoKSwgMSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9rZW4pO1xuICAgICAgICAgICAgeWllbGQgcmVzdWx0LnRvUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaW1MYXN0U3RhcklmTGFzdFRva2VuKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBJdGVyVXRpbHMubGFzdCh0aGlzLnRva2Vucyk7XG4gICAgICAgIGlmIChsYXN0SXRlbSAhPSB1bmRlZmluZWQgJiYgUGF0aFRva2Vucy5pc011bHRpVG9rZW4obGFzdEl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodGhpcy50b2tlbnMuc2xpY2UoMCwgLTEpLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFyZW50UGF0aCgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuYWJzb2x1dGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIEl0ZXJVdGlscy5za2lwTGFzdCh0aGlzLmdldFBhdGhQYXJ0cygpLCAxKSkge1xuICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNvbHZlZCgpIHx8IGluc3RhbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbnN0YW5jZUNvdW50ZXIgPSAwO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0cnVlKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLmdldFBhdGhQYXJ0cygpKSB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc011bHRpVG9rZW4odG9rZW4pICYmIGluc3RhbmNlQ291bnRlciA8IGluc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGluc3RhbmNlc1tpbnN0YW5jZUNvdW50ZXJdID8/IHJlamVjdCgpKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNvdW50ZXIrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXRoUGFydFRvU3RyaW5nKHBhdGhQYXJ0OiBQYXRoVG9rZW4pOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIHBhdGhQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aFBhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBcIipcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiKlwiO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwYXRoIHBhcnQgc3BlY2lmaWVkOiAke2Vuc3VyZUFuZEdldFN0cmluZyhwYXRoUGFydCl9YCk7XG4gICAgfVxufVxuIl19
|
|
@@ -5,24 +5,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.StringArrayKey = void 0;
|
|
7
7
|
|
|
8
|
+
var _hashUtils = require("./hashUtils");
|
|
9
|
+
|
|
8
10
|
class StringArrayKey {
|
|
9
11
|
constructor(items) {
|
|
10
12
|
this.items = void 0;
|
|
11
13
|
this.items = items;
|
|
12
14
|
}
|
|
13
15
|
|
|
14
|
-
getSimpleHashByString(source) {
|
|
15
|
-
let result = 0;
|
|
16
|
-
|
|
17
|
-
for (let index = 0; index < source.length; index++) {
|
|
18
|
-
result = (result << 5) - result + source.charCodeAt(index) | 0;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return result;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
16
|
getHash() {
|
|
25
|
-
return this.items.reduce((acc, current) => acc +
|
|
17
|
+
return this.items.reduce((acc, current) => acc + (0, _hashUtils.getSimpleHashByString)(current), 0);
|
|
26
18
|
}
|
|
27
19
|
|
|
28
20
|
isEquals(right) {
|
|
@@ -36,4 +28,4 @@ class StringArrayKey {
|
|
|
36
28
|
}
|
|
37
29
|
|
|
38
30
|
exports.StringArrayKey = StringArrayKey;
|
|
39
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9TdHJpbmdBcnJheUtleS50cyJdLCJuYW1lcyI6WyJTdHJpbmdBcnJheUtleSIsImNvbnN0cnVjdG9yIiwiaXRlbXMiLCJnZXRIYXNoIiwicmVkdWNlIiwiYWNjIiwiY3VycmVudCIsImlzRXF1YWxzIiwicmlnaHQiLCJsZW5ndGgiLCJldmVyeSIsIml0ZW0iLCJpbmRleCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQUVPLE1BQU1BLGNBQU4sQ0FBMkQ7QUFHdkRDLEVBQUFBLFdBQVcsQ0FBQ0MsS0FBRCxFQUFrQjtBQUFBLFNBRm5CQSxLQUVtQjtBQUNoQyxTQUFLQSxLQUFMLEdBQWFBLEtBQWI7QUFDSDs7QUFFTUMsRUFBQUEsT0FBTyxHQUFXO0FBQ3JCLFdBQU8sS0FBS0QsS0FBTCxDQUFXRSxNQUFYLENBQWtCLENBQUNDLEdBQUQsRUFBTUMsT0FBTixLQUFrQkQsR0FBRyxHQUFHLHNDQUFzQkMsT0FBdEIsQ0FBMUMsRUFBMEUsQ0FBMUUsQ0FBUDtBQUNIOztBQUVNQyxFQUFBQSxRQUFRLENBQUNDLEtBQUQsRUFBaUM7QUFDNUMsUUFBSSxLQUFLTixLQUFMLENBQVdPLE1BQVgsSUFBcUJELEtBQUssQ0FBQ04sS0FBTixDQUFZTyxNQUFyQyxFQUE2QztBQUN6QyxhQUFPLEtBQVA7QUFDSDs7QUFDRCxXQUFPLEtBQUtQLEtBQUwsQ0FBV1EsS0FBWCxDQUFpQixDQUFDQyxJQUFELEVBQU9DLEtBQVAsS0FBaUJELElBQUksS0FBS0gsS0FBSyxDQUFDTixLQUFOLENBQVlVLEtBQVosQ0FBM0MsQ0FBUDtBQUNIOztBQWhCNkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRXF1YXRhYmxlIH0gZnJvbSBcIi4vTW9kZWxQYXRoL0lFcXVhdGFibGVcIjtcbmltcG9ydCB7IGdldFNpbXBsZUhhc2hCeVN0cmluZyB9IGZyb20gXCIuL2hhc2hVdGlsc1wiO1xuXG5leHBvcnQgY2xhc3MgU3RyaW5nQXJyYXlLZXkgaW1wbGVtZW50cyBJRXF1YXRhYmxlPFN0cmluZ0FycmF5S2V5PiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpdGVtczogc3RyaW5nW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaXRlbXM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SGFzaCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5yZWR1Y2UoKGFjYywgY3VycmVudCkgPT4gYWNjICsgZ2V0U2ltcGxlSGFzaEJ5U3RyaW5nKGN1cnJlbnQpLCAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFcXVhbHMocmlnaHQ6IFN0cmluZ0FycmF5S2V5KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCAhPSByaWdodC5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5ldmVyeSgoaXRlbSwgaW5kZXgpID0+IGl0ZW0gPT09IHJpZ2h0Lml0ZW1zW2luZGV4XSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getSimpleHashByString = getSimpleHashByString;
|
|
7
|
+
|
|
8
|
+
function getSimpleHashByString(source) {
|
|
9
|
+
let result = 0;
|
|
10
|
+
|
|
11
|
+
for (let index = 0; index < source.length; index++) {
|
|
12
|
+
result = (result << 5) - result + source.charCodeAt(index) | 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9oYXNoVXRpbHMudHMiXSwibmFtZXMiOlsiZ2V0U2ltcGxlSGFzaEJ5U3RyaW5nIiwic291cmNlIiwicmVzdWx0IiwiaW5kZXgiLCJsZW5ndGgiLCJjaGFyQ29kZUF0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQU8sU0FBU0EscUJBQVQsQ0FBK0JDLE1BQS9CLEVBQXVEO0FBQzFELE1BQUlDLE1BQU0sR0FBRyxDQUFiOztBQUNBLE9BQUssSUFBSUMsS0FBSyxHQUFHLENBQWpCLEVBQW9CQSxLQUFLLEdBQUdGLE1BQU0sQ0FBQ0csTUFBbkMsRUFBMkNELEtBQUssRUFBaEQsRUFBb0Q7QUFDaERELElBQUFBLE1BQU0sR0FBSSxDQUFDQSxNQUFNLElBQUksQ0FBWCxJQUFnQkEsTUFBaEIsR0FBeUJELE1BQU0sQ0FBQ0ksVUFBUCxDQUFrQkYsS0FBbEIsQ0FBMUIsR0FBc0QsQ0FBL0Q7QUFDSDs7QUFDRCxTQUFPRCxNQUFQO0FBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2V0U2ltcGxlSGFzaEJ5U3RyaW5nKHNvdXJjZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc291cmNlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSAoKHJlc3VsdCA8PCA1KSAtIHJlc3VsdCArIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkgfCAwO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIl19
|
|
@@ -133,4 +133,4 @@ function getFormConfigFromSource(formConfig, logger) {
|
|
|
133
133
|
} : undefined
|
|
134
134
|
};
|
|
135
135
|
}
|
|
136
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9CdWlsZFRhc2tzL1Jlc29sdmVGb3JtSW5mby50cyJdLCJuYW1lcyI6WyJGb3JtQnVpbGRNb2RlIiwicmVzb2x2ZUZvcm1JbmZvIiwiZm9ybUpzb25GaWxlIiwicGF0aFRvRm9ybSIsIl9lbmdpbmVEaXJlY3RvcnkiLCJsb2dnZXIiLCJ1cGdyYWRlRm9ybUpzb24iLCJ1c2VMYXN0U3RhYmxlVmVyc2lvbiIsInVzZVByZXJlbGVhc2VWZXJzaW9uIiwibmlnaHRseSIsImZvcm1Db25maWciLCJyZWFkRm9ybUNvbmZpZyIsInVuZGVmaW5lZCIsIkVycm9yIiwiZGVwZW5kZW5jaWVzIiwiZW5naW5lIiwiZ2VuZXJhdG9yIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsInByZXJlbGVhc2VWZXJzaW9uRm9ybUpzb24iLCJnZW5lcmF0b3JWZXJzaW9uIiwiZW5naW5lVmVyc2lvbiIsInR5cGUiLCJwcmVJZCIsInRoZW1lcyIsIm1vZGUiLCJOb0VkaXRvciIsIkNvcHlMZWdhY3lQcmVidWlsdFJlc291cmNlcyIsIk5vcm1hbEJ1aWxkIiwiZm9ybU5hbWUiLCJwYXRoIiwiYmFzZW5hbWUiLCJmb3JtU291cmNlc1BhdGgiLCJpc05ld0Zvcm1Kc29uRm9ybWF0IiwiZ2V0Rm9ybUNvbmZpZ0Zyb21Tb3VyY2UiLCJzZXR0aW5ncyIsInVzZVNlcnZlclNpZGVGTGFuZ05vcm1hbGl6YXRpb24iLCJ4IiwiYnVpbGQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFLQTs7SUFFWUEsYTs7O1dBQUFBLGE7QUFBQUEsRUFBQUEsYSxDQUFBQSxhO0FBQUFBLEVBQUFBLGEsQ0FBQUEsYTtBQUFBQSxFQUFBQSxhLENBQUFBLGE7R0FBQUEsYSw2QkFBQUEsYTs7QUE2Q0wsZUFBZUMsZUFBZixDQUNIQyxZQURHLEVBRUhDLFVBRkcsRUFHSEMsZ0JBSEcsRUFJSEMsTUFBZSxHQUFHLDhCQUpmLEVBS0hDLGVBQXdCLEdBQUcsS0FMeEIsRUFNSEMsb0JBQTZCLEdBQUcsS0FON0IsRUFPSEMsb0JBUEcsRUFRSEMsT0FBZ0IsR0FBRyxLQVJoQixFQVNjO0FBQUE7O0FBQ2pCLFFBQU1DLFVBQVUsR0FBRyxNQUFNQyxjQUFjLENBQUNULFlBQUQsRUFBZUcsTUFBZixDQUF2Qzs7QUFDQSxNQUFJRSxvQkFBb0IsSUFBSUMsb0JBQW9CLElBQUlJLFNBQXBELEVBQStEO0FBQzNELFVBQU0sSUFBSUMsS0FBSixDQUFVLGtGQUFWLENBQU47QUFDSDs7QUFDRCxNQUFJTixvQkFBSixFQUEwQjtBQUN0QkcsSUFBQUEsVUFBVSxDQUFDSSxZQUFYLEdBQTBCO0FBQ3RCQyxNQUFBQSxNQUFNLEVBQUUsTUFBTSx3REFEUTtBQUV0QkMsTUFBQUEsU0FBUyxFQUFFLE1BQU07QUFGSyxLQUExQjtBQUlBWCxJQUFBQSxNQUFNLENBQUNZLEdBQVAsQ0FBWSxrQ0FBaUNQLFVBQVUsQ0FBQ0ksWUFBWCxDQUF3QkMsTUFBTyxFQUE1RTtBQUNBLFVBQU0sNkJBQWViLFlBQWYsRUFBNkJnQixJQUFJLENBQUNDLFNBQUwsQ0FBZVQsVUFBZixFQUEyQkUsU0FBM0IsRUFBc0MsSUFBdEMsQ0FBN0IsRUFBMEUsTUFBMUUsQ0FBTjtBQUNIOztBQUNELE1BQUlKLG9CQUFvQixJQUFJSSxTQUE1QixFQUF1QztBQUNuQyxVQUFNUSx5QkFBeUIsR0FBRyxNQUFNLHlEQUE2Qlosb0JBQTdCLENBQXhDOztBQUNBLFFBQUlZLHlCQUF5QixJQUFJUixTQUFqQyxFQUE0QztBQUN4Q0YsTUFBQUEsVUFBVSxDQUFDSSxZQUFYLEdBQTBCO0FBQ3RCQyxRQUFBQSxNQUFNLEVBQUVLLHlCQURjO0FBRXRCSixRQUFBQSxTQUFTLEVBQUVJO0FBRlcsT0FBMUI7QUFJQWYsTUFBQUEsTUFBTSxDQUFDWSxHQUFQLENBQVksc0NBQXFDUCxVQUFVLENBQUNJLFlBQVgsQ0FBd0JDLE1BQU8sRUFBaEY7QUFDSDs7QUFDRCxVQUFNLDZCQUFlYixZQUFmLEVBQTZCZ0IsSUFBSSxDQUFDQyxTQUFMLENBQWVULFVBQWYsRUFBMkJFLFNBQTNCLEVBQXNDLElBQXRDLENBQTdCLEVBQTBFLE1BQTFFLENBQU47QUFDSDs7QUFDRCxNQUFJUyxnQkFBZ0IsR0FDaEIsMEJBQUFYLFVBQVUsQ0FBQ0ksWUFBWCxnRkFBeUJFLFNBQXpCLEtBQXNDSixTQUF0QyxHQUNNLG9DQUFzQkYsVUFBVSxDQUFDSSxZQUFYLENBQXdCRSxTQUE5QyxDQUROLEdBRU1KLFNBSFY7QUFJQSxNQUFJVSxhQUFhLEdBQ2IsMkJBQUFaLFVBQVUsQ0FBQ0ksWUFBWCxrRkFBeUJDLE1BQXpCLEtBQW1DSCxTQUFuQyxHQUNNLG9DQUFzQkYsVUFBVSxDQUFDSSxZQUFYLENBQXdCQyxNQUE5QyxDQUROLEdBRU1ILFNBSFY7O0FBSUEsTUFBSUgsT0FBSixFQUFhO0FBQ1RZLElBQUFBLGdCQUFnQixHQUFHO0FBQUVFLE1BQUFBLElBQUksRUFBRSxLQUFSO0FBQWVDLE1BQUFBLEtBQUssRUFBRTtBQUF0QixLQUFuQjtBQUNBRixJQUFBQSxhQUFhLEdBQUc7QUFBRUMsTUFBQUEsSUFBSSxFQUFFLEtBQVI7QUFBZUMsTUFBQUEsS0FBSyxFQUFFO0FBQXRCLEtBQWhCO0FBQ0g7O0FBQ0QsTUFBSWxCLGVBQUosRUFBcUI7QUFDakIsVUFBTSw2QkFBZUosWUFBZixFQUE2QmdCLElBQUksQ0FBQ0MsU0FBTCxDQUFlVCxVQUFmLEVBQTJCRSxTQUEzQixFQUFzQyxJQUF0QyxDQUE3QixFQUEwRSxNQUExRSxDQUFOO0FBQ0g7O0FBQ0QsU0FBTztBQUNIYSxJQUFBQSxNQUFNLEVBQUVmLFVBQVUsQ0FBQ2UsTUFEaEI7QUFFSEMsSUFBQUEsSUFBSSxFQUNBaEIsVUFBVSxDQUFDZ0IsSUFBWCxLQUFvQixXQUFwQixHQUNNMUIsYUFBYSxDQUFDMkIsUUFEcEIsR0FFTWpCLFVBQVUsQ0FBQ2dCLElBQVgsS0FBb0IsZ0NBQXBCLEdBQ0ExQixhQUFhLENBQUM0QiwyQkFEZCxHQUVBNUIsYUFBYSxDQUFDNkIsV0FQckI7QUFRSEMsSUFBQUEsUUFBUSxFQUFFQyxjQUFLQyxRQUFMLENBQWM3QixVQUFkLENBUlA7QUFTSDhCLElBQUFBLGVBQWUsRUFBRTlCLFVBVGQ7QUFVSGtCLElBQUFBLGdCQUFnQixFQUFFQSxnQkFWZjtBQVdIQyxJQUFBQSxhQUFhLEVBQUVBO0FBWFosR0FBUDtBQWFIOztBQUVNLGVBQWVZLG1CQUFmLENBQW1DaEMsWUFBbkMsRUFBMkU7QUFDOUU7QUFDQSxRQUFNUSxVQUE2QixHQUFHLE1BQU0sdUJBQVNSLFlBQVQsQ0FBNUM7QUFDQSxTQUFPUSxVQUFVLENBQUNJLFlBQVgsSUFBMkJGLFNBQWxDO0FBQ0g7O0FBRU0sZUFBZUQsY0FBZixDQUE4QlQsWUFBOUIsRUFBb0RHLE1BQXBELEVBQTBGO0FBQzdGO0FBQ0EsUUFBTUssVUFBNkIsR0FBRyxNQUFNLHVCQUFTUixZQUFULENBQTVDO0FBQ0EsU0FBT2lDLHVCQUF1QixDQUFDekIsVUFBRCxFQUFhTCxNQUFiLENBQTlCO0FBQ0g7O0FBRU0sU0FBUzhCLHVCQUFULENBQWlDekIsVUFBakMsRUFBZ0VMLE1BQWhFLEVBQTZGO0FBQUE7O0FBQ2hHO0FBQ0EsTUFDSSwyQkFBQUssVUFBVSxDQUFDSSxZQUFYLGtGQUF5QkUsU0FBekIsS0FBc0NKLFNBQXRDLElBQ0EsQ0FBQyx3Q0FBMEJGLFVBQVUsQ0FBQ0ksWUFBWCxDQUF3QkUsU0FBbEQsQ0FGTCxFQUdFO0FBQ0UsVUFBTSxJQUFJSCxLQUFKLENBQVcsR0FBRUgsVUFBVSxDQUFDSSxZQUFYLENBQXdCRSxTQUFVLDhCQUEvQyxDQUFOO0FBQ0g7O0FBRUQsTUFBSSwyQkFBQU4sVUFBVSxDQUFDSSxZQUFYLGtGQUF5QkMsTUFBekIsS0FBbUNILFNBQW5DLElBQWdELENBQUMsd0NBQTBCRixVQUFVLENBQUNJLFlBQVgsQ0FBd0JDLE1BQWxELENBQXJELEVBQWdIO0FBQzVHLFVBQU0sSUFBSUYsS0FBSixDQUFXLEdBQUVILFVBQVUsQ0FBQ0ksWUFBWCxDQUF3QkMsTUFBTyw4QkFBNUMsQ0FBTjtBQUNIOztBQUVELFFBQU1xQixRQUFRLEdBQUc7QUFDYkMsSUFBQUEsK0JBQStCLEVBQUUsS0FEcEI7QUFFYixPQUFHLDRDQUFPM0IsVUFBVSxDQUFDMEIsUUFBbEIsdUVBQThCLEVBQTlCLEVBQWtDRSxDQUFDLElBQUlBLENBQUMsS0FBSzFCLFNBQTdDO0FBRlUsR0FBakI7QUFLQSxTQUFPO0FBQ0hhLElBQUFBLE1BQU0sRUFBRWYsVUFBVSxDQUFDZSxNQURoQjtBQUVIYyxJQUFBQSxLQUFLLEVBQUU3QixVQUFVLENBQUM2QixLQUFYLElBQW9CLFFBRnhCO0FBR0hiLElBQUFBLElBQUksc0JBQUVoQixVQUFVLENBQUNnQixJQUFiLCtEQUFxQixjQUh0QjtBQUlIVSxJQUFBQSxRQUFRLEVBQUVBLFFBSlA7QUFLSHRCLElBQUFBLFlBQVksRUFDUkosVUFBVSxDQUFDSSxZQUFYLElBQTJCRixTQUEzQixHQUNNO0FBQ0lJLE1BQUFBLFNBQVMsRUFBRU4sVUFBVSxDQUFDSSxZQUFYLENBQXdCRSxTQUR2QztBQUVJRCxNQUFBQSxNQUFNLEVBQUVMLFVBQVUsQ0FBQ0ksWUFBWCxDQUF3QkM7QUFGcEMsS0FETixHQUtNSDtBQVhQLEdBQVA7QUFhSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IHJlYWRKc29uIH0gZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgeyBwaWNrQnkgfSBmcm9tIFwibG9kYXNoXCI7XG5cbmltcG9ydCB7IHdyaXRlRmlsZUFzeW5jIH0gZnJvbSBcIi4uL0NvbW1vbnMvRnNVdGlsc1wiO1xuaW1wb3J0IHsgSUxvZ2dlciB9IGZyb20gXCIuLi9Db21tb25zL0xvZ2dpbmcvSUxvZ2dlclwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIi4uL0NvbW1vbnMvTG9nZ2luZy9TdGF0aWNMb2dnZXJcIjtcblxuaW1wb3J0IHtcbiAgICBnZXRMYXN0U3RhYmxlRW5naW5lVmVyc2lvbixcbiAgICBnZXRMYXN0U3RhYmxlR2VuZXJhdG9yVmVyc2lvbixcbiAgICBnZXRQcmVyZWxlYXNlVmVyc2lvbkZvcm1Kc29uLFxufSBmcm9tIFwiLi9QdWJsaXNoZWRWZXJzaW9uVXRpbHNcIjtcbmltcG9ydCB7IENhbmR5VmVyc2lvblNwZWMsIGlzVmFsaWRTZW1WZXJWZXJzaW9uUmFuZ2UsIHBhcnNlQ2FuZHlWZXJzaW9uU3BlYyB9IGZyb20gXCIuL1ZlcnNpb25cIjtcblxuZXhwb3J0IGVudW0gRm9ybUJ1aWxkTW9kZSB7XG4gICAgTm9ybWFsQnVpbGQsXG4gICAgTm9FZGl0b3IsXG4gICAgQ29weUxlZ2FjeVByZWJ1aWx0UmVzb3VyY2VzLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1JbmZvIHtcbiAgICB0aGVtZXM/OiBzdHJpbmdbXTtcbiAgICBtb2RlOiBGb3JtQnVpbGRNb2RlO1xuICAgIGZvcm1OYW1lOiBzdHJpbmc7XG4gICAgZm9ybVNvdXJjZXNQYXRoOiBzdHJpbmc7XG4gICAgZ2VuZXJhdG9yVmVyc2lvbjogdW5kZWZpbmVkIHwgQ2FuZHlWZXJzaW9uU3BlYztcbiAgICBlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBDYW5keVZlcnNpb25TcGVjO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1Db25maWdDb250ZW50IHtcbiAgICB0aGVtZXM/OiBzdHJpbmdbXTtcbiAgICBidWlsZD86IFwiY2lcIiB8IFwibWFudWFsXCI7XG4gICAgbW9kZT86IFwibm8tZWRpdG9yXCIgfCBcImNvcHktbGVnYWN5LXByZWJ1aWx0LXJlc291cmNlc1wiO1xuICAgIGRlcGVuZGVuY2llcz86IHtcbiAgICAgICAgZ2VuZXJhdG9yPzogc3RyaW5nO1xuICAgICAgICBlbmdpbmU/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBzZXR0aW5ncz86IHtcbiAgICAgICAgdXNlU2VydmVyU2lkZUZMYW5nTm9ybWFsaXphdGlvbj86IGJvb2xlYW47XG4gICAgICAgIGF1dG9DYWxjdWxhdGlvbkNhbGN1bGF0b3JJbXBsPzogXCJjYWxjdWxhdG9yMlwiO1xuICAgICAgICBkaXNhYmxlRmxhbmdSdWxlc0ZvckVuYWJsZUF1dG9GaWVsZEZlYXR1cmU/OiBib29sZWFuO1xuICAgIH07XG59XG5cbmludGVyZmFjZSBGb3JtQ29uZmlnIHtcbiAgICB0aGVtZXM/OiBzdHJpbmdbXTtcbiAgICBidWlsZD86IFwiY2lcIiB8IFwibWFudWFsXCI7XG4gICAgbW9kZT86IFwibm8tZWRpdG9yXCIgfCBcImNvcHktbGVnYWN5LXByZWJ1aWx0LXJlc291cmNlc1wiIHwgXCJub3JtYWwtYnVpbGRcIjtcbiAgICBkZXBlbmRlbmNpZXM/OiB7XG4gICAgICAgIGdlbmVyYXRvcjogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICAgICAgICBlbmdpbmU6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICB9O1xuICAgIHNldHRpbmdzOiB7XG4gICAgICAgIHVzZVNlcnZlclNpZGVGTGFuZ05vcm1hbGl6YXRpb246IGJvb2xlYW47XG4gICAgICAgIGF1dG9DYWxjdWxhdGlvbkNhbGN1bGF0b3JJbXBsPzogXCJjYWxjdWxhdG9yMlwiIHwgXCJkZWZhdWx0XCI7XG4gICAgICAgIGRpc2FibGVGbGFuZ1J1bGVzRm9yRW5hYmxlQXV0b0ZpZWxkRmVhdHVyZT86IGJvb2xlYW47XG4gICAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGb3JtSW5mbyhcbiAgICBmb3JtSnNvbkZpbGU6IHN0cmluZyxcbiAgICBwYXRoVG9Gb3JtOiBzdHJpbmcsXG4gICAgX2VuZ2luZURpcmVjdG9yeTogdW5kZWZpbmVkIHwgc3RyaW5nLFxuICAgIGxvZ2dlcjogSUxvZ2dlciA9IGdldExvZ2dlcigpLFxuICAgIHVwZ3JhZGVGb3JtSnNvbjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHVzZUxhc3RTdGFibGVWZXJzaW9uOiBib29sZWFuID0gZmFsc2UsXG4gICAgdXNlUHJlcmVsZWFzZVZlcnNpb24/OiBzdHJpbmcsXG4gICAgbmlnaHRseTogYm9vbGVhbiA9IGZhbHNlXG4pOiBQcm9taXNlPEZvcm1JbmZvPiB7XG4gICAgY29uc3QgZm9ybUNvbmZpZyA9IGF3YWl0IHJlYWRGb3JtQ29uZmlnKGZvcm1Kc29uRmlsZSwgbG9nZ2VyKTtcbiAgICBpZiAodXNlTGFzdFN0YWJsZVZlcnNpb24gJiYgdXNlUHJlcmVsZWFzZVZlcnNpb24gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcItCd0LXQvtCx0YXQvtC00LjQvNC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQu9C40LHQviDRhNC70LDQsyB1c2VMYXN0U3RhYmxlVmVyc2lvbiDQu9C40LHQviB1c2VQcmVyZWxlYXNlVmVyc2lvblwiKTtcbiAgICB9XG4gICAgaWYgKHVzZUxhc3RTdGFibGVWZXJzaW9uKSB7XG4gICAgICAgIGZvcm1Db25maWcuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICAgICAgZW5naW5lOiBhd2FpdCBnZXRMYXN0U3RhYmxlRW5naW5lVmVyc2lvbigpLFxuICAgICAgICAgICAgZ2VuZXJhdG9yOiBhd2FpdCBnZXRMYXN0U3RhYmxlR2VuZXJhdG9yVmVyc2lvbigpLFxuICAgICAgICB9O1xuICAgICAgICBsb2dnZXIubG9nKGBVcGRhdGVkIHRvIGxhc3Qgc3RhYmxlIHZlcnNpb24gJHtmb3JtQ29uZmlnLmRlcGVuZGVuY2llcy5lbmdpbmV9YCk7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZUFzeW5jKGZvcm1Kc29uRmlsZSwgSlNPTi5zdHJpbmdpZnkoZm9ybUNvbmZpZywgdW5kZWZpbmVkLCBcIiAgXCIpLCBcInV0ZjhcIik7XG4gICAgfVxuICAgIGlmICh1c2VQcmVyZWxlYXNlVmVyc2lvbiAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgcHJlcmVsZWFzZVZlcnNpb25Gb3JtSnNvbiA9IGF3YWl0IGdldFByZXJlbGVhc2VWZXJzaW9uRm9ybUpzb24odXNlUHJlcmVsZWFzZVZlcnNpb24pO1xuICAgICAgICBpZiAocHJlcmVsZWFzZVZlcnNpb25Gb3JtSnNvbiAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvcm1Db25maWcuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICAgICAgICAgIGVuZ2luZTogcHJlcmVsZWFzZVZlcnNpb25Gb3JtSnNvbixcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IHByZXJlbGVhc2VWZXJzaW9uRm9ybUpzb24sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbG9nZ2VyLmxvZyhgVXBkYXRlZCB0byBsYXN0IHByZXJlbGVhc2UgdmVyc2lvbiAke2Zvcm1Db25maWcuZGVwZW5kZW5jaWVzLmVuZ2luZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB3cml0ZUZpbGVBc3luYyhmb3JtSnNvbkZpbGUsIEpTT04uc3RyaW5naWZ5KGZvcm1Db25maWcsIHVuZGVmaW5lZCwgXCIgIFwiKSwgXCJ1dGY4XCIpO1xuICAgIH1cbiAgICBsZXQgZ2VuZXJhdG9yVmVyc2lvbiA9XG4gICAgICAgIGZvcm1Db25maWcuZGVwZW5kZW5jaWVzPy5nZW5lcmF0b3IgIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHBhcnNlQ2FuZHlWZXJzaW9uU3BlYyhmb3JtQ29uZmlnLmRlcGVuZGVuY2llcy5nZW5lcmF0b3IpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBsZXQgZW5naW5lVmVyc2lvbiA9XG4gICAgICAgIGZvcm1Db25maWcuZGVwZW5kZW5jaWVzPy5lbmdpbmUgIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHBhcnNlQ2FuZHlWZXJzaW9uU3BlYyhmb3JtQ29uZmlnLmRlcGVuZGVuY2llcy5lbmdpbmUpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBpZiAobmlnaHRseSkge1xuICAgICAgICBnZW5lcmF0b3JWZXJzaW9uID0geyB0eXBlOiBcInByZVwiLCBwcmVJZDogXCJuaWdodGx5XCIgfTtcbiAgICAgICAgZW5naW5lVmVyc2lvbiA9IHsgdHlwZTogXCJwcmVcIiwgcHJlSWQ6IFwibmlnaHRseVwiIH07XG4gICAgfVxuICAgIGlmICh1cGdyYWRlRm9ybUpzb24pIHtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlQXN5bmMoZm9ybUpzb25GaWxlLCBKU09OLnN0cmluZ2lmeShmb3JtQ29uZmlnLCB1bmRlZmluZWQsIFwiICBcIiksIFwidXRmOFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGhlbWVzOiBmb3JtQ29uZmlnLnRoZW1lcyxcbiAgICAgICAgbW9kZTpcbiAgICAgICAgICAgIGZvcm1Db25maWcubW9kZSA9PT0gXCJuby1lZGl0b3JcIlxuICAgICAgICAgICAgICAgID8gRm9ybUJ1aWxkTW9kZS5Ob0VkaXRvclxuICAgICAgICAgICAgICAgIDogZm9ybUNvbmZpZy5tb2RlID09PSBcImNvcHktbGVnYWN5LXByZWJ1aWx0LXJlc291cmNlc1wiXG4gICAgICAgICAgICAgICAgPyBGb3JtQnVpbGRNb2RlLkNvcHlMZWdhY3lQcmVidWlsdFJlc291cmNlc1xuICAgICAgICAgICAgICAgIDogRm9ybUJ1aWxkTW9kZS5Ob3JtYWxCdWlsZCxcbiAgICAgICAgZm9ybU5hbWU6IHBhdGguYmFzZW5hbWUocGF0aFRvRm9ybSksXG4gICAgICAgIGZvcm1Tb3VyY2VzUGF0aDogcGF0aFRvRm9ybSxcbiAgICAgICAgZ2VuZXJhdG9yVmVyc2lvbjogZ2VuZXJhdG9yVmVyc2lvbixcbiAgICAgICAgZW5naW5lVmVyc2lvbjogZW5naW5lVmVyc2lvbixcbiAgICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNOZXdGb3JtSnNvbkZvcm1hdChmb3JtSnNvbkZpbGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby11bnNhZmUtYW55XG4gICAgY29uc3QgZm9ybUNvbmZpZzogRm9ybUNvbmZpZ0NvbnRlbnQgPSBhd2FpdCByZWFkSnNvbihmb3JtSnNvbkZpbGUpO1xuICAgIHJldHVybiBmb3JtQ29uZmlnLmRlcGVuZGVuY2llcyAhPSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkRm9ybUNvbmZpZyhmb3JtSnNvbkZpbGU6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyKTogUHJvbWlzZTxGb3JtQ29uZmlnPiB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1hbnlcbiAgICBjb25zdCBmb3JtQ29uZmlnOiBGb3JtQ29uZmlnQ29udGVudCA9IGF3YWl0IHJlYWRKc29uKGZvcm1Kc29uRmlsZSk7XG4gICAgcmV0dXJuIGdldEZvcm1Db25maWdGcm9tU291cmNlKGZvcm1Db25maWcsIGxvZ2dlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtQ29uZmlnRnJvbVNvdXJjZShmb3JtQ29uZmlnOiBGb3JtQ29uZmlnQ29udGVudCwgbG9nZ2VyOiBJTG9nZ2VyKTogRm9ybUNvbmZpZyB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLXVuc2FmZS1hbnlcbiAgICBpZiAoXG4gICAgICAgIGZvcm1Db25maWcuZGVwZW5kZW5jaWVzPy5nZW5lcmF0b3IgIT0gdW5kZWZpbmVkICYmXG4gICAgICAgICFpc1ZhbGlkU2VtVmVyVmVyc2lvblJhbmdlKGZvcm1Db25maWcuZGVwZW5kZW5jaWVzLmdlbmVyYXRvcilcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Zvcm1Db25maWcuZGVwZW5kZW5jaWVzLmdlbmVyYXRvcn0gaXMgbm90IHZhbGlkIHZlcnNpb24gZm9ybWF0YCk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1Db25maWcuZGVwZW5kZW5jaWVzPy5lbmdpbmUgIT0gdW5kZWZpbmVkICYmICFpc1ZhbGlkU2VtVmVyVmVyc2lvblJhbmdlKGZvcm1Db25maWcuZGVwZW5kZW5jaWVzLmVuZ2luZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Zvcm1Db25maWcuZGVwZW5kZW5jaWVzLmVuZ2luZX0gaXMgbm90IHZhbGlkIHZlcnNpb24gZm9ybWF0YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICAgIHVzZVNlcnZlclNpZGVGTGFuZ05vcm1hbGl6YXRpb246IGZhbHNlLFxuICAgICAgICAuLi5waWNrQnkoZm9ybUNvbmZpZy5zZXR0aW5ncyA/PyB7fSwgeCA9PiB4ICE9PSB1bmRlZmluZWQpLFxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0aGVtZXM6IGZvcm1Db25maWcudGhlbWVzLFxuICAgICAgICBidWlsZDogZm9ybUNvbmZpZy5idWlsZCB8fCBcIm1hbnVhbFwiLFxuICAgICAgICBtb2RlOiBmb3JtQ29uZmlnLm1vZGUgPz8gXCJub3JtYWwtYnVpbGRcIixcbiAgICAgICAgc2V0dGluZ3M6IHNldHRpbmdzLFxuICAgICAgICBkZXBlbmRlbmNpZXM6XG4gICAgICAgICAgICBmb3JtQ29uZmlnLmRlcGVuZGVuY2llcyAhPSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGZvcm1Db25maWcuZGVwZW5kZW5jaWVzLmdlbmVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICBlbmdpbmU6IGZvcm1Db25maWcuZGVwZW5kZW5jaWVzLmVuZ2luZSxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xufVxuIl19
|
|
136
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9CdWlsZFRhc2tzL1Jlc29sdmVGb3JtSW5mby50cyJdLCJuYW1lcyI6WyJGb3JtQnVpbGRNb2RlIiwicmVzb2x2ZUZvcm1JbmZvIiwiZm9ybUpzb25GaWxlIiwicGF0aFRvRm9ybSIsIl9lbmdpbmVEaXJlY3RvcnkiLCJsb2dnZXIiLCJ1cGdyYWRlRm9ybUpzb24iLCJ1c2VMYXN0U3RhYmxlVmVyc2lvbiIsInVzZVByZXJlbGVhc2VWZXJzaW9uIiwibmlnaHRseSIsImZvcm1Db25maWciLCJyZWFkRm9ybUNvbmZpZyIsInVuZGVmaW5lZCIsIkVycm9yIiwiZGVwZW5kZW5jaWVzIiwiZW5naW5lIiwiZ2VuZXJhdG9yIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsInByZXJlbGVhc2VWZXJzaW9uRm9ybUpzb24iLCJnZW5lcmF0b3JWZXJzaW9uIiwiZW5naW5lVmVyc2lvbiIsInR5cGUiLCJwcmVJZCIsInRoZW1lcyIsIm1vZGUiLCJOb0VkaXRvciIsIkNvcHlMZWdhY3lQcmVidWlsdFJlc291cmNlcyIsIk5vcm1hbEJ1aWxkIiwiZm9ybU5hbWUiLCJwYXRoIiwiYmFzZW5hbWUiLCJmb3JtU291cmNlc1BhdGgiLCJpc05ld0Zvcm1Kc29uRm9ybWF0IiwiZ2V0Rm9ybUNvbmZpZ0Zyb21Tb3VyY2UiLCJzZXR0aW5ncyIsInVzZVNlcnZlclNpZGVGTGFuZ05vcm1hbGl6YXRpb24iLCJ4IiwiYnVpbGQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFLQTs7SUFFWUEsYTs7O1dBQUFBLGE7QUFBQUEsRUFBQUEsYSxDQUFBQSxhO0FBQUFBLEVBQUFBLGEsQ0FBQUEsYTtBQUFBQSxFQUFBQSxhLENBQUFBLGE7R0FBQUEsYSw2QkFBQUEsYTs7QUErQ0wsZUFBZUMsZUFBZixDQUNIQyxZQURHLEVBRUhDLFVBRkcsRUFHSEMsZ0JBSEcsRUFJSEMsTUFBZSxHQUFHLDhCQUpm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LEdBQUc7QUFDYkMsSUFBQUEsK0JBQStCLEVBQUUsS0FEcEI7QUFFYixPQUFHLDRDQUFPM0IsVUFBVSxDQUFDMEIsUUFBbEIsdUVBQThCLEVBQTlCLEVBQWtDRSxDQUFDLElBQUlBLENBQUMsS0FBSzFCLFNBQTdDO0FBRlUsR0FBakI7QUFLQSxTQUFPO0FBQ0hhLElBQUFBLE1BQU0sRUFBRWYsVUFBVSxDQUFDZSxNQURoQjtBQUVIYyxJQUFBQSxLQUFLLEVBQUU3QixVQUFVLENBQUM2QixLQUFYLElBQW9CLFFBRnhCO0FBR0hiLElBQUFBLElBQUksc0JBQUVoQixVQUFVLENBQUNnQixJQUFiLCtEQUFxQixjQUh0QjtBQUlIVSxJQUFBQSxRQUFRLEVBQUVBLFFBSlA7QUFLSHRCLElBQUFBLFlBQVksRUFDUkosVUFBVSxDQUFDSSxZQUFYLElBQTJCRixTQUEzQixHQUNNO0FBQ0lJLE1BQUFBLFNBQVMsRUFBRU4sVUFBVSxDQUFDSSxZQUFYLENBQXdCRSxTQUR2QztBQUVJRCxNQUFBQSxNQUFNLEVBQUVMLFVBQVUsQ0FBQ0ksWUFBWCxDQUF3QkM7QUFGcEMsS0FETixHQUtNSDtBQVhQLEdBQVA7QUFhSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IHJlYWRKc29uIH0gZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgeyBwaWNrQnkgfSBmcm9tIFwibG9kYXNoXCI7XG5cbmltcG9ydCB7IHdyaXRlRmlsZUFzeW5jIH0gZnJvbSBcIi4uL0NvbW1vbnMvRnNVdGlsc1wiO1xuaW1wb3J0IHsgSUxvZ2dlciB9IGZyb20gXCIuLi9Db21tb25zL0xvZ2dpbmcvSUxvZ2dlclwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIi4uL0NvbW1vbnMvTG9nZ2luZy9TdGF0aWNMb2dnZXJcIjtcblxuaW1wb3J0IHtcbiAgICBnZXRMYXN0U3RhYmxlRW5naW5lVmVyc2lvbixcbiAgICBnZXRMYXN0U3RhYmxlR2VuZXJhdG9yVmVyc2lvbixcbiAgICBnZXRQcmVyZWxlYXNlVmVyc2lvbkZvcm1Kc29uLFxufSBmcm9tIFwiLi9QdWJsaXNoZWRWZXJzaW9uVXRpbHNcIjtcbmltcG9ydCB7IENhbmR5VmVyc2lvblNwZWMsIGlzVmFsaWRTZW1WZXJWZXJzaW9uUmFuZ2UsIHBhcnNlQ2FuZHlWZXJzaW9uU3BlYyB9IGZyb20gXCIuL1ZlcnNpb25cIjtcblxuZXhwb3J0IGVudW0gRm9ybUJ1aWxkTW9kZSB7XG4gICAgTm9ybWFsQnVpbGQsXG4gICAgTm9FZGl0b3IsXG4gICAgQ29weUxlZ2FjeVByZWJ1aWx0UmVzb3VyY2VzLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1JbmZvIHtcbiAgICB0aGVtZXM/OiBzdHJpbmdbXTtcbiAgICBtb2RlOiBGb3JtQnVpbGRNb2RlO1xuICAgIGZvcm1OYW1lOiBzdHJpbmc7XG4gICAgZm9ybVNvdXJjZXNQYXRoOiBzdHJpbmc7XG4gICAgZ2VuZXJhdG9yVmVyc2lvbjogdW5kZWZpbmVkIHwgQ2FuZHlWZXJzaW9uU3BlYztcbiAgICBlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBDYW5keVZlcnNpb25TcGVjO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1Db25maWdDb250ZW50IHtcbiAgICB0aGVtZXM/OiBzdHJpbmdbXTtcbiAgICBidWlsZD86IFwiY2lcIiB8IFwibWFudWFsXCI7XG4gICAgbW9kZT86IFwibm8tZWRpdG9yXCIgfCBcImNvcHktbGVnYWN5LXByZWJ1aWx0LXJlc291cmNlc1wiO1xuICAgIGRlcGVuZGVuY2llcz86IHtcbiAgICAgICAgZ2VuZXJhdG9yPzogc3RyaW5nO1xuICAgICAgICBlbmdpbmU/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBzZXR0aW5ncz86IHtcbiAgICAgICAgdXNlU2VydmVyU2lkZUZMYW5nTm9ybWFsaXphdGlvbj86IGJvb2xlYW47XG4gICAgICAgIGF1dG9DYWxjdWxhdGlvbkNhbGN1bGF0b3JJbXBsPzogXCJjYWxjdWxhdG9yMlwiO1xuICAgICAgICBkaXNhYmxlRmxhbmdSdWxlc0ZvckVuYWJsZUF1dG9GaWVsZEZlYXR1cmU/OiBib29sZWFuO1xuICAgICAgICBkaXNhYmxlRmxhbmdSdWxlc0ZvckZvcm11bGFBbmRJbml0Tm9ybWFsaXplcj86IGJvb2xlYW47XG4gICAgfTtcbn1cblxuaW50ZXJmYWNlIEZvcm1Db25maWcge1xuICAgIHRoZW1lcz86IHN0cmluZ1tdO1xuICAgIGJ1aWxkPzogXCJjaVwiIHwgXCJtYW51YWxcIjtcbiAgICBtb2RlPzogXCJuby1lZGl0b3JcIiB8IFwiY29weS1sZWdhY3ktcHJlYnVpbHQtcmVzb3VyY2VzXCIgfCBcIm5vcm1hbC1idWlsZFwiO1xuICAgIGRlcGVuZGVuY2llcz86IHtcbiAgICAgICAgZ2VuZXJhdG9yOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gICAgICAgIGVuZ2luZTogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICAgIH07XG4gICAgc2V0dGluZ3M6IHtcbiAgICAgICAgdXNlU2VydmVyU2lkZUZMYW5nTm9ybWFsaXphdGlvbjogYm9vbGVhbjtcbiAgICAgICAgYXV0b0NhbGN1bGF0aW9uQ2FsY3VsYXRvckltcGw/OiBcImNhbGN1bGF0b3IyXCIgfCBcImRlZmF1bHRcIjtcbiAgICAgICAgZGlzYWJsZUZsYW5nUnVsZXNGb3JFbmFibGVBdXRvRmllbGRGZWF0dXJlPzogYm9vbGVhbjtcbiAgICAgICAgZGlzYWJsZUZsYW5nUnVsZXNGb3JGb3JtdWxhQW5kSW5pdE5vcm1hbGl6ZXI/OiBib29sZWFuO1xuICAgIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlRm9ybUluZm8oXG4gICAgZm9ybUpzb25GaWxlOiBzdHJpbmcsXG4gICAgcGF0aFRvRm9ybTogc3RyaW5nLFxuICAgIF9lbmdpbmVEaXJlY3Rvcnk6IHVuZGVmaW5lZCB8IHN0cmluZyxcbiAgICBsb2dnZXI6IElMb2dnZXIgPSBnZXRMb2dnZXIoKSxcbiAgICB1cGdyYWRlRm9ybUpzb246IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB1c2VMYXN0U3RhYmxlVmVyc2lvbjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHVzZVByZXJlbGVhc2VWZXJzaW9uPzogc3RyaW5nLFxuICAgIG5pZ2h0bHk6IGJvb2xlYW4gPSBmYWxzZVxuKTogUHJvbWlzZTxGb3JtSW5mbz4ge1xuICAgIGNvbnN0IGZvcm1Db25maWcgPSBhd2FpdCByZWFkRm9ybUNvbmZpZyhmb3JtSnNvbkZpbGUsIGxvZ2dlcik7XG4gICAgaWYgKHVzZUxhc3RTdGFibGVWZXJzaW9uICYmIHVzZVByZXJlbGVhc2VWZXJzaW9uICE9IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLQndC10L7QsdGF0L7QtNC40LzQviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LvQuNCx0L4g0YTQu9Cw0LMgdXNlTGFzdFN0YWJsZVZlcnNpb24g0LvQuNCx0L4gdXNlUHJlcmVsZWFzZVZlcnNpb25cIik7XG4gICAgfVxuICAgIGlmICh1c2VMYXN0U3RhYmxlVmVyc2lvbikge1xuICAgICAgICBmb3JtQ29uZmlnLmRlcGVuZGVuY2llcyA9IHtcbiAgICAgICAgICAgIGVuZ2luZTogYXdhaXQgZ2V0TGFzdFN0YWJsZUVuZ2luZVZlcnNpb24oKSxcbiAgICAgICAgICAgIGdlbmVyYXRvcjogYXdhaXQgZ2V0TGFzdFN0YWJsZUdlbmVyYXRvclZlcnNpb24oKSxcbiAgICAgICAgfTtcbiAgICAgICAgbG9nZ2VyLmxvZyhgVXBkYXRlZCB0byBsYXN0IHN0YWJsZSB2ZXJzaW9uICR7Zm9ybUNvbmZpZy5kZXBlbmRlbmNpZXMuZW5naW5lfWApO1xuICAgICAgICBhd2FpdCB3cml0ZUZpbGVBc3luYyhmb3JtSnNvbkZpbGUsIEpTT04uc3RyaW5naWZ5KGZvcm1Db25maWcsIHVuZGVmaW5lZCwgXCIgIFwiKSwgXCJ1dGY4XCIpO1xuICAgIH1cbiAgICBpZiAodXNlUHJlcmVsZWFzZVZlcnNpb24gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHByZXJlbGVhc2VWZXJzaW9uRm9ybUpzb24gPSBhd2FpdCBnZXRQcmVyZWxlYXNlVmVyc2lvbkZvcm1Kc29uKHVzZVByZXJlbGVhc2VWZXJzaW9uKTtcbiAgICAgICAgaWYgKHByZXJlbGVhc2VWZXJzaW9uRm9ybUpzb24gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JtQ29uZmlnLmRlcGVuZGVuY2llcyA9IHtcbiAgICAgICAgICAgICAgICBlbmdpbmU6IHByZXJlbGVhc2VWZXJzaW9uRm9ybUpzb24sXG4gICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBwcmVyZWxlYXNlVmVyc2lvbkZvcm1Kc29uLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxvZ2dlci5sb2coYFVwZGF0ZWQgdG8gbGFzdCBwcmVyZWxlYXNlIHZlcnNpb24gJHtmb3JtQ29uZmlnLmRlcGVuZGVuY2llcy5lbmdpbmV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlQXN5bmMoZm9ybUpzb25GaWxlLCBKU09OLnN0cmluZ2lmeShmb3JtQ29uZmlnLCB1bmRlZmluZWQsIFwiICBcIiksIFwidXRmOFwiKTtcbiAgICB9XG4gICAgbGV0IGdlbmVyYXRvclZlcnNpb24gPVxuICAgICAgICBmb3JtQ29uZmlnLmRlcGVuZGVuY2llcz8uZ2VuZXJhdG9yICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBwYXJzZUNhbmR5VmVyc2lvblNwZWMoZm9ybUNvbmZpZy5kZXBlbmRlbmNpZXMuZ2VuZXJhdG9yKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgbGV0IGVuZ2luZVZlcnNpb24gPVxuICAgICAgICBmb3JtQ29uZmlnLmRlcGVuZGVuY2llcz8uZW5naW5lICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBwYXJzZUNhbmR5VmVyc2lvblNwZWMoZm9ybUNvbmZpZy5kZXBlbmRlbmNpZXMuZW5naW5lKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgaWYgKG5pZ2h0bHkpIHtcbiAgICAgICAgZ2VuZXJhdG9yVmVyc2lvbiA9IHsgdHlwZTogXCJwcmVcIiwgcHJlSWQ6IFwibmlnaHRseVwiIH07XG4gICAgICAgIGVuZ2luZVZlcnNpb24gPSB7IHR5cGU6IFwicHJlXCIsIHByZUlkOiBcIm5pZ2h0bHlcIiB9O1xuICAgIH1cbiAgICBpZiAodXBncmFkZUZvcm1Kc29uKSB7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZUFzeW5jKGZvcm1Kc29uRmlsZSwgSlNPTi5zdHJpbmdpZnkoZm9ybUNvbmZpZywgdW5kZWZpbmVkLCBcIiAgXCIpLCBcInV0ZjhcIik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHRoZW1lczogZm9ybUNvbmZpZy50aGVtZXMsXG4gICAgICAgIG1vZGU6XG4gICAgICAgICAgICBmb3JtQ29uZmlnLm1vZGUgPT09IFwibm8tZWRpdG9yXCJcbiAgICAgICAgICAgICAgICA/IEZvcm1CdWlsZE1vZGUuTm9FZGl0b3JcbiAgICAgICAgICAgICAgICA6IGZvcm1Db25maWcubW9kZSA9PT0gXCJjb3B5LWxlZ2FjeS1wcmVidWlsdC1yZXNvdXJjZXNcIlxuICAgICAgICAgICAgICAgID8gRm9ybUJ1aWxkTW9kZS5Db3B5TGVnYWN5UHJlYnVpbHRSZXNvdXJjZXNcbiAgICAgICAgICAgICAgICA6IEZvcm1CdWlsZE1vZGUuTm9ybWFsQnVpbGQsXG4gICAgICAgIGZvcm1OYW1lOiBwYXRoLmJhc2VuYW1lKHBhdGhUb0Zvcm0pLFxuICAgICAgICBmb3JtU291cmNlc1BhdGg6IHBhdGhUb0Zvcm0sXG4gICAgICAgIGdlbmVyYXRvclZlcnNpb246IGdlbmVyYXRvclZlcnNpb24sXG4gICAgICAgIGVuZ2luZVZlcnNpb246IGVuZ2luZVZlcnNpb24sXG4gICAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzTmV3Rm9ybUpzb25Gb3JtYXQoZm9ybUpzb25GaWxlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5zYWZlLWFueVxuICAgIGNvbnN0IGZvcm1Db25maWc6IEZvcm1Db25maWdDb250ZW50ID0gYXdhaXQgcmVhZEpzb24oZm9ybUpzb25GaWxlKTtcbiAgICByZXR1cm4gZm9ybUNvbmZpZy5kZXBlbmRlbmNpZXMgIT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEZvcm1Db25maWcoZm9ybUpzb25GaWxlOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlcik6IFByb21pc2U8Rm9ybUNvbmZpZz4ge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby11bnNhZmUtYW55XG4gICAgY29uc3QgZm9ybUNvbmZpZzogRm9ybUNvbmZpZ0NvbnRlbnQgPSBhd2FpdCByZWFkSnNvbihmb3JtSnNvbkZpbGUpO1xuICAgIHJldHVybiBnZXRGb3JtQ29uZmlnRnJvbVNvdXJjZShmb3JtQ29uZmlnLCBsb2dnZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUNvbmZpZ0Zyb21Tb3VyY2UoZm9ybUNvbmZpZzogRm9ybUNvbmZpZ0NvbnRlbnQsIGxvZ2dlcjogSUxvZ2dlcik6IEZvcm1Db25maWcge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby11bnNhZmUtYW55XG4gICAgaWYgKFxuICAgICAgICBmb3JtQ29uZmlnLmRlcGVuZGVuY2llcz8uZ2VuZXJhdG9yICE9IHVuZGVmaW5lZCAmJlxuICAgICAgICAhaXNWYWxpZFNlbVZlclZlcnNpb25SYW5nZShmb3JtQ29uZmlnLmRlcGVuZGVuY2llcy5nZW5lcmF0b3IpXG4gICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtmb3JtQ29uZmlnLmRlcGVuZGVuY2llcy5nZW5lcmF0b3J9IGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGZvcm1hdGApO1xuICAgIH1cblxuICAgIGlmIChmb3JtQ29uZmlnLmRlcGVuZGVuY2llcz8uZW5naW5lICE9IHVuZGVmaW5lZCAmJiAhaXNWYWxpZFNlbVZlclZlcnNpb25SYW5nZShmb3JtQ29uZmlnLmRlcGVuZGVuY2llcy5lbmdpbmUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtmb3JtQ29uZmlnLmRlcGVuZGVuY2llcy5lbmdpbmV9IGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGZvcm1hdGApO1xuICAgIH1cblxuICAgIGNvbnN0IHNldHRpbmdzID0ge1xuICAgICAgICB1c2VTZXJ2ZXJTaWRlRkxhbmdOb3JtYWxpemF0aW9uOiBmYWxzZSxcbiAgICAgICAgLi4ucGlja0J5KGZvcm1Db25maWcuc2V0dGluZ3MgPz8ge30sIHggPT4geCAhPT0gdW5kZWZpbmVkKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGhlbWVzOiBmb3JtQ29uZmlnLnRoZW1lcyxcbiAgICAgICAgYnVpbGQ6IGZvcm1Db25maWcuYnVpbGQgfHwgXCJtYW51YWxcIixcbiAgICAgICAgbW9kZTogZm9ybUNvbmZpZy5tb2RlID8/IFwibm9ybWFsLWJ1aWxkXCIsXG4gICAgICAgIHNldHRpbmdzOiBzZXR0aW5ncyxcbiAgICAgICAgZGVwZW5kZW5jaWVzOlxuICAgICAgICAgICAgZm9ybUNvbmZpZy5kZXBlbmRlbmNpZXMgIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBmb3JtQ29uZmlnLmRlcGVuZGVuY2llcy5nZW5lcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgZW5naW5lOiBmb3JtQ29uZmlnLmRlcGVuZGVuY2llcy5lbmdpbmUsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcbn1cbiJdfQ==
|