piper-utils 1.0.5 → 1.0.6

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.
Files changed (2) hide show
  1. package/bin/main.js +21 -2
  2. package/package.json +1 -1
package/bin/main.js CHANGED
@@ -194,6 +194,23 @@ const createFilters = exports.createFilters = function (event, objectFilters) {
194
194
 
195
195
  /***/ }),
196
196
 
197
+ /***/ "./src/database/dbUtils/queryStringUtils/createIncludes.js":
198
+ /*!*****************************************************************!*\
199
+ !*** ./src/database/dbUtils/queryStringUtils/createIncludes.js ***!
200
+ \*****************************************************************/
201
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
202
+
203
+ Object.defineProperty(exports, "__esModule", ({ value: true }));exports.createIncludes = createIncludes;exports.includeSubItem = includeSubItem;var _lodash = __webpack_require__(/*! lodash */ "lodash");var _lodash2 = _interopRequireDefault(_lodash);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };} /**
204
+ * Create sequelize includes array from query string parameters and default sequelize model
205
+ *
206
+ * @param {object} event - the query parameters from the event passed by lambda
207
+ * @param {object} objectFilters - the default filters object created by createDefaultFilters
208
+ * @returns {object} A sequelize includes array
209
+ */function createIncludes(event, objectFilters) {const query = _lodash2.default.get(event, 'queryStringParameters', {}) || {};const keys = Object.keys(objectFilters);const canBeIncluded = keys.reduce((acc, item) => {acc = includeSubItem(item, acc);return acc;}, []);const askedForInQuery = Object.keys(query).reduce((acc, item) => {if (item === 'sort') {query[item].split(',').forEach((sortItem) => {sortItem = sortItem.indexOf('-') === 0 ? sortItem.substr(1) : sortItem;acc = includeSubItem(sortItem, acc);});}acc = includeSubItem(item, acc);return acc;}, []);return _lodash2.default.intersection(canBeIncluded, askedForInQuery);}function includeSubItem(queryStringItem, acc = []) {const dot = queryStringItem.indexOf('.');if (dot > 0) {acc.push(queryStringItem.substring(0, dot));}return acc;
210
+ }
211
+
212
+ /***/ }),
213
+
197
214
  /***/ "./src/database/dbUtils/queryStringUtils/createSort.js":
198
215
  /*!*************************************************************!*\
199
216
  !*** ./src/database/dbUtils/queryStringUtils/createSort.js ***!
@@ -947,9 +964,10 @@ var exports = __webpack_exports__;
947
964
  /*!**********************!*\
948
965
  !*** ./src/index.js ***!
949
966
  \**********************/
950
- Object.defineProperty(exports, "__esModule", ({ value: true }));exports.checkWriteAccess = exports.userDefaultBid = exports.getBusinessesInfo = exports.parseEvent = exports.parseBody = exports.accessRightsUtils = exports.defaultFilters = exports.getCurrentUserNameFromCognitoEvent = exports.successHtml = exports.getCurrentUser = exports.runMigrations = exports.success = exports.failure = exports.checkModule = exports.findAll = exports.createSort = exports.createFilters = exports.publishEvents = exports.watchBucket = exports.handleFile = undefined;var _handleFile = __webpack_require__(/*! ./eventManager/handleFile.js */ "./src/eventManager/handleFile.js");
967
+ Object.defineProperty(exports, "__esModule", ({ value: true }));exports.checkWriteAccess = exports.userDefaultBid = exports.getBusinessesInfo = exports.parseEvent = exports.parseBody = exports.accessRightsUtils = exports.defaultFilters = exports.getCurrentUserNameFromCognitoEvent = exports.successHtml = exports.getCurrentUser = exports.runMigrations = exports.success = exports.failure = exports.checkModule = exports.findAll = exports.createSort = exports.createIncludes = exports.createFilters = exports.publishEvents = exports.watchBucket = exports.handleFile = undefined;var _handleFile = __webpack_require__(/*! ./eventManager/handleFile.js */ "./src/eventManager/handleFile.js");
951
968
  var _watchBucket = __webpack_require__(/*! ./eventManager/watchBucket.js */ "./src/eventManager/watchBucket.js");
952
969
  var _publishEvents = __webpack_require__(/*! ./eventManager/publishEvents.js */ "./src/eventManager/publishEvents.js");
970
+ var _createIncludes = __webpack_require__(/*! ./database/dbUtils/queryStringUtils/createIncludes.js */ "./src/database/dbUtils/queryStringUtils/createIncludes.js");
953
971
  var _createFilters = __webpack_require__(/*! ./database/dbUtils/queryStringUtils/createFilters.js */ "./src/database/dbUtils/queryStringUtils/createFilters.js");
954
972
  var _createSort = __webpack_require__(/*! ./database/dbUtils/queryStringUtils/createSort.js */ "./src/database/dbUtils/queryStringUtils/createSort.js");
955
973
  var _findAll = __webpack_require__(/*! ./database/dbUtils/queryStringUtils/findAll.js */ "./src/database/dbUtils/queryStringUtils/findAll.js");
@@ -971,6 +989,7 @@ const handleFile = exports.handleFile = _handleFile.handleFile;
971
989
  const watchBucket = exports.watchBucket = _watchBucket.watchBucket;
972
990
  const publishEvents = exports.publishEvents = _publishEvents.publishEvents;
973
991
  const createFilters = exports.createFilters = _createFilters.createFilters;
992
+ const createIncludes = exports.createIncludes = _createIncludes.createIncludes;
974
993
  const createSort = exports.createSort = _createSort.createSort;
975
994
  const findAll = exports.findAll = _findAll.findAll;
976
995
  const checkModule = exports.checkModule = _accessRightsUtils.checkModule;
@@ -994,4 +1013,4 @@ for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_expor
994
1013
  if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true });
995
1014
  /******/ })()
996
1015
  ;
997
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUdvVSxzQkFBZ0I7QUFDbkMsTUFBTWxNLE9BQU8sR0FBQWxJLGVBQUEsR0FBR3FVLGdCQUFhO0FBQzdCLE1BQU1qVSxXQUFXLEdBQUFKLG1CQUFBLEdBQUdzVSw4QkFBaUI7QUFDckMsTUFBTWpELE9BQU8sR0FBQXJSLGVBQUEsR0FBR3VVLHdCQUFhO0FBQzdCLE1BQU10RCxPQUFPLEdBQUFqUixlQUFBLEdBQUd3VSx3QkFBYTtBQUM3QixNQUFNclgsYUFBYSxHQUFBNkMscUJBQUEsR0FBR3lVLHlCQUFtQjtBQUN6QyxNQUFNckQsY0FBYyxHQUFBcFIsc0JBQUEsR0FBRzBVLCtCQUFvQjtBQUMzQyxNQUFNeEQsV0FBVyxHQUFBbFIsbUJBQUEsR0FBRzJVLDRCQUFpQjtBQUNyQyxNQUFNeEQsa0NBQWtDLEdBQUFuUiwwQ0FBQSxHQUFHNFUsbURBQXdDO0FBQ25GLE1BQU1qTyxjQUFjLEdBQUEzRyxzQkFBQSxHQUFHNlUsOEJBQW9CO0FBQzNDLE1BQU05VSxpQkFBaUIsR0FBQUMseUJBQUEsR0FBRzhVLG9DQUF1QjtBQUNqRCxNQUFNbFMsU0FBUyxHQUFBNUMsaUJBQUEsR0FBRytVLDBCQUFlO0FBQ2pDLE1BQU16RCxVQUFVLEdBQUF0UixrQkFBQSxHQUFHZ1YsMkJBQWdCO0FBQ25DLE1BQU05VSxpQkFBaUIsR0FBQUYseUJBQUEsR0FBR2lWLG9DQUF1QjtBQUNqRCxNQUFNaFYsY0FBYyxHQUFBRCxzQkFBQSxHQUFHa1YsaUNBQW9CO0FBQzNDLE1BQU03VSxnQkFBZ0IsR0FBQUwsd0JBQUEsR0FBR21WLG1DQUFzQixDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZGF0YWJhc2UvZGJTZXR1cC9taWdyYXRpb25zLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlRmlsdGVycy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlU29ydC5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvZGVmYXVsdEZpbHRlcnMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2ZpbmRBbGwuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZHluYW1vL2R5bmFtb1V0aWxzLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2V2ZW50TWFuYWdlci9oYW5kbGVFdmVudHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZXZlbnRNYW5hZ2VyL2hhbmRsZUZpbGUuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZXZlbnRNYW5hZ2VyL3B1Ymxpc2hFdmVudHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZXZlbnRNYW5hZ2VyL3dhdGNoQnVja2V0LmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL3JlcXVlc3RSZXNvbnNlL2Vycm9yQ29kZXMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL3MzL1MzVXRpbHMuanMvUzNVdGlscy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9zbnMvU05TVXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwiQGF3cy1zZGsvY2xpZW50LXNuc1wiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwiQGF3cy1zZGsvbGliLWR5bmFtb2RiXCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJibHVlYmlyZFwiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwibG9kYXNoXCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcIm1vbWVudC9tb21lbnQuanNcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcInNlcXVlbGl6ZVwiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwidW16dWdcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU2VxdWVsaXplU3RvcmFnZSwgVW16dWcgfSBmcm9tICd1bXp1Zyc7XG5cbi8qKlxuICogRXhlY3V0ZSBkYXRhYmFzZSBtaWdyYXRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YWJhc2VOYW1lIC0gbmFtZSBvZiBkYXRhYmFzZSB0byBjcmVhdGUgKG9yIHZlcmlmeSBleGlzdGVuY2UpXG4gKiBAcGFyYW0ge29iamVjdH0gc2VxdWVsaXplSW5zdGFuY2UgLSBpbnN0YW5jZSBvZiBTZXF1ZWxpemUgKG11c3QgYmUgaW5pdGlhbGl6ZWQpXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBpbml0aWFsaXplTW9kZWxzIC0gZnVuY3Rpb24gdG8gcnVuIHRvIHN5bmMgU2VxdWVsaXplIG1vZGVscyB3aXRoIGRhdGFiYXNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFRvTWlncmF0aW9uRm9sZGVyIC0gcGFzcyBpbiB0aGUgcGF0aCBpZiB1c2luZyB3aW5kb3dzLiB3aW5kb3dzIGFuZCBsaW51eCBQV0Qgd2lsbCBiZSBkaWZmZXJlbnRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bk1pZ3JhdGlvbnMoZGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVsaXplSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplTW9kZWxzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFRvTWlncmF0aW9uRm9sZGVyID0gYCR7cHJvY2Vzcy5lbnYuUFdEfS9taWdyYXRpb25zLyouanNgKSB7XG4gICAgY29uc3QgdW16dWcgPSBuZXcgVW16dWcoe1xuICAgICAgICBtaWdyYXRpb25zOiB7IGdsb2I6IHBhdGhUb01pZ3JhdGlvbkZvbGRlciB9LFxuICAgICAgICBjb250ZXh0OiBzZXF1ZWxpemVJbnN0YW5jZS5nZXRRdWVyeUludGVyZmFjZSgpLFxuICAgICAgICBzdG9yYWdlOiBuZXcgU2VxdWVsaXplU3RvcmFnZSh7IHNlcXVlbGl6ZTogc2VxdWVsaXplSW5zdGFuY2UgfSksXG4gICAgICAgIGxvZ2dlcjogY29uc29sZVxuICAgIH0pO1xuXG4gICAgY29uc3QgcGVuZGluZ01pZ3JhdGlvbnMgPSBhd2FpdCB1bXp1Zy5wZW5kaW5nKCk7XG4gICAgY29uc29sZS5sb2coJy0tLS0tLS0+VVRJTCBQZW5kaW5nIE1pZ3JhdGlvbnM6JywgcGVuZGluZ01pZ3JhdGlvbnMsIHBhdGhUb01pZ3JhdGlvbkZvbGRlcik7XG4gICAgYXdhaXQgdW16dWcudXAoKS5jYXRjaCgodXBFcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gdW16dWcuZG93bih7XG4gICAgICAgICAgICBtaWdyYXRpb25zOiBfLmNoYWluKHBlbmRpbmdNaWdyYXRpb25zKVxuICAgICAgICAgICAgICAgIC5tYXAoJ2ZpbGUnKVxuICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAudmFsdWUoKVxuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9ICdVVElMIEVycm9yOiBFcnJvciB3aXRoIG1pZ3JhdGluZyB1cDonICsgdXBFcnJvcjtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9LCAoZG93bkVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSAnVVRJTCBFcnJvcjogRXJyb3Igd2l0aCBtaWdyYXRpbmcgZG93bjonICsgZG93bkVycm9yO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBsaW5lIGlzIG5lZWRlZCB0byBzeW5jIChjcmVhdGUpIHRhYmxlcywgYnV0IG5vdCB0byBkYXRhYmFzZSB1cGRhdGVzXG4gICAgLy8gaW4gdGhlIHBhc3QgaXQgd29ya2VkIHRvIGxlYXZlIGl0IGluLCBidXQgbm93IHRoZSB0YWdzIG1vZHVsZSBjYXVzZXMgZm9yZWlnbiBrZXkgcHJvYmxlbXNcbiAgICAvLyBUaGUgdGFibGVzIGFyZSBzdGlsbCBpbml0aWF0ZWQgYnkgYmVpbmcgcGFzc2VkIGluIHRvIHJ1biBtaWdyYXRpb25zXG4gICAgYXdhaXQgaW5pdGlhbGl6ZU1vZGVscygpO1xufSIsImltcG9ydCBfLCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JMaXN0IH0gZnJvbSAnLi4vLi4vLi4vcmVxdWVzdFJlc29uc2UvZXJyb3JDb2Rlcy5qcyc7XG5pbXBvcnQgeyBwYXJzZUJvZHkgfSBmcm9tICcuLi8uLi8uLi9yZXF1ZXN0UmVzb25zZS9yZXF1ZXN0UmVzcG9uc2UuanMnO1xuXG4vKipcbiAqIEdldCB0aGUgYWxsb3dlZCBidXNpbmVzc0lkcyBmb3IgYSB1c2VyIGZyb20gdGhlIGxhbWJkYSBldmVudCwgY29tcGFyZSBpdCB0byBidXNpbmVzc0lkcywgcmV0dXJuIHdoYXQgdXNlciBoYXMgYWNjZXNzIHRvLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIFRoZSBsYW1iZGEgZXZlbnQgcGFzc2VkIGluIGJ5IGEgdmFsaWRhdGVkIGFwaSByZXF1ZXN0LlxuICogQHBhcmFtIHt7dXNlQ29nbml0b0JpZDpib29sZWFufX0gW29wdGlvbnNdIC0gQW4gb2JqZWN0IHdpdGggb3B0aW9ucywgdXNlQ29nbml0b0JpZCBwcmVmZXJzIHRoZSBidXNpbmVzc0lkIHNldCBpbiBjb2duaXRvIGlmIHNldCBhbmQgZG9lcyBub3QgcmV0dXJuIHRoZSBsb2NhbCBiaWQgb2YgMSBpZiBhIGJpZCBpcyBpbiB0aGUgY2xhaW0uXG4gKiBAcmV0dXJucyB7YXJyYXl9IEEgIGxpc3Qgb2YgYnVzaW5lc3NJZHMgdGhhdCBoYXZlIGJlZW4gcmVxdWVzdGVkIGFuZCBhcmUgYWxsb3dlZCB0byBmb3Igc29tZSB1c2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWNjZXNzUmlnaHRzVXRpbHMoZXZlbnQsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB1c2VDb2duaXRvQmlkID0gXy5nZXQob3B0aW9ucywgJ3VzZUNvZ25pdG9CaWQnLCBmYWxzZSk7XG4gICAgY29uc3QgcmVxdWVzdGVkQnVzaW5lc3NJZHMgPSBnZXRSZXF1ZXN0ZWRCdXNpbmVzc0lkcyhldmVudCk7XG4gICAgY29uc3QgYWxsb3dlZEJ1c2luZXNzSWRzID0gZ2V0QWxsb3dlZEJ1c2luZXNzSWRzKGV2ZW50LCB1c2VDb2duaXRvQmlkKTtcbiAgICBjb25zdCBsb2NhbEJpZExpc3QgPSBbJzEnXTtcblxuICAgIC8vIGlmIHdlIGFyZSBvbiBsb2NhbCByZXR1cm4gZm9yIGFsbCBiaWRzIGluIGFjY2VzcyByaWdodHNcbiAgICBpZiAoXy5pc0VtcHR5KGFsbG93ZWRCdXNpbmVzc0lkcykgJiZcbiAgICAgICAgIV8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMnKSAmJlxuICAgICAgICAhXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpBUicpICYmXG4gICAgICAgIHByb2Nlc3MuZW52LkJVSUxEX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgIHByb2Nlc3MuZW52LkJVSUxEX0VOViAhPT0gJ3N0YWdpbmcnKSB7XG4gICAgICAgIGlmIChyZXF1ZXN0ZWRCdXNpbmVzc0lkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbEJpZExpc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gXy5pbnRlcnNlY3Rpb24ocmVxdWVzdGVkQnVzaW5lc3NJZHMsIGxvY2FsQmlkTGlzdCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlcXVlc3RlZEJ1c2luZXNzSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYWxsb3dlZEJ1c2luZXNzSWRzO1xuICAgIH1cblxuICAgIHJldHVybiBfLmludGVyc2VjdGlvbihyZXF1ZXN0ZWRCdXNpbmVzc0lkcywgYWxsb3dlZEJ1c2luZXNzSWRzKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGJ1c2luZXNzSUQgc2V0IGluIGNvZ25pdG8gYXMgY3VzdG9tOkRCSS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSBUaGUgbGFtYmRhIGV2ZW50IHBhc3NlZCBpbiBieSBhIHZhbGlkYXRlZCBhcGkgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBidXNpbmVzc0lEIHNldCBpbiBjb2duaXRvIGFzIGN1c3RvbTpEQklcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZXJEZWZhdWx0QmlkKGV2ZW50KSB7XG4gICAgbGV0IGpzb25Ub1BhcnNlID0gXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcy5jdXN0b206REJJJykgfHxcbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpEQkknKSB8fFxuICAgICAgICAne30nO1xuXG4gICAgY29uc3QgZGJpID0gSlNPTi5wYXJzZShqc29uVG9QYXJzZSk7XG4gICAgcmV0dXJuIF8uZ2V0KGRiaSwgJ2RlZmF1bHRCaWQnLCAnJykgfHwgJzEnO1xufVxuXG4vKipcbiAqIEdldCAgcmVxdWVzdGVkIGJ1c2luZXNzSWRzIGZyb20gdGhlIHF1ZXJ5IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSBUaGUgbGFtYmRhIGV2ZW50IHBhc3NlZCBpbiBieSBhIHZhbGlkYXRlZCBhcGkgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHthcnJheX0gVGhlIGJ1c2luZXNzSUQgcmVxdWVzdGVkIGJ5IHRoZSBxdWVyeSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0UmVxdWVzdGVkQnVzaW5lc3NJZHMoZXZlbnQpIHtcbiAgICBsZXQgcmVxdWVzdGVkQnVzaW5lc3NJZHMgPSBfLmdldChldmVudCwgJ3F1ZXJ5U3RyaW5nUGFyYW1ldGVycy5idXNpbmVzc0lkcycsIG51bGwpO1xuXG4gICAgcmV0dXJuIHJlcXVlc3RlZEJ1c2luZXNzSWRzID8gcmVxdWVzdGVkQnVzaW5lc3NJZHMuc3BsaXQoJywnKSA6IFtdO1xufVxuXG4vKipcbiAqIEdldCB0aGUgYWxsb3dlZCBidXNpbmVzc0lkcyBmb3IgYSB1c2VyIGZyb20gY29nbml0byBjdXN0b206QVIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IC0gVGhlIGxhbWJkYSBldmVudCBwYXNzZWQgaW4gYnkgYSB2YWxpZGF0ZWQgYXBpIHJlcXVlc3QuXG4gKiBAcGFyYW0gdXNlQ29nbml0b0JpZFxuICogQHJldHVybnMge2FycmF5fSBUaGUgYnVzaW5lc3NJRCByZXF1ZXN0ZWQgYnkgdGhlIHF1ZXJ5IHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRBbGxvd2VkQnVzaW5lc3NJZHMoZXZlbnQsIHVzZUNvZ25pdG9CaWQpIHtcbiAgICBjb25zdCBidXNpbmVzc2VzID0gZ2V0QnVzaW5lc3Nlc0luZm8oZXZlbnQsIHVzZUNvZ25pdG9CaWQpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhidXNpbmVzc2VzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1c2luZXNzZXNJbmZvKGV2ZW50LCB1c2VDb2duaXRvQmlkKSB7XG4gICAgbGV0IGpzb25Ub1BhcnNlID0gXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcy5jdXN0b206QVInKSB8fFxuICAgICAgICBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY3VzdG9tOkFSJykgfHxcbiAgICAgICAgJ3t9JztcbiAgICBjb25zdCBhY2Nlc3NSaWdodHMgPSBKU09OLnBhcnNlKGpzb25Ub1BhcnNlKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5CVUlMRF9FTlYgPT09ICdsb2NhbCcpIHtcbiAgICAgICAgaWYgKCFpc0VtcHR5KGFjY2Vzc1JpZ2h0cykpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpZHMgPSBfLmdldChhY2Nlc3NSaWdodHMsICdidXNpbmVzc0lkcycsIHt9KTtcbiAgICAgICAgICAgIGxldCB3aXRoTG9jYWw7XG4gICAgICAgICAgICBpZiAodXNlQ29nbml0b0JpZCkge1xuICAgICAgICAgICAgICAgIHdpdGhMb2NhbCA9IHsgLi4uYmlkcyB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aXRoTG9jYWwgPSB7IC4uLmJpZHMsICcxJzogJ0EnIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF8uc2V0KGFjY2Vzc1JpZ2h0cywgJ2J1c2luZXNzSWRzJywgd2l0aExvY2FsKTtcblxuICAgICAgICAgICAgcmV0dXJuIF8uZ2V0KGFjY2Vzc1JpZ2h0cywgJ2J1c2luZXNzSWRzJywge30pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYXIgPSB7ICdidXNpbmVzc0lkcyc6IHsgJzEnOiAnQScgfSB9O1xuICAgICAgICAgICAgcmV0dXJuIF8uZ2V0KGFyLCAnYnVzaW5lc3NJZHMnLCB7fSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gXy5nZXQoYWNjZXNzUmlnaHRzLCAnYnVzaW5lc3NJZHMnLCB7fSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBtb2R1bGVzIGxpc3RlZCBpbiBjdXN0b206TU9ELlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIFRoZSBsYW1iZGEgZXZlbnQgcGFzc2VkIGluIGJ5IGEgdmFsaWRhdGVkIGFwaSByZXF1ZXN0LlxuICogQHJldHVybnMge2FycmF5fSBUaGUgTW9kdWxlIGFjY2VzcyBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2R1bGVJbmZvKGV2ZW50KSB7XG4gICAgbGV0IGpzb25Ub1BhcnNlID1cbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcy5jdXN0b206TU9EJykgfHxcbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpNT0QnKSB8fFxuICAgICAgICBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zLmN1c3RvbTpBUicpIHx8XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jdXN0b206QVInKSB8fFxuXG4gICAgICAgICd7fSc7XG5cbiAgICBjb25zdCBtb2R1bGVSaWdodHMgPSBKU09OLnBhcnNlKGpzb25Ub1BhcnNlKTtcbiAgICByZXR1cm4gXy5nZXQobW9kdWxlUmlnaHRzLCAnbW9kdWxlJywge30pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbW9kdWxlcyBsaXN0ZWQgaW4gY3VzdG9tOk1PRC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlTmFtZSAtIEEgc3RpbmcgbmFtZSBmb3IgYSBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSBUaGUgbGFtYmRhIGV2ZW50IHBhc3NlZCBpbiBieSBhIHZhbGlkYXRlZCBhcGkgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHthcnJheX0gVGhlIE1vZHVsZSBhY2Nlc3MgbGlzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tNb2R1bGUobW9kdWxlTmFtZSwgZXZlbnQpIHtcbiAgICBjb25zdCBtb2R1bGVSaWdodHMgPSBnZXRNb2R1bGVJbmZvKGV2ZW50KTtcbiAgICBsZXQgYWxsb3dBY2Nlc3MgPSBfLmdldChtb2R1bGVSaWdodHMsIG1vZHVsZU5hbWUsIGZhbHNlKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5CVUlMRF9FTlYgPT09ICdsb2NhbCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWFsbG93QWNjZXNzKSB7XG4gICAgICAgIHRocm93IGVycm9yTGlzdC51bmF1dGhvcml6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlclJvbGVzID0ge1xuICAgIGFkbWluOiAnQScsXG4gICAgcmVhZDogJ1InLFxuICAgIHdyaXRlOiAnVydcbn07XG5cbi8qKlxuICogQHBhcmFtIHt7Ym9keTogc3RyaW5nfX0gZXZlbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGJ1c2luZXNzSWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrV3JpdGVBY2Nlc3MoZXZlbnQpIHtcbiAgICBjb25zdCBldmVudEJvZHkgPSBwYXJzZUJvZHkoZXZlbnQpO1xuICAgIGNvbnN0IGJ1c2luZXNzSWRzID0gYWNjZXNzUmlnaHRzVXRpbHMoZXZlbnQpIHx8IFtdO1xuICAgIGNvbnN0IGJ1c2luZXNzSWQgPSBidXNpbmVzc0lkcy5maW5kKChpZCkgPT4gaWQgPT09IGV2ZW50Qm9keS5idXNpbmVzc0lkKTtcbiAgICBjb25zdCByYXcgPSBnZXRCdXNpbmVzc2VzSW5mbyhldmVudCk7XG4gICAgY29uc3QgdXNlclJpZ2h0ID0gcmF3W2J1c2luZXNzSWRdO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52LkJVSUxEX0VOViA9PT0gJ2xvY2FsJykge1xuICAgICAgICByZXR1cm4gZXZlbnRCb2R5LmJ1c2luZXNzSWQ7XG4gICAgfVxuXG4gICAgaWYgKCh1c2VyUmlnaHQgIT09IHVzZXJSb2xlcy5hZG1pbiAmJiB1c2VyUmlnaHQgIT09IHVzZXJSb2xlcy53cml0ZSkgfHwgKCF1c2VyUmlnaHQpKSB7XG4gICAgICAgIHRocm93IGVycm9yTGlzdC51bmF1dGhvcml6ZWQ7XG4gICAgfVxuICAgIHJldHVybiBidXNpbmVzc0lkO1xufVxuXG4iLCJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IERCIGZyb20gJ3NlcXVlbGl6ZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC9tb21lbnQuanMnO1xuaW1wb3J0IHsgZXJyb3JMaXN0IH0gZnJvbSAnLi4vLi4vLi4vcmVxdWVzdFJlc29uc2UvZXJyb3JDb2Rlcy5qcyc7XG5pbXBvcnQgeyBhY2Nlc3NSaWdodHNVdGlscyB9IGZyb20gJy4vYWNjZXNzUmlnaHRzVXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBzZXF1ZWxpemUgd2hlcmUgY2xhdXNlIGZyb20gcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgYW5kIGRlZmF1bHQgc29ydCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSB0aGUgcXVlcnkgcGFyYW1ldGVycyBmcm9tIHRoZSBldmVudCBwYXNzZWQgYnkgbGFtYmRhXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0RmlsdGVycyAtIHRoZSBkZWZhdWx0IGZpbHRlcnMgb2JqZWN0IGNyZWF0ZWQgYnkgY3JlYXRlRGVmYXVsdEZpbHRlcnNcbiAqIEByZXR1cm5zIHtvYmplY3R9IEFuIHNlcXVlbGl6ZSB3aGVyZSBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUZpbHRlcnMgPSBmdW5jdGlvbiAoZXZlbnQsIG9iamVjdEZpbHRlcnMpe1xuICAgIGxldCBxdWVyeSA9IF8uZ2V0KGV2ZW50LCAncXVlcnlTdHJpbmdQYXJhbWV0ZXJzJywge30pIHx8IHt9O1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IF8uZ2V0KHF1ZXJ5LCAnc3RhcnREYXRlJyk7XG4gICAgY29uc3QgZW5kRGF0ZSA9IF8uZ2V0KHF1ZXJ5LCAnZW5kRGF0ZScpO1xuICAgIGNvbnN0IHdoZXJlID0gT2JqZWN0LmtleXMocXVlcnkpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IF8uZ2V0KG9iamVjdEZpbHRlcnMsIGl0ZW0sIG51bGwpO1xuXG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1OYW1lID0gaXRlbS5pbmNsdWRlcygnLicpXG4gICAgICAgICAgICAgICAgPyBgJCR7aXRlbX0kYFxuICAgICAgICAgICAgICAgIDogaXRlbTtcblxuICAgICAgICAgICAgYWNjW2l0ZW1OYW1lXSA9IHt9O1xuICAgICAgICAgICAgaWYgKHZhbC5maWx0ZXJUeXBlID09PSBEQi5PcC5pTGlrZSkge1xuICAgICAgICAgICAgICAgIGFjY1tpdGVtTmFtZV1bdmFsLmZpbHRlclR5cGVdID0gYCUke3F1ZXJ5W2l0ZW1dfSVgO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwuZmlsdGVyVHlwZSA9PT0gREIuT3Aub3IpIHtcbiAgICAgICAgICAgICAgICBhY2NbaXRlbU5hbWVdW3ZhbC5maWx0ZXJUeXBlXSA9IFstMSAqICtxdWVyeVtpdGVtXSwgK3F1ZXJ5W2l0ZW1dXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLmZpbHRlclR5cGUgPT09IERCLk9wLmluKSB7XG4gICAgICAgICAgICAgICAgYWNjW2l0ZW1OYW1lXVt2YWwuZmlsdGVyVHlwZV0gPSBxdWVyeVtpdGVtXS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwuZmlsdGVyVHlwZSA9PT0gREIuT3AuaW4pIHtcbiAgICAgICAgICAgICAgICBhY2NbaXRlbU5hbWVdW3ZhbC5maWx0ZXJUeXBlXSA9IHF1ZXJ5W2l0ZW1dLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBwYXJzZWRKc29uO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIGlzIEpTT04sIHBhcnNlIGl0XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZEpzb24gPSBKU09OLnBhcnNlKHF1ZXJ5W2l0ZW1dKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIGlzIG5vdCBKU09OLCBwYXNzIHRocm91Z2ggYXMgYSBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSnNvbiA9IHF1ZXJ5W2l0ZW1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2NbaXRlbU5hbWVdW3ZhbC5maWx0ZXJUeXBlXSA9IHBhcnNlZEpzb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwudHlwZSA9PT0gREIuQk9PTEVBTikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSBfLmdldChxdWVyeSwgaXRlbSwgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBib29sZWFuTWFwID0ge1xuICAgICAgICAgICAgICAgICAgICAnZmFsc2UnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgJ251bGwnOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAndHJ1ZSc6IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgYWNjW2l0ZW1OYW1lXVt2YWwuZmlsdGVyVHlwZV0gPSBib29sZWFuTWFwW3F1ZXJ5VmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICBpZiAob2JqZWN0RmlsdGVycz8uYWN0aXZlICYmICF3aGVyZT8uYWN0aXZlKSB7XG4gICAgICAgIHdoZXJlLmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgYnVzaW5lc3NJZHMgPSBhY2Nlc3NSaWdodHNVdGlscyhldmVudCk7XG4gICAgY29uc3QgZmlsdGVyQWRkcyA9IHtcbiAgICAgICAgYnVzaW5lc3NJZDogYnVzaW5lc3NJZHNcbiAgICB9O1xuXG4gICAgaWYgKHN0YXJ0RGF0ZSAmJiBlbmREYXRlKSB7XG4gICAgICAgIGNvbnN0IHMgPSBtb21lbnQudXRjKHN0YXJ0RGF0ZSk7XG4gICAgICAgIGNvbnN0IGUgPSBtb21lbnQudXRjKGVuZERhdGUpO1xuICAgICAgICBjb25zdCBkYXRlcyA9IHtcbiAgICAgICAgICAgIFtEQi5PcC5iZXR3ZWVuXTogW3MudG9EYXRlKCksIGUudG9EYXRlKCldXG4gICAgICAgIH07XG4gICAgICAgIGlmICghcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRocm93IHsgLi4uZXJyb3JMaXN0LmludmFsaWRTdGFydERhdGUgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRocm93IHsgLi4uZXJyb3JMaXN0LmludmFsaWRFbmREYXRlIH07XG4gICAgICAgIH1cblxuICAgICAgICBmaWx0ZXJBZGRzLmNyZWF0ZWRBdCA9IGRhdGVzO1xuICAgIH1cblxuICAgIGNvbnN0IHdpdGhEYXRlID0gT2JqZWN0LmFzc2lnbih3aGVyZSwgZmlsdGVyQWRkcyk7XG5cbiAgICByZXR1cm4gd2l0aERhdGU7XG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBDcmVhdGUgc2VxdWVsaXplIG9yZGVyIGNsYXVzZSBmcm9tIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIGFuZCBkZWZhdWx0IHNvcnQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IC0gdGhlIGV2ZW50IGNyZWF0ZWQgQVdTIGxhbWJkYSwgaXQgd2lsbCBjb250YWluIHF1ZXJ5U3RyaW5nUGFyYW1ldGVycyB3aXRoIHNvcnQgcHJvcGVydHkgYSBjb21tYSBzZXBlcmF0ZWQgbGlzdCBvZiBzb3J0YWJsZSBmaWVsZHMgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0RmlsdGVycyAtIHRoZSBkZWZhdWx0IGZpbHRlcnMgb2JqZWN0IGNyZWF0ZWQgYnkgY3JlYXRlRGVmYXVsdEZpbHRlcnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0RmlsdGVyIC0gQSBkZWZhdWx0IGZpbHRlciBvYmplY3QgYXMgYnVpbHQgYnkgY3JlYXRlRGVmYXVsdCBGaWx0ZXJzLCBpZiBpdGVtcyBhcmUgbm90IG9uIHRoZSBzY2hlbWEgdGhleSB3aWxsIG5vdCBiZSBpbiB0aGUgb3JkZXIgYnlcbiAqIEByZXR1cm5zIHtvYmplY3R9ICBBbiBzZXF1ZWxpemUgb3JkZXIgYnkgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTb3J0ID0gZnVuY3Rpb24gKGV2ZW50LCBkZWZhdWx0RmlsdGVyKSB7XG4gICAgbGV0IGNvcHlPZkRlZmF1bHRGaWx0ZXIgPSBfLmNsb25lKGRlZmF1bHRGaWx0ZXIpO1xuICAgIGxldCBxdWVyeSA9IF8uZ2V0KGV2ZW50LCAncXVlcnlTdHJpbmdQYXJhbWV0ZXJzJywge30pIHx8IHt9O1xuICAgIGxldCBzb3J0ID0gXy5nZXQocXVlcnksICdzb3J0JywgJy11cGRhdGVkQXQnKSB8fCAnLXVwZGF0ZWRBdCc7XG5cbiAgICByZXR1cm4gc29ydC5zcGxpdCgnLCcpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG5cbiAgICAgICAgY29uc3QgdGVzdEl0ZW0gPSBpdGVtLmluZGV4T2YoJy0nKSA9PT0gMCA/IGl0ZW0uc3Vic3RyKDEpIDogaXRlbTtcblxuICAgICAgICBpZiAoXy5nZXQoY29weU9mRGVmYXVsdEZpbHRlciwgdGVzdEl0ZW0sIG51bGwpKSB7XG4gICAgICAgICAgICBjb25zdCBzb3J0SXRlbSA9IFtdO1xuXG4gICAgICAgICAgICB0ZXN0SXRlbS5zcGxpdCgnLicpLmZvckVhY2goKHBhcmVudENoaWxkTGlzdCkgPT4ge1xuICAgICAgICAgICAgICAgIHNvcnRJdGVtLnB1c2gocGFyZW50Q2hpbGRMaXN0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaXRlbS5pbmRleE9mKCctJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzb3J0SXRlbS5wdXNoKCdERVNDJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNvcnRJdGVtLnB1c2goJ0FTQycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWNjLnB1c2goc29ydEl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBEQiBmcm9tICdzZXF1ZWxpemUnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCBkZWZhdWx0IGZpbHRlcnMgZm9yIGEgZ2l2ZW4gc2VxdWVsaWF6ZSBTY2hlbWEgT2JqZWN0LCBhbmQgc2V0IG9mIHN1YiBzY2hlbWFzXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYSAtIHR5cGUgaXMgc2VxdWVsaXplIGRhdGEgdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHN1YlNjaGVtYXMgLSBBbiBvYmplY3Qgd2l0aCBhbGlhcyBhcyB0aGUga2V5IGFuZCBzZXF1ZWxpemUgc2NoZW1hIGFzIHRoZSB2YWx1ZSBodHRwOi8vZG9jcy5zZXF1ZWxpemVqcy5jb20vY2xhc3MvbGliL3NlcXVlbGl6ZS5qc35TZXF1ZWxpemUuaHRtbCNpbnN0YW5jZS1tZXRob2QtZGVmaW5lXG4gKiBzdWIgc2NoZW1hIGNhbiBiZSB7bG9jYXRpb246IGxvY2F0aW9uU2NoZW1hfSBvciB7bG9jYXRpb246IHthczogXCJhc0FsaWFzXCIsIHNjaGVtYTogc2NoZW1hfX1cbiAqIEByZXR1cm5zIHtvYmplY3R9IEFuIE9iamVjdCB3aXRoIGEgZGVmYXVsdCBmaWx0ZXIgZm9yIGVhY2ggZGF0YVR5cGUgQ0hBUiBhbmQgVEVYVCB3aWxsIGdldCBhICRsaWtlIG9wZXJhdG9yLCBJTlRFR0VSLCBERUNJTUFMIGFuZCBCT09MRUFOIHdpbGwgZ2V0IGEgJGVxLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdEZpbHRlcnMoc2NoZW1hLCBzdWJTY2hlbWFzID0ge30pIHtcbiAgICBzY2hlbWEgPSBfLmNsb25lKHNjaGVtYSk7XG5cbiAgICBjb25zdCBmaWx0ZXJzID0ge307XG5cbiAgICBhZGRGaWx0ZXJzRnJvbVNjaGVtYShzY2hlbWEsIGZpbHRlcnMpO1xuICAgIE9iamVjdC5rZXlzKHN1YlNjaGVtYXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBhZGRGaWx0ZXJzRnJvbVNjaGVtYShzdWJTY2hlbWFzW2tleV0sIGZpbHRlcnMsIGtleSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlsdGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEZpbHRlcnNGcm9tU2NoZW1hKHNjaGVtYSwgYWNjdW11bGF0b3IsIGtleVByZWZpeCA9ICcnKSB7XG4gICAgY29uc3QgYXNMaW5rQWxpYXMgPSBfLmdldChzY2hlbWEsICdhcycsIG51bGwpO1xuICAgIHNjaGVtYSA9IF8uZ2V0KHNjaGVtYSwgJ3NjaGVtYScpIHx8IHNjaGVtYTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhzY2hlbWEpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGxldCBrZXkgPSBpdGVtO1xuXG4gICAgICAgIGlmIChhc0xpbmtBbGlhcykge1xuICAgICAgICAgICAgYWNjW2FzTGlua0FsaWFzXSA9IHsgdHlwZTogREIuU1RSSU5HLCBmaWx0ZXJUeXBlOiBEQi5PcC5lcSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleVByZWZpeCkge1xuICAgICAgICAgICAga2V5ID0gYCR7a2V5UHJlZml4fS4ke2l0ZW19YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY2hlbWFbaXRlbV0uZmlsdGVyVHlwZSkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IHNjaGVtYVtpdGVtXS5maWx0ZXJUeXBlIH07XG5cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IHNjaGVtYVtpdGVtXS50eXBlO1xuXG4gICAgICAgIC8vdG9kbyB0aGVzZSBzaG91bGQgYmUgcmVtb3ZlZCwgdGhlcmUgYXJlIGp1c3QgaGVyZSBmb3Igc29ydCB0ZXN0c1xuICAgICAgICBzd2l0Y2ggKGl0ZW1UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIERCLkNIQVI6XG4gICAgICAgICAgICBjYXNlIERCLlNUUklORzpcbiAgICAgICAgICAgIGNhc2UgREIuVEVYVDpcbiAgICAgICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogREIuT3AuaUxpa2UgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBEQi5ERUNJTUFMOlxuICAgICAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBEQi5PcC5vciB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIERCLkJPT0xFQU46XG4gICAgICAgICAgICBjYXNlIERCLkJJR0lOVDpcbiAgICAgICAgICAgIGNhc2UgREIuSU5URUdFUjpcbiAgICAgICAgICAgICAgICBhY2Nba2V5XSA9IHsgdHlwZTogaXRlbVR5cGUsIGZpbHRlclR5cGU6IERCLk9wLmVxIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgREIuREFURTpcbiAgICAgICAgICAgIGNhc2UgREIuREFURU9OTFk6XG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLmx0IH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvL25ldyBzZXF1ZWxpemUgdXNlcyBjbGFzc2VzIGluc3RlYWQgb2Ygb2JqZWN0c1xuICAgICAgICBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5TVFJJTkcpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBEQi5PcC5pTGlrZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlIGluc3RhbmNlb2YgREIuREVDSU1BTCkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLm9yIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5JTlRFR0VSKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogREIuT3Aub3IgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSBpbnN0YW5jZW9mIERCLkJJR0lOVCkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLm9yIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5CT09MRUFOKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgdHlwZTogaXRlbVR5cGUsIGZpbHRlclR5cGU6IERCLk9wLmVxIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5KU09OQikge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IHR5cGU6IGl0ZW1UeXBlLCBmaWx0ZXJUeXBlOiBEQi5PcC5jb250YWlucyB9O1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlIGluc3RhbmNlb2YgREIuREFURU9OTFkpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyB0eXBlOiBpdGVtVHlwZSwgZmlsdGVyVHlwZTogREIuT3AuZXEgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vdGhlc2UgYXJlIG5vdCBwYXJ0IG9mIHRoZSBtb2RlbHMgc28gYWRkIHRoZW0gYWx3YXlzXG4gICAgICAgIGFjY1snY3JlYXRlZEF0J10gPSB7IHR5cGU6IERCLkRBVEUsIGZpbHRlclR5cGU6IERCLk9wLmx0IH07XG4gICAgICAgIGFjY1sndXBkYXRlZEF0J10gPSB7IHR5cGU6IERCLkRBVEUsIGZpbHRlclR5cGU6IERCLk9wLmx0IH07XG4gICAgICAgIGFjY1snaWQnXSA9IHsgdHlwZTogREIuSU5URUdFUiwgZmlsdGVyVHlwZTogREIuT3AuZXEgfTtcblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGFjY3VtdWxhdG9yKTtcbn1cbiIsIi8qKlxuICogY3JlYXRlIHBhZ2luYXRpb24gb2JqZWN0IGZyb20gU2VxdWVsaXplIGZpbmRBbGxcbiAqIEBwYXJhbSB7b2JqZWN0fSByZXN1bHQgLSBzZXF1ZWxpemUgcmVzdWx0XG4gKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBtYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gcGFnZSBvZmZzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2luYXRpb25Gcm9tRmluZEFsbChyZXN1bHQsIGxpbWl0LCBvZmZzZXQpIHtcbiAgICByZXN1bHQgPSByZXN1bHQgfHwgW107XG4gICAgbGltaXQgPSBsaW1pdCB8fCAwO1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgY29uc3QgaGFzTW9yZSA9IHJlc3VsdC5sZW5ndGggPiBsaW1pdDtcbiAgICBpZiAoaGFzTW9yZSkge1xuICAgICAgICByZXN1bHQuc3BsaWNlKC0xLCAxKTtcbiAgICB9XG4gICAgY29uc3QgcGFnZU9iamVjdCA9IHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIGxpbWl0OiBsaW1pdCxcbiAgICAgICAgcm93czogcmVzdWx0LFxuICAgICAgICBoYXNNb3JlOiBoYXNNb3JlXG4gICAgfTtcblxuICAgIHJldHVybiBwYWdlT2JqZWN0O1xufVxuXG4vKipcbiAqIHdyYXBwZXIgZm9yIFNlcXVlbGl6ZSBmaW5kQWxsXG4gKiBAcGFyYW0ge29iamVjdH0gbW9kZWwgLSBpbnN0YW5jZSBvZiBTZXF1ZWxpemUgKG11c3QgYmUgaW5pdGlhbGl6ZWQpXG4gKiBAcGFyYW0geyome2luY2x1ZGU6IFt7bW9kZWw6ICp9XSwgd2hlcmU6IHtidXNpbmVzc0lkOiBBcnJheX0sIG9yZGVyOiBbc3RyaW5nW11dfX0gb3B0aW9ucyAtIGluc3RhbmNlIG9mIFNlcXVlbGl6ZSAobXVzdCBiZSBpbml0aWFsaXplZClcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRBbGwobW9kZWwsIG9wdGlvbnMpIHtcblxuICAgIGNvbnN0IGxpbWl0ID0gb3B0aW9ucy5saW1pdCB8fCAwO1xuICAgIGNvbnN0IGZpbmRBcmdzID0gT2JqZWN0LmFzc2lnbih7aW5jbHVkZTogeyBhbGw6IHRydWUsIG5lc3RlZDogdHJ1ZSB9fSwgb3B0aW9ucywgeyBsaW1pdDogbGltaXQgKyAxIH0pO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBtb2RlbC5maW5kQWxsKGZpbmRBcmdzKTtcbiAgICByZXR1cm4gZ2V0UGFnaW5hdGlvbkZyb21GaW5kQWxsKHJlc3VsdHMsIGxpbWl0LCBvcHRpb25zLm9mZnNldCk7XG59XG5cbmNvbnN0IGZpbmRVdGlscyA9IHtcbiAgICBmaW5kQWxsXG59O1xuZXhwb3J0IGRlZmF1bHQgZmluZFV0aWxzOyIsImltcG9ydCB7IER5bmFtb0RCRG9jdW1lbnQgfSBmcm9tICdAYXdzLXNkay9saWItZHluYW1vZGInO1xyXG5pbXBvcnQgeyBEeW5hbW9EQiB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1keW5hbW9kYic7XHJcblxyXG5jb25zdCBkeW5hbW9VdGlsID0ge1xyXG4gICAgZ2V0OiAocGFyYW1zKSA9PiBnZXQocGFyYW1zKVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7e1RhYmxlTmFtZTpzdHJpbmcsIEtleTp7a2V5OnN0cmluZ319fSBwYXJhbXNcclxuICovXHJcbmFzeW5jIGZ1bmN0aW9uIGdldChwYXJhbXMpIHtcclxuICAgIGNvbnN0IGR5bmFtb0RiID0gRHluYW1vREJEb2N1bWVudC5mcm9tKG5ldyBEeW5hbW9EQigpKTtcclxuICAgIHJldHVybiBkeW5hbW9EYi5nZXQocGFyYW1zKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZHluYW1vVXRpbDsiLCJpbXBvcnQgeyBoYW5kbGVGaWxlIH0gZnJvbSAnLi9oYW5kbGVGaWxlLmpzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICdibHVlYmlyZCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVFdmVudHMoZXZlbnQsIHRyYW5zZm9ybWVyLCBlcnJvckhhbmRsZXJQZXJGaWxlLCBzaG91bGRTa2lwRmFpbGVkRm9sZGVycyA9IGZhbHNlLCB1c2VySW1wb3J0VHlwZXMpIHtcbiAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5SZWNvcmRzKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5tYXAoZXZlbnQuUmVjb3JkcywgKHJlY29yZCkgPT4ge1xuICAgICAgICBjb25zdCBzbnNJbmZvID0gSlNPTi5wYXJzZShfLmdldChyZWNvcmQsICdTbnMuTWVzc2FnZScsICd7fScpKTtcbiAgICAgICAgY29uc3QgczNCdWNrZXQgPSBzbnNJbmZvLmJ1Y2tldDtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBzbnNJbmZvLmZpbGVzIHx8IFtdO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLm1hcChmaWxlcywgKGZpbGUpID0+IHtcbiAgICAgICAgICAgIGxldCBwYXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGUpO1xuICAgICAgICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlRmlsZShwYXRoLCBzM0J1Y2tldCwgdHJhbnNmb3JtZXIsIHsgc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMsIHVzZXJJbXBvcnRUeXBlcyB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvckhhbmRsZXJQZXJGaWxlICYmICFlcnJvckhhbmRsZXJQZXJGaWxlKGVyciwgcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChoYXNFcnJvcnMpIHtcbiAgICAgICAgICAgIHRocm93ICdFcnJvcnMgcHJvY2Vzc2luZyBvbmUgb3IgbW9yZSBmaWxlcy4gU2VlIGVycm9yIGxvZ3MgZm9yIGRldGFpbCBvbiBlYWNoIGVycm9yLic7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiIsImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUzNVdGlsIGZyb20gJy4uL3MzL1MzVXRpbHMuanMvUzNVdGlscy5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVGaWxlKHBhdGgsIHMzQnVja2V0LCB0cmFuc2Zvcm1lciwgb3B0aW9ucykge1xuICAgIGNvbnN0IHNob3VsZFNraXBGYWlsZWRGb2xkZXJzID0gXy5nZXQob3B0aW9ucywgJ3Nob3VsZFNraXBGYWlsZWRGb2xkZXJzJyk7XG4gICAgY29uc3QgdXNlckltcG9ydFR5cGVzID0gXy5nZXQob3B0aW9ucywgJ3VzZXJJbXBvcnRUeXBlcycpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgQnVja2V0OiBzM0J1Y2tldCxcbiAgICAgICAgS2V5OiBwYXRoXG4gICAgfTtcbiAgICBsZXQgYm9keSA9ICd7fSdcbiAgICB0cnkge1xuICAgICAgICBib2R5ID0gYXdhaXQgUzNVdGlsLmdldE9iamVjdChwYXJhbXMpO1xuICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gSlNPTi5wYXJzZShib2R5KTtcbiAgICAgICAgY29uc3QgcmV0dXJuZWRWYWx1ZSA9IGF3YWl0IHRyYW5zZm9ybWVyKHBhcnNlZEJvZHkpO1xuICAgICAgICBhd2FpdCBTM1V0aWwuZGVsZXRlT2JqZWN0KHBhcmFtcyk7XG5cbiAgICAgICAgcmV0dXJuIHJldHVybmVkVmFsdWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignaGFuZGxlLWZpbGUtZXJyb3InLCBlcnJvcik7XG5cbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdOb1N1Y2hLZXknIHx8ICFib2R5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmV3UGF0aCA9ICcnO1xuXG4gICAgICAgIGlmICh1c2VySW1wb3J0VHlwZXMpIHtcbiAgICAgICAgICAgIC8vIGxvb2sgZm9yIGl0ZW1zIGluIHRoZSB1c2VySW1wb3J0VHlwZXNcbiAgICAgICAgICAgIGNvbnN0IHVzZXJzSW1wb3J0cyA9IE9iamVjdC52YWx1ZXModXNlckltcG9ydFR5cGVzKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gcGF0aC5zcGxpdCgnLycpO1xuICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBfLmxhc3QoaXRlbXMpO1xuICAgICAgICAgICAgY29uc3QgZm9sZGVyTmFtZSA9IF8uZmlyc3QoaXRlbXMpO1xuXG4gICAgICAgICAgICBpZiAodXNlcnNJbXBvcnRzLmluZGV4T2YoZm9sZGVyTmFtZSkgPiAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTa2lwRmFpbGVkRm9sZGVycykge1xuICAgICAgICAgICAgICAgICAgICBuZXdQYXRoID0gYCR7Zm9sZGVyTmFtZX0vZXJyb3IvJHtmaWxlTmFtZX1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5zdGFydHNXaXRoKHBhdGgsIGAke2ZvbGRlck5hbWV9L2ZhaWxlZC1vbmNlL2ApKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1BhdGggPSBfLnJlcGxhY2UocGF0aCwgYCR7Zm9sZGVyTmFtZX0vZmFpbGVkLW9uY2UvYCwgYCR7Zm9sZGVyTmFtZX0vZmFpbGVkLXR3aWNlL2ApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5zdGFydHNXaXRoKHBhdGgsIGAke2ZvbGRlck5hbWV9L2ZhaWxlZC10d2ljZS9gKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdQYXRoID0gXy5yZXBsYWNlKHBhdGgsIGAke2ZvbGRlck5hbWV9L2ZhaWxlZC10d2ljZS9gLCBgJHtmb2xkZXJOYW1lfS9lcnJvci9gKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdQYXRoID0gYCR7Zm9sZGVyTmFtZX0vZmFpbGVkLW9uY2UvJHtmaWxlTmFtZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3UGF0aCA9IGBwYXRoQW5kRXZlbnRNaXNNYXRjaEVycm9yLyR7cGF0aH1gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMpIHtcbiAgICAgICAgICAgICAgICBuZXdQYXRoID0gYGVycm9yLyR7cGF0aH1gO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfLnN0YXJ0c1dpdGgocGF0aCwgJ2ZhaWxlZC1vbmNlLycpKSB7XG4gICAgICAgICAgICAgICAgbmV3UGF0aCA9IF8ucmVwbGFjZShwYXRoLCAnZmFpbGVkLW9uY2UvJywgJ2ZhaWxlZC10d2ljZS8nKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5zdGFydHNXaXRoKHBhdGgsICdmYWlsZWQtdHdpY2UvJykpIHtcbiAgICAgICAgICAgICAgICBuZXdQYXRoID0gXy5yZXBsYWNlKHBhdGgsICdmYWlsZWQtdHdpY2UvJywgJ2Vycm9yLycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhwYXRoLCAnZGVsYXlVbnRpbC8nKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoID0gXy5sYXN0KHBhdGguc3BsaXQoJy8nKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV3UGF0aCA9IGBmYWlsZWQtb25jZS8ke3BhdGh9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1BhcmFtcyA9IHtcbiAgICAgICAgICAgIEJ1Y2tldDogczNCdWNrZXQsXG4gICAgICAgICAgICBLZXk6IG5ld1BhdGgsXG4gICAgICAgICAgICBCb2R5OiBib2R5XG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgUzNVdGlsLnB1dE9iamVjdChuZXdQYXJhbXMpO1xuICAgICAgICBhd2FpdCBTM1V0aWwuZGVsZXRlT2JqZWN0KHBhcmFtcyk7XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxufVxuIiwiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBQcm9taXNlIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBTM1V0aWxzIGZyb20gJy4uL3MzL1MzVXRpbHMuanMvUzNVdGlscy5qcyc7XG5pbXBvcnQgU05TVXRpbCBmcm9tICcuLi9zbnMvU05TVXRpbHMuanMnO1xuaW1wb3J0IGR5bmFtb1V0aWwgZnJvbSAnLi4vZHluYW1vL2R5bmFtb1V0aWxzLmpzJztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gYnVja2V0XG4gKiBAcGFyYW0ge251bWJlcn0gbWF4S2V5c1xuICogQHBhcmFtIHtPYmplY3R9IHVzZXJJbXBvcnRUeXBlc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9vcChidWNrZXQsIG1heEtleXMsIHVzZXJJbXBvcnRUeXBlcykge1xuICAgIGxldCBidWNrZXRSZXN1bHQgPSB7fTtcbiAgICBsZXQgZmlsZUxpc3QgPSBbXTtcblxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbW9tZW50KCk7XG5cbiAgICBkbyB7XG4gICAgICAgIGJ1Y2tldFJlc3VsdCA9IGF3YWl0IFMzVXRpbHMubGlzdE9iamVjdHNWMih7XG4gICAgICAgICAgICBCdWNrZXQ6IGJ1Y2tldCxcbiAgICAgICAgICAgIE1heEtleXM6IG1heEtleXMsXG4gICAgICAgICAgICBDb250aW51YXRpb25Ub2tlbjogXy5nZXQoYnVja2V0UmVzdWx0LCAnTmV4dENvbnRpbnVhdGlvblRva2VuJylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IG5ld0ZpbGVzID0gXy5maWx0ZXIoYnVja2V0UmVzdWx0LkNvbnRlbnRzLCAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKF8uc3RhcnRzV2l0aChfLmdldChmaWxlLCAnS2V5JyksICdkZWxheVVudGlsLycpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZURlbGF5VGltZSA9IF8uZ2V0KGZpbGUsICdLZXknKS5zcGxpdCgnLycpWzFdO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb21lbnQoZmlsZURlbGF5VGltZSwgJ1lZWVlNTURESEhtbScpLmlzU2FtZU9yQmVmb3JlKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1c2VySW1wb3J0VHlwZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBsb29rIGZvciBpdGVtcyBpbiB0aGUgdXNlckltcG9ydFR5cGVzXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcnNJbXBvcnRzID0gT2JqZWN0LnZhbHVlcyh1c2VySW1wb3J0VHlwZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gZmlsZS5LZXkuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IF8ubGFzdChpdGVtcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9sZGVyTmFtZSA9IF8uZmlyc3QoaXRlbXMpO1xuICAgICAgICAgICAgICAgIGlmIChfLmlzRW1wdHkoZmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlcnNJbXBvcnRzLmluZGV4T2YoZm9sZGVyTmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gIV8uc3RhcnRzV2l0aChmaWxlLktleSwgYCR7Zm9sZGVyTmFtZX0vZXJyb3JgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAhXy5zdGFydHNXaXRoKGZpbGUuS2V5LCAnZXJyb3InKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZmlsZUxpc3QgPSBfLmNvbmNhdChmaWxlTGlzdCwgbmV3RmlsZXMpO1xuICAgIH0gd2hpbGUgKGJ1Y2tldFJlc3VsdC5Jc1RydW5jYXRlZCAmJiBidWNrZXRSZXN1bHQuTmV4dENvbnRpbnVhdGlvblRva2VuICYmIGZpbGVMaXN0Lmxlbmd0aCA8IG1heEtleXMpO1xuXG4gICAgcmV0dXJuIGZpbGVMaXN0O1xufVxuXG4vKipcbiAqIFB1Ymxpc2hlZCBTTlMgZXZlbnRzIGF0IGEgc3RlYWR5IHBhY2UgZm9yIGRhdGEgaW4gYSBwYXJ0aWN1bGFyIGJ1Y2tldC4gU2hvdWxkIGJlIGV4ZWN1dGVkIHZpYSBhIGNsb3VkIHdhdGNoIGNyb24gam9iIGFzIGEgcGFydCBvZiBhIG1pY3JvIHNlcnZpY2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnVGFibGUgLSBUaGUgRHluYW1vIERCIHRhYmxlIHdoZXJlIHRvIGdldCB0aGUgY2h1bmstc2l6ZSBhbmQgbWF4TWVzc2FnZSBzaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFibGVLZXkgLSBUaGUga2V5IHRvIHRoZSBpdGVtIGluIHRoZSBEeW5hbW8gREIgdGFibGUgdGhhdCBob2xkcyB0aGUgY2h1bmstc2l6ZSBhbmQgbWF4TWVzc2FnZSBzaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gYnVja2V0IC0gVGhlIG5hbWUgb2YgdGhlIHMzIGJ1Y2tldCB0byB3YXRjaCwgd2hlbiB5b3UgZHJvcCBpdGVtcyBpbnRvIHRoaXMgdGFibGUgZXZlbnRzIHdpbGwgYmUgY3JlYXRlZFxuICogQHBhcmFtIHtzdHJpbmd9IHNuc1RvcGljIC0gVGhlIG5hbWUgb2YgdGhlIHNuc0V2ZW50IHRvIHB1Ymxpc2hcbiAqIEBwYXJhbSB7b2JqZWN0fSB1c2VySW1wb3J0VHlwZXMgLSBpbXBvcnQgdHlwZXMgdG8gZmlsdGVyIG9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWJsaXNoRXZlbnRzKGNvbmZpZ1RhYmxlLCB0YWJsZUtleSwgYnVja2V0LCBzbnNUb3BpYywgdXNlckltcG9ydFR5cGVzKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBkeW5hbW9VdGlsLmdldCh7XG4gICAgICAgICAgICBUYWJsZU5hbWU6IGNvbmZpZ1RhYmxlLFxuICAgICAgICAgICAgS2V5OiB7IGtleTogdGFibGVLZXkgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBnZXQgY29uZmlnIGZvciBrZXk6ICR7dGFibGVLZXl9IHRhYmxlOiAke2NvbmZpZ1RhYmxlfSBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHMgb2YgMiBhbmQgMTBgLCBlKTtcbiAgICB9XG4gICAgbGV0IGNodW5rU2l6ZSA9IF8uZ2V0KHJlc3VsdCwgJ0l0ZW0uc25zQ2h1bmtTaXplJywgMik7XG4gICAgbGV0IG1heE1lc3NhZ2VzID0gXy5nZXQocmVzdWx0LCAnSXRlbS5zbnNNYXhNZXNzYWdlcycsIDEwKTtcblxuICAgIGNvbnN0IHNuc0NyZWF0ZVRvcGljUmVzcG9uc2UgPSBhd2FpdCBTTlNVdGlsLmNyZWF0ZVRvcGljKHsgTmFtZTogc25zVG9waWMgfSk7XG4gICAgY29uc3QgdG9waWNBcm4gPSBzbnNDcmVhdGVUb3BpY1Jlc3BvbnNlLlRvcGljQXJuO1xuICAgIGNvbnN0IG1heEtleXMgPSBjaHVua1NpemUgKiBtYXhNZXNzYWdlcztcblxuICAgIGNvbnN0IGZpbGVMaXN0ID0gYXdhaXQgbG9vcChidWNrZXQsIG1heEtleXMsIHVzZXJJbXBvcnRUeXBlcyk7XG5cbiAgICBjb25zdCBtZXNzYWdlTGlzdCA9IF8uY2hhaW4oZmlsZUxpc3QpXG4gICAgICAgIC5tYXAoJ0tleScpXG4gICAgICAgIC5jaHVuayhjaHVua1NpemUpXG4gICAgICAgIC5zbGljZSgwLCBtYXhNZXNzYWdlcylcbiAgICAgICAgLnZhbHVlKClcbiAgICA7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5tYXAobWVzc2FnZUxpc3QsIChmaWxlcykgPT4ge1xuICAgICAgICByZXR1cm4gU05TVXRpbC5wdWJsaXNoKHtcbiAgICAgICAgICAgIE1lc3NhZ2U6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBidWNrZXQ6IGJ1Y2tldCxcbiAgICAgICAgICAgICAgICBmaWxlczogZmlsZXNcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgVG9waWNBcm46IHRvcGljQXJuXG4gICAgICAgIH0pO1xuICAgIH0pO1xufSIsImltcG9ydCB7IHB1Ymxpc2hFdmVudHMgfSBmcm9tICcuL3B1Ymxpc2hFdmVudHMuanMnO1xuaW1wb3J0IHsgaGFuZGxlRXZlbnRzIH0gZnJvbSAnLi9oYW5kbGVFdmVudHMuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBidWNrZXQgd2F0Y2hlciB3YXRjaGVzIGEgczMgYnVja2V0IGFuZCBwdWJsaXNoZXMgZXZlbnRzIHRvIGEgc25zIHRvcGljLCB0aGlzIGFsbG93cyB5b3UgdG8gcHJvY2VzcyBmaWxlcyBpbiBzMyB3aXRoIGEgc29tZSB0cmFuc2Zvcm1lciBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3Igd2F0Y2hCdWNrZXQsIHNlZSBiZWxvd1xuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtcy5ldmVudCAtIFRoZSBldmVudCBvZiB0aGUgbGFtYmRhXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmR5bmFtb0NvbmZpZ1RhYmxlIC0gVGhlIER5bmFtbyBEQiB0YWJsZSB3aGVyZSB0byBnZXQgdGhlIGNodW5rU2l6ZSBhbmQgbWF4TWVzc2FnZSBzaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmR5bmFtb0NvbmZpZ0tleSAtIFRoZSBrZXkgdG8gdGhlIGl0ZW0gaW4gdGhlIER5bmFtbyBEQiB0YWJsZSB0aGF0IGhvbGRzIHRoZSBjaHVua1NpemUgYW5kIG1heE1lc3NhZ2Ugc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5zM0J1Y2tldCAtIFRoZSBuYW1lIG9mIHRoZSBzMyBidWNrZXQgdG8gd2F0Y2gsIHdoZW4geW91IGRyb3AgaXRlbXMgaW50byB0aGlzIHRhYmxlIGV2ZW50cyB3aWxsIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuc25zVG9waWMgLSBUaGUgbmFtZSBvZiB0aGUgc25zRXZlbnQgdG8gcHVibGlzaFxuICogQHBhcmFtIHtmdW5jdGlvbn0gcGFyYW1zLnRyYW5zZm9ybWVyIC0gdGhlIGZ1bmN0aW9uIHRvIHJ1biBvbiBlYWNoIGZpbGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtwYXJhbXMuZXJyb3JIYW5kbGVyUGVyRmlsZV0gLSB0aGUgZnVuY3Rpb24gdG8gcnVuIG9uIGFzIGEgY2F0Y2ggb24gZWFjaCBmaWxlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwYXJhbXMuc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnNdIC0gd2hldGhlciB0byB1c2UgdGhlIGZhaWxlZC1vbmNlLCBmYWlsZWQtdHdpY2UsIGVycm9yIG9yIGp1c3QgZXJyb3IgZm9sZGVyc1xuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXMudXNlckltcG9ydFR5cGVzXSAtIHVzZXIgaW1wb3J0IHN1YiBkaXJlY3RvcmllcyBvYmplY3QgbWFwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaEJ1Y2tldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbW9Db25maWdUYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1vQ29uZmlnS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM0J1Y2tldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25zVG9waWMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXJQZXJGaWxlID0gXy5ub29wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRTa2lwRmFpbGVkRm9sZGVycyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW1wb3J0VHlwZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB7XG4gICAgaWYgKCFldmVudCB8fCAhZHluYW1vQ29uZmlnVGFibGUgfHwgIWR5bmFtb0NvbmZpZ0tleSB8fCAhczNCdWNrZXQgfHwgIXNuc1RvcGljIHx8ICF0cmFuc2Zvcm1lcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVycy4gTmVlZCBldmVudCwgZHluYW1vQ29uZmlnVGFibGUsIGR5bmFtb0NvbmZpZ0tleSwgczNCdWNrZXQsIHNuc1RvcGljLCB0cmFuc2Zvcm1lcicpO1xuICAgIH1cblxuICAgIGNvbnN0IEV2ZW50U291cmNlID0gXy5nZXQoZXZlbnQsICdSZWNvcmRzWzBdLkV2ZW50U291cmNlJyk7XG4gICAgaWYgKF8uaXNFcXVhbChFdmVudFNvdXJjZSwgJ2F3czpzbnMnKSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlRXZlbnRzKGV2ZW50LCB0cmFuc2Zvcm1lciwgZXJyb3JIYW5kbGVyUGVyRmlsZSwgc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMsIHVzZXJJbXBvcnRUeXBlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIHJ1biBmcm9tIHRoZSBjcm9uIGpvYiBzbyBwdWJsaXNoIFNOUyBldmVudHNcbiAgICAgICAgcmV0dXJuIHB1Ymxpc2hFdmVudHMoZHluYW1vQ29uZmlnVGFibGUsIGR5bmFtb0NvbmZpZ0tleSwgczNCdWNrZXQsIHNuc1RvcGljLCB1c2VySW1wb3J0VHlwZXMpO1xuICAgIH1cbn1cbiIsImV4cG9ydCBjb25zdCBlcnJvckxpc3QgPSB7XG4gICAgaW52YWxpZEludmVudG9yeVJlbGVhc2VSZXF1ZXN0OiB7XG4gICAgICAgIG1lc3NhZ2U6ICdOT1QgRU5PVUdIIElOVkVOVE9SWSBUTyBGVUxGSUxMIFJFTEVBU0UnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDEwJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBhbHJlYWR5UmVsZWFzZWQ6IHtcbiAgICAgICAgbWVzc2FnZTogJ0FMUkVBRFkgUkVMRUFTRUQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDExJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBhbHJlYWR5UmVjZWl2ZWQ6IHtcbiAgICAgICAgbWVzc2FnZTogJ1JFQ0VJVkFCTEUgQUxSRUFEWSBSRUNFSVZFRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTInLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRJdGVtc1JlcXVlc3Q6IHtcbiAgICAgICAgbWVzc2FnZTogJ1ZBTElEIElURU1TIE1VU1QgQkUgSU5DTFVERUQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDEzJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkSUQ6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lEIGlzIGludmFsaWQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDE0JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkUmVjZWl2YWJsZToge1xuICAgICAgICBtZXNzYWdlOiAnTVVTVCBDT05UQUlOIEFUIExFQVNUIE9ORSBSRUNFSVZBQkxFJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxNScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZFJlcXVlc3Q6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgUkVRVUVTVCBEQVRBJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxNicsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZEFQSUtleToge1xuICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRCBSRVFVRVNUIC0gQVBJIE1BWSBLRVkgSU5WQUxJRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTcnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIHFiQ3JlYXRpb25FcnJvcjoge1xuICAgICAgICBtZXNzYWdlOiAnUVVJQ0tCT09LUyBFUlJPUiAtIEVSUk9SIENSRUFUSU5HIE9CSkVDVCBJTiBRVUlDS0JPT0tTJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxOCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgY2Fubm90UmVvcGVuOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdDQU5OT1QgUkVPUEVOIC0gVEhFIE9SREVSIEhBUyBBTFJFQURZIEJFRU4gT1BFTkVEJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxOCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZERhdGVGb3JtYXQ6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgREFURSBGT1JNQVQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDE5JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkU3RhcnREYXRlOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIFNUQVJUIERBVEUnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDIwJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkRW5kRGF0ZToge1xuICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRCBFTkQgREFURScsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjEnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRPcmRlclN0YXR1czoge1xuICAgICAgICBtZXNzYWdlOiAnVU5BQkxFIFRPIEVESVQgT1JERVIgSVRFTVMgVU5MRVNTIFRIRSBPUkRFUiBJUyBJTiBFU1RJTUFURSBTVEFUVVMnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDIyJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkUGF5bWVudFN0YXR1czoge1xuICAgICAgICBtZXNzYWdlOiAnVU5BQkxFIFRPIFVQREFURSBQQVlNRU5UIFNUQVRVUyBQQVlNRU5UIE1VU1QgQkUgT1BFTicsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjMnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRSZWxlYXNlU3RhdHVzOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdVTkFCTEUgVE8gVVBEQVRFIFJFTEVBU0UsIFNUQVRVUyBSRUxFQVNFIE1VU1QgQkUgT1BFTicsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjQnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRSZWNlaXZhYmxlU3RhdHVzOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdVTkFCTEUgVE8gVVBEQVRFIFJFQ0VJVkFCTEUsIFNUQVRVUyBSRUNFSVZBQkxFIE1VU1QgQkUgT1BFTicsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMDI1JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkSnNvbjp7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIEpTT04nLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDA1JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkRmlsdGVyOntcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgRklMVEVSJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyNicsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZFVzZXJOYW1lVXBkYXRlOntcbiAgICAgICAgbWVzc2FnZTogJ1VOQUJMRSBUTyBVUERBVEUgVVNFUk5BTUUnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDI3JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbWFnZVNpemVMaW1pdDp7XG4gICAgICAgIG1lc3NhZ2U6ICdJTUFHRSBTSVpFIExJTUlUIDEwMEtCIEVYQ0VFREVEJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyOCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgdW5hdXRob3JpemVkOntcbiAgICAgICAgbWVzc2FnZTogJ1VOQVVUSE9SSVpFRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQxMTEnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDFcbiAgICB9LFxuICAgIG5vdEZvdW5kOntcbiAgICAgICAgbWVzc2FnZTogJ0lURU0gTk9UIEZPVU5EJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAwNCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwNFxuICAgIH0sXG4gICAgZW1haWxSZXF1aXJlZDp7XG4gICAgICAgIG1lc3NhZ2U6ICdOTyBFTUFJTCBQUk9WSURFRCwgQ0hFQ0sgQ1VTVE9NRVIgRU1BSUwnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDA0JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDA0XG4gICAgfSxcbiAgICBtb2JpbGVQaG9uZVJlcXVpcmVkOntcbiAgICAgICAgbWVzc2FnZTogJ05PIE1PQklMRSBQSE9ORSBQUk9WSURFRCwgQ0hFQ0sgQ1VTVE9NRVIgQ09OVEFDVFMnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDA0JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDA0XG4gICAgfSxcbiAgICBpbnZhbGlkQ2FkZW5jZVR5cGU6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgQ0FERU5DRSBUWVBFJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNTAwMScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDUwMFxuICAgIH0sXG59OyIsImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvckxpc3QgfSBmcm9tICcuL2Vycm9yQ29kZXMuanMnO1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBib2R5XG4gKiBAcGFyYW0ge3t9fSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWNjZXNzKGJvZHksIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkYkNsb3NlID0gXy5nZXQob3B0aW9ucywgJ2RiQ2xvc2UnLCBfLm5vb3ApO1xuICAgIGRiQ2xvc2UoKTtcblxuICAgIHJldHVybiBidWlsZFJlc3BvbnNlKDIwMCwgYm9keSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEBwYXJhbSB7e2RiQ2xvc2U6ZnVuY3Rpb258dW5kZWZpbmVkfX0gb3B0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3VjY2Vzc0h0bWwoaHRtbCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRiQ2xvc2UgPSBfLmdldChvcHRpb25zLCAnZGJDbG9zZScsIF8ubm9vcCk7XG5cbiAgICBkYkNsb3NlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQvaHRtbCcsXG4gICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonLFxuICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJzogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBodG1sXG4gICAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAqIEByZXR1cm5zIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFVzZXJOYW1lRnJvbUNvZ25pdG9FdmVudChldmVudCkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBfLmdldChldmVudCwgJ3JlcXVlc3QudXNlckF0dHJpYnV0ZXMnKTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzWydjb2duaXRvOmVtYWlsX2FsaWFzJ10gfHwgJ1VOS05PV04gVVNFUic7XG59XG5cbi8qKlxuICogR2V0IHRoZSB1c2VyIGluZm9ybWF0aW9uIGZyb20gdGhlIGV2ZW50IG9iamVjdFxuICpcbiAqIEBwYXJhbSBldmVudCB7T2JqZWN0fSBhbiBldmVudCBvYmplY3RcbiAqIEByZXR1cm5zIHt7dXNlcm5hbWU6IHN0cmluZywgaWQ6IG51bWJlcn19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50VXNlcihldmVudCkge1xuICAgIGxldCBqc29uVG9QYXJzZSA9IF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMuY3VzdG9tOlVJRCcpIHx8XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jdXN0b206VUlEJykgfHxcbiAgICAgICAgJzAnO1xuXG4gICAgY29uc3QgaWQgPSBKU09OLnBhcnNlKGpzb25Ub1BhcnNlKTtcblxuICAgIGNvbnN0IHVzZXJuYW1lID0gXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcy5lbWFpbCcpIHx8IF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5lbWFpbCcpIHx8ICdMT0NBTCBURVNUIFVTRVInO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgIGlkXG4gICAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmYWlsdXJlIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIGJvZHkge09iamVjdH0gYW4gZXZlbnQgb2JqZWN0XG4gKiBAcGFyYW0gb3B0aW9ucyB7T2JqZWN0fSBhbiBvcHRpb25zIG9iamVjdFxuICogQHJldHVybnMge3tzdGF0dXNDb2RlOm51bWJlciwgaGVhZGVyczpvYmplY3QsIGJvZHk6c3RyaW5nfX0gYSByZXNwb25zZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhaWx1cmUoYm9keSA9IHt9LCBvcHRpb25zKSB7XG4gICAgY29uc3QgZGJDbG9zZSA9IF8uZ2V0KG9wdGlvbnMsICdkYkNsb3NlJywgXy5ub29wKTtcbiAgICBkYkNsb3NlKCk7XG4gICAgbGV0IGNsZWFuZWRFcnJvckJvZHk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuVVRJTF9MT0cgPT09ICdMT0dfQUxMJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCctLS0tLS0tPlVUSUwgRVJST1I6JywgYm9keSk7XG4gICAgfVxuXG4gICAgY29uc3QgTk9STUFMX0VSUk9SID0geyBzdGF0dXNDb2RlOiA1MDAsIGVycm9yQ29kZTogJzVYWCcsIG1lc3NhZ2U6ICdJTlRFUk5BTCBVVElMIEVSUk9SJyB9O1xuICAgIGNsZWFuZWRFcnJvckJvZHkgPSBib2R5O1xuICAgIGlmICghXy5pc1VuZGVmaW5lZChib2R5LmRldGFpbHMpKSB7XG4gICAgICAgIGNsZWFuZWRFcnJvckJvZHkgPSBkZXRlY3RKb3lFcnJvcihib2R5KTtcbiAgICB9IGVsc2UgaWYgKF8uaXNVbmRlZmluZWQoYm9keS5lcnJvckNvZGUpIHx8IF8uaXNVbmRlZmluZWQoYm9keS5zdGF0dXNDb2RlKSkge1xuICAgICAgICBjbGVhbmVkRXJyb3JCb2R5ID0gZGV0ZWN0U2VxdWVsaXplRXJyb3IoYm9keSk7XG4gICAgfVxuICAgIGlmKF8uZ2V0KGJvZHksICdyZXNwb25zZS5kYXRhLm1lc3NhZ2UnKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCctLS0tLS0tPlVUSUwgRVJST1I6ICcrXy5nZXQoYm9keSwgJ3Jlc3BvbnNlLmRhdGEubWVzc2FnZScpKVxuICAgIH1cblxuICAgIGNvbnN0IG5ld0JvZHkgPSBfLm1lcmdlKE5PUk1BTF9FUlJPUiwgY2xlYW5lZEVycm9yQm9keSk7XG5cbiAgICByZXR1cm4gYnVpbGRSZXNwb25zZShuZXdCb2R5LnN0YXR1c0NvZGUsIG5ld0JvZHkpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZhaWx1cmUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHBhcmFtIHN0YXR1c0NvZGUge051bWJlcn0gYSBzdGF0dXMgY29kZVxuICogQHBhcmFtIGJvZHkge09iamVjdH0gYW4gZXZlbnQgb2JqZWN0XG4gKiBAcmV0dXJucyB7e3N0YXR1c0NvZGU6bnVtYmVyLCBoZWFkZXJzOm9iamVjdCwgYm9keTpzdHJpbmd9fSBhIHJlc3BvbnNlIG9iamVjdFxuICovXG5mdW5jdGlvbiBidWlsZFJlc3BvbnNlKHN0YXR1c0NvZGUsIGJvZHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXNDb2RlOiBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonLFxuICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJzogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KVxuICAgIH07XG59XG5cbi8qKlxuICogcGFyc2UgdGhlIGJvZHkgb2YgdGhlIGV2ZW50IG9iamVjdFxuICpcbiAqIEBwYXJhbSByZXF1ZXN0RXZlbnQge3tib2R5OnN0cmluZ319IGFuIGV2ZW50IG9iamVjdFxuICogQHJldHVybnMgZXZlbnQgeyp9IHRoZSBqc29uIG9iamVjdCBvZiB0aGUgYm9keVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VCb2R5KHJlcXVlc3RFdmVudCkge1xuXG4gICAgbGV0IGV2ZW50Qm9keSA9IHt9O1xuICAgIGlmIChfLmlzU3RyaW5nKHJlcXVlc3RFdmVudC5ib2R5KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZXZlbnRCb2R5ID0gSlNPTi5wYXJzZShyZXF1ZXN0RXZlbnQuYm9keSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIEludmFsaWQgSlNPTlxuICAgICAgICAgICAgZXZlbnRCb2R5ID0gbnVsbDtcblxuICAgICAgICAgICAgdGhyb3cgZXJyb3JMaXN0LmludmFsaWRKc29uO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChfLmlzT2JqZWN0KHJlcXVlc3RFdmVudC5ib2R5KSkge1xuICAgICAgICBldmVudEJvZHkgPSByZXF1ZXN0RXZlbnQuYm9keTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnRCb2R5O1xufVxuXG4vKipcbiAqIHBhcnNlIHRoZSBib2R5IG9mIHRoZSBldmVudCBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcmVxdWVzdEV2ZW50IHtzdHJpbmd8b2JqZWN0fSBhbiBldmVudCBvYmplY3RcbiAqIEBwYXJhbSBbY2FsbGJhY2tdIHtmdW5jdGlvbn0gdW5kZWZpbmVkIGEgY2FsbCBiYWNrIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBldmVudCB7Kn0gdGhlIGpzb24gb2JqZWN0IG9mIHRoZSBib2R5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUV2ZW50KHJlcXVlc3RFdmVudCwgY2FsbGJhY2spIHtcbiAgICBsZXQgZXZlbnQgPSB7fTtcbiAgICBpZiAoXy5pc1N0cmluZyhyZXF1ZXN0RXZlbnQpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBldmVudCA9IEpTT04ucGFyc2UocmVxdWVzdEV2ZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gSW52YWxpZCBKU09OXG4gICAgICAgICAgICBldmVudCA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKEVycm9yKGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChyZXF1ZXN0RXZlbnQpKSB7XG4gICAgICAgIGV2ZW50ID0gcmVxdWVzdEV2ZW50O1xuICAgIH1cblxuICAgIHJldHVybiBldmVudDtcbn1cblxuLyoqXG4gKiBwYXJzZSB0aGUgYm9keSBvZiB0aGUgZXZlbnQgb2JqZWN0XG4gKiBsb29rIGZvciBzZXF1ZWxpemUgZXJyb3JzIGFuZCByZXR1cm4gYSBtZXNzYWdlXG4gKiBFUlJPUlMgc2hvdWxkIG5vdCBiZSBjYXVnaHQgaGVyZSB0aGlzIGlzIGEgZmFsbGJhY2sgZm9yIHVua25vd24gZGF0YWJhc2UgZXJyb3JzXG4gKlxuICogQHBhcmFtIGJvZHkge29iamVjdH0gcGFydCBvZiBhIGJvZHkgcmVzcG9uc2VcbiAqIEByZXR1cm5zIGVycm9yIG1lc3NhZ2Ugb2JqZWN0IHttZXNzYWdlOnN0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFNlcXVlbGl6ZUVycm9yKGJvZHkpIHtcbiAgICBjb25zdCBlcnJvckJvZHkgPSB7fTtcblxuICAgIGxldCBzZXF1ZWxpemVFcnJvciA9IF8uZ2V0KGJvZHksICdlcnJvcnMnLCBbXSkucmVkdWNlKChhY2MsIGVycikgPT4ge1xuICAgICAgICBhY2MgPSBhY2MgKyAnICcgKyBfLmdldChlcnIsICdtZXNzYWdlJyk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgJycpO1xuICAgIGNvbnN0IHBhcmVudEVycm9yID0gXy5nZXQoYm9keSwgJ3BhcmVudCcsICcnKTtcblxuICAgIHNlcXVlbGl6ZUVycm9yID0gc2VxdWVsaXplRXJyb3IgKyBfLmdldChib2R5LCAnb3JpZ2luYWwuZGV0YWlsJywgJycpICsgXy5nZXQoYm9keSwgJ1R5cGVFcnJvcicsICcnKSArIHBhcmVudEVycm9yO1xuICAgIGVycm9yQm9keS5tZXNzYWdlID0gc2VxdWVsaXplRXJyb3IudHJpbSgpO1xuICAgIHJldHVybiBlcnJvckJvZHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RKb3lFcnJvcihib2R5KSB7XG4gICAgY29uc3QgZXJyb3JCb2R5ID0ge307XG4gICAgY29uc3Qgam95RXJyb3IgPSBfLmdldChib2R5LCAnZGV0YWlsc1swXScsIHt9KTtcbiAgICBjb25zb2xlLmVycm9yKCdVU0VSIFZBTElEQVRJT04gRVJST1I6JywgYm9keSk7XG5cbiAgICBlcnJvckJvZHkubWVzc2FnZSA9IGpveUVycm9yLm1lc3NhZ2U7XG4gICAgZXJyb3JCb2R5LnN0YXR1c0NvZGUgPSA0MDA7XG4gICAgZXJyb3JCb2R5LmVycm9yQ29kZSA9ICc0MDAwJztcbiAgICByZXR1cm4gZXJyb3JCb2R5O1xufSIsImltcG9ydCB7IFMzIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzM1V0aWxzKGFjdGlvbiwgcGFyYW1zKSB7XHJcbiAgICBjb25zdCBzMyA9IG5ldyBTMygpO1xyXG4gICAgcmV0dXJuIHMzW2FjdGlvbl0ocGFyYW1zKTtcclxufVxyXG5cclxuY29uc3QgUzNVdGlsID0ge1xyXG4gICAgZ2V0T2JqZWN0OiAocGFyYW1zKSA9PiBnZXRTMyhwYXJhbXMpLFxyXG4gICAgZGVsZXRlT2JqZWN0OiAocGFyYW1zKSA9PiBzM1V0aWxzKCdkZWxldGVPYmplY3QnLCBwYXJhbXMpLFxyXG4gICAgcHV0T2JqZWN0OiAocGFyYW1zKSA9PiBzM1V0aWxzKCdwdXRPYmplY3QnLCBwYXJhbXMpLFxyXG4gICAgbGlzdE9iamVjdHNWMjogKHBhcmFtcykgPT4gczNVdGlscygnbGlzdE9iamVjdHNWMicsIHBhcmFtcylcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgUzNVdGlsO1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0UzMocGFyYW1zKSB7XHJcbiAgICBjb25zdCBzMyA9IG5ldyBTMygpO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzMy5nZXRPYmplY3QocGFyYW1zKTtcclxuICAgIHJldHVybiByZXNwb25zZS5Cb2R5LnRyYW5zZm9ybVRvU3RyaW5nKCd1dGYtOCcpO1xyXG59IiwiaW1wb3J0IHsgU05TIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNucyc7XHJcblxyXG5jb25zdCBTTlNVdGlsID0ge1xyXG4gICAgcHVibGlzaDogKHBhcmFtcykgPT4gcHVibGlzaChwYXJhbXMpLFxyXG4gICAgY3JlYXRlVG9waWM6IChwYXJhbXMpID0+IGNyZWF0ZVRvcGljKHBhcmFtcylcclxufTtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHB1Ymxpc2gocGFyYW1zKSB7XHJcbiAgICBjb25zdCBzbnMgPSBuZXcgU05TKCk7XHJcbiAgICByZXR1cm4gYXdhaXQgc25zLnB1Ymxpc2gocGFyYW1zKTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVG9waWMocGFyYW1zKSB7XHJcbiAgICBjb25zdCBzbnMgPSBuZXcgU05TKCk7XHJcbiAgICByZXR1cm4gYXdhaXQgc25zLmNyZWF0ZVRvcGljKHBhcmFtcyk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNOU1V0aWw7XHJcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYXdzLXNkay9jbGllbnQtczNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGF3cy1zZGsvY2xpZW50LXNuc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYXdzLXNkay9saWItZHluYW1vZGJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYmx1ZWJpcmRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibG9kYXNoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vbWVudFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtb21lbnQvbW9tZW50LmpzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInNlcXVlbGl6ZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1bXp1Z1wiKTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiaW1wb3J0IHsgaGFuZGxlRmlsZSBhcyBoYW5kbGVGaWxlSW1wb3J0IH0gZnJvbSAnLi9ldmVudE1hbmFnZXIvaGFuZGxlRmlsZS5qcyc7XG5pbXBvcnQgeyB3YXRjaEJ1Y2tldCBhcyB3YXRjaEJ1Y2tldEltcG9ydCB9IGZyb20gJy4vZXZlbnRNYW5hZ2VyL3dhdGNoQnVja2V0LmpzJztcbmltcG9ydCB7IHB1Ymxpc2hFdmVudHMgYXMgcHVibGlzaEV2ZW50c0ltcG9ydCB9IGZyb20gJy4vZXZlbnRNYW5hZ2VyL3B1Ymxpc2hFdmVudHMuanMnO1xuaW1wb3J0IHsgY3JlYXRlRmlsdGVycyBhcyBjcmVhdGVGaWx0ZXJzSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlRmlsdGVycy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTb3J0IGFzIGNyZWF0ZVNvcnRJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9jcmVhdGVTb3J0LmpzJztcbmltcG9ydCB7IGZpbmRBbGwgYXMgZmluZEFsbEltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2ZpbmRBbGwuanMnO1xuaW1wb3J0IHsgY2hlY2tNb2R1bGUgYXMgY2hlY2tNb2R1bGVJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5pbXBvcnQgeyBmYWlsdXJlIGFzIGZhaWx1cmVJbXBvcnQsIHN1Y2Nlc3MgYXMgc3VjY2Vzc0ltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IHJ1bk1pZ3JhdGlvbnMgYXMgcnVuTWlncmF0aW9uc0ltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJTZXR1cC9taWdyYXRpb25zLmpzJztcbmltcG9ydCB7IGdldEN1cnJlbnRVc2VyIGFzIGdldEN1cnJlbnRVc2VySW1wb3J0IH0gZnJvbSAnLi9yZXF1ZXN0UmVzb25zZS9yZXF1ZXN0UmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc3VjY2Vzc0h0bWwgYXMgc3VjY2Vzc0h0bWxJbXBvcnQgfSBmcm9tICcuL3JlcXVlc3RSZXNvbnNlL3JlcXVlc3RSZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50IGFzIGdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnRJbXBvcnQgfSBmcm9tICcuL3JlcXVlc3RSZXNvbnNlL3JlcXVlc3RSZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0RmlsdGVycyBhcyBkZWZhdWx0RmlsdGVyc0ltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2RlZmF1bHRGaWx0ZXJzLmpzJztcbmltcG9ydCB7IGFjY2Vzc1JpZ2h0c1V0aWxzIGFzIGFjY2Vzc1JpZ2h0c1V0aWxzSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvYWNjZXNzUmlnaHRzVXRpbHMuanMnO1xuaW1wb3J0IHsgcGFyc2VCb2R5IGFzIHBhcnNlQm9keUltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IHBhcnNlRXZlbnQgYXMgcGFyc2VFdmVudEltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IGdldEJ1c2luZXNzZXNJbmZvIGFzIGdldEJ1c2luZXNzZXNJbmZvSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvYWNjZXNzUmlnaHRzVXRpbHMuanMnO1xuaW1wb3J0IHsgdXNlckRlZmF1bHRCaWQgYXMgdXNlckRlZmF1bHRCaWRJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5pbXBvcnQgeyBjaGVja1dyaXRlQWNjZXNzIGFzIGNoZWNrV3JpdGVBY2Nlc3NJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVGaWxlID0gaGFuZGxlRmlsZUltcG9ydDtcbmV4cG9ydCBjb25zdCB3YXRjaEJ1Y2tldCA9IHdhdGNoQnVja2V0SW1wb3J0O1xuZXhwb3J0IGNvbnN0IHB1Ymxpc2hFdmVudHMgPSBwdWJsaXNoRXZlbnRzSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUZpbHRlcnMgPSBjcmVhdGVGaWx0ZXJzSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVNvcnQgPSBjcmVhdGVTb3J0SW1wb3J0O1xuZXhwb3J0IGNvbnN0IGZpbmRBbGwgPSBmaW5kQWxsSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGNoZWNrTW9kdWxlID0gY2hlY2tNb2R1bGVJbXBvcnQ7XG5leHBvcnQgY29uc3QgZmFpbHVyZSA9IGZhaWx1cmVJbXBvcnQ7XG5leHBvcnQgY29uc3Qgc3VjY2VzcyA9IHN1Y2Nlc3NJbXBvcnQ7XG5leHBvcnQgY29uc3QgcnVuTWlncmF0aW9ucyA9IHJ1bk1pZ3JhdGlvbnNJbXBvcnQ7XG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFVzZXIgPSBnZXRDdXJyZW50VXNlckltcG9ydDtcbmV4cG9ydCBjb25zdCBzdWNjZXNzSHRtbCA9IHN1Y2Nlc3NIdG1sSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnQgPSBnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50SW1wb3J0O1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRGaWx0ZXJzID0gZGVmYXVsdEZpbHRlcnNJbXBvcnQ7XG5leHBvcnQgY29uc3QgYWNjZXNzUmlnaHRzVXRpbHMgPSBhY2Nlc3NSaWdodHNVdGlsc0ltcG9ydDtcbmV4cG9ydCBjb25zdCBwYXJzZUJvZHkgPSBwYXJzZUJvZHlJbXBvcnQ7XG5leHBvcnQgY29uc3QgcGFyc2VFdmVudCA9IHBhcnNlRXZlbnRJbXBvcnQ7XG5leHBvcnQgY29uc3QgZ2V0QnVzaW5lc3Nlc0luZm8gPSBnZXRCdXNpbmVzc2VzSW5mb0ltcG9ydDtcbmV4cG9ydCBjb25zdCB1c2VyRGVmYXVsdEJpZCA9IHVzZXJEZWZhdWx0QmlkSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGNoZWNrV3JpdGVBY2Nlc3MgPSBjaGVja1dyaXRlQWNjZXNzSW1wb3J0O1xuIl0sIm5hbWVzIjpbInJ1bk1pZ3JhdGlvbnMiLCJfbG9kYXNoIiwicmVxdWlyZSIsIl9sb2Rhc2gyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91bXp1ZyIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZGF0YWJhc2VOYW1lIiwic2VxdWVsaXplSW5zdGFuY2UiLCJpbml0aWFsaXplTW9kZWxzIiwicGF0aFRvTWlncmF0aW9uRm9sZGVyIiwicHJvY2VzcyIsImVudiIsIlBXRCIsInVtenVnIiwiVW16dWciLCJtaWdyYXRpb25zIiwiZ2xvYiIsImNvbnRleHQiLCJnZXRRdWVyeUludGVyZmFjZSIsInN0b3JhZ2UiLCJTZXF1ZWxpemVTdG9yYWdlIiwic2VxdWVsaXplIiwibG9nZ2VyIiwiY29uc29sZSIsInBlbmRpbmdNaWdyYXRpb25zIiwicGVuZGluZyIsImxvZyIsInVwIiwiY2F0Y2giLCJ1cEVycm9yIiwiZG93biIsIl8iLCJjaGFpbiIsIm1hcCIsInJldmVyc2UiLCJ2YWx1ZSIsInRoZW4iLCJtc2ciLCJlcnJvciIsIkVycm9yIiwiZG93bkVycm9yIiwiYWNjZXNzUmlnaHRzVXRpbHMiLCJleHBvcnRzIiwidXNlckRlZmF1bHRCaWQiLCJnZXRCdXNpbmVzc2VzSW5mbyIsImdldE1vZHVsZUluZm8iLCJjaGVja01vZHVsZSIsImNoZWNrV3JpdGVBY2Nlc3MiLCJfZXJyb3JDb2RlcyIsIl9yZXF1ZXN0UmVzcG9uc2UiLCJldmVudCIsIm9wdGlvbnMiLCJ1c2VDb2duaXRvQmlkIiwiZ2V0IiwicmVxdWVzdGVkQnVzaW5lc3NJZHMiLCJnZXRSZXF1ZXN0ZWRCdXNpbmVzc0lkcyIsImFsbG93ZWRCdXNpbmVzc0lkcyIsImdldEFsbG93ZWRCdXNpbmVzc0lkcyIsImxvY2FsQmlkTGlzdCIsImlzRW1wdHkiLCJCVUlMRF9FTlYiLCJsZW5ndGgiLCJpbnRlcnNlY3Rpb24iLCJqc29uVG9QYXJzZSIsImRiaSIsIkpTT04iLCJwYXJzZSIsInNwbGl0IiwiYnVzaW5lc3NlcyIsIk9iamVjdCIsImtleXMiLCJhY2Nlc3NSaWdodHMiLCJiaWRzIiwid2l0aExvY2FsIiwic2V0IiwiYXIiLCJtb2R1bGVSaWdodHMiLCJtb2R1bGVOYW1lIiwiYWxsb3dBY2Nlc3MiLCJlcnJvckxpc3QiLCJ1bmF1dGhvcml6ZWQiLCJ1c2VyUm9sZXMiLCJhZG1pbiIsInJlYWQiLCJ3cml0ZSIsImV2ZW50Qm9keSIsInBhcnNlQm9keSIsImJ1c2luZXNzSWRzIiwiYnVzaW5lc3NJZCIsImZpbmQiLCJpZCIsInJhdyIsInVzZXJSaWdodCIsIl9zZXF1ZWxpemUiLCJfc2VxdWVsaXplMiIsIl9tb21lbnQiLCJfbW9tZW50MiIsIl9hY2Nlc3NSaWdodHNVdGlscyIsImNyZWF0ZUZpbHRlcnMiLCJvYmplY3RGaWx0ZXJzIiwicXVlcnkiLCJzdGFydERhdGUiLCJlbmREYXRlIiwid2hlcmUiLCJyZWR1Y2UiLCJhY2MiLCJpdGVtIiwidmFsIiwiaXRlbU5hbWUiLCJpbmNsdWRlcyIsImZpbHRlclR5cGUiLCJEQiIsIk9wIiwiaUxpa2UiLCJvciIsImluIiwicGFyc2VkSnNvbiIsImUiLCJ0eXBlIiwiQk9PTEVBTiIsInF1ZXJ5VmFsdWUiLCJ0b0xvd2VyQ2FzZSIsImJvb2xlYW5NYXAiLCJhY3RpdmUiLCJmaWx0ZXJBZGRzIiwicyIsIm1vbWVudCIsInV0YyIsImRhdGVzIiwiYmV0d2VlbiIsInRvRGF0ZSIsImlzVmFsaWQiLCJpbnZhbGlkU3RhcnREYXRlIiwiaW52YWxpZEVuZERhdGUiLCJjcmVhdGVkQXQiLCJ3aXRoRGF0ZSIsImFzc2lnbiIsImNyZWF0ZVNvcnQiLCJkZWZhdWx0RmlsdGVyIiwiY29weU9mRGVmYXVsdEZpbHRlciIsImNsb25lIiwic29ydCIsInRlc3RJdGVtIiwiaW5kZXhPZiIsInN1YnN0ciIsInNvcnRJdGVtIiwiZm9yRWFjaCIsInBhcmVudENoaWxkTGlzdCIsInB1c2giLCJkZWZhdWx0RmlsdGVycyIsImFkZEZpbHRlcnNGcm9tU2NoZW1hIiwic2NoZW1hIiwic3ViU2NoZW1hcyIsImZpbHRlcnMiLCJrZXkiLCJhY2N1bXVsYXRvciIsImtleVByZWZpeCIsImFzTGlua0FsaWFzIiwiU1RSSU5HIiwiZXEiLCJpdGVtVHlwZSIsIkNIQVIiLCJURVhUIiwiREVDSU1BTCIsIkJJR0lOVCIsIklOVEVHRVIiLCJEQVRFIiwiREFURU9OTFkiLCJsdCIsIkpTT05CIiwiY29udGFpbnMiLCJnZXRQYWdpbmF0aW9uRnJvbUZpbmRBbGwiLCJmaW5kQWxsIiwicmVzdWx0IiwibGltaXQiLCJvZmZzZXQiLCJoYXNNb3JlIiwic3BsaWNlIiwicGFnZU9iamVjdCIsInJvd3MiLCJtb2RlbCIsImZpbmRBcmdzIiwiaW5jbHVkZSIsImFsbCIsIm5lc3RlZCIsInJlc3VsdHMiLCJmaW5kVXRpbHMiLCJfbGliRHluYW1vZGIiLCJfY2xpZW50RHluYW1vZGIiLCJkeW5hbW9VdGlsIiwicGFyYW1zIiwiZHluYW1vRGIiLCJEeW5hbW9EQkRvY3VtZW50IiwiZnJvbSIsIkR5bmFtb0RCIiwiaGFuZGxlRXZlbnRzIiwiX2hhbmRsZUZpbGUiLCJfYmx1ZWJpcmQiLCJfYmx1ZWJpcmQyIiwidHJhbnNmb3JtZXIiLCJlcnJvckhhbmRsZXJQZXJGaWxlIiwic2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMiLCJ1c2VySW1wb3J0VHlwZXMiLCJSZWNvcmRzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJoYXNFcnJvcnMiLCJyZWNvcmQiLCJzbnNJbmZvIiwiczNCdWNrZXQiLCJidWNrZXQiLCJmaWxlcyIsImZpbGUiLCJwYXRoIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaGFuZGxlRmlsZSIsImVyciIsIl9TM1V0aWxzIiwiX1MzVXRpbHMyIiwiQnVja2V0IiwiS2V5IiwiYm9keSIsIlMzVXRpbCIsImdldE9iamVjdCIsInBhcnNlZEJvZHkiLCJyZXR1cm5lZFZhbHVlIiwiZGVsZXRlT2JqZWN0IiwiY29kZSIsIm5ld1BhdGgiLCJ1c2Vyc0ltcG9ydHMiLCJ2YWx1ZXMiLCJpdGVtcyIsImZpbGVOYW1lIiwibGFzdCIsImZvbGRlck5hbWUiLCJmaXJzdCIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwibmV3UGFyYW1zIiwiQm9keSIsInB1dE9iamVjdCIsImxvb3AiLCJwdWJsaXNoRXZlbnRzIiwiX1NOU1V0aWxzIiwiX1NOU1V0aWxzMiIsIl9keW5hbW9VdGlscyIsIl9keW5hbW9VdGlsczIiLCJtYXhLZXlzIiwiYnVja2V0UmVzdWx0IiwiZmlsZUxpc3QiLCJjdXJyZW50VGltZSIsIlMzVXRpbHMiLCJsaXN0T2JqZWN0c1YyIiwiTWF4S2V5cyIsIkNvbnRpbnVhdGlvblRva2VuIiwibmV3RmlsZXMiLCJmaWx0ZXIiLCJDb250ZW50cyIsImZpbGVEZWxheVRpbWUiLCJpc1NhbWVPckJlZm9yZSIsImNvbmNhdCIsIklzVHJ1bmNhdGVkIiwiTmV4dENvbnRpbnVhdGlvblRva2VuIiwiY29uZmlnVGFibGUiLCJ0YWJsZUtleSIsInNuc1RvcGljIiwiVGFibGVOYW1lIiwiY2h1bmtTaXplIiwibWF4TWVzc2FnZXMiLCJzbnNDcmVhdGVUb3BpY1Jlc3BvbnNlIiwiU05TVXRpbCIsImNyZWF0ZVRvcGljIiwiTmFtZSIsInRvcGljQXJuIiwiVG9waWNBcm4iLCJtZXNzYWdlTGlzdCIsImNodW5rIiwic2xpY2UiLCJwdWJsaXNoIiwiTWVzc2FnZSIsInN0cmluZ2lmeSIsIndhdGNoQnVja2V0IiwiX3B1Ymxpc2hFdmVudHMiLCJfaGFuZGxlRXZlbnRzIiwiZHluYW1vQ29uZmlnVGFibGUiLCJkeW5hbW9Db25maWdLZXkiLCJub29wIiwiRXZlbnRTb3VyY2UiLCJpc0VxdWFsIiwiaW52YWxpZEludmVudG9yeVJlbGVhc2VSZXF1ZXN0IiwibWVzc2FnZSIsImVycm9yQ29kZSIsInN0YXR1c0NvZGUiLCJhbHJlYWR5UmVsZWFzZWQiLCJhbHJlYWR5UmVjZWl2ZWQiLCJpbnZhbGlkSXRlbXNSZXF1ZXN0IiwiaW52YWxpZElEIiwiaW52YWxpZFJlY2VpdmFibGUiLCJpbnZhbGlkUmVxdWVzdCIsImludmFsaWRBUElLZXkiLCJxYkNyZWF0aW9uRXJyb3IiLCJjYW5ub3RSZW9wZW4iLCJpbnZhbGlkRGF0ZUZvcm1hdCIsImludmFsaWRPcmRlclN0YXR1cyIsImludmFsaWRQYXltZW50U3RhdHVzIiwiaW52YWxpZFJlbGVhc2VTdGF0dXMiLCJpbnZhbGlkUmVjZWl2YWJsZVN0YXR1cyIsImludmFsaWRKc29uIiwiaW52YWxpZEZpbHRlciIsImludmFsaWRVc2VyTmFtZVVwZGF0ZSIsImltYWdlU2l6ZUxpbWl0Iiwibm90Rm91bmQiLCJlbWFpbFJlcXVpcmVkIiwibW9iaWxlUGhvbmVSZXF1aXJlZCIsImludmFsaWRDYWRlbmNlVHlwZSIsInN1Y2Nlc3MiLCJzdWNjZXNzSHRtbCIsImdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnQiLCJnZXRDdXJyZW50VXNlciIsImZhaWx1cmUiLCJwYXJzZUV2ZW50IiwiZGV0ZWN0U2VxdWVsaXplRXJyb3IiLCJkZXRlY3RKb3lFcnJvciIsImRiQ2xvc2UiLCJidWlsZFJlc3BvbnNlIiwiaHRtbCIsImhlYWRlcnMiLCJhdHRyaWJ1dGVzIiwidXNlcm5hbWUiLCJjbGVhbmVkRXJyb3JCb2R5IiwiVVRJTF9MT0ciLCJOT1JNQUxfRVJST1IiLCJpc1VuZGVmaW5lZCIsImRldGFpbHMiLCJuZXdCb2R5IiwibWVyZ2UiLCJyZXF1ZXN0RXZlbnQiLCJpc1N0cmluZyIsImlzT2JqZWN0IiwiY2FsbGJhY2siLCJlcnJvckJvZHkiLCJzZXF1ZWxpemVFcnJvciIsInBhcmVudEVycm9yIiwidHJpbSIsImpveUVycm9yIiwiczNVdGlscyIsIl9jbGllbnRTIiwiYWN0aW9uIiwiczMiLCJTMyIsImdldFMzIiwicmVzcG9uc2UiLCJ0cmFuc2Zvcm1Ub1N0cmluZyIsIl9jbGllbnRTbnMiLCJzbnMiLCJTTlMiLCJfd2F0Y2hCdWNrZXQiLCJfY3JlYXRlRmlsdGVycyIsIl9jcmVhdGVTb3J0IiwiX2ZpbmRBbGwiLCJfbWlncmF0aW9ucyIsIl9kZWZhdWx0RmlsdGVycyIsImhhbmRsZUZpbGVJbXBvcnQiLCJ3YXRjaEJ1Y2tldEltcG9ydCIsInB1Ymxpc2hFdmVudHNJbXBvcnQiLCJjcmVhdGVGaWx0ZXJzSW1wb3J0IiwiY3JlYXRlU29ydEltcG9ydCIsImZpbmRBbGxJbXBvcnQiLCJjaGVja01vZHVsZUltcG9ydCIsImZhaWx1cmVJbXBvcnQiLCJzdWNjZXNzSW1wb3J0IiwicnVuTWlncmF0aW9uc0ltcG9ydCIsImdldEN1cnJlbnRVc2VySW1wb3J0Iiwic3VjY2Vzc0h0bWxJbXBvcnQiLCJnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50SW1wb3J0IiwiZGVmYXVsdEZpbHRlcnNJbXBvcnQiLCJhY2Nlc3NSaWdodHNVdGlsc0ltcG9ydCIsInBhcnNlQm9keUltcG9ydCIsInBhcnNlRXZlbnRJbXBvcnQiLCJnZXRCdXNpbmVzc2VzSW5mb0ltcG9ydCIsInVzZXJEZWZhdWx0QmlkSW1wb3J0IiwiY2hlY2tXcml0ZUFjY2Vzc0ltcG9ydCJdLCJzb3VyY2VSb290IjoiIn0=
1016
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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bUJBQUEsR0FBR29WLDRCQUFpQjtBQUNyQyxNQUFNMUQsa0NBQWtDLEdBQUExUiwwQ0FBQSxHQUFHcVYsbURBQXdDO0FBQ25GLE1BQU1uTyxjQUFjLEdBQUFsSCxzQkFBQSxHQUFHc1YsOEJBQW9CO0FBQzNDLE1BQU12VixpQkFBaUIsR0FBQUMseUJBQUEsR0FBR3VWLG9DQUF1QjtBQUNqRCxNQUFNM1MsU0FBUyxHQUFBNUMsaUJBQUEsR0FBR3dWLDBCQUFlO0FBQ2pDLE1BQU0zRCxVQUFVLEdBQUE3UixrQkFBQSxHQUFHeVYsMkJBQWdCO0FBQ25DLE1BQU12VixpQkFBaUIsR0FBQUYseUJBQUEsR0FBRzBWLG9DQUF1QjtBQUNqRCxNQUFNelYsY0FBYyxHQUFBRCxzQkFBQSxHQUFHMlYsaUNBQW9CO0FBQzNDLE1BQU10VixnQkFBZ0IsR0FBQUwsd0JBQUEsR0FBRzRWLG1DQUFzQixDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZGF0YWJhc2UvZGJTZXR1cC9taWdyYXRpb25zLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlRmlsdGVycy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlSW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2NyZWF0ZVNvcnQuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2RlZmF1bHRGaWx0ZXJzLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9maW5kQWxsLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2R5bmFtby9keW5hbW9VdGlscy5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9ldmVudE1hbmFnZXIvaGFuZGxlRXZlbnRzLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2V2ZW50TWFuYWdlci9oYW5kbGVGaWxlLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2V2ZW50TWFuYWdlci9wdWJsaXNoRXZlbnRzLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL2V2ZW50TWFuYWdlci93YXRjaEJ1Y2tldC5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9yZXF1ZXN0UmVzb25zZS9lcnJvckNvZGVzLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzLy4vc3JjL3JlcXVlc3RSZXNvbnNlL3JlcXVlc3RSZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9waXBlci11dGlscy8uL3NyYy9zMy9TM1V0aWxzLmpzL1MzVXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvc25zL1NOU1V0aWxzLmpzIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwiQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiXCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJAYXdzLXNkay9jbGllbnQtczNcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcIkBhd3Mtc2RrL2NsaWVudC1zbnNcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcIkBhd3Mtc2RrL2xpYi1keW5hbW9kYlwiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwiYmx1ZWJpcmRcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcImxvZGFzaFwiIiwid2VicGFjazovL3BpcGVyLXV0aWxzL2V4dGVybmFsIGNvbW1vbmpzIFwibW9tZW50XCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJtb21lbnQvbW9tZW50LmpzXCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvZXh0ZXJuYWwgY29tbW9uanMgXCJzZXF1ZWxpemVcIiIsIndlYnBhY2s6Ly9waXBlci11dGlscy9leHRlcm5hbCBjb21tb25qcyBcInVtenVnXCIiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGlwZXItdXRpbHMvLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFNlcXVlbGl6ZVN0b3JhZ2UsIFVtenVnIH0gZnJvbSAndW16dWcnO1xuXG4vKipcbiAqIEV4ZWN1dGUgZGF0YWJhc2UgbWlncmF0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGRhdGFiYXNlTmFtZSAtIG5hbWUgb2YgZGF0YWJhc2UgdG8gY3JlYXRlIChvciB2ZXJpZnkgZXhpc3RlbmNlKVxuICogQHBhcmFtIHtvYmplY3R9IHNlcXVlbGl6ZUluc3RhbmNlIC0gaW5zdGFuY2Ugb2YgU2VxdWVsaXplIChtdXN0IGJlIGluaXRpYWxpemVkKVxuICogQHBhcmFtIHtmdW5jdGlvbn0gaW5pdGlhbGl6ZU1vZGVscyAtIGZ1bmN0aW9uIHRvIHJ1biB0byBzeW5jIFNlcXVlbGl6ZSBtb2RlbHMgd2l0aCBkYXRhYmFzZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhUb01pZ3JhdGlvbkZvbGRlciAtIHBhc3MgaW4gdGhlIHBhdGggaWYgdXNpbmcgd2luZG93cy4gd2luZG93cyBhbmQgbGludXggUFdEIHdpbGwgYmUgZGlmZmVyZW50XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5NaWdyYXRpb25zKGRhdGFiYXNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcXVlbGl6ZUluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZU1vZGVscyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhUb01pZ3JhdGlvbkZvbGRlciA9IGAke3Byb2Nlc3MuZW52LlBXRH0vbWlncmF0aW9ucy8qLmpzYCkge1xuICAgIGNvbnN0IHVtenVnID0gbmV3IFVtenVnKHtcbiAgICAgICAgbWlncmF0aW9uczogeyBnbG9iOiBwYXRoVG9NaWdyYXRpb25Gb2xkZXIgfSxcbiAgICAgICAgY29udGV4dDogc2VxdWVsaXplSW5zdGFuY2UuZ2V0UXVlcnlJbnRlcmZhY2UoKSxcbiAgICAgICAgc3RvcmFnZTogbmV3IFNlcXVlbGl6ZVN0b3JhZ2UoeyBzZXF1ZWxpemU6IHNlcXVlbGl6ZUluc3RhbmNlIH0pLFxuICAgICAgICBsb2dnZXI6IGNvbnNvbGVcbiAgICB9KTtcblxuICAgIGNvbnN0IHBlbmRpbmdNaWdyYXRpb25zID0gYXdhaXQgdW16dWcucGVuZGluZygpO1xuICAgIGNvbnNvbGUubG9nKCctLS0tLS0tPlVUSUwgUGVuZGluZyBNaWdyYXRpb25zOicsIHBlbmRpbmdNaWdyYXRpb25zLCBwYXRoVG9NaWdyYXRpb25Gb2xkZXIpO1xuICAgIGF3YWl0IHVtenVnLnVwKCkuY2F0Y2goKHVwRXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIHVtenVnLmRvd24oe1xuICAgICAgICAgICAgbWlncmF0aW9uczogXy5jaGFpbihwZW5kaW5nTWlncmF0aW9ucylcbiAgICAgICAgICAgICAgICAubWFwKCdmaWxlJylcbiAgICAgICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAgICAgLnZhbHVlKClcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSAnVVRJTCBFcnJvcjogRXJyb3Igd2l0aCBtaWdyYXRpbmcgdXA6JyArIHVwRXJyb3I7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgfSwgKGRvd25FcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gJ1VUSUwgRXJyb3I6IEVycm9yIHdpdGggbWlncmF0aW5nIGRvd246JyArIGRvd25FcnJvcjtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBuZWVkZWQgdG8gc3luYyAoY3JlYXRlKSB0YWJsZXMsIGJ1dCBub3QgdG8gZGF0YWJhc2UgdXBkYXRlc1xuICAgIC8vIGluIHRoZSBwYXN0IGl0IHdvcmtlZCB0byBsZWF2ZSBpdCBpbiwgYnV0IG5vdyB0aGUgdGFncyBtb2R1bGUgY2F1c2VzIGZvcmVpZ24ga2V5IHByb2JsZW1zXG4gICAgLy8gVGhlIHRhYmxlcyBhcmUgc3RpbGwgaW5pdGlhdGVkIGJ5IGJlaW5nIHBhc3NlZCBpbiB0byBydW4gbWlncmF0aW9uc1xuICAgIGF3YWl0IGluaXRpYWxpemVNb2RlbHMoKTtcbn0iLCJpbXBvcnQgXywgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGVycm9yTGlzdCB9IGZyb20gJy4uLy4uLy4uL3JlcXVlc3RSZXNvbnNlL2Vycm9yQ29kZXMuanMnO1xuaW1wb3J0IHsgcGFyc2VCb2R5IH0gZnJvbSAnLi4vLi4vLi4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcblxuLyoqXG4gKiBHZXQgdGhlIGFsbG93ZWQgYnVzaW5lc3NJZHMgZm9yIGEgdXNlciBmcm9tIHRoZSBsYW1iZGEgZXZlbnQsIGNvbXBhcmUgaXQgdG8gYnVzaW5lc3NJZHMsIHJldHVybiB3aGF0IHVzZXIgaGFzIGFjY2VzcyB0by5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSBUaGUgbGFtYmRhIGV2ZW50IHBhc3NlZCBpbiBieSBhIHZhbGlkYXRlZCBhcGkgcmVxdWVzdC5cbiAqIEBwYXJhbSB7e3VzZUNvZ25pdG9CaWQ6Ym9vbGVhbn19IFtvcHRpb25zXSAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMsIHVzZUNvZ25pdG9CaWQgcHJlZmVycyB0aGUgYnVzaW5lc3NJZCBzZXQgaW4gY29nbml0byBpZiBzZXQgYW5kIGRvZXMgbm90IHJldHVybiB0aGUgbG9jYWwgYmlkIG9mIDEgaWYgYSBiaWQgaXMgaW4gdGhlIGNsYWltLlxuICogQHJldHVybnMge2FycmF5fSBBICBsaXN0IG9mIGJ1c2luZXNzSWRzIHRoYXQgaGF2ZSBiZWVuIHJlcXVlc3RlZCBhbmQgYXJlIGFsbG93ZWQgdG8gZm9yIHNvbWUgdXNlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjY2Vzc1JpZ2h0c1V0aWxzKGV2ZW50LCBvcHRpb25zKSB7XG4gICAgY29uc3QgdXNlQ29nbml0b0JpZCA9IF8uZ2V0KG9wdGlvbnMsICd1c2VDb2duaXRvQmlkJywgZmFsc2UpO1xuICAgIGNvbnN0IHJlcXVlc3RlZEJ1c2luZXNzSWRzID0gZ2V0UmVxdWVzdGVkQnVzaW5lc3NJZHMoZXZlbnQpO1xuICAgIGNvbnN0IGFsbG93ZWRCdXNpbmVzc0lkcyA9IGdldEFsbG93ZWRCdXNpbmVzc0lkcyhldmVudCwgdXNlQ29nbml0b0JpZCk7XG4gICAgY29uc3QgbG9jYWxCaWRMaXN0ID0gWycxJ107XG5cbiAgICAvLyBpZiB3ZSBhcmUgb24gbG9jYWwgcmV0dXJuIGZvciBhbGwgYmlkcyBpbiBhY2Nlc3MgcmlnaHRzXG4gICAgaWYgKF8uaXNFbXB0eShhbGxvd2VkQnVzaW5lc3NJZHMpICYmXG4gICAgICAgICFfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zJykgJiZcbiAgICAgICAgIV8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jdXN0b206QVInKSAmJlxuICAgICAgICBwcm9jZXNzLmVudi5CVUlMRF9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICBwcm9jZXNzLmVudi5CVUlMRF9FTlYgIT09ICdzdGFnaW5nJykge1xuICAgICAgICBpZiAocmVxdWVzdGVkQnVzaW5lc3NJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxCaWRMaXN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIF8uaW50ZXJzZWN0aW9uKHJlcXVlc3RlZEJ1c2luZXNzSWRzLCBsb2NhbEJpZExpc3QpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0ZWRCdXNpbmVzc0lkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGFsbG93ZWRCdXNpbmVzc0lkcztcbiAgICB9XG5cbiAgICByZXR1cm4gXy5pbnRlcnNlY3Rpb24ocmVxdWVzdGVkQnVzaW5lc3NJZHMsIGFsbG93ZWRCdXNpbmVzc0lkcyk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBidXNpbmVzc0lEIHNldCBpbiBjb2duaXRvIGFzIGN1c3RvbTpEQkkuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IC0gVGhlIGxhbWJkYSBldmVudCBwYXNzZWQgaW4gYnkgYSB2YWxpZGF0ZWQgYXBpIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYnVzaW5lc3NJRCBzZXQgaW4gY29nbml0byBhcyBjdXN0b206REJJXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VyRGVmYXVsdEJpZChldmVudCkge1xuICAgIGxldCBqc29uVG9QYXJzZSA9IF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMuY3VzdG9tOkRCSScpIHx8XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jdXN0b206REJJJykgfHxcbiAgICAgICAgJ3t9JztcblxuICAgIGNvbnN0IGRiaSA9IEpTT04ucGFyc2UoanNvblRvUGFyc2UpO1xuICAgIHJldHVybiBfLmdldChkYmksICdkZWZhdWx0QmlkJywgJycpIHx8ICcxJztcbn1cblxuLyoqXG4gKiBHZXQgIHJlcXVlc3RlZCBidXNpbmVzc0lkcyBmcm9tIHRoZSBxdWVyeSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IC0gVGhlIGxhbWJkYSBldmVudCBwYXNzZWQgaW4gYnkgYSB2YWxpZGF0ZWQgYXBpIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7YXJyYXl9IFRoZSBidXNpbmVzc0lEIHJlcXVlc3RlZCBieSB0aGUgcXVlcnkgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFJlcXVlc3RlZEJ1c2luZXNzSWRzKGV2ZW50KSB7XG4gICAgbGV0IHJlcXVlc3RlZEJ1c2luZXNzSWRzID0gXy5nZXQoZXZlbnQsICdxdWVyeVN0cmluZ1BhcmFtZXRlcnMuYnVzaW5lc3NJZHMnLCBudWxsKTtcblxuICAgIHJldHVybiByZXF1ZXN0ZWRCdXNpbmVzc0lkcyA/IHJlcXVlc3RlZEJ1c2luZXNzSWRzLnNwbGl0KCcsJykgOiBbXTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGFsbG93ZWQgYnVzaW5lc3NJZHMgZm9yIGEgdXNlciBmcm9tIGNvZ25pdG8gY3VzdG9tOkFSIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIFRoZSBsYW1iZGEgZXZlbnQgcGFzc2VkIGluIGJ5IGEgdmFsaWRhdGVkIGFwaSByZXF1ZXN0LlxuICogQHBhcmFtIHVzZUNvZ25pdG9CaWRcbiAqIEByZXR1cm5zIHthcnJheX0gVGhlIGJ1c2luZXNzSUQgcmVxdWVzdGVkIGJ5IHRoZSBxdWVyeSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0QWxsb3dlZEJ1c2luZXNzSWRzKGV2ZW50LCB1c2VDb2duaXRvQmlkKSB7XG4gICAgY29uc3QgYnVzaW5lc3NlcyA9IGdldEJ1c2luZXNzZXNJbmZvKGV2ZW50LCB1c2VDb2duaXRvQmlkKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoYnVzaW5lc3Nlcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXNpbmVzc2VzSW5mbyhldmVudCwgdXNlQ29nbml0b0JpZCkge1xuICAgIGxldCBqc29uVG9QYXJzZSA9IF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMuY3VzdG9tOkFSJykgfHxcbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmN1c3RvbTpBUicpIHx8XG4gICAgICAgICd7fSc7XG4gICAgY29uc3QgYWNjZXNzUmlnaHRzID0gSlNPTi5wYXJzZShqc29uVG9QYXJzZSk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuQlVJTERfRU5WID09PSAnbG9jYWwnKSB7XG4gICAgICAgIGlmICghaXNFbXB0eShhY2Nlc3NSaWdodHMpKSB7XG4gICAgICAgICAgICBjb25zdCBiaWRzID0gXy5nZXQoYWNjZXNzUmlnaHRzLCAnYnVzaW5lc3NJZHMnLCB7fSk7XG4gICAgICAgICAgICBsZXQgd2l0aExvY2FsO1xuICAgICAgICAgICAgaWYgKHVzZUNvZ25pdG9CaWQpIHtcbiAgICAgICAgICAgICAgICB3aXRoTG9jYWwgPSB7IC4uLmJpZHMgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2l0aExvY2FsID0geyAuLi5iaWRzLCAnMSc6ICdBJyB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfLnNldChhY2Nlc3NSaWdodHMsICdidXNpbmVzc0lkcycsIHdpdGhMb2NhbCk7XG5cbiAgICAgICAgICAgIHJldHVybiBfLmdldChhY2Nlc3NSaWdodHMsICdidXNpbmVzc0lkcycsIHt9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFyID0geyAnYnVzaW5lc3NJZHMnOiB7ICcxJzogJ0EnIH0gfTtcbiAgICAgICAgICAgIHJldHVybiBfLmdldChhciwgJ2J1c2luZXNzSWRzJywge30pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF8uZ2V0KGFjY2Vzc1JpZ2h0cywgJ2J1c2luZXNzSWRzJywge30pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbW9kdWxlcyBsaXN0ZWQgaW4gY3VzdG9tOk1PRC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgLSBUaGUgbGFtYmRhIGV2ZW50IHBhc3NlZCBpbiBieSBhIHZhbGlkYXRlZCBhcGkgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHthcnJheX0gVGhlIE1vZHVsZSBhY2Nlc3MgbGlzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kdWxlSW5mbyhldmVudCkge1xuICAgIGxldCBqc29uVG9QYXJzZSA9XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMuY3VzdG9tOk1PRCcpIHx8XG4gICAgICAgIF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jdXN0b206TU9EJykgfHxcbiAgICAgICAgXy5nZXQoZXZlbnQsICdyZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcy5jdXN0b206QVInKSB8fFxuICAgICAgICBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY3VzdG9tOkFSJykgfHxcblxuICAgICAgICAne30nO1xuXG4gICAgY29uc3QgbW9kdWxlUmlnaHRzID0gSlNPTi5wYXJzZShqc29uVG9QYXJzZSk7XG4gICAgcmV0dXJuIF8uZ2V0KG1vZHVsZVJpZ2h0cywgJ21vZHVsZScsIHt9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG1vZHVsZXMgbGlzdGVkIGluIGN1c3RvbTpNT0QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZU5hbWUgLSBBIHN0aW5nIG5hbWUgZm9yIGEgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IC0gVGhlIGxhbWJkYSBldmVudCBwYXNzZWQgaW4gYnkgYSB2YWxpZGF0ZWQgYXBpIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7YXJyYXl9IFRoZSBNb2R1bGUgYWNjZXNzIGxpc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrTW9kdWxlKG1vZHVsZU5hbWUsIGV2ZW50KSB7XG4gICAgY29uc3QgbW9kdWxlUmlnaHRzID0gZ2V0TW9kdWxlSW5mbyhldmVudCk7XG4gICAgbGV0IGFsbG93QWNjZXNzID0gXy5nZXQobW9kdWxlUmlnaHRzLCBtb2R1bGVOYW1lLCBmYWxzZSk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuQlVJTERfRU5WID09PSAnbG9jYWwnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFhbGxvd0FjY2Vzcykge1xuICAgICAgICB0aHJvdyBlcnJvckxpc3QudW5hdXRob3JpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZXJSb2xlcyA9IHtcbiAgICBhZG1pbjogJ0EnLFxuICAgIHJlYWQ6ICdSJyxcbiAgICB3cml0ZTogJ1cnXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7e2JvZHk6IHN0cmluZ319IGV2ZW50XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBidXNpbmVzc0lkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1dyaXRlQWNjZXNzKGV2ZW50KSB7XG4gICAgY29uc3QgZXZlbnRCb2R5ID0gcGFyc2VCb2R5KGV2ZW50KTtcbiAgICBjb25zdCBidXNpbmVzc0lkcyA9IGFjY2Vzc1JpZ2h0c1V0aWxzKGV2ZW50KSB8fCBbXTtcbiAgICBjb25zdCBidXNpbmVzc0lkID0gYnVzaW5lc3NJZHMuZmluZCgoaWQpID0+IGlkID09PSBldmVudEJvZHkuYnVzaW5lc3NJZCk7XG4gICAgY29uc3QgcmF3ID0gZ2V0QnVzaW5lc3Nlc0luZm8oZXZlbnQpO1xuICAgIGNvbnN0IHVzZXJSaWdodCA9IHJhd1tidXNpbmVzc0lkXTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5CVUlMRF9FTlYgPT09ICdsb2NhbCcpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50Qm9keS5idXNpbmVzc0lkO1xuICAgIH1cblxuICAgIGlmICgodXNlclJpZ2h0ICE9PSB1c2VyUm9sZXMuYWRtaW4gJiYgdXNlclJpZ2h0ICE9PSB1c2VyUm9sZXMud3JpdGUpIHx8ICghdXNlclJpZ2h0KSkge1xuICAgICAgICB0aHJvdyBlcnJvckxpc3QudW5hdXRob3JpemVkO1xuICAgIH1cbiAgICByZXR1cm4gYnVzaW5lc3NJZDtcbn1cblxuIiwiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBEQiBmcm9tICdzZXF1ZWxpemUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQvbW9tZW50LmpzJztcbmltcG9ydCB7IGVycm9yTGlzdCB9IGZyb20gJy4uLy4uLy4uL3JlcXVlc3RSZXNvbnNlL2Vycm9yQ29kZXMuanMnO1xuaW1wb3J0IHsgYWNjZXNzUmlnaHRzVXRpbHMgfSBmcm9tICcuL2FjY2Vzc1JpZ2h0c1V0aWxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgc2VxdWVsaXplIHdoZXJlIGNsYXVzZSBmcm9tIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIGFuZCBkZWZhdWx0IHNvcnQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IC0gdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgZnJvbSB0aGUgZXZlbnQgcGFzc2VkIGJ5IGxhbWJkYVxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdEZpbHRlcnMgLSB0aGUgZGVmYXVsdCBmaWx0ZXJzIG9iamVjdCBjcmVhdGVkIGJ5IGNyZWF0ZURlZmF1bHRGaWx0ZXJzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBzZXF1ZWxpemUgd2hlcmUgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVGaWx0ZXJzID0gZnVuY3Rpb24gKGV2ZW50LCBvYmplY3RGaWx0ZXJzKXtcbiAgICBsZXQgcXVlcnkgPSBfLmdldChldmVudCwgJ3F1ZXJ5U3RyaW5nUGFyYW1ldGVycycsIHt9KSB8fCB7fTtcbiAgICBjb25zdCBzdGFydERhdGUgPSBfLmdldChxdWVyeSwgJ3N0YXJ0RGF0ZScpO1xuICAgIGNvbnN0IGVuZERhdGUgPSBfLmdldChxdWVyeSwgJ2VuZERhdGUnKTtcbiAgICBjb25zdCB3aGVyZSA9IE9iamVjdC5rZXlzKHF1ZXJ5KS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBfLmdldChvYmplY3RGaWx0ZXJzLCBpdGVtLCBudWxsKTtcblxuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtTmFtZSA9IGl0ZW0uaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgICAgID8gYCQke2l0ZW19JGBcbiAgICAgICAgICAgICAgICA6IGl0ZW07XG5cbiAgICAgICAgICAgIGFjY1tpdGVtTmFtZV0gPSB7fTtcbiAgICAgICAgICAgIGlmICh2YWwuZmlsdGVyVHlwZSA9PT0gREIuT3AuaUxpa2UpIHtcbiAgICAgICAgICAgICAgICBhY2NbaXRlbU5hbWVdW3ZhbC5maWx0ZXJUeXBlXSA9IGAlJHtxdWVyeVtpdGVtXX0lYDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLmZpbHRlclR5cGUgPT09IERCLk9wLm9yKSB7XG4gICAgICAgICAgICAgICAgYWNjW2l0ZW1OYW1lXVt2YWwuZmlsdGVyVHlwZV0gPSBbLTEgKiArcXVlcnlbaXRlbV0sICtxdWVyeVtpdGVtXV07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC5maWx0ZXJUeXBlID09PSBEQi5PcC5pbikge1xuICAgICAgICAgICAgICAgIGFjY1tpdGVtTmFtZV1bdmFsLmZpbHRlclR5cGVdID0gcXVlcnlbaXRlbV0uc3BsaXQoJywnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLmZpbHRlclR5cGUgPT09IERCLk9wLmluKSB7XG4gICAgICAgICAgICAgICAgYWNjW2l0ZW1OYW1lXVt2YWwuZmlsdGVyVHlwZV0gPSBxdWVyeVtpdGVtXS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VkSnNvbjtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBpcyBKU09OLCBwYXJzZSBpdFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRKc29uID0gSlNPTi5wYXJzZShxdWVyeVtpdGVtXSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBpcyBub3QgSlNPTiwgcGFzcyB0aHJvdWdoIGFzIGEgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZEpzb24gPSBxdWVyeVtpdGVtXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWNjW2l0ZW1OYW1lXVt2YWwuZmlsdGVyVHlwZV0gPSBwYXJzZWRKc29uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsLnR5cGUgPT09IERCLkJPT0xFQU4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVZhbHVlID0gXy5nZXQocXVlcnksIGl0ZW0sICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYm9vbGVhbk1hcCA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZhbHNlJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICdudWxsJzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgJ3RydWUnOiB0cnVlXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGFjY1tpdGVtTmFtZV1bdmFsLmZpbHRlclR5cGVdID0gYm9vbGVhbk1hcFtxdWVyeVZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgaWYgKG9iamVjdEZpbHRlcnM/LmFjdGl2ZSAmJiAhd2hlcmU/LmFjdGl2ZSkge1xuICAgICAgICB3aGVyZS5hY3RpdmUgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1c2luZXNzSWRzID0gYWNjZXNzUmlnaHRzVXRpbHMoZXZlbnQpO1xuICAgIGNvbnN0IGZpbHRlckFkZHMgPSB7XG4gICAgICAgIGJ1c2luZXNzSWQ6IGJ1c2luZXNzSWRzXG4gICAgfTtcblxuICAgIGlmIChzdGFydERhdGUgJiYgZW5kRGF0ZSkge1xuICAgICAgICBjb25zdCBzID0gbW9tZW50LnV0YyhzdGFydERhdGUpO1xuICAgICAgICBjb25zdCBlID0gbW9tZW50LnV0YyhlbmREYXRlKTtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB7XG4gICAgICAgICAgICBbREIuT3AuYmV0d2Vlbl06IFtzLnRvRGF0ZSgpLCBlLnRvRGF0ZSgpXVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aHJvdyB7IC4uLmVycm9yTGlzdC5pbnZhbGlkU3RhcnREYXRlIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aHJvdyB7IC4uLmVycm9yTGlzdC5pbnZhbGlkRW5kRGF0ZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyQWRkcy5jcmVhdGVkQXQgPSBkYXRlcztcbiAgICB9XG5cbiAgICBjb25zdCB3aXRoRGF0ZSA9IE9iamVjdC5hc3NpZ24od2hlcmUsIGZpbHRlckFkZHMpO1xuXG4gICAgcmV0dXJuIHdpdGhEYXRlO1xufTtcbiIsImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogQ3JlYXRlIHNlcXVlbGl6ZSBpbmNsdWRlcyBhcnJheSBmcm9tIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIGFuZCBkZWZhdWx0IHNlcXVlbGl6ZSBtb2RlbFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIGZyb20gdGhlIGV2ZW50IHBhc3NlZCBieSBsYW1iZGFcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RGaWx0ZXJzIC0gdGhlIGRlZmF1bHQgZmlsdGVycyBvYmplY3QgY3JlYXRlZCBieSBjcmVhdGVEZWZhdWx0RmlsdGVyc1xuICogQHJldHVybnMge29iamVjdH0gQSBzZXF1ZWxpemUgaW5jbHVkZXMgYXJyYXlcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5jbHVkZXMoZXZlbnQsIG9iamVjdEZpbHRlcnMpIHtcbiAgICBjb25zdCBxdWVyeSA9IF8uZ2V0KGV2ZW50LCAncXVlcnlTdHJpbmdQYXJhbWV0ZXJzJywge30pIHx8IHt9O1xuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdEZpbHRlcnMpO1xuXG4gICAgY29uc3QgY2FuQmVJbmNsdWRlZCA9IGtleXMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgYWNjID0gaW5jbHVkZVN1Ykl0ZW0oaXRlbSwgYWNjKTtcblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGFza2VkRm9ySW5RdWVyeSA9IE9iamVjdC5rZXlzKHF1ZXJ5KS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbSA9PT0gJ3NvcnQnKSB7XG4gICAgICAgICAgICBxdWVyeVtpdGVtXS5zcGxpdCgnLCcpLmZvckVhY2goKHNvcnRJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgc29ydEl0ZW0gPSBzb3J0SXRlbS5pbmRleE9mKCctJykgPT09IDAgPyBzb3J0SXRlbS5zdWJzdHIoMSkgOiBzb3J0SXRlbTtcbiAgICAgICAgICAgICAgICBhY2MgPSBpbmNsdWRlU3ViSXRlbShzb3J0SXRlbSwgYWNjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYWNjID0gaW5jbHVkZVN1Ykl0ZW0oaXRlbSwgYWNjKTtcblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiBfLmludGVyc2VjdGlvbihjYW5CZUluY2x1ZGVkLCBhc2tlZEZvckluUXVlcnkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZVN1Ykl0ZW0ocXVlcnlTdHJpbmdJdGVtLCBhY2MgPSBbXSkge1xuICAgIGNvbnN0IGRvdCA9IHF1ZXJ5U3RyaW5nSXRlbS5pbmRleE9mKCcuJyk7XG4gICAgaWYgKGRvdCA+IDApIHtcbiAgICAgICAgYWNjLnB1c2gocXVlcnlTdHJpbmdJdGVtLnN1YnN0cmluZygwLCBkb3QpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xufSIsImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogQ3JlYXRlIHNlcXVlbGl6ZSBvcmRlciBjbGF1c2UgZnJvbSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBhbmQgZGVmYXVsdCBzb3J0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCAtIHRoZSBldmVudCBjcmVhdGVkIEFXUyBsYW1iZGEsIGl0IHdpbGwgY29udGFpbiBxdWVyeVN0cmluZ1BhcmFtZXRlcnMgd2l0aCBzb3J0IHByb3BlcnR5IGEgY29tbWEgc2VwZXJhdGVkIGxpc3Qgb2Ygc29ydGFibGUgZmllbGRzICogQHBhcmFtIHtvYmplY3R9IG9iamVjdEZpbHRlcnMgLSB0aGUgZGVmYXVsdCBmaWx0ZXJzIG9iamVjdCBjcmVhdGVkIGJ5IGNyZWF0ZURlZmF1bHRGaWx0ZXJzXG4gKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdEZpbHRlciAtIEEgZGVmYXVsdCBmaWx0ZXIgb2JqZWN0IGFzIGJ1aWx0IGJ5IGNyZWF0ZURlZmF1bHQgRmlsdGVycywgaWYgaXRlbXMgYXJlIG5vdCBvbiB0aGUgc2NoZW1hIHRoZXkgd2lsbCBub3QgYmUgaW4gdGhlIG9yZGVyIGJ5XG4gKiBAcmV0dXJucyB7b2JqZWN0fSAgQW4gc2VxdWVsaXplIG9yZGVyIGJ5IG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlU29ydCA9IGZ1bmN0aW9uIChldmVudCwgZGVmYXVsdEZpbHRlcikge1xuICAgIGxldCBjb3B5T2ZEZWZhdWx0RmlsdGVyID0gXy5jbG9uZShkZWZhdWx0RmlsdGVyKTtcbiAgICBsZXQgcXVlcnkgPSBfLmdldChldmVudCwgJ3F1ZXJ5U3RyaW5nUGFyYW1ldGVycycsIHt9KSB8fCB7fTtcbiAgICBsZXQgc29ydCA9IF8uZ2V0KHF1ZXJ5LCAnc29ydCcsICctdXBkYXRlZEF0JykgfHwgJy11cGRhdGVkQXQnO1xuXG4gICAgcmV0dXJuIHNvcnQuc3BsaXQoJywnKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuXG4gICAgICAgIGNvbnN0IHRlc3RJdGVtID0gaXRlbS5pbmRleE9mKCctJykgPT09IDAgPyBpdGVtLnN1YnN0cigxKSA6IGl0ZW07XG5cbiAgICAgICAgaWYgKF8uZ2V0KGNvcHlPZkRlZmF1bHRGaWx0ZXIsIHRlc3RJdGVtLCBudWxsKSkge1xuICAgICAgICAgICAgY29uc3Qgc29ydEl0ZW0gPSBbXTtcblxuICAgICAgICAgICAgdGVzdEl0ZW0uc3BsaXQoJy4nKS5mb3JFYWNoKChwYXJlbnRDaGlsZExpc3QpID0+IHtcbiAgICAgICAgICAgICAgICBzb3J0SXRlbS5wdXNoKHBhcmVudENoaWxkTGlzdCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGl0ZW0uaW5kZXhPZignLScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc29ydEl0ZW0ucHVzaCgnREVTQycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzb3J0SXRlbS5wdXNoKCdBU0MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjYy5wdXNoKHNvcnRJdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pO1xufTtcbiIsImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgREIgZnJvbSAnc2VxdWVsaXplJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gb2JqZWN0IHdpdGggZGVmYXVsdCBmaWx0ZXJzIGZvciBhIGdpdmVuIHNlcXVlbGlhemUgU2NoZW1hIE9iamVjdCwgYW5kIHNldCBvZiBzdWIgc2NoZW1hc1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWEgLSB0eXBlIGlzIHNlcXVlbGl6ZSBkYXRhIHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJTY2hlbWFzIC0gQW4gb2JqZWN0IHdpdGggYWxpYXMgYXMgdGhlIGtleSBhbmQgc2VxdWVsaXplIHNjaGVtYSBhcyB0aGUgdmFsdWUgaHR0cDovL2RvY3Muc2VxdWVsaXplanMuY29tL2NsYXNzL2xpYi9zZXF1ZWxpemUuanN+U2VxdWVsaXplLmh0bWwjaW5zdGFuY2UtbWV0aG9kLWRlZmluZVxuICogc3ViIHNjaGVtYSBjYW4gYmUge2xvY2F0aW9uOiBsb2NhdGlvblNjaGVtYX0gb3Ige2xvY2F0aW9uOiB7YXM6IFwiYXNBbGlhc1wiLCBzY2hlbWE6IHNjaGVtYX19XG4gKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBPYmplY3Qgd2l0aCBhIGRlZmF1bHQgZmlsdGVyIGZvciBlYWNoIGRhdGFUeXBlIENIQVIgYW5kIFRFWFQgd2lsbCBnZXQgYSAkbGlrZSBvcGVyYXRvciwgSU5URUdFUiwgREVDSU1BTCBhbmQgQk9PTEVBTiB3aWxsIGdldCBhICRlcS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXJzKHNjaGVtYSwgc3ViU2NoZW1hcyA9IHt9KSB7XG4gICAgc2NoZW1hID0gXy5jbG9uZShzY2hlbWEpO1xuXG4gICAgY29uc3QgZmlsdGVycyA9IHt9O1xuXG4gICAgYWRkRmlsdGVyc0Zyb21TY2hlbWEoc2NoZW1hLCBmaWx0ZXJzKTtcbiAgICBPYmplY3Qua2V5cyhzdWJTY2hlbWFzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgYWRkRmlsdGVyc0Zyb21TY2hlbWEoc3ViU2NoZW1hc1trZXldLCBmaWx0ZXJzLCBrZXkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbHRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRGaWx0ZXJzRnJvbVNjaGVtYShzY2hlbWEsIGFjY3VtdWxhdG9yLCBrZXlQcmVmaXggPSAnJykge1xuICAgIGNvbnN0IGFzTGlua0FsaWFzID0gXy5nZXQoc2NoZW1hLCAnYXMnLCBudWxsKTtcbiAgICBzY2hlbWEgPSBfLmdldChzY2hlbWEsICdzY2hlbWEnKSB8fCBzY2hlbWE7XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc2NoZW1hKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICBsZXQga2V5ID0gaXRlbTtcblxuICAgICAgICBpZiAoYXNMaW5rQWxpYXMpIHtcbiAgICAgICAgICAgIGFjY1thc0xpbmtBbGlhc10gPSB7IHR5cGU6IERCLlNUUklORywgZmlsdGVyVHlwZTogREIuT3AuZXEgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXlQcmVmaXgpIHtcbiAgICAgICAgICAgIGtleSA9IGAke2tleVByZWZpeH0uJHtpdGVtfWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2NoZW1hW2l0ZW1dLmZpbHRlclR5cGUpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBzY2hlbWFbaXRlbV0uZmlsdGVyVHlwZSB9O1xuXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBzY2hlbWFbaXRlbV0udHlwZTtcblxuICAgICAgICAvL3RvZG8gdGhlc2Ugc2hvdWxkIGJlIHJlbW92ZWQsIHRoZXJlIGFyZSBqdXN0IGhlcmUgZm9yIHNvcnQgdGVzdHNcbiAgICAgICAgc3dpdGNoIChpdGVtVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEQi5DSEFSOlxuICAgICAgICAgICAgY2FzZSBEQi5TVFJJTkc6XG4gICAgICAgICAgICBjYXNlIERCLlRFWFQ6XG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLmlMaWtlIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgREIuREVDSU1BTDpcbiAgICAgICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogREIuT3Aub3IgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBEQi5CT09MRUFOOlxuICAgICAgICAgICAgY2FzZSBEQi5CSUdJTlQ6XG4gICAgICAgICAgICBjYXNlIERCLklOVEVHRVI6XG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSB7IHR5cGU6IGl0ZW1UeXBlLCBmaWx0ZXJUeXBlOiBEQi5PcC5lcSB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIERCLkRBVEU6XG4gICAgICAgICAgICBjYXNlIERCLkRBVEVPTkxZOlxuICAgICAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBEQi5PcC5sdCB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9uZXcgc2VxdWVsaXplIHVzZXMgY2xhc3NlcyBpbnN0ZWFkIG9mIG9iamVjdHNcbiAgICAgICAgaWYgKGl0ZW1UeXBlIGluc3RhbmNlb2YgREIuU1RSSU5HKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgZmlsdGVyVHlwZTogREIuT3AuaUxpa2UgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSBpbnN0YW5jZW9mIERCLkRFQ0lNQUwpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBEQi5PcC5vciB9O1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlIGluc3RhbmNlb2YgREIuSU5URUdFUikge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IGZpbHRlclR5cGU6IERCLk9wLm9yIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgaW5zdGFuY2VvZiBEQi5CSUdJTlQpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyBmaWx0ZXJUeXBlOiBEQi5PcC5vciB9O1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlIGluc3RhbmNlb2YgREIuQk9PTEVBTikge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB7IHR5cGU6IGl0ZW1UeXBlLCBmaWx0ZXJUeXBlOiBEQi5PcC5lcSB9O1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlIGluc3RhbmNlb2YgREIuSlNPTkIpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0geyB0eXBlOiBpdGVtVHlwZSwgZmlsdGVyVHlwZTogREIuT3AuY29udGFpbnMgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSBpbnN0YW5jZW9mIERCLkRBVEVPTkxZKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHsgdHlwZTogaXRlbVR5cGUsIGZpbHRlclR5cGU6IERCLk9wLmVxIH07XG4gICAgICAgIH1cblxuICAgICAgICAvL3RoZXNlIGFyZSBub3QgcGFydCBvZiB0aGUgbW9kZWxzIHNvIGFkZCB0aGVtIGFsd2F5c1xuICAgICAgICBhY2NbJ2NyZWF0ZWRBdCddID0geyB0eXBlOiBEQi5EQVRFLCBmaWx0ZXJUeXBlOiBEQi5PcC5sdCB9O1xuICAgICAgICBhY2NbJ3VwZGF0ZWRBdCddID0geyB0eXBlOiBEQi5EQVRFLCBmaWx0ZXJUeXBlOiBEQi5PcC5sdCB9O1xuICAgICAgICBhY2NbJ2lkJ10gPSB7IHR5cGU6IERCLklOVEVHRVIsIGZpbHRlclR5cGU6IERCLk9wLmVxIH07XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBhY2N1bXVsYXRvcik7XG59XG4iLCIvKipcbiAqIGNyZWF0ZSBwYWdpbmF0aW9uIG9iamVjdCBmcm9tIFNlcXVlbGl6ZSBmaW5kQWxsXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzdWx0IC0gc2VxdWVsaXplIHJlc3VsdFxuICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IC0gbWF4IG51bWJlciBvZiByZXN1bHRzIHRvIHJldHVyblxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIHBhZ2Ugb2Zmc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdpbmF0aW9uRnJvbUZpbmRBbGwocmVzdWx0LCBsaW1pdCwgb2Zmc2V0KSB7XG4gICAgcmVzdWx0ID0gcmVzdWx0IHx8IFtdO1xuICAgIGxpbWl0ID0gbGltaXQgfHwgMDtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGNvbnN0IGhhc01vcmUgPSByZXN1bHQubGVuZ3RoID4gbGltaXQ7XG4gICAgaWYgKGhhc01vcmUpIHtcbiAgICAgICAgcmVzdWx0LnNwbGljZSgtMSwgMSk7XG4gICAgfVxuICAgIGNvbnN0IHBhZ2VPYmplY3QgPSB7XG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBsaW1pdDogbGltaXQsXG4gICAgICAgIHJvd3M6IHJlc3VsdCxcbiAgICAgICAgaGFzTW9yZTogaGFzTW9yZVxuICAgIH07XG5cbiAgICByZXR1cm4gcGFnZU9iamVjdDtcbn1cblxuLyoqXG4gKiB3cmFwcGVyIGZvciBTZXF1ZWxpemUgZmluZEFsbFxuICogQHBhcmFtIHtvYmplY3R9IG1vZGVsIC0gaW5zdGFuY2Ugb2YgU2VxdWVsaXplIChtdXN0IGJlIGluaXRpYWxpemVkKVxuICogQHBhcmFtIHsqJntpbmNsdWRlOiBbe21vZGVsOiAqfV0sIHdoZXJlOiB7YnVzaW5lc3NJZDogQXJyYXl9LCBvcmRlcjogW3N0cmluZ1tdXX19IG9wdGlvbnMgLSBpbnN0YW5jZSBvZiBTZXF1ZWxpemUgKG11c3QgYmUgaW5pdGlhbGl6ZWQpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kQWxsKG1vZGVsLCBvcHRpb25zKSB7XG5cbiAgICBjb25zdCBsaW1pdCA9IG9wdGlvbnMubGltaXQgfHwgMDtcbiAgICBjb25zdCBmaW5kQXJncyA9IE9iamVjdC5hc3NpZ24oe2luY2x1ZGU6IHsgYWxsOiB0cnVlLCBuZXN0ZWQ6IHRydWUgfX0sIG9wdGlvbnMsIHsgbGltaXQ6IGxpbWl0ICsgMSB9KTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgbW9kZWwuZmluZEFsbChmaW5kQXJncyk7XG4gICAgcmV0dXJuIGdldFBhZ2luYXRpb25Gcm9tRmluZEFsbChyZXN1bHRzLCBsaW1pdCwgb3B0aW9ucy5vZmZzZXQpO1xufVxuXG5jb25zdCBmaW5kVXRpbHMgPSB7XG4gICAgZmluZEFsbFxufTtcbmV4cG9ydCBkZWZhdWx0IGZpbmRVdGlsczsiLCJpbXBvcnQgeyBEeW5hbW9EQkRvY3VtZW50IH0gZnJvbSAnQGF3cy1zZGsvbGliLWR5bmFtb2RiJztcclxuaW1wb3J0IHsgRHluYW1vREIgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZHluYW1vZGInO1xyXG5cclxuY29uc3QgZHluYW1vVXRpbCA9IHtcclxuICAgIGdldDogKHBhcmFtcykgPT4gZ2V0KHBhcmFtcylcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge3tUYWJsZU5hbWU6c3RyaW5nLCBLZXk6e2tleTpzdHJpbmd9fX0gcGFyYW1zXHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBnZXQocGFyYW1zKSB7XHJcbiAgICBjb25zdCBkeW5hbW9EYiA9IER5bmFtb0RCRG9jdW1lbnQuZnJvbShuZXcgRHluYW1vREIoKSk7XHJcbiAgICByZXR1cm4gZHluYW1vRGIuZ2V0KHBhcmFtcyk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGR5bmFtb1V0aWw7IiwiaW1wb3J0IHsgaGFuZGxlRmlsZSB9IGZyb20gJy4vaGFuZGxlRmlsZS5qcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFByb21pc2UgZnJvbSAnYmx1ZWJpcmQnO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRXZlbnRzKGV2ZW50LCB0cmFuc2Zvcm1lciwgZXJyb3JIYW5kbGVyUGVyRmlsZSwgc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMgPSBmYWxzZSwgdXNlckltcG9ydFR5cGVzKSB7XG4gICAgaWYgKCFldmVudCB8fCAhZXZlbnQuUmVjb3Jkcykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgbGV0IGhhc0Vycm9ycyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIFByb21pc2UubWFwKGV2ZW50LlJlY29yZHMsIChyZWNvcmQpID0+IHtcbiAgICAgICAgY29uc3Qgc25zSW5mbyA9IEpTT04ucGFyc2UoXy5nZXQocmVjb3JkLCAnU25zLk1lc3NhZ2UnLCAne30nKSk7XG4gICAgICAgIGNvbnN0IHMzQnVja2V0ID0gc25zSW5mby5idWNrZXQ7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gc25zSW5mby5maWxlcyB8fCBbXTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5tYXAoZmlsZXMsIChmaWxlKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudChmaWxlKTtcbiAgICAgICAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUZpbGUocGF0aCwgczNCdWNrZXQsIHRyYW5zZm9ybWVyLCB7IHNob3VsZFNraXBGYWlsZWRGb2xkZXJzLCB1c2VySW1wb3J0VHlwZXMgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JIYW5kbGVyUGVyRmlsZSAmJiAhZXJyb3JIYW5kbGVyUGVyRmlsZShlcnIsIHBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoaGFzRXJyb3JzKSB7XG4gICAgICAgICAgICB0aHJvdyAnRXJyb3JzIHByb2Nlc3Npbmcgb25lIG9yIG1vcmUgZmlsZXMuIFNlZSBlcnJvciBsb2dzIGZvciBkZXRhaWwgb24gZWFjaCBlcnJvci4nO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFMzVXRpbCBmcm9tICcuLi9zMy9TM1V0aWxzLmpzL1MzVXRpbHMuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlRmlsZShwYXRoLCBzM0J1Y2tldCwgdHJhbnNmb3JtZXIsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBzaG91bGRTa2lwRmFpbGVkRm9sZGVycyA9IF8uZ2V0KG9wdGlvbnMsICdzaG91bGRTa2lwRmFpbGVkRm9sZGVycycpO1xuICAgIGNvbnN0IHVzZXJJbXBvcnRUeXBlcyA9IF8uZ2V0KG9wdGlvbnMsICd1c2VySW1wb3J0VHlwZXMnKTtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIEJ1Y2tldDogczNCdWNrZXQsXG4gICAgICAgIEtleTogcGF0aFxuICAgIH07XG4gICAgbGV0IGJvZHkgPSAne30nXG4gICAgdHJ5IHtcbiAgICAgICAgYm9keSA9IGF3YWl0IFMzVXRpbC5nZXRPYmplY3QocGFyYW1zKTtcbiAgICAgICAgY29uc3QgcGFyc2VkQm9keSA9IEpTT04ucGFyc2UoYm9keSk7XG4gICAgICAgIGNvbnN0IHJldHVybmVkVmFsdWUgPSBhd2FpdCB0cmFuc2Zvcm1lcihwYXJzZWRCb2R5KTtcbiAgICAgICAgYXdhaXQgUzNVdGlsLmRlbGV0ZU9iamVjdChwYXJhbXMpO1xuXG4gICAgICAgIHJldHVybiByZXR1cm5lZFZhbHVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hhbmRsZS1maWxlLWVycm9yJywgZXJyb3IpO1xuXG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSAnTm9TdWNoS2V5JyB8fCAhYm9keSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5ld1BhdGggPSAnJztcblxuICAgICAgICBpZiAodXNlckltcG9ydFR5cGVzKSB7XG4gICAgICAgICAgICAvLyBsb29rIGZvciBpdGVtcyBpbiB0aGUgdXNlckltcG9ydFR5cGVzXG4gICAgICAgICAgICBjb25zdCB1c2Vyc0ltcG9ydHMgPSBPYmplY3QudmFsdWVzKHVzZXJJbXBvcnRUeXBlcyk7XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gXy5sYXN0KGl0ZW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGZvbGRlck5hbWUgPSBfLmZpcnN0KGl0ZW1zKTtcblxuICAgICAgICAgICAgaWYgKHVzZXJzSW1wb3J0cy5pbmRleE9mKGZvbGRlck5hbWUpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UGF0aCA9IGAke2ZvbGRlck5hbWV9L2Vycm9yLyR7ZmlsZU5hbWV9YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF8uc3RhcnRzV2l0aChwYXRoLCBgJHtmb2xkZXJOYW1lfS9mYWlsZWQtb25jZS9gKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdQYXRoID0gXy5yZXBsYWNlKHBhdGgsIGAke2ZvbGRlck5hbWV9L2ZhaWxlZC1vbmNlL2AsIGAke2ZvbGRlck5hbWV9L2ZhaWxlZC10d2ljZS9gKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF8uc3RhcnRzV2l0aChwYXRoLCBgJHtmb2xkZXJOYW1lfS9mYWlsZWQtdHdpY2UvYCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UGF0aCA9IF8ucmVwbGFjZShwYXRoLCBgJHtmb2xkZXJOYW1lfS9mYWlsZWQtdHdpY2UvYCwgYCR7Zm9sZGVyTmFtZX0vZXJyb3IvYCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UGF0aCA9IGAke2ZvbGRlck5hbWV9L2ZhaWxlZC1vbmNlLyR7ZmlsZU5hbWV9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1BhdGggPSBgcGF0aEFuZEV2ZW50TWlzTWF0Y2hFcnJvci8ke3BhdGh9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNob3VsZFNraXBGYWlsZWRGb2xkZXJzKSB7XG4gICAgICAgICAgICAgICAgbmV3UGF0aCA9IGBlcnJvci8ke3BhdGh9YDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5zdGFydHNXaXRoKHBhdGgsICdmYWlsZWQtb25jZS8nKSkge1xuICAgICAgICAgICAgICAgIG5ld1BhdGggPSBfLnJlcGxhY2UocGF0aCwgJ2ZhaWxlZC1vbmNlLycsICdmYWlsZWQtdHdpY2UvJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF8uc3RhcnRzV2l0aChwYXRoLCAnZmFpbGVkLXR3aWNlLycpKSB7XG4gICAgICAgICAgICAgICAgbmV3UGF0aCA9IF8ucmVwbGFjZShwYXRoLCAnZmFpbGVkLXR3aWNlLycsICdlcnJvci8nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMocGF0aCwgJ2RlbGF5VW50aWwvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IF8ubGFzdChwYXRoLnNwbGl0KCcvJykpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5ld1BhdGggPSBgZmFpbGVkLW9uY2UvJHtwYXRofWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdQYXJhbXMgPSB7XG4gICAgICAgICAgICBCdWNrZXQ6IHMzQnVja2V0LFxuICAgICAgICAgICAgS2V5OiBuZXdQYXRoLFxuICAgICAgICAgICAgQm9keTogYm9keVxuICAgICAgICB9O1xuXG4gICAgICAgIGF3YWl0IFMzVXRpbC5wdXRPYmplY3QobmV3UGFyYW1zKTtcbiAgICAgICAgYXdhaXQgUzNVdGlsLmRlbGV0ZU9iamVjdChwYXJhbXMpO1xuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbn1cbiIsImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgUzNVdGlscyBmcm9tICcuLi9zMy9TM1V0aWxzLmpzL1MzVXRpbHMuanMnO1xuaW1wb3J0IFNOU1V0aWwgZnJvbSAnLi4vc25zL1NOU1V0aWxzLmpzJztcbmltcG9ydCBkeW5hbW9VdGlsIGZyb20gJy4uL2R5bmFtby9keW5hbW9VdGlscy5qcyc7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGJ1Y2tldFxuICogQHBhcmFtIHtudW1iZXJ9IG1heEtleXNcbiAqIEBwYXJhbSB7T2JqZWN0fSB1c2VySW1wb3J0VHlwZXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvb3AoYnVja2V0LCBtYXhLZXlzLCB1c2VySW1wb3J0VHlwZXMpIHtcbiAgICBsZXQgYnVja2V0UmVzdWx0ID0ge307XG4gICAgbGV0IGZpbGVMaXN0ID0gW107XG5cbiAgICBjb25zdCBjdXJyZW50VGltZSA9IG1vbWVudCgpO1xuXG4gICAgZG8ge1xuICAgICAgICBidWNrZXRSZXN1bHQgPSBhd2FpdCBTM1V0aWxzLmxpc3RPYmplY3RzVjIoe1xuICAgICAgICAgICAgQnVja2V0OiBidWNrZXQsXG4gICAgICAgICAgICBNYXhLZXlzOiBtYXhLZXlzLFxuICAgICAgICAgICAgQ29udGludWF0aW9uVG9rZW46IF8uZ2V0KGJ1Y2tldFJlc3VsdCwgJ05leHRDb250aW51YXRpb25Ub2tlbicpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBuZXdGaWxlcyA9IF8uZmlsdGVyKGJ1Y2tldFJlc3VsdC5Db250ZW50cywgKGZpbGUpID0+IHtcbiAgICAgICAgICAgIGlmIChfLnN0YXJ0c1dpdGgoXy5nZXQoZmlsZSwgJ0tleScpLCAnZGVsYXlVbnRpbC8nKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEZWxheVRpbWUgPSBfLmdldChmaWxlLCAnS2V5Jykuc3BsaXQoJy8nKVsxXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9tZW50KGZpbGVEZWxheVRpbWUsICdZWVlZTU1EREhIbW0nKS5pc1NhbWVPckJlZm9yZShjdXJyZW50VGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXNlckltcG9ydFR5cGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9vayBmb3IgaXRlbXMgaW4gdGhlIHVzZXJJbXBvcnRUeXBlc1xuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJzSW1wb3J0cyA9IE9iamVjdC52YWx1ZXModXNlckltcG9ydFR5cGVzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IGZpbGUuS2V5LnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBfLmxhc3QoaXRlbXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbGRlck5hbWUgPSBfLmZpcnN0KGl0ZW1zKTtcbiAgICAgICAgICAgICAgICBpZiAoXy5pc0VtcHR5KGZpbGVOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVzZXJzSW1wb3J0cy5pbmRleE9mKGZvbGRlck5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuICFfLnN0YXJ0c1dpdGgoZmlsZS5LZXksIGAke2ZvbGRlck5hbWV9L2Vycm9yYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gIV8uc3RhcnRzV2l0aChmaWxlLktleSwgJ2Vycm9yJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZpbGVMaXN0ID0gXy5jb25jYXQoZmlsZUxpc3QsIG5ld0ZpbGVzKTtcbiAgICB9IHdoaWxlIChidWNrZXRSZXN1bHQuSXNUcnVuY2F0ZWQgJiYgYnVja2V0UmVzdWx0Lk5leHRDb250aW51YXRpb25Ub2tlbiAmJiBmaWxlTGlzdC5sZW5ndGggPCBtYXhLZXlzKTtcblxuICAgIHJldHVybiBmaWxlTGlzdDtcbn1cblxuLyoqXG4gKiBQdWJsaXNoZWQgU05TIGV2ZW50cyBhdCBhIHN0ZWFkeSBwYWNlIGZvciBkYXRhIGluIGEgcGFydGljdWxhciBidWNrZXQuIFNob3VsZCBiZSBleGVjdXRlZCB2aWEgYSBjbG91ZCB3YXRjaCBjcm9uIGpvYiBhcyBhIHBhcnQgb2YgYSBtaWNybyBzZXJ2aWNlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZ1RhYmxlIC0gVGhlIER5bmFtbyBEQiB0YWJsZSB3aGVyZSB0byBnZXQgdGhlIGNodW5rLXNpemUgYW5kIG1heE1lc3NhZ2Ugc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlS2V5IC0gVGhlIGtleSB0byB0aGUgaXRlbSBpbiB0aGUgRHluYW1vIERCIHRhYmxlIHRoYXQgaG9sZHMgdGhlIGNodW5rLXNpemUgYW5kIG1heE1lc3NhZ2Ugc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IGJ1Y2tldCAtIFRoZSBuYW1lIG9mIHRoZSBzMyBidWNrZXQgdG8gd2F0Y2gsIHdoZW4geW91IGRyb3AgaXRlbXMgaW50byB0aGlzIHRhYmxlIGV2ZW50cyB3aWxsIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzbnNUb3BpYyAtIFRoZSBuYW1lIG9mIHRoZSBzbnNFdmVudCB0byBwdWJsaXNoXG4gKiBAcGFyYW0ge29iamVjdH0gdXNlckltcG9ydFR5cGVzIC0gaW1wb3J0IHR5cGVzIHRvIGZpbHRlciBvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVibGlzaEV2ZW50cyhjb25maWdUYWJsZSwgdGFibGVLZXksIGJ1Y2tldCwgc25zVG9waWMsIHVzZXJJbXBvcnRUeXBlcykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgZHluYW1vVXRpbC5nZXQoe1xuICAgICAgICAgICAgVGFibGVOYW1lOiBjb25maWdUYWJsZSxcbiAgICAgICAgICAgIEtleTogeyBrZXk6IHRhYmxlS2V5IH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgZ2V0IGNvbmZpZyBmb3Iga2V5OiAke3RhYmxlS2V5fSB0YWJsZTogJHtjb25maWdUYWJsZX0gZmFsbGluZyBiYWNrIHRvIGRlZmF1bHRzIG9mIDIgYW5kIDEwYCwgZSk7XG4gICAgfVxuICAgIGxldCBjaHVua1NpemUgPSBfLmdldChyZXN1bHQsICdJdGVtLnNuc0NodW5rU2l6ZScsIDIpO1xuICAgIGxldCBtYXhNZXNzYWdlcyA9IF8uZ2V0KHJlc3VsdCwgJ0l0ZW0uc25zTWF4TWVzc2FnZXMnLCAxMCk7XG5cbiAgICBjb25zdCBzbnNDcmVhdGVUb3BpY1Jlc3BvbnNlID0gYXdhaXQgU05TVXRpbC5jcmVhdGVUb3BpYyh7IE5hbWU6IHNuc1RvcGljIH0pO1xuICAgIGNvbnN0IHRvcGljQXJuID0gc25zQ3JlYXRlVG9waWNSZXNwb25zZS5Ub3BpY0FybjtcbiAgICBjb25zdCBtYXhLZXlzID0gY2h1bmtTaXplICogbWF4TWVzc2FnZXM7XG5cbiAgICBjb25zdCBmaWxlTGlzdCA9IGF3YWl0IGxvb3AoYnVja2V0LCBtYXhLZXlzLCB1c2VySW1wb3J0VHlwZXMpO1xuXG4gICAgY29uc3QgbWVzc2FnZUxpc3QgPSBfLmNoYWluKGZpbGVMaXN0KVxuICAgICAgICAubWFwKCdLZXknKVxuICAgICAgICAuY2h1bmsoY2h1bmtTaXplKVxuICAgICAgICAuc2xpY2UoMCwgbWF4TWVzc2FnZXMpXG4gICAgICAgIC52YWx1ZSgpXG4gICAgO1xuXG4gICAgcmV0dXJuIFByb21pc2UubWFwKG1lc3NhZ2VMaXN0LCAoZmlsZXMpID0+IHtcbiAgICAgICAgcmV0dXJuIFNOU1V0aWwucHVibGlzaCh7XG4gICAgICAgICAgICBNZXNzYWdlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgYnVja2V0OiBidWNrZXQsXG4gICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIFRvcGljQXJuOiB0b3BpY0FyblxuICAgICAgICB9KTtcbiAgICB9KTtcbn0iLCJpbXBvcnQgeyBwdWJsaXNoRXZlbnRzIH0gZnJvbSAnLi9wdWJsaXNoRXZlbnRzLmpzJztcbmltcG9ydCB7IGhhbmRsZUV2ZW50cyB9IGZyb20gJy4vaGFuZGxlRXZlbnRzLmpzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogYnVja2V0IHdhdGNoZXIgd2F0Y2hlcyBhIHMzIGJ1Y2tldCBhbmQgcHVibGlzaGVzIGV2ZW50cyB0byBhIHNucyB0b3BpYywgdGhpcyBhbGxvd3MgeW91IHRvIHByb2Nlc3MgZmlsZXMgaW4gczMgd2l0aCBhIHNvbWUgdHJhbnNmb3JtZXIgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHdhdGNoQnVja2V0LCBzZWUgYmVsb3dcbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXMuZXZlbnQgLSBUaGUgZXZlbnQgb2YgdGhlIGxhbWJkYVxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5keW5hbW9Db25maWdUYWJsZSAtIFRoZSBEeW5hbW8gREIgdGFibGUgd2hlcmUgdG8gZ2V0IHRoZSBjaHVua1NpemUgYW5kIG1heE1lc3NhZ2Ugc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5keW5hbW9Db25maWdLZXkgLSBUaGUga2V5IHRvIHRoZSBpdGVtIGluIHRoZSBEeW5hbW8gREIgdGFibGUgdGhhdCBob2xkcyB0aGUgY2h1bmtTaXplIGFuZCBtYXhNZXNzYWdlIHNpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuczNCdWNrZXQgLSBUaGUgbmFtZSBvZiB0aGUgczMgYnVja2V0IHRvIHdhdGNoLCB3aGVuIHlvdSBkcm9wIGl0ZW1zIGludG8gdGhpcyB0YWJsZSBldmVudHMgd2lsbCBiZSBjcmVhdGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnNuc1RvcGljIC0gVGhlIG5hbWUgb2YgdGhlIHNuc0V2ZW50IHRvIHB1Ymxpc2hcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtcy50cmFuc2Zvcm1lciAtIHRoZSBmdW5jdGlvbiB0byBydW4gb24gZWFjaCBmaWxlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbcGFyYW1zLmVycm9ySGFuZGxlclBlckZpbGVdIC0gdGhlIGZ1bmN0aW9uIHRvIHJ1biBvbiBhcyBhIGNhdGNoIG9uIGVhY2ggZmlsZVxuICogQHBhcmFtIHtib29sZWFufSBbcGFyYW1zLnNob3VsZFNraXBGYWlsZWRGb2xkZXJzXSAtIHdoZXRoZXIgdG8gdXNlIHRoZSBmYWlsZWQtb25jZSwgZmFpbGVkLXR3aWNlLCBlcnJvciBvciBqdXN0IGVycm9yIGZvbGRlcnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zLnVzZXJJbXBvcnRUeXBlc10gLSB1c2VyIGltcG9ydCBzdWIgZGlyZWN0b3JpZXMgb2JqZWN0IG1hcFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2F0Y2hCdWNrZXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1vQ29uZmlnVGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtb0NvbmZpZ0tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczNCdWNrZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuc1RvcGljLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyUGVyRmlsZSA9IF8ubm9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2tpcEZhaWxlZEZvbGRlcnMgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckltcG9ydFR5cGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkge1xuICAgIGlmICghZXZlbnQgfHwgIWR5bmFtb0NvbmZpZ1RhYmxlIHx8ICFkeW5hbW9Db25maWdLZXkgfHwgIXMzQnVja2V0IHx8ICFzbnNUb3BpYyB8fCAhdHJhbnNmb3JtZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlcnMuIE5lZWQgZXZlbnQsIGR5bmFtb0NvbmZpZ1RhYmxlLCBkeW5hbW9Db25maWdLZXksIHMzQnVja2V0LCBzbnNUb3BpYywgdHJhbnNmb3JtZXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBFdmVudFNvdXJjZSA9IF8uZ2V0KGV2ZW50LCAnUmVjb3Jkc1swXS5FdmVudFNvdXJjZScpO1xuICAgIGlmIChfLmlzRXF1YWwoRXZlbnRTb3VyY2UsICdhd3M6c25zJykpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZUV2ZW50cyhldmVudCwgdHJhbnNmb3JtZXIsIGVycm9ySGFuZGxlclBlckZpbGUsIHNob3VsZFNraXBGYWlsZWRGb2xkZXJzLCB1c2VySW1wb3J0VHlwZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBydW4gZnJvbSB0aGUgY3JvbiBqb2Igc28gcHVibGlzaCBTTlMgZXZlbnRzXG4gICAgICAgIHJldHVybiBwdWJsaXNoRXZlbnRzKGR5bmFtb0NvbmZpZ1RhYmxlLCBkeW5hbW9Db25maWdLZXksIHMzQnVja2V0LCBzbnNUb3BpYywgdXNlckltcG9ydFR5cGVzKTtcbiAgICB9XG59XG4iLCJleHBvcnQgY29uc3QgZXJyb3JMaXN0ID0ge1xuICAgIGludmFsaWRJbnZlbnRvcnlSZWxlYXNlUmVxdWVzdDoge1xuICAgICAgICBtZXNzYWdlOiAnTk9UIEVOT1VHSCBJTlZFTlRPUlkgVE8gRlVMRklMTCBSRUxFQVNFJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxMCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgYWxyZWFkeVJlbGVhc2VkOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdBTFJFQURZIFJFTEVBU0VEJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxMScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgYWxyZWFkeVJlY2VpdmVkOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdSRUNFSVZBQkxFIEFMUkVBRFkgUkVDRUlWRUQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDEyJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkSXRlbXNSZXF1ZXN0OiB7XG4gICAgICAgIG1lc3NhZ2U6ICdWQUxJRCBJVEVNUyBNVVNUIEJFIElOQ0xVREVEJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxMycsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZElEOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdJRCBpcyBpbnZhbGlkJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxNCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZFJlY2VpdmFibGU6IHtcbiAgICAgICAgbWVzc2FnZTogJ01VU1QgQ09OVEFJTiBBVCBMRUFTVCBPTkUgUkVDRUlWQUJMRScsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTUnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRSZXF1ZXN0OiB7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIFJFUVVFU1QgREFUQScsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTYnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRBUElLZXk6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgUkVRVUVTVCAtIEFQSSBNQVkgS0VZIElOVkFMSUQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDE3JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBxYkNyZWF0aW9uRXJyb3I6IHtcbiAgICAgICAgbWVzc2FnZTogJ1FVSUNLQk9PS1MgRVJST1IgLSBFUlJPUiBDUkVBVElORyBPQkpFQ1QgSU4gUVVJQ0tCT09LUycsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTgnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGNhbm5vdFJlb3Blbjoge1xuICAgICAgICBtZXNzYWdlOiAnQ0FOTk9UIFJFT1BFTiAtIFRIRSBPUkRFUiBIQVMgQUxSRUFEWSBCRUVOIE9QRU5FRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMTgnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWREYXRlRm9ybWF0OiB7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIERBVEUgRk9STUFUJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAxOScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZFN0YXJ0RGF0ZToge1xuICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRCBTVEFSVCBEQVRFJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyMCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZEVuZERhdGU6IHtcbiAgICAgICAgbWVzc2FnZTogJ0lOVkFMSUQgRU5EIERBVEUnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDIxJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkT3JkZXJTdGF0dXM6IHtcbiAgICAgICAgbWVzc2FnZTogJ1VOQUJMRSBUTyBFRElUIE9SREVSIElURU1TIFVOTEVTUyBUSEUgT1JERVIgSVMgSU4gRVNUSU1BVEUgU1RBVFVTJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyMicsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZFBheW1lbnRTdGF0dXM6IHtcbiAgICAgICAgbWVzc2FnZTogJ1VOQUJMRSBUTyBVUERBVEUgUEFZTUVOVCBTVEFUVVMgUEFZTUVOVCBNVVNUIEJFIE9QRU4nLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDIzJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkUmVsZWFzZVN0YXR1czoge1xuICAgICAgICBtZXNzYWdlOiAnVU5BQkxFIFRPIFVQREFURSBSRUxFQVNFLCBTVEFUVVMgUkVMRUFTRSBNVVNUIEJFIE9QRU4nLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDI0JyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAwXG4gICAgfSxcbiAgICBpbnZhbGlkUmVjZWl2YWJsZVN0YXR1czoge1xuICAgICAgICBtZXNzYWdlOiAnVU5BQkxFIFRPIFVQREFURSBSRUNFSVZBQkxFLCBTVEFUVVMgUkVDRUlWQUJMRSBNVVNUIEJFIE9QRU4nLFxuICAgICAgICBlcnJvckNvZGU6ICc0MDAyNScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZEpzb246e1xuICAgICAgICBtZXNzYWdlOiAnSU5WQUxJRCBKU09OJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAwNScsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW52YWxpZEZpbHRlcjp7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIEZJTFRFUicsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjYnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIGludmFsaWRVc2VyTmFtZVVwZGF0ZTp7XG4gICAgICAgIG1lc3NhZ2U6ICdVTkFCTEUgVE8gVVBEQVRFIFVTRVJOQU1FJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAyNycsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwMFxuICAgIH0sXG4gICAgaW1hZ2VTaXplTGltaXQ6e1xuICAgICAgICBtZXNzYWdlOiAnSU1BR0UgU0laRSBMSU1JVCAxMDBLQiBFWENFRURFRCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMjgnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDBcbiAgICB9LFxuICAgIHVuYXV0aG9yaXplZDp7XG4gICAgICAgIG1lc3NhZ2U6ICdVTkFVVEhPUklaRUQnLFxuICAgICAgICBlcnJvckNvZGU6ICc0MTExJyxcbiAgICAgICAgc3RhdHVzQ29kZTogNDAxXG4gICAgfSxcbiAgICBub3RGb3VuZDp7XG4gICAgICAgIG1lc3NhZ2U6ICdJVEVNIE5PVCBGT1VORCcsXG4gICAgICAgIGVycm9yQ29kZTogJzQwMDQnLFxuICAgICAgICBzdGF0dXNDb2RlOiA0MDRcbiAgICB9LFxuICAgIGVtYWlsUmVxdWlyZWQ6e1xuICAgICAgICBtZXNzYWdlOiAnTk8gRU1BSUwgUFJPVklERUQsIENIRUNLIENVU1RPTUVSIEVNQUlMJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAwNCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwNFxuICAgIH0sXG4gICAgbW9iaWxlUGhvbmVSZXF1aXJlZDp7XG4gICAgICAgIG1lc3NhZ2U6ICdOTyBNT0JJTEUgUEhPTkUgUFJPVklERUQsIENIRUNLIENVU1RPTUVSIENPTlRBQ1RTJyxcbiAgICAgICAgZXJyb3JDb2RlOiAnNDAwNCcsXG4gICAgICAgIHN0YXR1c0NvZGU6IDQwNFxuICAgIH0sXG4gICAgaW52YWxpZENhZGVuY2VUeXBlOiB7XG4gICAgICAgIG1lc3NhZ2U6ICdJTlZBTElEIENBREVOQ0UgVFlQRScsXG4gICAgICAgIGVycm9yQ29kZTogJzUwMDEnLFxuICAgICAgICBzdGF0dXNDb2RlOiA1MDBcbiAgICB9LFxufTsiLCJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JMaXN0IH0gZnJvbSAnLi9lcnJvckNvZGVzLmpzJztcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gYm9keVxuICogQHBhcmFtIHt7fX0gb3B0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3VjY2Vzcyhib2R5LCBvcHRpb25zKSB7XG4gICAgY29uc3QgZGJDbG9zZSA9IF8uZ2V0KG9wdGlvbnMsICdkYkNsb3NlJywgXy5ub29wKTtcbiAgICBkYkNsb3NlKCk7XG5cbiAgICByZXR1cm4gYnVpbGRSZXNwb25zZSgyMDAsIGJvZHkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAcGFyYW0ge3tkYkNsb3NlOmZ1bmN0aW9ufHVuZGVmaW5lZH19IG9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Y2Nlc3NIdG1sKGh0bWwsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkYkNsb3NlID0gXy5nZXQob3B0aW9ucywgJ2RiQ2xvc2UnLCBfLm5vb3ApO1xuXG4gICAgZGJDbG9zZSgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L2h0bWwnLFxuICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6ICcqJyxcbiAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscyc6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogaHRtbFxuICAgIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gKiBAcmV0dXJucyBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gXy5nZXQoZXZlbnQsICdyZXF1ZXN0LnVzZXJBdHRyaWJ1dGVzJyk7XG5cbiAgICByZXR1cm4gYXR0cmlidXRlc1snY29nbml0bzplbWFpbF9hbGlhcyddIHx8ICdVTktOT1dOIFVTRVInO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdXNlciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBldmVudCBvYmplY3RcbiAqXG4gKiBAcGFyYW0gZXZlbnQge09iamVjdH0gYW4gZXZlbnQgb2JqZWN0XG4gKiBAcmV0dXJucyB7e3VzZXJuYW1lOiBzdHJpbmcsIGlkOiBudW1iZXJ9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFVzZXIoZXZlbnQpIHtcbiAgICBsZXQganNvblRvUGFyc2UgPSBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zLmN1c3RvbTpVSUQnKSB8fFxuICAgICAgICBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuY3VzdG9tOlVJRCcpIHx8XG4gICAgICAgICcwJztcblxuICAgIGNvbnN0IGlkID0gSlNPTi5wYXJzZShqc29uVG9QYXJzZSk7XG5cbiAgICBjb25zdCB1c2VybmFtZSA9IF8uZ2V0KGV2ZW50LCAncmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMuZW1haWwnKSB8fCBfLmdldChldmVudCwgJ3JlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIuZW1haWwnKSB8fCAnTE9DQUwgVEVTVCBVU0VSJztcblxuICAgIHJldHVybiB7XG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICBpZFxuICAgIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZmFpbHVyZSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSBib2R5IHtPYmplY3R9IGFuIGV2ZW50IG9iamVjdFxuICogQHBhcmFtIG9wdGlvbnMge09iamVjdH0gYW4gb3B0aW9ucyBvYmplY3RcbiAqIEByZXR1cm5zIHt7c3RhdHVzQ29kZTpudW1iZXIsIGhlYWRlcnM6b2JqZWN0LCBib2R5OnN0cmluZ319IGEgcmVzcG9uc2Ugb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWlsdXJlKGJvZHkgPSB7fSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGRiQ2xvc2UgPSBfLmdldChvcHRpb25zLCAnZGJDbG9zZScsIF8ubm9vcCk7XG4gICAgZGJDbG9zZSgpO1xuICAgIGxldCBjbGVhbmVkRXJyb3JCb2R5O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52LlVUSUxfTE9HID09PSAnTE9HX0FMTCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignLS0tLS0tLT5VVElMIEVSUk9SOicsIGJvZHkpO1xuICAgIH1cblxuICAgIGNvbnN0IE5PUk1BTF9FUlJPUiA9IHsgc3RhdHVzQ29kZTogNTAwLCBlcnJvckNvZGU6ICc1WFgnLCBtZXNzYWdlOiAnSU5URVJOQUwgVVRJTCBFUlJPUicgfTtcbiAgICBjbGVhbmVkRXJyb3JCb2R5ID0gYm9keTtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQoYm9keS5kZXRhaWxzKSkge1xuICAgICAgICBjbGVhbmVkRXJyb3JCb2R5ID0gZGV0ZWN0Sm95RXJyb3IoYm9keSk7XG4gICAgfSBlbHNlIGlmIChfLmlzVW5kZWZpbmVkKGJvZHkuZXJyb3JDb2RlKSB8fCBfLmlzVW5kZWZpbmVkKGJvZHkuc3RhdHVzQ29kZSkpIHtcbiAgICAgICAgY2xlYW5lZEVycm9yQm9keSA9IGRldGVjdFNlcXVlbGl6ZUVycm9yKGJvZHkpO1xuICAgIH1cbiAgICBpZihfLmdldChib2R5LCAncmVzcG9uc2UuZGF0YS5tZXNzYWdlJykpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignLS0tLS0tLT5VVElMIEVSUk9SOiAnK18uZ2V0KGJvZHksICdyZXNwb25zZS5kYXRhLm1lc3NhZ2UnKSlcbiAgICB9XG5cbiAgICBjb25zdCBuZXdCb2R5ID0gXy5tZXJnZShOT1JNQUxfRVJST1IsIGNsZWFuZWRFcnJvckJvZHkpO1xuXG4gICAgcmV0dXJuIGJ1aWxkUmVzcG9uc2UobmV3Qm9keS5zdGF0dXNDb2RlLCBuZXdCb2R5KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmYWlsdXJlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBzdGF0dXNDb2RlIHtOdW1iZXJ9IGEgc3RhdHVzIGNvZGVcbiAqIEBwYXJhbSBib2R5IHtPYmplY3R9IGFuIGV2ZW50IG9iamVjdFxuICogQHJldHVybnMge3tzdGF0dXNDb2RlOm51bWJlciwgaGVhZGVyczpvYmplY3QsIGJvZHk6c3RyaW5nfX0gYSByZXNwb25zZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gYnVpbGRSZXNwb25zZShzdGF0dXNDb2RlLCBib2R5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6ICcqJyxcbiAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscyc6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSlcbiAgICB9O1xufVxuXG4vKipcbiAqIHBhcnNlIHRoZSBib2R5IG9mIHRoZSBldmVudCBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcmVxdWVzdEV2ZW50IHt7Ym9keTpzdHJpbmd9fSBhbiBldmVudCBvYmplY3RcbiAqIEByZXR1cm5zIGV2ZW50IHsqfSB0aGUganNvbiBvYmplY3Qgb2YgdGhlIGJvZHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQm9keShyZXF1ZXN0RXZlbnQpIHtcblxuICAgIGxldCBldmVudEJvZHkgPSB7fTtcbiAgICBpZiAoXy5pc1N0cmluZyhyZXF1ZXN0RXZlbnQuYm9keSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGV2ZW50Qm9keSA9IEpTT04ucGFyc2UocmVxdWVzdEV2ZW50LmJvZHkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBJbnZhbGlkIEpTT05cbiAgICAgICAgICAgIGV2ZW50Qm9keSA9IG51bGw7XG5cbiAgICAgICAgICAgIHRocm93IGVycm9yTGlzdC5pbnZhbGlkSnNvbjtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChyZXF1ZXN0RXZlbnQuYm9keSkpIHtcbiAgICAgICAgZXZlbnRCb2R5ID0gcmVxdWVzdEV2ZW50LmJvZHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZW50Qm9keTtcbn1cblxuLyoqXG4gKiBwYXJzZSB0aGUgYm9keSBvZiB0aGUgZXZlbnQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHJlcXVlc3RFdmVudCB7c3RyaW5nfG9iamVjdH0gYW4gZXZlbnQgb2JqZWN0XG4gKiBAcGFyYW0gW2NhbGxiYWNrXSB7ZnVuY3Rpb259IHVuZGVmaW5lZCBhIGNhbGwgYmFjayBmdW5jdGlvblxuICogQHJldHVybnMgZXZlbnQgeyp9IHRoZSBqc29uIG9iamVjdCBvZiB0aGUgYm9keVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFdmVudChyZXF1ZXN0RXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IGV2ZW50ID0ge307XG4gICAgaWYgKF8uaXNTdHJpbmcocmVxdWVzdEV2ZW50KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZXZlbnQgPSBKU09OLnBhcnNlKHJlcXVlc3RFdmVudCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIEludmFsaWQgSlNPTlxuICAgICAgICAgICAgZXZlbnQgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhFcnJvcihlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKF8uaXNPYmplY3QocmVxdWVzdEV2ZW50KSkge1xuICAgICAgICBldmVudCA9IHJlcXVlc3RFdmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogcGFyc2UgdGhlIGJvZHkgb2YgdGhlIGV2ZW50IG9iamVjdFxuICogbG9vayBmb3Igc2VxdWVsaXplIGVycm9ycyBhbmQgcmV0dXJuIGEgbWVzc2FnZVxuICogRVJST1JTIHNob3VsZCBub3QgYmUgY2F1Z2h0IGhlcmUgdGhpcyBpcyBhIGZhbGxiYWNrIGZvciB1bmtub3duIGRhdGFiYXNlIGVycm9yc1xuICpcbiAqIEBwYXJhbSBib2R5IHtvYmplY3R9IHBhcnQgb2YgYSBib2R5IHJlc3BvbnNlXG4gKiBAcmV0dXJucyBlcnJvciBtZXNzYWdlIG9iamVjdCB7bWVzc2FnZTpzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RTZXF1ZWxpemVFcnJvcihib2R5KSB7XG4gICAgY29uc3QgZXJyb3JCb2R5ID0ge307XG5cbiAgICBsZXQgc2VxdWVsaXplRXJyb3IgPSBfLmdldChib2R5LCAnZXJyb3JzJywgW10pLnJlZHVjZSgoYWNjLCBlcnIpID0+IHtcbiAgICAgICAgYWNjID0gYWNjICsgJyAnICsgXy5nZXQoZXJyLCAnbWVzc2FnZScpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sICcnKTtcbiAgICBjb25zdCBwYXJlbnRFcnJvciA9IF8uZ2V0KGJvZHksICdwYXJlbnQnLCAnJyk7XG5cbiAgICBzZXF1ZWxpemVFcnJvciA9IHNlcXVlbGl6ZUVycm9yICsgXy5nZXQoYm9keSwgJ29yaWdpbmFsLmRldGFpbCcsICcnKSArIF8uZ2V0KGJvZHksICdUeXBlRXJyb3InLCAnJykgKyBwYXJlbnRFcnJvcjtcbiAgICBlcnJvckJvZHkubWVzc2FnZSA9IHNlcXVlbGl6ZUVycm9yLnRyaW0oKTtcbiAgICByZXR1cm4gZXJyb3JCb2R5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0Sm95RXJyb3IoYm9keSkge1xuICAgIGNvbnN0IGVycm9yQm9keSA9IHt9O1xuICAgIGNvbnN0IGpveUVycm9yID0gXy5nZXQoYm9keSwgJ2RldGFpbHNbMF0nLCB7fSk7XG4gICAgY29uc29sZS5lcnJvcignVVNFUiBWQUxJREFUSU9OIEVSUk9SOicsIGJvZHkpO1xuXG4gICAgZXJyb3JCb2R5Lm1lc3NhZ2UgPSBqb3lFcnJvci5tZXNzYWdlO1xuICAgIGVycm9yQm9keS5zdGF0dXNDb2RlID0gNDAwO1xuICAgIGVycm9yQm9keS5lcnJvckNvZGUgPSAnNDAwMCc7XG4gICAgcmV0dXJuIGVycm9yQm9keTtcbn0iLCJpbXBvcnQgeyBTMyB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gczNVdGlscyhhY3Rpb24sIHBhcmFtcykge1xyXG4gICAgY29uc3QgczMgPSBuZXcgUzMoKTtcclxuICAgIHJldHVybiBzM1thY3Rpb25dKHBhcmFtcyk7XHJcbn1cclxuXHJcbmNvbnN0IFMzVXRpbCA9IHtcclxuICAgIGdldE9iamVjdDogKHBhcmFtcykgPT4gZ2V0UzMocGFyYW1zKSxcclxuICAgIGRlbGV0ZU9iamVjdDogKHBhcmFtcykgPT4gczNVdGlscygnZGVsZXRlT2JqZWN0JywgcGFyYW1zKSxcclxuICAgIHB1dE9iamVjdDogKHBhcmFtcykgPT4gczNVdGlscygncHV0T2JqZWN0JywgcGFyYW1zKSxcclxuICAgIGxpc3RPYmplY3RzVjI6IChwYXJhbXMpID0+IHMzVXRpbHMoJ2xpc3RPYmplY3RzVjInLCBwYXJhbXMpXHJcbn07XHJcbmV4cG9ydCBkZWZhdWx0IFMzVXRpbDtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldFMzKHBhcmFtcykge1xyXG4gICAgY29uc3QgczMgPSBuZXcgUzMoKTtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgczMuZ2V0T2JqZWN0KHBhcmFtcyk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2UuQm9keS50cmFuc2Zvcm1Ub1N0cmluZygndXRmLTgnKTtcclxufSIsImltcG9ydCB7IFNOUyB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zbnMnO1xyXG5cclxuY29uc3QgU05TVXRpbCA9IHtcclxuICAgIHB1Ymxpc2g6IChwYXJhbXMpID0+IHB1Ymxpc2gocGFyYW1zKSxcclxuICAgIGNyZWF0ZVRvcGljOiAocGFyYW1zKSA9PiBjcmVhdGVUb3BpYyhwYXJhbXMpXHJcbn07XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwdWJsaXNoKHBhcmFtcykge1xyXG4gICAgY29uc3Qgc25zID0gbmV3IFNOUygpO1xyXG4gICAgcmV0dXJuIGF3YWl0IHNucy5wdWJsaXNoKHBhcmFtcyk7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRvcGljKHBhcmFtcykge1xyXG4gICAgY29uc3Qgc25zID0gbmV3IFNOUygpO1xyXG4gICAgcmV0dXJuIGF3YWl0IHNucy5jcmVhdGVUb3BpYyhwYXJhbXMpO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTTlNVdGlsO1xyXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGF3cy1zZGsvY2xpZW50LXMzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBhd3Mtc2RrL2NsaWVudC1zbnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGF3cy1zZGsvbGliLWR5bmFtb2RiXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJsdWViaXJkXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtb21lbnRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibW9tZW50L21vbWVudC5qc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzZXF1ZWxpemVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidW16dWdcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsImltcG9ydCB7IGhhbmRsZUZpbGUgYXMgaGFuZGxlRmlsZUltcG9ydCB9IGZyb20gJy4vZXZlbnRNYW5hZ2VyL2hhbmRsZUZpbGUuanMnO1xuaW1wb3J0IHsgd2F0Y2hCdWNrZXQgYXMgd2F0Y2hCdWNrZXRJbXBvcnQgfSBmcm9tICcuL2V2ZW50TWFuYWdlci93YXRjaEJ1Y2tldC5qcyc7XG5pbXBvcnQgeyBwdWJsaXNoRXZlbnRzIGFzIHB1Ymxpc2hFdmVudHNJbXBvcnQgfSBmcm9tICcuL2V2ZW50TWFuYWdlci9wdWJsaXNoRXZlbnRzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUluY2x1ZGVzIGFzIGNyZWF0ZUluY2x1ZGVzSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlSW5jbHVkZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlRmlsdGVycyBhcyBjcmVhdGVGaWx0ZXJzSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvY3JlYXRlRmlsdGVycy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVTb3J0IGFzIGNyZWF0ZVNvcnRJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9jcmVhdGVTb3J0LmpzJztcbmltcG9ydCB7IGZpbmRBbGwgYXMgZmluZEFsbEltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2ZpbmRBbGwuanMnO1xuaW1wb3J0IHsgY2hlY2tNb2R1bGUgYXMgY2hlY2tNb2R1bGVJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5pbXBvcnQgeyBmYWlsdXJlIGFzIGZhaWx1cmVJbXBvcnQsIHN1Y2Nlc3MgYXMgc3VjY2Vzc0ltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IHJ1bk1pZ3JhdGlvbnMgYXMgcnVuTWlncmF0aW9uc0ltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJTZXR1cC9taWdyYXRpb25zLmpzJztcbmltcG9ydCB7IGdldEN1cnJlbnRVc2VyIGFzIGdldEN1cnJlbnRVc2VySW1wb3J0IH0gZnJvbSAnLi9yZXF1ZXN0UmVzb25zZS9yZXF1ZXN0UmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc3VjY2Vzc0h0bWwgYXMgc3VjY2Vzc0h0bWxJbXBvcnQgfSBmcm9tICcuL3JlcXVlc3RSZXNvbnNlL3JlcXVlc3RSZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50IGFzIGdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnRJbXBvcnQgfSBmcm9tICcuL3JlcXVlc3RSZXNvbnNlL3JlcXVlc3RSZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0RmlsdGVycyBhcyBkZWZhdWx0RmlsdGVyc0ltcG9ydCB9IGZyb20gJy4vZGF0YWJhc2UvZGJVdGlscy9xdWVyeVN0cmluZ1V0aWxzL2RlZmF1bHRGaWx0ZXJzLmpzJztcbmltcG9ydCB7IGFjY2Vzc1JpZ2h0c1V0aWxzIGFzIGFjY2Vzc1JpZ2h0c1V0aWxzSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvYWNjZXNzUmlnaHRzVXRpbHMuanMnO1xuaW1wb3J0IHsgcGFyc2VCb2R5IGFzIHBhcnNlQm9keUltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IHBhcnNlRXZlbnQgYXMgcGFyc2VFdmVudEltcG9ydCB9IGZyb20gJy4vcmVxdWVzdFJlc29uc2UvcmVxdWVzdFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IGdldEJ1c2luZXNzZXNJbmZvIGFzIGdldEJ1c2luZXNzZXNJbmZvSW1wb3J0IH0gZnJvbSAnLi9kYXRhYmFzZS9kYlV0aWxzL3F1ZXJ5U3RyaW5nVXRpbHMvYWNjZXNzUmlnaHRzVXRpbHMuanMnO1xuaW1wb3J0IHsgdXNlckRlZmF1bHRCaWQgYXMgdXNlckRlZmF1bHRCaWRJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5pbXBvcnQgeyBjaGVja1dyaXRlQWNjZXNzIGFzIGNoZWNrV3JpdGVBY2Nlc3NJbXBvcnQgfSBmcm9tICcuL2RhdGFiYXNlL2RiVXRpbHMvcXVlcnlTdHJpbmdVdGlscy9hY2Nlc3NSaWdodHNVdGlscy5qcyc7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVGaWxlID0gaGFuZGxlRmlsZUltcG9ydDtcbmV4cG9ydCBjb25zdCB3YXRjaEJ1Y2tldCA9IHdhdGNoQnVja2V0SW1wb3J0O1xuZXhwb3J0IGNvbnN0IHB1Ymxpc2hFdmVudHMgPSBwdWJsaXNoRXZlbnRzSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUZpbHRlcnMgPSBjcmVhdGVGaWx0ZXJzSW1wb3J0O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUluY2x1ZGVzID0gY3JlYXRlSW5jbHVkZXNJbXBvcnQ7XG5leHBvcnQgY29uc3QgY3JlYXRlU29ydCA9IGNyZWF0ZVNvcnRJbXBvcnQ7XG5leHBvcnQgY29uc3QgZmluZEFsbCA9IGZpbmRBbGxJbXBvcnQ7XG5leHBvcnQgY29uc3QgY2hlY2tNb2R1bGUgPSBjaGVja01vZHVsZUltcG9ydDtcbmV4cG9ydCBjb25zdCBmYWlsdXJlID0gZmFpbHVyZUltcG9ydDtcbmV4cG9ydCBjb25zdCBzdWNjZXNzID0gc3VjY2Vzc0ltcG9ydDtcbmV4cG9ydCBjb25zdCBydW5NaWdyYXRpb25zID0gcnVuTWlncmF0aW9uc0ltcG9ydDtcbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50VXNlciA9IGdldEN1cnJlbnRVc2VySW1wb3J0O1xuZXhwb3J0IGNvbnN0IHN1Y2Nlc3NIdG1sID0gc3VjY2Vzc0h0bWxJbXBvcnQ7XG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFVzZXJOYW1lRnJvbUNvZ25pdG9FdmVudCA9IGdldEN1cnJlbnRVc2VyTmFtZUZyb21Db2duaXRvRXZlbnRJbXBvcnQ7XG5leHBvcnQgY29uc3QgZGVmYXVsdEZpbHRlcnMgPSBkZWZhdWx0RmlsdGVyc0ltcG9ydDtcbmV4cG9ydCBjb25zdCBhY2Nlc3NSaWdodHNVdGlscyA9IGFjY2Vzc1JpZ2h0c1V0aWxzSW1wb3J0O1xuZXhwb3J0IGNvbnN0IHBhcnNlQm9keSA9IHBhcnNlQm9keUltcG9ydDtcbmV4cG9ydCBjb25zdCBwYXJzZUV2ZW50ID0gcGFyc2VFdmVudEltcG9ydDtcbmV4cG9ydCBjb25zdCBnZXRCdXNpbmVzc2VzSW5mbyA9IGdldEJ1c2luZXNzZXNJbmZvSW1wb3J0O1xuZXhwb3J0IGNvbnN0IHVzZXJEZWZhdWx0QmlkID0gdXNlckRlZmF1bHRCaWRJbXBvcnQ7XG5leHBvcnQgY29uc3QgY2hlY2tXcml0ZUFjY2VzcyA9IGNoZWNrV3JpdGVBY2Nlc3NJbXBvcnQ7XG4iXSwibmFtZXMiOlsicnVuTWlncmF0aW9ucyIsIl9sb2Rhc2giLCJyZXF1aXJlIiwiX2xvZGFzaDIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3VtenVnIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJkYXRhYmFzZU5hbWUiLCJzZXF1ZWxpemVJbnN0YW5jZSIsImluaXRpYWxpemVNb2RlbHMiLCJwYXRoVG9NaWdyYXRpb25Gb2xkZXIiLCJwcm9jZXNzIiwiZW52IiwiUFdEIiwidW16dWciLCJVbXp1ZyIsIm1pZ3JhdGlvbnMiLCJnbG9iIiwiY29udGV4dCIsImdldFF1ZXJ5SW50ZXJmYWNlIiwic3RvcmFnZSIsIlNlcXVlbGl6ZVN0b3JhZ2UiLCJzZXF1ZWxpemUiLCJsb2dnZXIiLCJjb25zb2xlIiwicGVuZGluZ01pZ3JhdGlvbnMiLCJwZW5kaW5nIiwibG9nIiwidXAiLCJjYXRjaCIsInVwRXJyb3IiLCJkb3duIiwiXyIsImNoYWluIiwibWFwIiwicmV2ZXJzZSIsInZhbHVlIiwidGhlbiIsIm1zZyIsImVycm9yIiwiRXJyb3IiLCJkb3duRXJyb3IiLCJhY2Nlc3NSaWdodHNVdGlscyIsImV4cG9ydHMiLCJ1c2VyRGVmYXVsdEJpZCIsImdldEJ1c2luZXNzZXNJbmZvIiwiZ2V0TW9kdWxlSW5mbyIsImNoZWNrTW9kdWxlIiwiY2hlY2tXcml0ZUFjY2VzcyIsIl9lcnJvckNvZGVzIiwiX3JlcXVlc3RSZXNwb25zZSIsImV2ZW50Iiwib3B0aW9ucyIsInVzZUNvZ25pdG9CaWQiLCJnZXQiLCJyZXF1ZXN0ZWRCdXNpbmVzc0lkcyIsImdldFJlcXVlc3RlZEJ1c2luZXNzSWRzIiwiYWxsb3dlZEJ1c2luZXNzSWRzIiwiZ2V0QWxsb3dlZEJ1c2luZXNzSWRzIiwibG9jYWxCaWRMaXN0IiwiaXNFbXB0eSIsIkJVSUxEX0VOViIsImxlbmd0aCIsImludGVyc2VjdGlvbiIsImpzb25Ub1BhcnNlIiwiZGJpIiwiSlNPTiIsInBhcnNlIiwic3BsaXQiLCJidXNpbmVzc2VzIiwiT2JqZWN0Iiwia2V5cyIsImFjY2Vzc1JpZ2h0cyIsImJpZHMiLCJ3aXRoTG9jYWwiLCJzZXQiLCJhciIsIm1vZHVsZVJpZ2h0cyIsIm1vZHVsZU5hbWUiLCJhbGxvd0FjY2VzcyIsImVycm9yTGlzdCIsInVuYXV0aG9yaXplZCIsInVzZXJSb2xlcyIsImFkbWluIiwicmVhZCIsIndyaXRlIiwiZXZlbnRCb2R5IiwicGFyc2VCb2R5IiwiYnVzaW5lc3NJZHMiLCJidXNpbmVzc0lkIiwiZmluZCIsImlkIiwicmF3IiwidXNlclJpZ2h0IiwiX3NlcXVlbGl6ZSIsIl9zZXF1ZWxpemUyIiwiX21vbWVudCIsIl9tb21lbnQyIiwiX2FjY2Vzc1JpZ2h0c1V0aWxzIiwiY3JlYXRlRmlsdGVycyIsIm9iamVjdEZpbHRlcnMiLCJxdWVyeSIsInN0YXJ0RGF0ZSIsImVuZERhdGUiLCJ3aGVyZSIsInJlZHVjZSIsImFjYyIsIml0ZW0iLCJ2YWwiLCJpdGVtTmFtZSIsImluY2x1ZGVzIiwiZmlsdGVyVHlwZSIsIkRCIiwiT3AiLCJpTGlrZSIsIm9yIiwiaW4iLCJwYXJzZWRKc29uIiwiZSIsInR5cGUiLCJCT09MRUFOIiwicXVlcnlWYWx1ZSIsInRvTG93ZXJDYXNlIiwiYm9vbGVhbk1hcCIsImFjdGl2ZSIsImZpbHRlckFkZHMiLCJzIiwibW9tZW50IiwidXRjIiwiZGF0ZXMiLCJiZXR3ZWVuIiwidG9EYXRlIiwiaXNWYWxpZCIsImludmFsaWRTdGFydERhdGUiLCJpbnZhbGlkRW5kRGF0ZSIsImNyZWF0ZWRBdCIsIndpdGhEYXRlIiwiYXNzaWduIiwiY3JlYXRlSW5jbHVkZXMiLCJpbmNsdWRlU3ViSXRlbSIsImNhbkJlSW5jbHVkZWQiLCJhc2tlZEZvckluUXVlcnkiLCJmb3JFYWNoIiwic29ydEl0ZW0iLCJpbmRleE9mIiwic3Vic3RyIiwicXVlcnlTdHJpbmdJdGVtIiwiZG90IiwicHVzaCIsInN1YnN0cmluZyIsImNyZWF0ZVNvcnQiLCJkZWZhdWx0RmlsdGVyIiwiY29weU9mRGVmYXVsdEZpbHRlciIsImNsb25lIiwic29ydCIsInRlc3RJdGVtIiwicGFyZW50Q2hpbGRMaXN0IiwiZGVmYXVsdEZpbHRlcnMiLCJhZGRGaWx0ZXJzRnJvbVNjaGVtYSIsInNjaGVtYSIsInN1YlNjaGVtYXMiLCJmaWx0ZXJzIiwia2V5IiwiYWNjdW11bGF0b3IiLCJrZXlQcmVmaXgiLCJhc0xpbmtBbGlhcyIsIlNUUklORyIsImVxIiwiaXRlbVR5cGUiLCJDSEFSIiwiVEVYVCIsIkRFQ0lNQUwiLCJCSUdJTlQiLCJJTlRFR0VSIiwiREFURSIsIkRBVEVPTkxZIiwibHQiLCJKU09OQiIsImNvbnRhaW5zIiwiZ2V0UGFnaW5hdGlvbkZyb21GaW5kQWxsIiwiZmluZEFsbCIsInJlc3VsdCIsImxpbWl0Iiwib2Zmc2V0IiwiaGFzTW9yZSIsInNwbGljZSIsInBhZ2VPYmplY3QiLCJyb3dzIiwibW9kZWwiLCJmaW5kQXJncyIsImluY2x1ZGUiLCJhbGwiLCJuZXN0ZWQiLCJyZXN1bHRzIiwiZmluZFV0aWxzIiwiX2xpYkR5bmFtb2RiIiwiX2NsaWVudER5bmFtb2RiIiwiZHluYW1vVXRpbCIsInBhcmFtcyIsImR5bmFtb0RiIiwiRHluYW1vREJEb2N1bWVudCIsImZyb20iLCJEeW5hbW9EQiIsImhhbmRsZUV2ZW50cyIsIl9oYW5kbGVGaWxlIiwiX2JsdWViaXJkIiwiX2JsdWViaXJkMiIsInRyYW5zZm9ybWVyIiwiZXJyb3JIYW5kbGVyUGVyRmlsZSIsInNob3VsZFNraXBGYWlsZWRGb2xkZXJzIiwidXNlckltcG9ydFR5cGVzIiwiUmVjb3JkcyIsIlByb21pc2UiLCJyZXNvbHZlIiwiaGFzRXJyb3JzIiwicmVjb3JkIiwic25zSW5mbyIsInMzQnVja2V0IiwiYnVja2V0IiwiZmlsZXMiLCJmaWxlIiwicGF0aCIsImRlY29kZVVSSUNvbXBvbmVudCIsImhhbmRsZUZpbGUiLCJlcnIiLCJfUzNVdGlscyIsIl9TM1V0aWxzMiIsIkJ1Y2tldCIsIktleSIsImJvZHkiLCJTM1V0aWwiLCJnZXRPYmplY3QiLCJwYXJzZWRCb2R5IiwicmV0dXJuZWRWYWx1ZSIsImRlbGV0ZU9iamVjdCIsImNvZGUiLCJuZXdQYXRoIiwidXNlcnNJbXBvcnRzIiwidmFsdWVzIiwiaXRlbXMiLCJmaWxlTmFtZSIsImxhc3QiLCJmb2xkZXJOYW1lIiwiZmlyc3QiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsIm5ld1BhcmFtcyIsIkJvZHkiLCJwdXRPYmplY3QiLCJsb29wIiwicHVibGlzaEV2ZW50cyIsIl9TTlNVdGlscyIsIl9TTlNVdGlsczIiLCJfZHluYW1vVXRpbHMiLCJfZHluYW1vVXRpbHMyIiwibWF4S2V5cyIsImJ1Y2tldFJlc3VsdCIsImZpbGVMaXN0IiwiY3VycmVudFRpbWUiLCJTM1V0aWxzIiwibGlzdE9iamVjdHNWMiIsIk1heEtleXMiLCJDb250aW51YXRpb25Ub2tlbiIsIm5ld0ZpbGVzIiwiZmlsdGVyIiwiQ29udGVudHMiLCJmaWxlRGVsYXlUaW1lIiwiaXNTYW1lT3JCZWZvcmUiLCJjb25jYXQiLCJJc1RydW5jYXRlZCIsIk5leHRDb250aW51YXRpb25Ub2tlbiIsImNvbmZpZ1RhYmxlIiwidGFibGVLZXkiLCJzbnNUb3BpYyIsIlRhYmxlTmFtZSIsImNodW5rU2l6ZSIsIm1heE1lc3NhZ2VzIiwic25zQ3JlYXRlVG9waWNSZXNwb25zZSIsIlNOU1V0aWwiLCJjcmVhdGVUb3BpYyIsIk5hbWUiLCJ0b3BpY0FybiIsIlRvcGljQXJuIiwibWVzc2FnZUxpc3QiLCJjaHVuayIsInNsaWNlIiwicHVibGlzaCIsIk1lc3NhZ2UiLCJzdHJpbmdpZnkiLCJ3YXRjaEJ1Y2tldCIsIl9wdWJsaXNoRXZlbnRzIiwiX2hhbmRsZUV2ZW50cyIsImR5bmFtb0NvbmZpZ1RhYmxlIiwiZHluYW1vQ29uZmlnS2V5Iiwibm9vcCIsIkV2ZW50U291cmNlIiwiaXNFcXVhbCIsImludmFsaWRJbnZlbnRvcnlSZWxlYXNlUmVxdWVzdCIsIm1lc3NhZ2UiLCJlcnJvckNvZGUiLCJzdGF0dXNDb2RlIiwiYWxyZWFkeVJlbGVhc2VkIiwiYWxyZWFkeVJlY2VpdmVkIiwiaW52YWxpZEl0ZW1zUmVxdWVzdCIsImludmFsaWRJRCIsImludmFsaWRSZWNlaXZhYmxlIiwiaW52YWxpZFJlcXVlc3QiLCJpbnZhbGlkQVBJS2V5IiwicWJDcmVhdGlvbkVycm9yIiwiY2Fubm90UmVvcGVuIiwiaW52YWxpZERhdGVGb3JtYXQiLCJpbnZhbGlkT3JkZXJTdGF0dXMiLCJpbnZhbGlkUGF5bWVudFN0YXR1cyIsImludmFsaWRSZWxlYXNlU3RhdHVzIiwiaW52YWxpZFJlY2VpdmFibGVTdGF0dXMiLCJpbnZhbGlkSnNvbiIsImludmFsaWRGaWx0ZXIiLCJpbnZhbGlkVXNlck5hbWVVcGRhdGUiLCJpbWFnZVNpemVMaW1pdCIsIm5vdEZvdW5kIiwiZW1haWxSZXF1aXJlZCIsIm1vYmlsZVBob25lUmVxdWlyZWQiLCJpbnZhbGlkQ2FkZW5jZVR5cGUiLCJzdWNjZXNzIiwic3VjY2Vzc0h0bWwiLCJnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50IiwiZ2V0Q3VycmVudFVzZXIiLCJmYWlsdXJlIiwicGFyc2VFdmVudCIsImRldGVjdFNlcXVlbGl6ZUVycm9yIiwiZGV0ZWN0Sm95RXJyb3IiLCJkYkNsb3NlIiwiYnVpbGRSZXNwb25zZSIsImh0bWwiLCJoZWFkZXJzIiwiYXR0cmlidXRlcyIsInVzZXJuYW1lIiwiY2xlYW5lZEVycm9yQm9keSIsIlVUSUxfTE9HIiwiTk9STUFMX0VSUk9SIiwiaXNVbmRlZmluZWQiLCJkZXRhaWxzIiwibmV3Qm9keSIsIm1lcmdlIiwicmVxdWVzdEV2ZW50IiwiaXNTdHJpbmciLCJpc09iamVjdCIsImNhbGxiYWNrIiwiZXJyb3JCb2R5Iiwic2VxdWVsaXplRXJyb3IiLCJwYXJlbnRFcnJvciIsInRyaW0iLCJqb3lFcnJvciIsInMzVXRpbHMiLCJfY2xpZW50UyIsImFjdGlvbiIsInMzIiwiUzMiLCJnZXRTMyIsInJlc3BvbnNlIiwidHJhbnNmb3JtVG9TdHJpbmciLCJfY2xpZW50U25zIiwic25zIiwiU05TIiwiX3dhdGNoQnVja2V0IiwiX2NyZWF0ZUluY2x1ZGVzIiwiX2NyZWF0ZUZpbHRlcnMiLCJfY3JlYXRlU29ydCIsIl9maW5kQWxsIiwiX21pZ3JhdGlvbnMiLCJfZGVmYXVsdEZpbHRlcnMiLCJoYW5kbGVGaWxlSW1wb3J0Iiwid2F0Y2hCdWNrZXRJbXBvcnQiLCJwdWJsaXNoRXZlbnRzSW1wb3J0IiwiY3JlYXRlRmlsdGVyc0ltcG9ydCIsImNyZWF0ZUluY2x1ZGVzSW1wb3J0IiwiY3JlYXRlU29ydEltcG9ydCIsImZpbmRBbGxJbXBvcnQiLCJjaGVja01vZHVsZUltcG9ydCIsImZhaWx1cmVJbXBvcnQiLCJzdWNjZXNzSW1wb3J0IiwicnVuTWlncmF0aW9uc0ltcG9ydCIsImdldEN1cnJlbnRVc2VySW1wb3J0Iiwic3VjY2Vzc0h0bWxJbXBvcnQiLCJnZXRDdXJyZW50VXNlck5hbWVGcm9tQ29nbml0b0V2ZW50SW1wb3J0IiwiZGVmYXVsdEZpbHRlcnNJbXBvcnQiLCJhY2Nlc3NSaWdodHNVdGlsc0ltcG9ydCIsInBhcnNlQm9keUltcG9ydCIsInBhcnNlRXZlbnRJbXBvcnQiLCJnZXRCdXNpbmVzc2VzSW5mb0ltcG9ydCIsInVzZXJEZWZhdWx0QmlkSW1wb3J0IiwiY2hlY2tXcml0ZUFjY2Vzc0ltcG9ydCJdLCJzb3VyY2VSb290IjoiIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "piper-utils",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "utility library for piper",
5
5
  "main": "bin/main.js",
6
6
  "scripts": {